open-standards/.github/wai-conformance/verifiers/claims-jwp-signers.sh
Transaction Science ef2ae8ea8b jwp-receipts §5.1-§5.5: the vectors, published in jwp-conformance/cases/
jwp-receipts §5 said the vectors of its cases v1_single_object to
v5_missing_parent were generated outside this tree and not yet published;
vectors.json held none of them, though receipts.2 and receipts.3 rest on them.

- wai::jwp_delivery::cases writes one directory per case as §5 lays a vector
  out: real WAI envelopes (a Zstandard frame of "hello"; five Ogg Opus streams
  of one 20 ms frame each), canonical group and object receipts, result.json
  with each receipt's outcome, link hashes and the chain head; §5.3's three
  byte-equal hop copies. faults.json plants ten faults, each refused with its
  own reason; sha256.json states every file. wai_jwp_vectors gen writes the
  directory beside vectors.json, and verify requires it byte for byte and
  every declared outcome. vectors.json, which the core's lock pins, is
  unchanged.
- jwp-conformance/cases_verify.py: a second implementation from the text
  (standard library, claim-conformance's BLAKE3 and Ed25519; no wai-rs code).
  It checks the sidecar, that each case is what its section says, every case
  and fault, and leaves out each of its eleven checks in turn: the directory
  catches all eleven. Run with the independent verifiers (jwp-cases, trust).
- Regenerated byte for byte on x86_64 (Linux) and aarch64 (macOS) today.
- §5's text: the vectors are published, so a conforming verifier also
  verifies against them, as §5 already said it would once they were; §5.5's
  reason is malformed, which §3 step 1 and §3.3 give a group receipt lacking a
  member (it said missing_required_field, a claim's reason). D107.

Not core: jwp-receipts §5 is outside every core span;
check-wai-core-freeze --against origin/main passes.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-13 17:38:59 -05:00

38 lines
2.7 KiB
Shell

# step: claim_verify.py, differential.py, jwp_verify.py, chain_differential.py, chain_gap_differential.py, signer_verify.py
# order: 720
# features: key_discovery
# bins: wai_claim_vectors wai_jwp_vectors wai_signer_vectors
# pq-bins: wai_claim_vectors wai_jwp_vectors wai_signer_vectors
# independent: claim trust needs=cryptography verdicts=claim-conformance/vectors.json python3 claim-conformance/claim_verify.py claim-conformance/vectors.json
# independent: jwp trust needs=cryptography verdicts=jwp-conformance/vectors.json python3 jwp-conformance/jwp_verify.py jwp-conformance/vectors.json
# independent: jwp-cases trust python3 -I jwp-conformance/cases_verify.py jwp-conformance/cases
# independent: signer trust needs=cryptography verdicts=signer-conformance/vectors.json python3 signer-conformance/signer_verify.py signer-conformance/vectors.json
#
# The claim, JWP and key-discovery verifiers (claim_verify.py, jwp_verify.py and
# signer_verify.py) run over their corpora in the step of every independent verifier
# above; here, against wai-rs, beyond the corpora: differential.py gives seeded inputs
# the corpus does not hold to wai_claim_vectors and claim_verify.py and requires the
# same verdict; chain_differential.py signs receipt chains around jwp-receipts §3 step 3
# and §6.1 (two keys, two tracks, both payloads, replays, forks, gaps, the guard and the
# freshness bound), and chain_gap_differential.py genuine chains up to 90 groups
# delivered shuffled, withheld and walked back with rewritten links and forks; both
# require wai_jwp_vectors and jwp_verify.py to give every chain the same verdict. Two
# fixed seeds each, so a run is reproducible. Last, signer_verify.py's key-discovery
# verdicts equal wai_signer_vectors'.
set -euo pipefail
python3 signer-conformance/signer_verify.py verdicts signer-conformance/vectors.json > "$RUNNER_TEMP/signer-py.tsv"
# Each differential against both builds the first step copied (see its comment).
for build in union pq; do
bins="$RUNNER_TEMP/wai-bins/$build"
if [ "$build" = pq ]; then features=$WAI_PQ_FEATURES; else features=$WAI_FEATURES; fi
echo "::group::the differentials against the $build build (features $features)"
python3 claim-conformance/differential.py "$bins/wai_claim_vectors" --random 2000 --seed 1
for seed in 1 2; do
python3 jwp-conformance/chain_differential.py "$bins/wai_jwp_vectors" --n 3000 --seed "$seed"
python3 jwp-conformance/chain_gap_differential.py "$bins/wai_jwp_vectors" --n 400 --seed "$seed"
done
"$bins/wai_signer_vectors" verdicts signer-conformance/vectors.json > "$RUNNER_TEMP/signer-rs-$build.tsv"
diff "$RUNNER_TEMP/signer-py.tsv" "$RUNNER_TEMP/signer-rs-$build.tsv"
echo "the $build build: every differential agrees"
echo "::endgroup::"
done