Files
pulsar/vectors
zeekay d7dc75411e pulsar: drop -M qualifier everywhere — Pulsar (M-LWE) is the family name
Symmetric with Corona's parallel rename (PULSAR-* -> CORONA-* in
luxfi/corona). The -M was the M-LWE qualifier from when Pulsar-M and
Pulsar-R were sibling constructions; Pulsar-R shipped as Corona, so
the -M qualifier is dead weight across the family.

Changes:
  - spec/pulsar.tex: prose + tag strings PULSAR-M-* -> PULSAR-*
  - ref/go: all "Pulsar-M" string literals -> "Pulsar" in mode names,
    KAT message prefixes, and beacon strings (PULSAR-M-RESHARE-BEACON
    -> PULSAR-RESHARE-BEACON, etc.)
  - vectors/{sign,keygen,verify,threshold-sign,dkg}.json: regenerated
    from genkat with new mode strings

Preserved (different scope):
  - Go package directory name `pkg/pulsarm/` (renaming the dir is a
    Go module break for any importer; punted to a separate cleanup)
  - luxcpp/crypto/pulsar/ path references in comments (separate repo)

All 9 test packages pass: pulsarm (KAT replay, large e2e, reshare,
shamir, types) + the rest.
2026-05-13 14:21:45 -07:00
..

Test vectors

Two formats per NIST MPTC submission norms:

  • kat-v1.json — input/output vectors per MPTC §IO-Testing. Each entry is a single threshold ceremony with full (n, t, party_seeds, public_params, shares, commitments, preprocessing_transcript, message, per_party_messages, final_signature, verify_result, abort_evidence).

  • kat-v1.rsp — CAVS-style response file for compatibility with legacy ACVP-inspired tooling. One signature per stanza, deterministic from a 48-byte seed.

transcripts/ holds full-protocol KATs for (n, t) sweeps — transcripts/n3-t2.jsonl, transcripts/n7-t5.jsonl, etc. — each line a complete protocol run.

Cross-validation against FIPS 204

The headline interchangeability claim (Class N1) requires every final_signature in kat-v1.json to verify against unmodified FIPS 204 ML-DSA.Verify(pk, message, signature) returning accept. The cross-validation harness at test/interoperability/ runs each KAT through:

  • the reference implementation in ref/go/
  • the FIPS 204 reference (Dilithium pq-crystals C reference)
  • a third independent ML-DSA implementation (BoringSSL FIPS or OpenSSL 3.0 PQ provider, whichever is available)

A KAT mismatch with any of the three is a release blocker.

Determinism

Every entry in kat-v1.json is reproducible from master_seed (a 48-byte hex value at the head of the file). scripts/gen_vectors.sh must produce byte-identical output on any fresh checkout. Drift here is a CI failure.

Status

  • KAT generator (ref/go/cmd/genkat) — implementation pending
  • First v1 KAT set
  • FIPS 204 cross-validation
  • Independent-impl cross-validation
  • Encoded into vectors/transcripts/ for (n, t) ∈ {(3,2), (5,3), (7,5), (10,7), (16,11), (32,21)}