Files
warp/scripts/kat/envelope_kat.json
zeekay 443aa53f81 feat(warp)!: typed finality-evidence model (Beam/Pulsar/Corona/P3Q) + Corona relabel
Decomplect the PQ finality lanes into a typed, impossible-to-confuse model where
KIND chooses the verifier and SUITE only chooses parameterization (fail-closed on
mismatch). Kills the prior conflation where the corona-backed lattice lane was
mislabeled "Pulse/Pulsar-SHA3".

Four strict evidence kinds — each its own verifier + suite + key registry:
  beam-bls                BLS12-381 aggregate (fast classical)
  pulsar-threshold-mldsa  threshold ML-DSA, verified as a STANDARD FIPS-204
                          ML-DSA signature under a group public key; the TALUS
                          dealerless machinery is entirely offline (VerifyPulsar
                          imports only mldsa65 — enforced by an import-hygiene test)
  corona-ringtail         Ringtail/Module-LWE lattice threshold (the corona kernel)
  p3q-mldsa-rollup        succinct rollup of independent ML-DSA-65 sigs; strict
                          ONLY when its proof system is PQ (classical SNARK gated)
Plus the raw mldsa-cert-set as a NON-strict availability/audit artifact.

Subject-agnostic verifiers take (subject, evidence, keyEra): one dispatch serves
the warp cross-chain digest D and the consensus finality subject
  M = keccak256("QUASAR_FINALITY_V1" || chainID || height || round || blockID ||
      stateRoot || signerSetID || keyEraID || generation || pChainHeight || policyID)
folding generation + pChainHeight + policyID so a signature binds its era, its
validator snapshot, and its tier (tier-downgrade replay fails closed).

Policy tiers (BLS_FAST / HYBRID_PQ_CHECKPOINT / STRICT_QUASAR / RECOVERY) select
which lanes are required — orthogonal to verification and to keys. PulsarKeyEra
and CoronaKeyEra are symmetric but DISTINCT registry types; P3Q/cert-set resolve a
per-validator SignerSetAuthority — no resolver can alias another's key material.
Offline signers (pulsard, coronad, P3Q prover) are interfaces only, never imported
by the verify path.

Wire unchanged: D, the Message c14n, messageDST, the ZAP magic and kind bytes are
byte-identical (forge Go<->Solidity equality holds; golden envelope SHA unchanged).
The corona lane DST is renamed pulseDST->coronaDST (no deployed corona sigs;
envelope KAT regenerated).

22 tests green: non-confusable dispatch, suite/kind fail-closed, Pulsar import
hygiene, subject-identity across lanes, policyID downgrade, key-era distinctness,
P3Q-classical-root strict gate.
2026-06-27 13:47:13 -07:00

98 lines
6.2 KiB
JSON

{
"spec": "Warp-2.0-envelope",
"version": "v1",
"entries": [
{
"name": "default-pulse-cert",
"network_id": 1,
"source_chain_id_hex": "a1a2a3a400000000000000000000000000000000000000000000000000000000",
"payload_hex": "656e76656c6f70652d746573742d7061796c6f6164",
"signers_indices": [
0,
2,
4
],
"signature_byte": 171,
"source_nebula_root_hex": "deadbeef00000000000000000000000000000000000000000000000000000000",
"source_key_era_id": 7,
"source_generation": 11,
"hash_suite_id": "Pulsar-SHA3",
"pulsar_pulse_byte": 66,
"pulsar_pulse_len": 64,
"mldsa_cert_set_byte": 195,
"mldsa_cert_set_len": 192,
"envelope_wire_hex": "4c575a5001020100000001a1a2a3a400000000000000000000000000000000000000000000000000000000deadbeef000000000000000000000000000000000000000000000000000000000000000000000007000000000000000b0000000b50756c7361722d5348413300000015656e76656c6f70652d746573742d7061796c6f61640000000115abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab0000004042424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242000000c0c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3",
"envelope_wire_sha256": "7cb65a9fbc92e278797355a66e77d37b5742d046a26600485f6a04532f74f8d9",
"envelope_id_hex": "80b58fc59c24c52eee86d36a5340e6f8036944ee9cf799f6e92913eafc063d2e"
},
{
"name": "no-pulse-no-cert",
"network_id": 1,
"source_chain_id_hex": "a1a2a3a400000000000000000000000000000000000000000000000000000000",
"payload_hex": "656e76656c6f70652d746573742d7061796c6f6164",
"signers_indices": [
0,
2,
4
],
"signature_byte": 171,
"source_nebula_root_hex": "0000000000000000000000000000000000000000000000000000000000000000",
"source_key_era_id": 0,
"source_generation": 0,
"hash_suite_id": "",
"pulsar_pulse_byte": 0,
"pulsar_pulse_len": 0,
"mldsa_cert_set_byte": 0,
"mldsa_cert_set_len": 0,
"envelope_wire_hex": "4c575a5001020100000001a1a2a3a4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015656e76656c6f70652d746573742d7061796c6f61640000000115abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab0000000000000000",
"envelope_wire_sha256": "1847b4200710ba948257144458b4d0d7efdca89d53d40d382375633c1189517e",
"envelope_id_hex": "a1ee71ec1f491805b0fb80f2889373f7af85a41c483bdee5255c4fe0348bf187"
},
{
"name": "pulse-only",
"network_id": 2,
"source_chain_id_hex": "b0b0b0b000000000000000000000000000000000000000000000000000000000",
"payload_hex": "70756c73652d6f6e6c792d7061796c6f6164",
"signers_indices": [
1,
3,
5,
7
],
"signature_byte": 119,
"source_nebula_root_hex": "deadbeef00000000000000000000000000000000000000000000000000000000",
"source_key_era_id": 99,
"source_generation": 1,
"hash_suite_id": "Pulsar-SHA3",
"pulsar_pulse_byte": 51,
"pulsar_pulse_len": 96,
"mldsa_cert_set_byte": 0,
"mldsa_cert_set_len": 0,
"envelope_wire_hex": "4c575a5001020100000002b0b0b0b000000000000000000000000000000000000000000000000000000000deadbeef00000000000000000000000000000000000000000000000000000000000000000000006300000000000000010000000b50756c7361722d534841330000001270756c73652d6f6e6c792d7061796c6f616400000001aa7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777770000006033333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333300000000",
"envelope_wire_sha256": "e5fd874029f9313d0e911e8e9a85d0edd50b8c6733e658fe52f0b7049f3727d9",
"envelope_id_hex": "71581e58e65aea2ab4a097c6225cdc04811a9bf36c93335e92ded77a8b005441"
},
{
"name": "cert-only",
"network_id": 1,
"source_chain_id_hex": "a1a2a3a400000000000000000000000000000000000000000000000000000000",
"payload_hex": "",
"signers_indices": [
0
],
"signature_byte": 17,
"source_nebula_root_hex": "0000000000000000000000000000000000000000000000000000000000000000",
"source_key_era_id": 0,
"source_generation": 0,
"hash_suite_id": "Pulsar-SHA3",
"pulsar_pulse_byte": 0,
"pulsar_pulse_len": 0,
"mldsa_cert_set_byte": 238,
"mldsa_cert_set_len": 128,
"envelope_wire_hex": "4c575a5001020100000001a1a2a3a4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b50756c7361722d534841330000000000000001011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000080eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"envelope_wire_sha256": "b066fcf33a5482853dabdfa35536ce7ae1bed1f67f1119abb3d7282407d82ff9",
"envelope_id_hex": "4a04659354d263f5734aa62eef4fd91d364bfa25c6a632d04df0d070c55ec0c3"
}
]
}