LP-180 tracks the **NIST Multi-Party Threshold Cryptography (MPTC)
submission package** for Pulsar, the Module-LWE threshold ML-DSA
construction Lux runs on the primary network's Q-Chain finality.
It is the document/code/proof artifact NIST receives at the
2026-Nov-16 first-call deadline.
LP-171 is the protocol-side LP (how Lux consumes Pulsar). LP-073
is the production-library LP (how Lux ships it). LP-180 is the
NIST-submission LP (what we hand NIST).
> Naming. The earlier Pulsar-M (with -M for Module-LWE)
> qualifier was retired in luxfi/pulsar commit af3d669
> (2026-05-16). Pulsar is now the family name; the Module-LWE
> instantiation IS Pulsar. The Module-LWE sibling is Corona. All
> code paths, module paths, and identifiers below use the
> post-rename pulsar form.
Crypto/Pulsar/OutputInterchange.lean (zero sorry); E2E test test/interoperability/n1_class_test.go verifies every KAT through cloudflare/circl FIPS 204 (19/19 subtests) |Crypto/Pulsar/Shamir.lean (zero sorry); transcript KATs vectors/transcripts/n*-t*-reshare.jsonl |Repository: <https://github.com/luxfi/pulsar>. Module path
inside: github.com/luxfi/pulsar (shared with the production
library luxfi/pulsar; the submission tarball is a tag-frozen
snapshot, the production library evolves under the same module
path).
SUBMISSION.md | drafted (v0.1) |NIST-SUBMISSION.md | drafted (v0.1) |SPEC.md | drafted (v0.1) |SUITE.md | drafted (v0.1) |INFORMATION-ARCHITECTURE.md | drafted (v0.1) |HANZO-CRYPTO-SUITE.md | drafted (v0.1) |PATENTS.md | drafted (v0.1) |docs/patent-claims.md | drafted (v0.1) |AXIOM-INVENTORY.md + PROOF-CLAIMS.md + TRUSTED-COMPUTING-BASE.md | drafted (v0.1) |FIPS-TRACEABILITY.md | drafted (v0.1) |CHANGELOG.md | drafted through v13 |ROADMAP.md | drafted (v0.1) |SYNC-STATUS.md | drafted (v0.1) |spec/pulsar.tex → spec/pulsar.pdf | drafted; encoding freeze 2026-Aug |ref/go/pkg/pulsar/ (Go, no asm) | shipped; 89.7% coverage |vectors/{dkg,keygen,sign,threshold-sign,verify}.json + vectors/transcripts/ | deterministic from 32-byte seed |test/interoperability/n1_class_test.go (3rd-party FIPS 204 verifier: cloudflare/circl) | 19/19 subtests pass |~/work/lux/proofs/lean/Crypto/Pulsar/{OutputInterchange,Unforgeability,Shamir,dkg2}.lean | zero sorry |proofs/lean-easycrypt-bridge.md | 5/5 bridges; CI-guarded |ct/dudect/ harness | scaffolded; final results pinned at submission tag |jasmin/{lib,ml-dsa-65,threshold}/ | libjade fetch script + threshold layer + 3/3 jasmin-ct CI green |proofs/easycrypt/{Pulsar_N1,Pulsar_N4}.ec + supporting modules + lemmas/{Pulsar_CT,MLDSA65_Functional}.ec | 13/13 compile, 0 admits, v4-v13 decomposition complete |docs/evaluation.md + bench/results/REPORT.md | populated on Apple M1 Max; reproducible via scripts/bench.sh |docs/ietf-draft-skeleton.md (draft-hanzo-pulsar-threshold-mldsa-00) | drafted, no TBDs |LICENSE (Apache-2.0) | ✓ |scripts/ | shipped; reproducibility CI gate |output is byte-equal to.
(github.com/luxfi/pulsar) consuming the algorithm Pulsar
specifies. Live at v1.0.1.
threshold-orchestration layer that consumes Pulsar as a kernel
(alongside Corona M-LWE per LP-073-corona, FROST per LP-098,
CGGMP21 per LP-099).
+ Z-Chain Groth16 in the QuasarCert structure. Production
consumer.
Lux-protocol-side specification. LP-180 (this) is the
NIST-submission-side specification.
both Lux and Hanzo deploy.
spec/pulsar.tex |submission-2026-11-16 tag from main, produce reviewer tarball, file with NIST |1. Encoding section (spec/pulsar.tex) explicitly declared
"intentionally structural only — byte-level wire formats freeze
at DD-008 (end of August 2026)". A reviewer who clones today
sees that flag. Must close before submission.
2. EasyCrypt admit markers in proofs/easycrypt/. Three
theory shells with admit standing in for the proof body.
Without discharge, the high-assurance track is a roadmap. NIST
accepts this for the first submission; reviewers will note it.
3. Threshold-layer Jasmin (jasmin/threshold/{round1,round2,combine}.jazz)
are stubs with function signatures + TODO markers. The
single-party ML-DSA-65 baseline is covered by libjade (fetched
via jasmin/ml-dsa-65/fetch.sh); the threshold-specific work
is months of formal-methods engineering.
4. Red-team audit findings (2026-05) — all 13 CLOSED —
a 4-red-agent + 1-scientist swarm against the nation-state
threat model originally found 13 production go-live blockers.
The CR-{1..13} list is now fully discharged across
pulsar + consensus + node + evm + geth + pq; see
BLOCKERS.md at the repository root for per-entry landing
commit attribution. Lux mainnet deployment as a strict-PQ
chain is no longer gated on the audit: every wire from the
profile-banner to the EVM precompile boundary to the
peer-handshake to the threshold-DKG to the consensus
envelope is now enforced. Per the scientist audit, the
following five algorithmic claims still need spec caveats
added before submission (these are about the paper, not the
code): adaptive corruption (UNSUPPORTED → spec must say
static-only); cross-domain isolation Pulsar/Corona (WEAK →
both Pulsar and Corona (Module-LWE) share algebraic-lattice hardness, not
defense-in-depth); constant-time Verify (WEAK → assertion not
measurement; dudect harness wired but submission-grade run
still pending); Z-Chain Groth16 / P3Q migration (WEAK →
implementation does not match doc claim of "192-byte Groth16
rollup"); 2-round optimality (WEAK → clarify v0.1
reconstruction-aggregator trust model vs Raccoon's 3-round
true-threshold combine).
5. No 1-round signing variant. ML-DSA rejection sampling
precludes 1-round threshold without a non-NIST-standard
preprocessing oracle. NIST is aware; this is shared with
Raccoon and Corona submissions.
The submission tarball at submission-2026-11-16 must pass:
scripts/build.sh exits 0 on fresh clone (Go ref + spec PDF)scripts/test.sh exits 0 (unit + no-secret-logs + KAT replay + Class N1 interop)scripts/gen_vectors.sh produces byte-identical KAT output across runsCrypto/Pulsar/ files compile with zero sorrybench/results/REPORT.md populated with reproducible numbersSUBMISSION.md cover sheet presentadmit; per-stage decomposition complete through v13docs/ietf-draft-skeleton.md)SYNC-STATUS.md)spec/pulsar.texct/dudect/results/test/interoperability/(January 2026)
(August 2024)
*Corona: Practical two-round threshold signatures from learning
with errors*. IACR ePrint 2024/1113.
digital signatures submission, 2024.
Jasmin/EasyCrypt verified ML-DSA / Kyber.