mirror of
https://github.com/luxfi/threshold.git
synced 2026-07-27 04:01:59 +00:00
Squashed batch covering:
- protocols/pulsar/: lattice threshold lane (round-based wrapper for
github.com/luxfi/pulsar kernel); doc.go documents Photon/Lumen/Beam/
Pulsar/Pulse/Prism/Horizon/Quasar vocabulary stack from LP-105
- protocols/lens/: planned curve threshold sister kernel (design
intent only; mirrors Pulsar shape; replaces stub LSS-FROST)
- protocols/lss/lss_pulsar.go + tests: LSS-Pulsar adapter
(DynamicResharePulsar + PulsarSnapshotManager + BuildActivationTranscript).
Now SHA3-suite-aware: PulsarConfig carries NebulaRoot, HashSuiteID,
ImplementationVersion as optional transcript-binding fields that
flow through to the activation message.
10/10 acceptance tests pass:
1. GroupKey preservation
2. KeyEraID preservation
3. Generation +1
4. RollbackFrom=0 on forward
5. t_old != t_new
6. Disjoint set rotation
7. Valid signature under unchanged GroupKey
8. Pairwise material regenerated
9. Rollback semantics
10. Error surface
Plus 1 new test for BuildActivationTranscript Nebula+suite fields.
- protocols/lss/lss_frost.go: marked DEPRECATED (placeholder Sign()/
Refresh(), single-process simulation, hardcoded ChainKey/RID); will
be replaced by lss_lens.go.
- corona KAT cross-oracle vs Go reference (N=16 deterministic seeds)
- corona+protocol+harness hardening against parallel-run flakes
- lss/adapters: drop NewXRPL/NewCardano panic; ship real XRPL address
derivation
- corona SignWithConfig API expansion + test fixes
- v1.6.5 changelog
- go.sum h1 hashes for luxfi/log and 4 deps
Architecture (LP-105 / pulsar/DESIGN.md):
LSS owns lifecycle (Generation, Rollback, snapshots, dealer/
coordinator role separation). Pulsar owns lattice math (R_q shares,
lattice Pedersen commits, Sign1/Sign2/Combine, Pulsar-SHA3 hash
profile). The lss_pulsar adapter wires them. lss_lens (planned) does
the same for curve math.
go.mod adds local replace github.com/luxfi/pulsar => ../pulsar.
1.8 KiB
1.8 KiB
Threshold ML-DSA
First practical threshold signature scheme fully compatible with NIST FIPS 204 ML-DSA. Outputs standard ML-DSA signatures (drop-in verification).
Paper: Celi, del Pino, Espitau, Niot, Prest — Efficient Threshold ML-DSA,
USENIX Security 2026. See ../../papers/threshold-mldsa.tex.
Configurations
- Security levels: ML-DSA-44 / 65 / 87 (NIST I / III / V)
- Threshold range:
2 ≤ T ≤ N ≤ 6(hard upper bound in this release) - Typical:
2-of-3,3-of-5 - Security model: static dishonest majority in the ROM
Rounds
3 rounds per signing attempt, K parallel instances (see params.go):
- Commit — each party publishes
H(vk, i, wᵢ)withwᵢ = A·rᵢ - Reveal — open
wᵢ, derive challengec - Respond — each party publishes
zᵢafter local hyperball rejection
Combiner verifies the aggregated z meets ML-DSA bounds and emits a
standard signature.
Bandwidth (per party, per successful attempt, ML-DSA-44)
| N\T | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|
| 2 | 10.5 kB | ||||
| 3 | 15.8 kB | 21.0 kB | |||
| 4 | 15.8 kB | 36.8 kB | 42.0 kB | ||
| 5 | 15.8 kB | 73.5 kB | 157.4 kB | 84.0 kB | |
| 6 | 21.0 kB | 99.8 kB | 388.4 kB | 524.8 kB | 194.2 kB |
Files
doc.go— package docparams.go— all (T,N) × level parameter sets (Tables 3, 10, 11)rss.go— replicated secret sharing, hardcoded optimal partitions (Appendix B, Algorithm 6)hrej.go— imbalanced hyperball rejection (Figure 4)- TODO:
keygen.go,sign.go,combine.go,a_posteriori.go— stubs pending integration withcloudflare/circl/sign/mldsaandluxfi/lattice.
Status
Skeleton + parameter tables + RSS partition logic shipped. Ring operations, CIRCL integration, and full protocol wiring land incrementally.