Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
5d32e85
docs: add LICENSING.md pointing at canonical Lux IP strategy
hanzo-dev May 15, 2026
369a7e1
Merge pull request #15 from luxfi/licensing/canonical-pointer
hanzo-dev May 15, 2026
b0a8bf3
Merge pull request #11 from abhicris/fix/untrack-build-artifacts
hanzo-dev May 16, 2026
2f73a97
chore: bump Go toolchain to 1.26.3 (#16)
hanzo-dev May 16, 2026
d556aa9
chore: bump Go toolchain to 1.26.3 (#17)
hanzo-dev May 17, 2026
403d4ab
study/: comparative PQ-threshold study for Pulsar / Corona / Comet
hanzo-dev May 16, 2026
46dab17
study/pulsar: split PulsarCert (consensus) from Threshold Pulsar (cus…
hanzo-dev May 16, 2026
5866f92
go.sum: pin fhe v1.7.6 to proxy-served dirhash (CI fix)
hanzo-dev May 17, 2026
fd45d32
Merge pull request #18 from luxfi/fix/fhe-176-gosum-hash
hanzo-dev May 17, 2026
7d1f620
ci(fresh-clone): set shell: bash for set -o pipefail
hanzo-dev May 17, 2026
7369597
Merge pull request #19 from luxfi/fix/fresh-clone-bash-shell
hanzo-dev May 17, 2026
7770761
docs: rip AI slop in threshold/study (magnetar.md 243→140, cross-fami…
hanzo-dev May 19, 2026
342fcc9
submission: scaffold Tier B package for protocols/bls (Lux-profile th…
hanzo-dev May 19, 2026
fa7d800
submission: scaffold Tier B package for protocols/frost (Lux-profile …
hanzo-dev May 19, 2026
52196ab
submission: scaffold Tier B package for protocols/cmp (Lux-profile CG…
hanzo-dev May 19, 2026
0dd3711
Merge branch 'main' of ssh://github.com/luxfi/threshold into fix/fres…
hanzo-dev May 19, 2026
dfd145a
Merge branch 'main' of ssh://github.com/luxfi/threshold into fix/fres…
hanzo-dev May 19, 2026
5154eaa
refactor: delete legacy threshold/protocols/corona Feldman-DKG impl (…
hanzo-dev May 19, 2026
4ecedf6
deps: bump luxfi/fhe v1.7.6 → v1.8.2 (durable CI fix)
hanzo-dev May 19, 2026
5fb7ad1
proofs/frost: Tier A EC theories + Lean bridges + Jasmin CT scaffolds
hanzo-dev May 19, 2026
2f10068
proofs/cmp: Tier A EC theories + Lean bridges + Jasmin CT scaffolds
hanzo-dev May 19, 2026
9fcfc13
proofs/bls: Tier A EC theories + Lean bridges + Jasmin CT scaffolds
hanzo-dev May 19, 2026
1990202
sign-off: cryptographer review of {frost,cmp,bls} v1.8.0
hanzo-dev May 19, 2026
be5caf7
docs: add docs/audit.md and fix broken README links (closes #5) (#7)
abhicris May 19, 2026
85a1977
test: L2 chain-specific threshold signing test suite (#6)
abhicris May 19, 2026
186bcbb
deps: bump luxfi/lens v0.1.3 → v0.1.4 (fixes missing rc1 tag reference)
hanzo-dev May 21, 2026
faa31ae
deps: bump accel v1.0.7 → v1.1.2, crypto v1.19.0 → v1.19.10, corona v…
hanzo-dev May 21, 2026
6198fa3
feat: swap prometheus/client_golang → luxfi/metric (kill google.golan…
hanzo-dev May 23, 2026
1710aa6
deps: bump luxfi/metric v1.5.0 → v1.5.7
hanzo-dev May 24, 2026
991a71a
fix: re-apply prometheus/client_golang → luxfi/metric (regressed post…
hanzo-dev May 25, 2026
e56be77
test: complete prometheus → luxfi/metric sweep for protocol tests
hanzo-dev May 29, 2026
f2213c6
docs(protocols/mldsa): research-preview banner — distinguish per-vali…
hanzo-dev May 29, 2026
9d33705
protocols/{corona,pulsar}: extend alias surface for consensus consumers
hanzo-dev May 31, 2026
ae85812
thresholdd: wire pulsar via canonical Signature codec
hanzo-dev May 31, 2026
d9d969d
go.mod: bump pulsar v1.0.12 → v1.0.23 (wire codec + shared gpu)
hanzo-dev May 31, 2026
aba6aad
Merge: corona+pulsar alias surface for consensus consumers
hanzo-dev May 31, 2026
c7b0e34
docs(threshold): drop stale ringtail references
hanzo-dev May 31, 2026
afea804
thresholdd: wire magnetar via canonical MAGS/MAGG Signature codec
hanzo-dev May 31, 2026
ba2b528
fix(pool,protocol): close-vs-send race and Verify/Finalize serialization
hanzo-dev Jun 1, 2026
7a75d69
fix(lss): hash-input length contract — 32 bytes at the protocol boundary
hanzo-dev Jun 1, 2026
2f2ee8b
go.mod: bump magnetar v0.5.1 → v0.5.2 (wire codec)
hanzo-dev Jun 1, 2026
1febecd
thresholdd: wire corona scheme through canonical wire codec
hanzo-dev May 31, 2026
ae9987a
lss: gate research-preview Corona adapter behind -tags=researchpreview
hanzo-dev May 31, 2026
b23fd05
pkg/protocol: accept context.DeadlineExceeded in timeout test
hanzo-dev May 31, 2026
5b57405
round: pointer receivers on trivial round methods
hanzo-dev Jun 1, 2026
9e80d8b
internal/test/network: drain in-flight Send before Close
hanzo-dev Jun 1, 2026
d079700
paillier: clone before saferith.Nat.Cmp in EncWithNonce
hanzo-dev Jun 1, 2026
b9eb6ac
protocol/handler: decompressMessage returns shallow copy
hanzo-dev Jun 1, 2026
7e11b9e
pedersen: clone before saferith.Nat.Cmp in ValidateParameters
hanzo-dev Jun 1, 2026
6c7015b
internal/test: delete dead test infrastructure
hanzo-dev Jun 1, 2026
258e703
round: rename Helper to Base — name the value, not the laziness
hanzo-dev Jun 1, 2026
9517791
internal/test: name files for their value, not "simple" / "helpers"
hanzo-dev Jun 1, 2026
d83d5d3
internal/test/timeout_handler: rename "Simple"/"New" qualifier funcs
hanzo-dev Jun 1, 2026
bf6fef3
protocols/lss: rename test_helpers.go → keygen_sim.go; drop dead funcs
hanzo-dev Jun 1, 2026
3e11bf0
protocols/tfhe: rename unsafe_test_helper_test.go → unsafe_env_test.go
hanzo-dev Jun 1, 2026
19b5641
protocols/frost: rename simple_test.go → keygen_refresh_test.go
hanzo-dev Jun 1, 2026
3b9f339
protocols/lss/keygen: rename simple_test.go → start_test.go; trim
hanzo-dev Jun 1, 2026
8455216
test(corona): argument-validation tests for Bootstrap/Reshare/Reancho…
abhicris Jun 1, 2026
3d44b60
test(pulsar): alias-surface tests for ParamsFor + Sign/VerifyCtx roun…
abhicris Jun 1, 2026
15534af
pkg/math/polynomial: add LagrangeAtZeroBigInt for tfhe combine
abhicris Jun 1, 2026
6de4577
protocols/slhdsa-tee: institutional-custody FIPS 205 via TEE-gated se…
hanzo-dev Jun 1, 2026
dbe2179
protocols/mldsa-tee: institutional-custody FIPS 204 via TEE-gated see…
hanzo-dev Jun 1, 2026
d5eacf7
protocols/rlwe-tee: institutional-custody Ring-LWE via TEE-gated trus…
hanzo-dev Jun 1, 2026
0296784
pkg/thresholdd: Sign_TEE for magnetar/pulsar/corona — TEE-gated opt-in
hanzo-dev Jun 1, 2026
9d3c1df
e2e: PQ threshold custody production validation harness
hanzo-dev Jun 1, 2026
0552549
pkg/thresholdd: Sign_Ctx for pulsar/magnetar — FIPS-204/205 ctx-bound…
hanzo-dev Jun 1, 2026
184994f
merge: env/drop-lux-prefix
hanzo-dev Jun 1, 2026
7bfe7fb
merge: fix/fresh-clone-bash-shell
hanzo-dev Jun 1, 2026
040f967
deps: bump luxfi/magnetar v0.5.2 → v1.1.0
hanzo-dev Jun 2, 2026
882d607
go.mod: bump luxfi/magnetar v1.1.0 → v1.2.0
hanzo-dev Jun 2, 2026
b1218f3
protocols/slhdsa-tee + pkg/thresholdd: strict-PQ profile gate + t-of-…
hanzo-dev Jun 2, 2026
9b043a0
deps: pulsar v1.0.23 → v1.1.1; rewire pulsar.Sign_Ctx onto full algeb…
hanzo-dev Jun 2, 2026
61299ac
go.mod: bump luxfi/accel v1.1.2 → v1.1.7 (fresh-clone CI fix)
hanzo-dev Jun 2, 2026
2533d9d
go.mod: bump luxfi/accel v1.1.7 → v1.1.8 (//go:embed c_api.h fresh-cl…
hanzo-dev Jun 2, 2026
723c9c8
rename: Ringtail → Corona (canonical R-LWE threshold)
hanzo-dev Jun 2, 2026
6e787d8
chore(deps): go get -u ./...
hanzo-dev Jun 2, 2026
edb2bbd
threshold/easycrypt: port BLS/CMP/FROST proofs + close 3 admits
antjekarinaw Jun 2, 2026
d608ccd
fix: gofmt -s across repo (CI format check)
hanzo-dev Jun 2, 2026
53fb138
brand-scrub: drop 'fuji' from e2e validation harness + report
hanzo-dev Jun 3, 2026
d691efe
threshold: ringtail→corona sweep (canonicalize naming per 2026-06 audit)
hanzo-dev Jun 3, 2026
07e87c6
Merge pull request #24 from luxfi/feat/2026-06-02-lagrange-bigint-for…
hanzo-dev Jun 3, 2026
1760617
Merge pull request #23 from abhicris/test/2026-06-01-pulsar-alias-tests
hanzo-dev Jun 3, 2026
11b0da1
Merge pull request #22 from abhicris/test/2026-06-01-corona-validatio…
hanzo-dev Jun 3, 2026
fe8b62d
test(parity): apples-to-apples Corona vs Pulsar bench harness
hanzo-dev Jun 5, 2026
3fd6bc5
WIP: session checkpoint 2026-06-05 (codec rip in flight)
hanzo-dev Jun 5, 2026
0c7dcee
tfhe: Phase 1 real Lagrange-interpolated distributed decryption (issu…
abhicris Jun 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ on:
workflow_dispatch:

env:
GO_VERSION: '1.25.5'
GO_VERSION: '1.26.3'

jobs:
lint:
Expand Down Expand Up @@ -50,7 +50,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
go-version: ['1.25.5']
go-version: ['1.26.3']
steps:
- name: Checkout code
uses: actions/checkout@v4
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/fresh-clone-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ on:
workflow_dispatch:

env:
GO_VERSION: '1.25.7'
GO_VERSION: '1.26.3'

jobs:
fresh-clone-test:
Expand Down Expand Up @@ -60,6 +60,7 @@ jobs:
- name: go test (count=1, no cache)
id: gotest
working-directory: repo
shell: bash
run: |
set -o pipefail
go test -count=1 -timeout 300s ./... 2>&1 | tee ../go-test.log
Expand Down
9 changes: 8 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,13 @@
*.dll
*.so
*.dylib
threshold-cli

# Build artifacts from `make build` / `make examples`
# (`bin/` is the Makefile output dir; `example/example` is built from
# `example/example.go` by the `examples` target.)
/bin/
/example/example
/example/dynamic_reshare_example

# Test binary, built with `go test -c`
*.test
Expand All @@ -22,3 +28,4 @@ AGENTS.md
GEMINI.md
QWEN.md
/mldsa-bench
*.eco
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ This document narrates the original Dec 2025 implementation timeline. All work w

### v1.6.5 — 2026-04-28
- fix(lss/adapters): ed25519 nil/cross-curve guard — kill xrpl.go:185 panic
- fix(ringtail): use SignWithConfig in tests after Sign API expanded
- fix(corona): use SignWithConfig in tests after Sign API expanded
- fix(go.sum): add missing h1 hashes for luxfi/log and 4 deps
- sec(tfhe): UNSAFE markers + panic guards remain canonical (Red F5 fail-closed)

Expand Down
2 changes: 1 addition & 1 deletion LICENCE
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ are not limited to:
THRESHOLD CRYPTOGRAPHY INNOVATIONS:
- LSS (Lagrange Secret Sharing) Dynamic Resharing Without Key Reconstruction
- Multiplicative Blinding Protocols (Protocol I & II) for Share Privacy
- Ringtail Post-Quantum Lattice-Based Threshold Signatures
- Corona Post-Quantum Lattice-Based Threshold Signatures
- Threshold BIP-32 Deterministic Key Derivation
- Identifiable Abort Protocol with Blame Assignment
- Automatic Generation-Based Rollback with Party Eviction
Expand Down
18 changes: 18 additions & 0 deletions LICENSING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Licensing

This repository is licensed under the **Lux Ecosystem License v1.2**
(see [LICENSE](LICENSE)). It belongs to the **patent-protected** tier
of the Lux three-tier IP strategy.

- Free for **Authorized Networks** (Lux Primary NetID=1, EVM 96369;
official testnets/devnets; Descending Chains).
- Free for **Research Use** (academic, education, evaluation).
- **Commercial use outside Authorized Networks requires a paid
commercial license**.

For the canonical Lux IP and licensing strategy and the precise
definitions of "Authorized Network", "Descending Chain", and "Research
Use", see:
<https://github.com/luxfi/.github/blob/main/profile/README.md>

For commercial licensing inquiries, contact `licensing@lux.network`.
13 changes: 9 additions & 4 deletions LLM.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Production-ready universal threshold signature implementation supporting 20+ blo
```
threshold/
├── cmd/threshold-cli/ # CLI tool
├── cmd/thresholdd/ # JSON-RPC 2.0 daemon — all six schemes over one socket (127.0.0.1:7300)
├── cmd/thresholdd/ # ZAP byte-passthrough daemon — all seven schemes over one socket (127.0.0.1:7301). HTTP+JSON+hex deleted 2026-06-04.
├── internal/ # Private implementation details
│ ├── bip32/ # BIP-32 key derivation
│ ├── elgamal/ # ElGamal encryption
Expand All @@ -35,7 +35,7 @@ threshold/
│ ├── frost/ # FROST Schnorr/EdDSA (2-round signing)
│ ├── lss/ # LSS dynamic resharing
│ ├── doerner/ # 2-of-2 optimized ECDSA
│ ├── ringtail/ # Post-quantum lattice-based
│ ├── corona/ # Post-quantum lattice-based (R-LWE)
│ └── bls/ # BLS aggregate signatures
└── docs/ # Documentation
```
Expand All @@ -48,7 +48,7 @@ threshold/
| **FROST** | Schnorr/EdDSA | 2 | ~8ms | BIP-340 Taproot |
| **LSS** | ECDSA | Variable | ~35ms reshare | Dynamic resharing |
| **Doerner** | ECDSA | 2-party | ~5ms | Constant-time |
| **Ringtail** | Lattice | Variable | - | Post-quantum |
| **Corona** | Lattice (R-LWE) | Variable | - | Post-quantum |

## Important Conventions

Expand Down Expand Up @@ -119,7 +119,12 @@ Status per scheme:
- `cggmp21` — full keygen + sign via `protocols/cmp` (CGGMP21 fork)
- `frost` — full RFC 9591 secp256k1 via `protocols/frost`
- `pulsar` — full Pulsar M-LWE via `luxfi/corona/threshold`
- `corona` — full Ringtail R-LWE via `luxfi/ringtail/threshold`
- `corona` — full Corona R-LWE via `luxfi/threshold/protocols/corona`.
Wire-level alias `"ringtail"` is accepted on read (deprecated; emit
`"corona"` on all new clients). Aliases live in `pkg/thresholdd/
server.go::schemeAliases`; remove an alias once external callers have
migrated. Pre-2026-06 callers that still send `ringtail.keygen` etc.
continue to dispatch correctly.
- `bls` — full Shamir/Lagrange via `protocols/bls.TrustedDealer`
- `doerner` — round-protocol non-functional upstream; surface reserved,
every op returns an explicit error. Fix upstream and remove the guard.
Expand Down
13 changes: 7 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ The most comprehensive threshold signature implementation supporting **20+ block
### ✨ Key Features

- **🌐 Universal Multi-Chain Support** - Native adapters for XRPL, Ethereum, Bitcoin, Solana, TON, Cardano, and 14+ more chains
- **🔐 Post-Quantum Security** - Ringtail lattice-based signatures with 128/192/256-bit security levels
- **🔐 Post-Quantum Security** - Corona lattice-based signatures with 128/192/256-bit security levels
- **⚡ Lightning Fast** - Sub-25ms signing, 12-82ms key generation
- **🔄 Dynamic Resharing** - Add/remove parties without downtime or key reconstruction
- **🛡️ Byzantine Fault Tolerant** - Handles up to t-1 malicious parties
Expand All @@ -40,7 +40,7 @@ The most comprehensive threshold signature implementation supporting **20+ block
- **ECDSA** (secp256k1) - Bitcoin, Ethereum, XRPL
- **EdDSA** (Ed25519) - Solana, TON, Cardano, NEAR
- **Schnorr** (BIP-340) - Bitcoin Taproot, Polkadot
- **Ringtail** (Post-Quantum) - All chains via adapter
- **Corona** (Post-Quantum) - All chains via adapter

## 🌍 Blockchain Support

Expand Down Expand Up @@ -99,10 +99,10 @@ manager := lss.NewRollbackManager(maxGenerations)
restoredConfig, _ := manager.Rollback(targetGeneration)
```

### Post-Quantum Signatures (Ringtail)
### Post-Quantum Signatures (Corona)
```go
// Create post-quantum adapter
pqAdapter := adapters.NewRingtailAdapter(256, numParties) // 256-bit security
pqAdapter := adapters.NewCoronaAdapter(256, numParties) // 256-bit security

// Generate preprocessing
preprocessing := pqAdapter.GeneratePreprocessing(parties, threshold, 100)
Expand Down Expand Up @@ -145,8 +145,9 @@ Heavy computations are automatically parallelized for optimal performance.
- [Production Readiness Report](PRODUCTION_READY.md)
- [LSS Protocol Paper](protocols/lss/README.md)
- [CMP Implementation](docs/Threshold.pdf)
- [API Reference](docs/api.md)
- [Integration Guide](docs/integration.md)
- [FROST Protocol](docs/FROST.md)
- [Broadcast Channel](docs/Broadcast.md)
- [Lux Integration Guide](docs/LUX_INTEGRATION.md)
- [Security Audit](docs/audit.md)

## 🧪 Testing
Expand Down
Binary file removed bin/threshold-cli
Binary file not shown.
64 changes: 34 additions & 30 deletions cmd/corona_oracle/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,22 @@
// Q = 0x1000000004A01 / N = 256)? The C++ body is deliberately scoped as a
// single-process oracle with luxcpp's own NTT prime — see corona.hpp lines
// 31-39. The two Go paths cover different surfaces:
// * github.com/luxfi/corona covers the 2-round network protocol.
// * This file covers the C++ single-process algebraic shape.
// - github.com/luxfi/corona covers the 2-round network protocol.
// - This file covers the C++ single-process algebraic shape.
//
// Both are first-party algebraic primitives, neither wraps the other.
//
// Usage:
// cd lux/threshold/cmd/corona_oracle
// go run . > ../../../../luxcpp/crypto/corona/test/corona_kat.h
//
// cd lux/threshold/cmd/corona_oracle
// go run . > ../../../../luxcpp/crypto/corona/test/corona_kat.h
//
// Determinism:
// * StreamPRNG: SHA-256(seed || counter_LE8) → 32-byte block, counter++.
// * pmf table: math.Exp matches darwin libm to ULPs sufficient for the
// - StreamPRNG: SHA-256(seed || counter_LE8) → 32-byte block, counter++.
// - pmf table: math.Exp matches darwin libm to ULPs sufficient for the
// uint64 CDT entries to be byte-equal (verified empirically; see comment
// at gaussianCDT).
// * float-to-int: we mirror the C++ static_cast<uint64_t>(d) which on x86
// - float-to-int: we mirror the C++ static_cast<uint64_t>(d) which on x86
// is FCVTZS / VCVTSS2SI semantics — matched here by uint64(d) in Go.
package main

Expand All @@ -45,16 +47,16 @@ import (
// ============================================================================

const (
Q uint64 = 998244353
N int = 512
L int = 4
K int = 4
TAU int = 30
GAUSS_BOUND int = 12
SIGMA float64 = 1.7
POLY_BYTES int = N * 4
PK_BYTES int = (K*L + K) * POLY_BYTES // 40960
SIG_BYTES int = (1 + L) * POLY_BYTES // 10240
Q uint64 = 998244353
N int = 512
L int = 4
K int = 4
TAU int = 30
GAUSS_BOUND int = 12
SIGMA float64 = 1.7
POLY_BYTES int = N * 4
PK_BYTES int = (K*L + K) * POLY_BYTES // 40960
SIG_BYTES int = (1 + L) * POLY_BYTES // 10240
)

var B_INF uint64 = Q / 4
Expand Down Expand Up @@ -481,13 +483,13 @@ type keyShare struct {
}

type Context struct {
t uint32
n uint32
A [][]Poly // K x L
b []Poly // K
shares []keyShare
seed []byte
signCounter uint64
t uint32
n uint32
A [][]Poly // K x L
b []Poly // K
shares []keyShare
seed []byte
signCounter uint64
}

// Setup mirrors corona.cpp Setup.
Expand Down Expand Up @@ -629,14 +631,16 @@ func (ctx *Context) Sign(msg []byte) []byte {
// ============================================================================

// vectorSpec — one KAT vector. The C++ side will call:
// Setup(t, n, seed=seedASCII, seedLen=len(seedASCII))
// Sign(msg=msgASCII, msgLen=len(msgASCII)) // single Sign per ctx
//
// Setup(t, n, seed=seedASCII, seedLen=len(seedASCII))
// Sign(msg=msgASCII, msgLen=len(msgASCII)) // single Sign per ctx
//
// and assert that pk_sha256 / sig_sha256 / sig_first64 match.
type vectorSpec struct {
name string
t, n uint32
seed string
msg string
name string
t, n uint32
seed string
msg string
}

// Sixteen deterministic vectors covering: t=1,n=1; t=2,n=3; t=3,n=5; t=4,n=7;
Expand Down
23 changes: 13 additions & 10 deletions cmd/mldsa-bench/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,17 @@
// described in LP-045.
//
// Modes:
// individual — each validator signs individually, verify all sigs
// committee — committee of k validators signs, verify aggregate
// hierarchical — N validators partitioned into clusters, each cluster
// produces one cert, clusters combine into root QC
//
// individual — each validator signs individually, verify all sigs
// committee — committee of k validators signs, verify aggregate
// hierarchical — N validators partitioned into clusters, each cluster
// produces one cert, clusters combine into root QC
//
// Usage:
// mldsa-bench -mode=individual -n=100 -level=44
// mldsa-bench -mode=committee -n=100 -k=32 -level=44
// mldsa-bench -mode=hierarchical -n=100 -clusters=4 -level=65
//
// mldsa-bench -mode=individual -n=100 -level=44
// mldsa-bench -mode=committee -n=100 -k=32 -level=44
// mldsa-bench -mode=hierarchical -n=100 -clusters=4 -level=65
//
// Light mnemonic: the harness seeds ML-DSA key generation from a single
// 32-byte secret so 100+ validators can be spun up on a local machine
Expand All @@ -41,6 +43,7 @@ import (
var (
_ = crypto.Hash(0)
)

type mldsaMode = luxmldsa.Mode
type mldsaPrivateKey = luxmldsa.PrivateKey
type mldsaPublicKey = luxmldsa.PublicKey
Expand Down Expand Up @@ -122,9 +125,9 @@ func genValidators(n int, level mldsaMode, masterSeed [32]byte) []Validator {
}

type Timings struct {
Keygen time.Duration
Sign time.Duration
Verify time.Duration
Keygen time.Duration
Sign time.Duration
Verify time.Duration
SigBytes int
}

Expand Down
Loading
Loading