Lux Docs
Lux Reference

Lux Pulsar — Threshold ML-DSA-65 (FIPS 204)

Production threshold post-quantum signature primitive for Lux Quasar consensus. NIST MPTC submission Class N1 + N4. Single canonical home for impl + spec + EC/Lean proofs + Jasmin + KAT + cut tool.

Overview

Pulsar is the Lux production threshold ML-DSA-65 library — a 2-round threshold signing + DKG system whose generated signatures are verifiable by unmodified FIPS 204 ML-DSA-65 verification. Targeting NIST MPTC Class N1 (single-party-compatible threshold signing) + Class N4 (multi-party key generation with public-key preservation across resharing).

  • Repo: github.com/luxfi/pulsar
  • Module path: github.com/luxfi/pulsar
  • Latest tag: v1.0.9
  • Cryptographer sign-off: APPROVED WITH GATES (CRYPTOGRAPHER-SIGN-OFF.md)
  • Status: Production for Lux Quasar consensus; NIST MPTC v0.1 submission-ready (cut deadline 2026-11-16)

Headline claim

Every signature produced by a Pulsar threshold ceremony (DKG → Round-1 → Round-2 → Combine) is bit-identical to a signature produced by single-party FIPS 204 ML-DSA-65 on the same message and group public key.

A FIPS-validated ML-DSA verifier (BoringSSL FIPS, AWS-LC, OpenSSL 3.0 PQ provider, cloudflare/circl) accepts a Pulsar signature without modification.

What's in the repo

ArtifactPathStatus
Cover sheetSUBMISSION.mdv0.1 ready
One-page exec summaryNIST-SUBMISSION.mdv0.1 ready
Standalone specSPEC.md + spec/pulsar.texdrafted
Patent grantPATENTS.mdroyalty-free
Trust accountingAXIOM-INVENTORY.md + PROOF-CLAIMS.md + TRUSTED-COMPUTING-BASE.mdv0.1
Op → FIPS 204 § mapFIPS-TRACEABILITY.mdv0.1
Per-version proof logCHANGELOG.mdthrough v1.0.9
Deployment runbookDEPLOYMENT-RUNBOOK.mdoperator-facing
Cryptographer sign-offCRYPTOGRAPHER-SIGN-OFF.mdAPPROVED WITH GATES
Reference implementationref/go/pkg/pulsar/Go, 89.7% coverage, race-clean
KAT vectorsvectors/deterministic round-trip
EasyCrypt theoriesproofs/easycrypt/13/13 compile, 0/0 admits
Lean ↔ EC bridgeproofs/lean-easycrypt-bridge.md5/5 bridges, CI-guarded
Jasmin constant-timejasmin/{lib,ml-dsa-65,threshold}/3/3 CI green
Class N1 interoptest/interoperability/n1_class_test.go19/19 subtests vs cloudflare/circl
Constant-time analysisct/dudect/arm64 + x86_64 harness; nightly 10⁹-sample gate
IETF Internet-Draftdocs/ietf-draft-skeleton.mddrafted
Cut toolscripts/cut-submission.shtarball-from-tag pipeline

Audit-response closures (since v1.0.6 / v1.0.7)

IDIssueStatus
CR-6DKG round-1 commit was vacuousCLOSED — commitments bound to long-term identity public key + DKG session-id
CR-7Threshold-sign session keys were absentCLOSED — per-pair ephemeral session keys derived from authenticated ML-KEM-768 + HKDF
CR-8DKG / reshare envelopes shipped in plaintextCLOSED — KEM-wrapped + ML-DSA-65 authenticated under long-term identity

All three closures apply to both the small-committee (n ≤ 256, GF(257)) and large-committee (n > 256, GF(q)) paths as of v1.0.7; legacyDeriveMACKeyLarge removed.

Consumed by

  • luxfi/consensus — Quasar consensus engine binds Pulsar via protocol/quasar/wave_signer.go
  • luxfi/quasar — Quasar, the Lux PQ-finality singularity; registers Pulsar as the M-LWE threshold primitive feeding the Pulsar / Aurora / Polaris cert profiles
  • luxfi/node — luxd runtime; pulls Pulsar transitively via consensus

Cross-references

On this page