mirror of
https://github.com/luxfi/warp.git
synced 2026-10-30 15:13:04 +00:00
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.
98 lines
6.2 KiB
JSON
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"
|
|
}
|
|
]
|
|
}
|