Files
6fa490e8ee docs: add docs/audit.md and fix broken README links (closes #5) (#7)
* fix: add mutex to FROST sign rounds (concurrent map write at 8+ signers)

* fix: LSS keygen race condition — use MarshalBinary instead of Equal (dcrd ToAffine mutates)

* feat: add threshold ML-DSA scaffold per Celi et al. (USENIX '26)

First practical threshold signature scheme compatible with NIST FIPS 204
ML-DSA. Outputs byte-identical standard ML-DSA signatures, enabling drop-in
replacement of classical threshold ECDSA/Schnorr wallets with a PQ scheme
that keeps the standardized verification path.

Paper: Celi, del Pino, Espitau, Niot, Prest — Efficient Threshold ML-DSA,
USENIX Security Symposium 2026.

Files:
- papers/threshold-mldsa.tex — paper summary + integration notes (LaTeX)
- protocols/mldsa/doc.go — package doc
- protocols/mldsa/params.go — (T,N) × level parameter tables (44/65/87)
  from paper Tables 3, 10, 11
- protocols/mldsa/rss.go — replicated secret sharing with hardcoded optimal
  partitions for 2 ≤ T ≤ N ≤ 6 (Appendix B, Algorithm 6)
- protocols/mldsa/hrej.go — imbalanced hyperball rejection (Fig. 4)
  — mathematical spec stub, ring ops pending CIRCL integration
- protocols/mldsa/rss_test.go — 6 tests covering subsets, recovery
  completeness, balance bounds, parameter coverage

Config range: 2 ≤ T ≤ N ≤ 6 (2-of-3, 3-of-5, etc.)
Security: static dishonest-majority in ROM under MLWE + ML-DSA unforgeability.
Rounds: 3 per attempt, K parallel instances for ≥ 1/2 success probability.

* feat: mldsa-bench — PQ signing benchmarks for quasar + LP-045

Bench harness for 3 / 5 / 10 / 100 node PQ signing patterns:
  - individual: each validator signs, no aggregation (baseline)
  - committee:  k-of-n sample signs, the LP-045 cluster cert
  - hierarchical: n validators in M clusters (LP-045 two-layer)

Uses deterministic light mnemonic derivation — 100 validators from a
single 32-byte master seed, no interactive keygen, no mainnet keys.

Results on MacBook M3 / 10 cores / arm64 at ML-DSA-44:
  n=100 individual: 8.87 ms sign / 3.57 ms verify / 242 kB
  n=100 committee (k=32): 3.57 ms sign / 4.14 ms verify / 77 kB
  n=100 hierarchical (4 clusters): 14.7 ms sign / 5.35 ms verify

Committee sampling cuts signing cost 3× vs all-100 signing.
ML-DSA-65 is ~3× slower. Even at Level III, 100 validators sign in
<30 ms per block — fine for quasar finality at any realistic block time.

.gitignore: scope mldsa-bench binary ignore to repo root only
so the cmd/mldsa-bench/ source dir is tracked.

* feat: fixed-committee mode — scale-invariant PQ signing at N=1K/10K/100K

Adds -mode=fixed which samples a fixed k-size committee regardless of
total validator count N. Proves the scale-invariance claim in LP-045 +
the PQ-finality-without-BLS proof (~/work/lux/proofs).

Measured on MacBook M3 (arm64, 10 cores) at ML-DSA-44, k=128:
  N=1,000     sign=7.9ms  verify=3.2ms  cert=310 kB
  N=10,000    sign=7.4ms  verify=3.2ms  cert=310 kB
  N=100,000   sign=7.8ms  verify=3.4ms  cert=310 kB
  N=100,000 (ML-DSA-65): sign=10.8ms verify=5.9ms cert=424 kB

Same cost from 10^3 to 10^5 validators. Only the VRF-based sampling
touches N, and that is O(log N) in a weighted-reservoir implementation.

* docs: add docs/audit.md and fix broken README links (closes #5)

The README linked to `docs/audit.md`, `docs/api.md`, and
`docs/integration.md` — none of which exist. This confuses users
evaluating the library for production use.

- Add `docs/audit.md` that honestly states external-audit status is
  "not yet commissioned", lists upstream primitive audits that users
  can rely on, documents known limitations, and points at the
  responsible-disclosure contact. The audit-log table is left empty
  for future audits to be appended.
- Replace the two other dangling links (`api.md`, `integration.md`)
  with links to docs that actually exist in the repo today
  (`FROST.md`, `Broadcast.md`, `LUX_INTEGRATION.md`).

Closes #5.

---------

Co-authored-by: Hanzo AI <dev@hanzo.ai>
Co-authored-by: Abhishek Krishna <abhi@kcolbchain.com>
2026-05-19 11:31:11 -07:00
..
2021-08-30 19:34:35 +02:00
2021-08-02 16:39:05 +02:00
2021-08-30 19:34:35 +02:00