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]>
38 lines
2.7 KiB
Shell
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
|