LP-171 mirrors Hanzo HIP-0084 into Lux. Pulsar is the **threshold
ML-DSA primitive** consumed by Q-Chain finality (LP-170) on the Lux
primary network. It produces signatures byte-equal to single-party
FIPS 204 ML-DSA — the threshold-aggregated output verifies under
the unmodified FIPS 204 ML-DSA.Verify routine, with no Lux-specific
verifier extension and no BLS fallback path.
Pulsar targets NIST MPTC Class N1 (signing) + N4 (ML keygen /
DKG) per NIST IR 8214C. LP-171 is the deployment contract
between Q-Chain (consumer) and Pulsar (producer); the
cryptographic spec (protocol description, security games,
parameter sets) is the NIST MPTC submission package at
luxfi/pulsar/spec/pulsar.tex.
ProfileID: 0x01 (ProfileLuxStrictPQ)
ProfileName: LUX_STRICT_PQ
HashSuiteID: SHA3_NIST (0x01)
IdentitySchemeID: ML_DSA_65 (0x42)
FinalitySchemeID: PULSAR_M_65 (0x52)
HighValueSchemeID: PULSAR_M_87 (0x53)
ProofPolicyID: STARK_FRI_SHA3_PQ (0x10)
AllowedBackends: SP1_COMPRESSED_STARK, RISC0_SUCCINCT_STARK,
P3Q_PLONKY3_STARK_FRI, STONE_CAIRO_STARK_CPP,
STWO_CIRCLE_STARK
MinSoundnessBits: 128
MinHashOutputBits: 384
RequireTransparent: true
ForbidPairings: true
ForbidKZG: true
ForbidTrustedSetup: true
ForbidClassicalSNARKs: true
ForbidDevProofs: true
ForbidFallbacks: true
Resolved via config.ProfileByID(config.ProfileLuxStrictPQ).
0x52 Pulsar-65 (NIST PQ Cat 3) |0x01 SHA3_NIST |n | 64 |f | 21 |t | 43 |High-value roots use 0x53 Pulsar-87 (NIST PQ Cat 5). The Lux
primary network refuses 0x51 Pulsar-44.
luxfi/pulsar/ref/go/ ships throughSign + Verify with KAT cross-validation against the FIPS 204
reference. KAT freeze: 2026-08-31 encoding gate.
identity-registry path; participants are bound to
committee_root per LP-170 clause 4 of the acceptance rule.
ML-DSA-65 public key, indistinguishable from a single-party
ML-DSA.KeyGen output under M-LWE. Bound into Q-Chain by
group_public_key_hash.
ML-DSA-signed evidence. A valid complaint with quorum attribution
slashes the deviating party's stake per the Lux slashing
protocol.
(luxfi/pulsar/dkg2.constTimePolyEqual) ports forward into
Pulsar's reshare path; no-secret-logs CI gate enforced in
luxfi/pulsar.
A Lux validator MUST NOT silently substitute raw ML-DSA-65 or
Corona for the Pulsar-65 production profile on the primary
network. The fallback profiles are explicit operator opt-ins gated
through PQMode selection (mldsa / corona) and refused by the
Lux mainnet acceptance rule.
A Pulsar ceremony whose participants do not match the
Z-Chain-anchored committee_root is rejected by Q-Chain acceptance
(LP-170 clause 4). A signature against a group key not in
group_public_key_hash is refused (clause 6).
transcripts + group keys.
luxfi/pulsar/spec/pulsar.tex — NIST MPTC submission package.