proofbundle 3.6.0__tar.gz → 3.6.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- proofbundle-3.6.1/MANIFEST.in +39 -0
- {proofbundle-3.6.0/src/proofbundle.egg-info → proofbundle-3.6.1}/PKG-INFO +9 -1
- proofbundle-3.6.1/conformance/README.md +73 -0
- proofbundle-3.6.1/conformance/bundle/coherent-rewrap-fails-expected-root/bundle.json +18 -0
- proofbundle-3.6.1/conformance/bundle/coherent-rewrap-fails-expected-root/case.json +19 -0
- proofbundle-3.6.1/conformance/bundle/coherent-rewrap-verifies-no-policy/bundle.json +18 -0
- proofbundle-3.6.1/conformance/bundle/coherent-rewrap-verifies-no-policy/case.json +16 -0
- proofbundle-3.6.1/conformance/bundle/corrupted-signature/bundle.json +23 -0
- proofbundle-3.6.1/conformance/bundle/corrupted-signature/case.json +9 -0
- proofbundle-3.6.1/conformance/bundle/duplicate-json-key/bundle.json +24 -0
- proofbundle-3.6.1/conformance/bundle/duplicate-json-key/case.json +9 -0
- proofbundle-3.6.1/conformance/bundle/forged-anchor-own-frozen/bundle.json +30 -0
- proofbundle-3.6.1/conformance/bundle/forged-anchor-own-frozen/case.json +11 -0
- proofbundle-3.6.1/conformance/bundle/n1-eval-sdjwt-graft-non-eval/bundle.json +20 -0
- proofbundle-3.6.1/conformance/bundle/n1-eval-sdjwt-graft-non-eval/case.json +15 -0
- proofbundle-3.6.1/conformance/bundle/sd-jwt-forged-issuer-identity/bundle.json +20 -0
- proofbundle-3.6.1/conformance/bundle/sd-jwt-forged-issuer-identity/case.json +9 -0
- proofbundle-3.6.1/conformance/bundle/sd-jwt-signed-but-unbound/bundle.json +20 -0
- proofbundle-3.6.1/conformance/bundle/sd-jwt-signed-but-unbound/case.json +9 -0
- proofbundle-3.6.1/conformance/bundle/sd-jwt-unsigned-unauthenticated/bundle.json +19 -0
- proofbundle-3.6.1/conformance/bundle/sd-jwt-unsigned-unauthenticated/case.json +9 -0
- proofbundle-3.6.1/conformance/bundle/tampered-payload/bundle.json +23 -0
- proofbundle-3.6.1/conformance/bundle/tampered-payload/case.json +9 -0
- proofbundle-3.6.1/conformance/bundle/tree-size-expectation-mismatch/bundle.json +16 -0
- proofbundle-3.6.1/conformance/bundle/tree-size-expectation-mismatch/case.json +18 -0
- proofbundle-3.6.1/conformance/bundle/valid-minimal/bundle.json +23 -0
- proofbundle-3.6.1/conformance/bundle/valid-minimal/case.json +9 -0
- proofbundle-3.6.1/conformance/common_vocabulary.py +155 -0
- proofbundle-3.6.1/conformance/cross_format.py +152 -0
- proofbundle-3.6.1/conformance/decision/crossimpl/canonicalization-root-binding/MANIFEST.json +10 -0
- proofbundle-3.6.1/conformance/decision/crossimpl/canonicalization-root-binding/case.json +24 -0
- proofbundle-3.6.1/conformance/decision/crossimpl/canonicalization-root-binding/decision_receipt.jcs +1 -0
- proofbundle-3.6.1/conformance/decision/crossimpl/canonicalization-root-binding/decision_receipt.jcs.ots +0 -0
- proofbundle-3.6.1/conformance/decision/crossimpl/canonicalization-root-binding/decision_receipt.json +44 -0
- proofbundle-3.6.1/conformance/decision/crossimpl/canonicalization-root-binding/evidence_eval_result.jcs +1 -0
- proofbundle-3.6.1/conformance/decision/crossimpl/canonicalization-root-binding/evidence_eval_result.json +30 -0
- proofbundle-3.6.1/conformance/decision/crossimpl/confirmed-anchor-lifecycle/MANIFEST.json +8 -0
- proofbundle-3.6.1/conformance/decision/crossimpl/confirmed-anchor-lifecycle/case.json +42 -0
- proofbundle-3.6.1/conformance/decision/crossimpl/confirmed-anchor-lifecycle/decision_receipt.jcs +1 -0
- proofbundle-3.6.1/conformance/decision/crossimpl/confirmed-anchor-lifecycle/decision_receipt.jcs.ots +0 -0
- proofbundle-3.6.1/conformance/decision/crossimpl/confirmed-anchor-lifecycle/decision_receipt.json +44 -0
- proofbundle-3.6.1/conformance/decision/crossimpl/confirmed-anchor-lifecycle/evidence_eval_result.jcs +1 -0
- proofbundle-3.6.1/conformance/decision/crossimpl/confirmed-anchor-lifecycle/evidence_eval_result.json +30 -0
- proofbundle-3.6.1/conformance/manifest.json +62 -0
- proofbundle-3.6.1/conformance/relation/declared-supersedes-verified/case.json +21 -0
- proofbundle-3.6.1/conformance/relation/declared-supersedes-verified/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/declared-supersedes-verified/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/declared-supersedes-verified/related_b.json +9 -0
- proofbundle-3.6.1/conformance/relation/declared-unresolved/case.json +17 -0
- proofbundle-3.6.1/conformance/relation/declared-unresolved/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/declared-unresolved/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/decoy-accept-path/case.json +25 -0
- proofbundle-3.6.1/conformance/relation/decoy-accept-path/policy.json +11 -0
- proofbundle-3.6.1/conformance/relation/decoy-accept-path/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/decoy-accept-path/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/decoy-accept-path/related_rx.json +9 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-correct-pass/case.json +26 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-correct-pass/policy.json +11 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-correct-pass/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-correct-pass/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-correct-pass/related_r0.json +9 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-correct-pass/related_rx.json +9 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-no-pin-old-behavior/case.json +26 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-no-pin-old-behavior/policy.json +9 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-no-pin-old-behavior/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-no-pin-old-behavior/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-no-pin-old-behavior/related_r0.json +9 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-no-pin-old-behavior/related_rx.json +9 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-target-mismatch/case.json +28 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-target-mismatch/policy.json +11 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-target-mismatch/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-target-mismatch/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-target-mismatch/related_r0.json +9 -0
- proofbundle-3.6.1/conformance/relation/decoy-parent-target-mismatch/related_rx.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/case.json +53 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_001.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_002.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_003.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_004.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_005.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_006.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_007.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_008.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_009.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_010.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_011.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_012.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_013.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_014.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_015.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_016.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_017.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_018.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_019.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_020.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_021.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_022.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_023.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_024.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_025.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_026.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_027.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_028.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_029.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_030.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_031.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_032.json +9 -0
- proofbundle-3.6.1/conformance/relation/depth-exceeded/related_033.json +9 -0
- proofbundle-3.6.1/conformance/relation/digest-mismatch/case.json +23 -0
- proofbundle-3.6.1/conformance/relation/digest-mismatch/policy.json +9 -0
- proofbundle-3.6.1/conformance/relation/digest-mismatch/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/digest-mismatch/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/digest-mismatch/related_b.json +9 -0
- proofbundle-3.6.1/conformance/relation/generate_vectors.py +669 -0
- proofbundle-3.6.1/conformance/relation/malformed-digest/case.json +18 -0
- proofbundle-3.6.1/conformance/relation/malformed-digest/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/malformed-digest/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/outcome-declared-supersedes-verified/case.json +21 -0
- proofbundle-3.6.1/conformance/relation/outcome-declared-supersedes-verified/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/outcome-declared-supersedes-verified/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/outcome-declared-supersedes-verified/related_b.json +9 -0
- proofbundle-3.6.1/conformance/relation/outcome-decoy-parent-target-mismatch/case.json +28 -0
- proofbundle-3.6.1/conformance/relation/outcome-decoy-parent-target-mismatch/policy.json +11 -0
- proofbundle-3.6.1/conformance/relation/outcome-decoy-parent-target-mismatch/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/outcome-decoy-parent-target-mismatch/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/outcome-decoy-parent-target-mismatch/related_r0.json +9 -0
- proofbundle-3.6.1/conformance/relation/outcome-decoy-parent-target-mismatch/related_rx.json +9 -0
- proofbundle-3.6.1/conformance/relation/outcome-digest-mismatch/case.json +23 -0
- proofbundle-3.6.1/conformance/relation/outcome-digest-mismatch/policy.json +9 -0
- proofbundle-3.6.1/conformance/relation/outcome-digest-mismatch/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/outcome-digest-mismatch/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/outcome-digest-mismatch/related_b.json +9 -0
- proofbundle-3.6.1/conformance/relation/outcome-relation-signer-unauthorized/case.json +25 -0
- proofbundle-3.6.1/conformance/relation/outcome-relation-signer-unauthorized/policy.json +14 -0
- proofbundle-3.6.1/conformance/relation/outcome-relation-signer-unauthorized/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/outcome-relation-signer-unauthorized/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/outcome-relation-signer-unauthorized/related_b.json +9 -0
- proofbundle-3.6.1/conformance/relation/outcome-renews/case.json +21 -0
- proofbundle-3.6.1/conformance/relation/outcome-renews/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/outcome-renews/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/outcome-renews/related_b.json +9 -0
- proofbundle-3.6.1/conformance/relation/outcome-silent-landing/case.json +17 -0
- proofbundle-3.6.1/conformance/relation/outcome-silent-landing/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/outcome-silent-landing/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/outcome-valid-baseline/case.json +18 -0
- proofbundle-3.6.1/conformance/relation/outcome-valid-baseline/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/outcome-valid-baseline/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-amends/case.json +20 -0
- proofbundle-3.6.1/conformance/relation/relation-amends/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/relation-amends/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-amends/related_b.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-corrects/case.json +20 -0
- proofbundle-3.6.1/conformance/relation/relation-corrects/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/relation-corrects/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-corrects/related_b.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-derivedfrom/case.json +20 -0
- proofbundle-3.6.1/conformance/relation/relation-derivedfrom/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/relation-derivedfrom/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-derivedfrom/related_b.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-retracts/case.json +20 -0
- proofbundle-3.6.1/conformance/relation/relation-retracts/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/relation-retracts/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-retracts/related_b.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-revises/case.json +20 -0
- proofbundle-3.6.1/conformance/relation/relation-revises/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/relation-revises/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-revises/related_b.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-unauthorized/case.json +25 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-unauthorized/policy.json +14 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-unauthorized/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-unauthorized/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-unauthorized/related_b.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-verified/case.json +24 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-verified/policy.json +14 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-verified/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-verified/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-verified/related_b.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-same-key-explicit/case.json +24 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-same-key-explicit/policy.json +11 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-same-key-explicit/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-same-key-explicit/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-same-key-explicit/related_b.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-verified-under-not-claim/case.json +25 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-verified-under-not-claim/policy.json +11 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-verified-under-not-claim/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-verified-under-not-claim/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/relation-signer-verified-under-not-claim/related_b.json +9 -0
- proofbundle-3.6.1/conformance/relation/renews-vector/case.json +21 -0
- proofbundle-3.6.1/conformance/relation/renews-vector/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/renews-vector/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/renews-vector/related_b.json +9 -0
- proofbundle-3.6.1/conformance/relation/retracts-then-use/case.json +21 -0
- proofbundle-3.6.1/conformance/relation/retracts-then-use/policy.json +7 -0
- proofbundle-3.6.1/conformance/relation/retracts-then-use/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/retracts-then-use/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/retracts-then-use/related_r.json +9 -0
- proofbundle-3.6.1/conformance/relation/silent-landing/case.json +17 -0
- proofbundle-3.6.1/conformance/relation/silent-landing/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/silent-landing/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/statement-malformed/case.json +17 -0
- proofbundle-3.6.1/conformance/relation/statement-malformed/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/statement-malformed/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/statement-retracts-declared-unresolved/case.json +17 -0
- proofbundle-3.6.1/conformance/relation/statement-retracts-declared-unresolved/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/statement-retracts-declared-unresolved/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/statement-retracts-unauthorized/case.json +25 -0
- proofbundle-3.6.1/conformance/relation/statement-retracts-unauthorized/policy.json +14 -0
- proofbundle-3.6.1/conformance/relation/statement-retracts-unauthorized/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/statement-retracts-unauthorized/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/statement-retracts-unauthorized/related_t.json +9 -0
- proofbundle-3.6.1/conformance/relation/statement-retracts-verified-blocked/case.json +25 -0
- proofbundle-3.6.1/conformance/relation/statement-retracts-verified-blocked/policy.json +15 -0
- proofbundle-3.6.1/conformance/relation/statement-retracts-verified-blocked/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/statement-retracts-verified-blocked/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/statement-retracts-verified-blocked/related_t.json +9 -0
- proofbundle-3.6.1/conformance/relation/statement-retracts-verified-visible/case.json +23 -0
- proofbundle-3.6.1/conformance/relation/statement-retracts-verified-visible/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/statement-retracts-verified-visible/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/statement-retracts-verified-visible/related_t.json +9 -0
- proofbundle-3.6.1/conformance/relation/statement-supersedes-verified/case.json +23 -0
- proofbundle-3.6.1/conformance/relation/statement-supersedes-verified/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/statement-supersedes-verified/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/statement-supersedes-verified/related_t.json +9 -0
- proofbundle-3.6.1/conformance/relation/t1-canonical-invalid-signature/case.json +16 -0
- proofbundle-3.6.1/conformance/relation/t1-canonical-invalid-signature/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/t1-canonical-invalid-signature/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/target-subject-ambiguous/case.json +24 -0
- proofbundle-3.6.1/conformance/relation/target-subject-ambiguous/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/target-subject-ambiguous/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/target-subject-ambiguous/related_r0.json +9 -0
- proofbundle-3.6.1/conformance/relation/target-subject-correct-pass/case.json +23 -0
- proofbundle-3.6.1/conformance/relation/target-subject-correct-pass/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/target-subject-correct-pass/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/target-subject-correct-pass/related_r0.json +9 -0
- proofbundle-3.6.1/conformance/relation/target-subject-mismatch/case.json +24 -0
- proofbundle-3.6.1/conformance/relation/target-subject-mismatch/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/target-subject-mismatch/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/target-subject-mismatch/related_r0.json +9 -0
- proofbundle-3.6.1/conformance/relation/target-subject-missing/case.json +24 -0
- proofbundle-3.6.1/conformance/relation/target-subject-missing/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/target-subject-missing/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/target-subject-missing/related_r0.json +9 -0
- proofbundle-3.6.1/conformance/relation/unauthorized-signer/case.json +21 -0
- proofbundle-3.6.1/conformance/relation/unauthorized-signer/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/unauthorized-signer/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/unauthorized-signer/related_b.json +9 -0
- proofbundle-3.6.1/conformance/relation/valid-baseline/case.json +18 -0
- proofbundle-3.6.1/conformance/relation/valid-baseline/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/valid-baseline/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/wrong-payloadtype-target/case.json +21 -0
- proofbundle-3.6.1/conformance/relation/wrong-payloadtype-target/pub.b64 +1 -0
- proofbundle-3.6.1/conformance/relation/wrong-payloadtype-target/receipt.json +9 -0
- proofbundle-3.6.1/conformance/relation/wrong-payloadtype-target/related_t.json +9 -0
- proofbundle-3.6.1/conformance/run_conformance.py +353 -0
- proofbundle-3.6.1/conformance/vector_schema.json +95 -0
- proofbundle-3.6.1/docs/adr/renewal_policy.example.json +8 -0
- proofbundle-3.6.1/docs/readiness_pack/AUDITOR_OPEN_POINTS.md +83 -0
- proofbundle-3.6.1/docs/readiness_pack/MANIFEST.sha256 +11 -0
- proofbundle-3.6.1/docs/readiness_pack/OPEN_QUESTIONS.md +29 -0
- proofbundle-3.6.1/docs/readiness_pack/PROGRESS.md +37 -0
- proofbundle-3.6.1/docs/readiness_pack/README.md +48 -0
- proofbundle-3.6.1/docs/readiness_pack/REPRODUCTION_RUNBOOK.md +92 -0
- proofbundle-3.6.1/docs/readiness_pack/calendar_independence.md +64 -0
- proofbundle-3.6.1/docs/readiness_pack/differential_matrix.md +28 -0
- proofbundle-3.6.1/docs/readiness_pack/index.json +110 -0
- proofbundle-3.6.1/docs/readiness_pack/proofbundle/readiness_pack.bundle.json +16 -0
- proofbundle-3.6.1/docs/readiness_pack/proofbundle/readiness_pack.pub.b64 +1 -0
- proofbundle-3.6.1/docs/readiness_pack/rust_parity_scope.md +50 -0
- proofbundle-3.6.1/docs/readiness_pack/tamper_resistance.md +49 -0
- proofbundle-3.6.1/docs/readiness_pack/threat_model_delta_360.md +49 -0
- proofbundle-3.6.1/examples/README.md +22 -0
- proofbundle-3.6.1/examples/anchors/chia-datalayer-invalid-root.json +23 -0
- proofbundle-3.6.1/examples/anchors/chia-datalayer-valid.json +24 -0
- proofbundle-3.6.1/examples/checkpoint_example.py +28 -0
- proofbundle-3.6.1/examples/decision_receipt_allow.json +107 -0
- proofbundle-3.6.1/examples/decision_receipt_deny.json +123 -0
- proofbundle-3.6.1/examples/decision_receipt_escalate.json +105 -0
- proofbundle-3.6.1/examples/decision_receipt_with_eval_ref.intoto.json +104 -0
- proofbundle-3.6.1/examples/eee_receipt.py +28 -0
- proofbundle-3.6.1/examples/example.tlog-proof +12 -0
- proofbundle-3.6.1/examples/example_bundle.json +23 -0
- proofbundle-3.6.1/examples/experimental_enclave.py +64 -0
- proofbundle-3.6.1/examples/inspect_hook_example.py +35 -0
- proofbundle-3.6.1/examples/inspect_receipt.py +32 -0
- proofbundle-3.6.1/examples/intoto/private-model-commitment.statement.json +55 -0
- proofbundle-3.6.1/examples/intoto/public-model.statement.json +50 -0
- proofbundle-3.6.1/examples/intoto/release-gate.statement.json +50 -0
- proofbundle-3.6.1/examples/intoto/svr.statement.json +24 -0
- proofbundle-3.6.1/examples/intoto_dsse_export.py +26 -0
- proofbundle-3.6.1/examples/lm_eval_receipt.py +31 -0
- proofbundle-3.6.1/examples/make_example.py +137 -0
- proofbundle-3.6.1/examples/persample_audit.py +89 -0
- proofbundle-3.6.1/examples/pytest_plugin_example.py +30 -0
- proofbundle-3.6.1/examples/rekor_interop.py +61 -0
- proofbundle-3.6.1/examples/tlog_proof_example.py +70 -0
- proofbundle-3.6.1/examples/trust_policy_decision_strict.json +18 -0
- proofbundle-3.6.1/examples/trust_policy_strict.json +18 -0
- proofbundle-3.6.1/formal/README.md +65 -0
- proofbundle-3.6.1/formal/model.py +284 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/pyproject.toml +7 -2
- proofbundle-3.6.1/schemas/action-outcome-v0.1.schema.json +110 -0
- proofbundle-3.6.1/schemas/decision-receipt-v0.1.schema.json +238 -0
- proofbundle-3.6.1/schemas/eval_claim_v0_1.schema.json +138 -0
- proofbundle-3.6.1/schemas/in_toto_statement_v1.schema.json +31 -0
- proofbundle-3.6.1/schemas/proofbundle_v0_1.schema.json +84 -0
- proofbundle-3.6.1/schemas/run-ledger-v0.1.schema.json +43 -0
- proofbundle-3.6.1/schemas/trust-pack-v0.1.schema.json +73 -0
- proofbundle-3.6.1/schemas/trust_policy_v0_1.schema.json +350 -0
- proofbundle-3.6.1/schemas/verification-summary-v0.1.schema.json +43 -0
- proofbundle-3.6.1/scripts/_build_anchor_fixture.py +43 -0
- proofbundle-3.6.1/scripts/audit_candidate_matrix.py +605 -0
- proofbundle-3.6.1/scripts/branch_base_check.py +89 -0
- proofbundle-3.6.1/scripts/build_reproducible.py +147 -0
- proofbundle-3.6.1/scripts/check_version_and_changelog.py +121 -0
- proofbundle-3.6.1/scripts/claims_hygiene_check.py +422 -0
- proofbundle-3.6.1/scripts/demo.sh +28 -0
- proofbundle-3.6.1/scripts/demo_tamper.sh +17 -0
- proofbundle-3.6.1/scripts/doc_link_check.py +74 -0
- proofbundle-3.6.1/scripts/findings_register.py +228 -0
- proofbundle-3.6.1/scripts/fork_pr_secret_isolation.py +404 -0
- proofbundle-3.6.1/scripts/fuzz_soak.py +287 -0
- proofbundle-3.6.1/scripts/gen_findings_register.py +147 -0
- proofbundle-3.6.1/scripts/gen_synthetic_ots_fixture.py +97 -0
- proofbundle-3.6.1/scripts/mutation_check.py +457 -0
- proofbundle-3.6.1/scripts/pre_tag_audit_gate.py +177 -0
- proofbundle-3.6.1/scripts/readiness_pack_gate.py +119 -0
- proofbundle-3.6.1/scripts/readiness_pack_manifest.py +132 -0
- proofbundle-3.6.1/scripts/render_demo.py +91 -0
- proofbundle-3.6.1/scripts/rust_parity_gate.py +298 -0
- proofbundle-3.6.1/scripts/rust_parity_registry.json +313 -0
- proofbundle-3.6.1/scripts/test_manifest_gate.py +181 -0
- proofbundle-3.6.1/scripts/type_confusion_gate.py +262 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/__init__.py +1 -1
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/_strict_json.py +56 -16
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/assurance.py +1 -1
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/budget.py +9 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/bundle.py +107 -15
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/checkpoint.py +18 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/cli.py +88 -31
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/decision.py +131 -49
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/evalcard.py +9 -1
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/evalclaim.py +17 -7
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/hashalg.py +6 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/hf_evals.py +6 -1
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/intoto.py +31 -13
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/kbjwt.py +9 -3
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/merkle.py +29 -1
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/outcome.py +97 -23
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/persample.py +11 -3
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/policy.py +7 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/prereg.py +31 -5
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/public_transparency.py +5 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/relation.py +73 -17
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/relation_statement.py +39 -21
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/renewal.py +13 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/run_ledger.py +37 -22
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/sdjwt.py +9 -3
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/sdjwt_vc.py +6 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/signature.py +6 -1
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/statuslist.py +9 -3
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/tlogproof.py +21 -2
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/trust_pack.py +47 -40
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/verification_summary.py +34 -22
- {proofbundle-3.6.0 → proofbundle-3.6.1/src/proofbundle.egg-info}/PKG-INFO +9 -1
- proofbundle-3.6.1/src/proofbundle.egg-info/SOURCES.txt +598 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle.egg-info/requires.txt +9 -0
- proofbundle-3.6.1/tests/conftest.py +96 -0
- proofbundle-3.6.1/tests/fixtures/anchors/chia_datalayer_proof.json +23 -0
- proofbundle-3.6.1/tests/fixtures/anchors/freetsa_receipt_anchor.json +14 -0
- proofbundle-3.6.1/tests/fixtures/checkpoint/PROVENANCE.json +39 -0
- proofbundle-3.6.1/tests/fixtures/checkpoint/gosumdb_known_keys.go +9 -0
- proofbundle-3.6.1/tests/fixtures/checkpoint/rekor_v2_checkpoint.txt +5 -0
- proofbundle-3.6.1/tests/fixtures/checkpoint/sumdb_latest.txt +5 -0
- proofbundle-3.6.1/tests/fixtures/checkpoint/trusted_root.json +126 -0
- proofbundle-3.6.1/tests/fixtures/ed25519_speccheck_cases.LICENSE +201 -0
- proofbundle-3.6.1/tests/fixtures/ed25519_speccheck_cases.README.md +31 -0
- proofbundle-3.6.1/tests/fixtures/ed25519_speccheck_cases.json +1 -0
- proofbundle-3.6.1/tests/fixtures/eee_arc_easy.json +44 -0
- proofbundle-3.6.1/tests/fixtures/inspect_logs/safety_refusal_demo.eval +0 -0
- proofbundle-3.6.1/tests/fixtures/lm_eval_arc_easy_real.json +114 -0
- proofbundle-3.6.1/tests/fixtures/markovian_anchor_confirmed.json +12 -0
- proofbundle-3.6.1/tests/fixtures/mldsa_acvp/PROVENANCE.json +21 -0
- proofbundle-3.6.1/tests/fixtures/mldsa_acvp/mldsa_sigver_slice.json +49 -0
- proofbundle-3.6.1/tests/fixtures/ots/PROVENANCE.json +123 -0
- proofbundle-3.6.1/tests/fixtures/ots/block358391.json +1 -0
- proofbundle-3.6.1/tests/fixtures/ots/hello-world.txt +1 -0
- proofbundle-3.6.1/tests/fixtures/ots/hello-world.txt.ots +0 -0
- proofbundle-3.6.1/tests/fixtures/ots/incomplete.txt +1 -0
- proofbundle-3.6.1/tests/fixtures/ots/incomplete.txt.ots +0 -0
- proofbundle-3.6.1/tests/fixtures/ots/known-and-unknown-notary.txt +2 -0
- proofbundle-3.6.1/tests/fixtures/ots/known-and-unknown-notary.txt.ots +0 -0
- proofbundle-3.6.1/tests/fixtures/ots/merkle2.txt +2 -0
- proofbundle-3.6.1/tests/fixtures/ots/merkle2.txt.ots +0 -0
- proofbundle-3.6.1/tests/fixtures/ots/synthetic-upgraded-sha256.block.json +6 -0
- proofbundle-3.6.1/tests/fixtures/ots/synthetic-upgraded-sha256.txt +1 -0
- proofbundle-3.6.1/tests/fixtures/ots/synthetic-upgraded-sha256.txt.ots +0 -0
- proofbundle-3.6.1/tests/fixtures/ots/two-calendars.txt +1 -0
- proofbundle-3.6.1/tests/fixtures/ots/two-calendars.txt.ots +0 -0
- proofbundle-3.6.1/tests/fixtures/promptfoo_results_v3.json +58 -0
- proofbundle-3.6.1/tests/fixtures/rekor_inclusion_25579.json +34 -0
- proofbundle-3.6.1/tests/fixtures/rfc6962_vectors.json +119 -0
- proofbundle-3.6.1/tests/fixtures/sdjwt_disclosure_vector.json +8 -0
- proofbundle-3.6.1/tests/fixtures/sdjwt_reference_eddsa.json +11 -0
- proofbundle-3.6.1/tests/fixtures/sdjwtvc/PROVENANCE.json +24 -0
- proofbundle-3.6.1/tests/fixtures/sdjwtvc/sdjwtvc_examples.txt +5 -0
- proofbundle-3.6.1/tests/fixtures/sdjwtvc/sdjwtvc_issuer_pubkey.json +9 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_audit_candidate_360.py +50 -40
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_budget.py +11 -5
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_conformance.py +6 -0
- proofbundle-3.6.1/tests/test_conformance_retention_361.py +56 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_content_root_property.py +3 -2
- proofbundle-3.6.1/tests/test_cross_format_singleton_361.py +72 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_dup_key_reject.py +29 -12
- proofbundle-3.6.1/tests/test_findings_register_rt10.py +233 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_fork_pr_secret_isolation.py +5 -1
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_intoto_dsse.py +4 -3
- proofbundle-3.6.1/tests/test_jcs_mandatory_361.py +90 -0
- proofbundle-3.6.1/tests/test_legacy_assurance_deprecation_361.py +107 -0
- proofbundle-3.6.1/tests/test_manifest_lock.json +10 -0
- proofbundle-3.6.1/tests/test_never_raise_361.py +75 -0
- proofbundle-3.6.1/tests/test_never_raise_recursion_361.py +154 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_relation_property.py +6 -2
- proofbundle-3.6.1/tests/test_relation_same_key_361.py +84 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_relation_signer_target_340.py +6 -2
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_relation_statement.py +6 -2
- proofbundle-3.6.1/tests/test_relation_subject_pin_361.py +266 -0
- proofbundle-3.6.1/tests/test_reproducible_build_361.py +78 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_roadmap_frontload_foundations.py +45 -0
- proofbundle-3.6.1/tests/test_sdist_packaging_361.py +76 -0
- proofbundle-3.6.1/tests/test_sibling_never_raise_361.py +602 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_tlogproof.py +20 -2
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_trust_pack.py +7 -3
- proofbundle-3.6.0/src/proofbundle.egg-info/SOURCES.txt +0 -213
- {proofbundle-3.6.0 → proofbundle-3.6.1}/LICENSE +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/README.md +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/setup.cfg +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/_inspect_registry.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/_integration.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/adapters/__init__.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/adapters/_provenance.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/adapters/eee.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/adapters/inspect_ai.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/adapters/lm_eval.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/adapters/promptfoo.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/adapters/samples.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/anchors.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/anchors_chia.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/anchors_chia_add.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/anchors_markovian.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/anchors_ots.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/anchors_rfc3161.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/automation_verdict.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/beacon.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/canonical.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/demo.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/dsse.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/eee_eval_schema.json +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/emit.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/errors.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/evidence_pack.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/experimental/__init__.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/experimental/enclave.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/inspect_hook.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/policies/decision-receipt-template-v1.json +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/policies/research-preview-v1.json +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/policies/strict-eval-authenticated-root-template-v1.json +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/policies/strict-eval-template-v1.json +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/policies/strict-prereg-template-v1.json +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/policy_profiles.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/pqsig.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/py.typed +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/pytest_plugin.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/sdjwt_issue.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/subject_binding.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle.egg-info/dependency_links.txt +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle.egg-info/entry_points.txt +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle.egg-info/top_level.txt +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_adapters.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_adversarial.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchor_hardening_321.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchor_longevity_property.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchor_target_trustedtime.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchors_chia.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchors_chia_add.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchors_chia_claims.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchors_generic.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchors_markovian.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchors_ots.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchors_rfc3161.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_assurance.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_automation_verdict.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_beacon.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_branch_base_check.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_bundle.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_bundle_robustness.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_canonical.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_checkpoint.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_checkpoint_external_vectors.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_checkpoint_quorum_property.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_claims_hygiene.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_cli.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_cli_eval.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_cli_require_anchor.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_cosignature.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_cosignature_mldsa.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_anchors.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_cli.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_evidence.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_fuzz.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_hardening.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_policy.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_schema.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_validator_api.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_verify.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_demo.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_docs_truth.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_dsse_adversarial.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_ed25519_semantics.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_eee.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_emit.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_enclave_assurance.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_eval_claim_schema.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_eval_evidence_class.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_evalcard.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_evalclaim.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_evidence_pack.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_examples.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_experimental_enclave.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_fuzz_parsers.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_fuzz_soak_regression.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_hashalg.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_hf_entry_verify_eee_digest.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_hf_evals.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_inspect_hook.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_intoto.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_intoto_claims_hygiene.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_intoto_content_root_migration.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_intoto_eval_result.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_intoto_examples.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_intoto_spec_diff.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_intoto_svr.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_kbjwt.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_lens_review_fixes_3_1_3.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_merkle.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_merkle_consistency_property.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_merkle_property.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_mldsa_acvp_vectors.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_official_vectors.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_ok_semantics.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_ots_calendar_hardening.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_ots_external_vectors.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_outcome_receiver_corroboration.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_outcome_verify.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_oversized_int_guard.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_persample.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_pinned_key_validation.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_policy_explain_lint.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_policy_lifecycle_purpose.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_policy_profiles.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_policy_templates.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_pqsig.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_predicate_type_enforcement.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_prereg.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_promptfoo.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_provenance.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_public_transparency.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_pytest_plugin.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_rekor_interop.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_relation_profile.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_relation_statement_rust_parity.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_release_integrity_gate.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_renewal.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_renewal_external_token_glue.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_renewal_policy.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_renewal_signed.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_rfc6962_external_vectors.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_root_authenticity.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_run_ledger.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_rust_parity_gate.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_schema.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_schema_parity.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_sdjwt_adversarial.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_sdjwt_duplicate_cnf.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_sdjwt_issue.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_sdjwt_reference.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_sdjwt_resource_budget.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_sdjwt_vc.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_sdjwt_verify_binding.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_sdjwtvc_external_vectors.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_signature.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_statuslist.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_subject_binding.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_tree_context_authenticity.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_trust_pack_crypto_agility.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_trust_pack_outcome_receivers_role.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_trust_pack_payloadtype_negatives.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_trust_policy.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_verification_summary.py +0 -0
- {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_verify_matrix.py +0 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# PB-2026-0717-02: the published sdist shipped tests/ WITHOUT their runtime assets (fixtures, schemas,
|
|
2
|
+
# examples, conformance corpus, formal-model results, the scripts the tests invoke) → the full sdist
|
|
3
|
+
# pytest aborted with collection errors. This allowlist grafts exactly the assets the shipped tests need
|
|
4
|
+
# to COLLECT AND RUN.
|
|
5
|
+
#
|
|
6
|
+
# Self-testable, honestly (PKG-2026-0718-01 / RE-GATE): `pip install <sdist> && pytest` runs the
|
|
7
|
+
# package-level suite green. A documented subset of tests assert facts about the REPO/CI/Rust/docs LAYOUT
|
|
8
|
+
# (`.github/workflows` contents, the Rust verifier source under `tools/`, `SPEC.md`/`CITATION.cff`, audit
|
|
9
|
+
# records) — material this allowlist DELIBERATELY prunes (not a Python-package artifact). Those repo-context
|
|
10
|
+
# tests SKIP outside a git checkout (tests/conftest.py::_REPO_CONTEXT_TESTS) rather than fail, so a
|
|
11
|
+
# from-sdist run is clean — the honest form of "self-testable" (package tests run; repo-layout tests declare
|
|
12
|
+
# themselves N/A).
|
|
13
|
+
#
|
|
14
|
+
# Per-directory allowlist (Befund C: not `package-data` — that targets the wheel/import package; the
|
|
15
|
+
# sdist is the right vehicle for top-level tests/ + their assets). Large / non-Python-sdist material is
|
|
16
|
+
# pruned: `tools/` is the Rust verifier + its 138M build tree (Rust runs from a git checkout with a
|
|
17
|
+
# toolchain, never from the Python sdist — a category error to ship it), and build/CI-meta is excluded.
|
|
18
|
+
# The shipped-example policy tests/test_renewal_policy.py loads is included by exact path (PKG-2026-0718-02)
|
|
19
|
+
# — NOT `graft docs/adr`, which would also ship the ADR markdowns whose internal links reference pruned
|
|
20
|
+
# repo files (breaking test_docs_truth from the sdist).
|
|
21
|
+
graft tests
|
|
22
|
+
graft schemas
|
|
23
|
+
graft examples
|
|
24
|
+
graft conformance
|
|
25
|
+
graft formal
|
|
26
|
+
graft docs/readiness_pack
|
|
27
|
+
include docs/adr/renewal_policy.example.json
|
|
28
|
+
graft scripts
|
|
29
|
+
|
|
30
|
+
# Never ship: the Rust verifier + build artifacts, repo/CI meta, caches, VCS, big review packs.
|
|
31
|
+
prune tools
|
|
32
|
+
prune audit_artifacts
|
|
33
|
+
prune .github
|
|
34
|
+
prune target
|
|
35
|
+
global-exclude __pycache__
|
|
36
|
+
global-exclude *.py[cod]
|
|
37
|
+
global-exclude *.so
|
|
38
|
+
global-exclude *.rs
|
|
39
|
+
global-exclude *.orig
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: proofbundle
|
|
3
|
-
Version: 3.6.
|
|
3
|
+
Version: 3.6.1
|
|
4
4
|
Summary: Emit and verify portable cryptographic evidence bundles, offline: Ed25519 + RFC 6962 Merkle + optional SD-JWT.
|
|
5
5
|
Author: Konrad Gruszka
|
|
6
6
|
License: MIT
|
|
@@ -24,6 +24,7 @@ Requires-Python: >=3.10
|
|
|
24
24
|
Description-Content-Type: text/markdown
|
|
25
25
|
License-File: LICENSE
|
|
26
26
|
Requires-Dist: cryptography>=42
|
|
27
|
+
Requires-Dist: rfc8785>=0.1.4
|
|
27
28
|
Provides-Extra: sdjwt
|
|
28
29
|
Provides-Extra: eval
|
|
29
30
|
Requires-Dist: rfc8785>=0.1.4; extra == "eval"
|
|
@@ -40,6 +41,13 @@ Provides-Extra: formal
|
|
|
40
41
|
Requires-Dist: z3-solver>=4.12; extra == "formal"
|
|
41
42
|
Provides-Extra: pytest
|
|
42
43
|
Requires-Dist: pytest>=7; extra == "pytest"
|
|
44
|
+
Provides-Extra: test
|
|
45
|
+
Requires-Dist: pytest>=7; extra == "test"
|
|
46
|
+
Requires-Dist: hypothesis>=6; extra == "test"
|
|
47
|
+
Requires-Dist: PyYAML>=6; extra == "test"
|
|
48
|
+
Requires-Dist: jsonschema>=4; extra == "test"
|
|
49
|
+
Requires-Dist: sd-jwt>=0.10; extra == "test"
|
|
50
|
+
Requires-Dist: rfc8785>=0.1.4; extra == "test"
|
|
43
51
|
Provides-Extra: inspect
|
|
44
52
|
Requires-Dist: inspect_ai<0.4,>=0.3.112; extra == "inspect"
|
|
45
53
|
Provides-Extra: dev
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# proofbundle conformance corpus
|
|
2
|
+
|
|
3
|
+
Versioned, digest-pinned test vectors that a proofbundle verifier (this one, or an
|
|
4
|
+
independent implementation) must agree on. Every case is verified **offline** by
|
|
5
|
+
`run_conformance.py`: no calendar contact, no network — the specific Bitcoin block
|
|
6
|
+
**merkle root** a case needs is frozen inside its `case.json`, independently sourced and
|
|
7
|
+
byte-reproducible.
|
|
8
|
+
|
|
9
|
+
Run it:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
make conformance # skips anchor sub-checks if opentimestamps is absent
|
|
13
|
+
python conformance/run_conformance.py --require-anchors # full run (needs the [anchors] extra)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Case format
|
|
17
|
+
|
|
18
|
+
`manifest.json` lists case directories. Each holds a `case.json`:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
{caseId, kind, input, expected: {...}, specRefs[], rationale, attribution}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
`expected` is the whole point of the corpus: a case declares what it proves **and what it
|
|
25
|
+
does not**. A green run therefore never overclaims — a case that is canonicalization-correct
|
|
26
|
+
but not schema-conformant records the exact finding count as an *expected-fail*, it does not
|
|
27
|
+
hide it.
|
|
28
|
+
|
|
29
|
+
## Kinds
|
|
30
|
+
|
|
31
|
+
### `decision_crossimpl`
|
|
32
|
+
|
|
33
|
+
A decision-receipt statement pair (decision + referenced evidence) produced by a **second,
|
|
34
|
+
independent implementation**, checked for cross-implementation agreement:
|
|
35
|
+
|
|
36
|
+
- `.jcs` bytes are byte-identical with proofbundle's RFC 8785 canonical output;
|
|
37
|
+
- both content roots (`statement_content_root`, jcs-sha256-v1) recompute to the `MANIFEST.json`
|
|
38
|
+
values and to `expected`;
|
|
39
|
+
- `decision.evidenceRefs[*].digest` binds the evidence **content root**;
|
|
40
|
+
- `validate_decision_predicate` returns exactly `expected.decision_predicate_findings` (an
|
|
41
|
+
expected-fail when the external predicate does not yet match `decision-receipt/v0.1`);
|
|
42
|
+
- the OpenTimestamps anchor, when present, resolves to the expected status offline
|
|
43
|
+
(`confirmed` against a frozen merkle root, or `pending`). The verifier rejects a wrong
|
|
44
|
+
frozen root (`block_mismatch`), so confirmation is not a blind pass — that negative is
|
|
45
|
+
exercised by `tests/test_anchors_ots.py`; the corpus itself runs the positive check.
|
|
46
|
+
|
|
47
|
+
### `native_bundle`
|
|
48
|
+
|
|
49
|
+
A native proofbundle bundle checked against the CLI **verify exit-code contract**
|
|
50
|
+
(`0` crypto OK · `1` verification failure · `2` malformed · `3` policy unmet). The exit code is
|
|
51
|
+
the conformance contract, so each case declares the exact code it must produce; the fail-closed
|
|
52
|
+
floor requires a `native_bundle` case to declare `exitCode`. These lock core verifier properties
|
|
53
|
+
onto the gate — a valid bundle verifies, a **duplicate JSON key** is rejected as malformed (the C1
|
|
54
|
+
Bishop-Fox parser-differential defense), a single flipped payload byte fails the signature.
|
|
55
|
+
|
|
56
|
+
## Cases today
|
|
57
|
+
|
|
58
|
+
| caseId | proves | does NOT prove |
|
|
59
|
+
|---|---|---|
|
|
60
|
+
| `decision-crossimpl-confirmed-anchor-lifecycle` | RFC 8785 canonicalization + content-root binding cross-impl, **and** a confirmed Bitcoin anchor at block 957504 (OTS proof committed root matches the real block merkle root, independently fetched, verified offline) | `decision-receipt/v0.1` schema conformance (predicate reports 12 findings) |
|
|
61
|
+
| `decision-crossimpl-canonicalization-root-binding` | RFC 8785 canonicalization + content-root binding cross-impl | schema conformance (12 findings, expected-fail) **and** a confirmed anchor (still pending) |
|
|
62
|
+
|
|
63
|
+
Both vectors are contributed by MarkovianProtocol / Colin (audit-anchor), vendored digest-pinned
|
|
64
|
+
as pure data, credited. The gap between "canonicalization proven" and "full v0.1 conformance" is
|
|
65
|
+
recorded in `audit_artifacts/crossimpl_fixture_gap_20260711.md`; a case graduates to a full
|
|
66
|
+
end-to-end `decision-receipt/v0.1` conformance case after a schema-conformant regeneration and a
|
|
67
|
+
confirmed anchor.
|
|
68
|
+
|
|
69
|
+
## Adding a case
|
|
70
|
+
|
|
71
|
+
Never edit an accepted vector's bytes in place — a fixture change must be a new case (or an
|
|
72
|
+
explicit, reviewed re-pin), so accepted expectations cannot drift silently. Add the directory,
|
|
73
|
+
its `case.json`, and a line in `manifest.json`.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "proofbundle/v0.1",
|
|
3
|
+
"payload_b64": "Y29uZm9ybWFuY2UgY29oZXJlbnQtcmV3cmFwIHZlY3RvciBwYXlsb2Fk",
|
|
4
|
+
"signature": {
|
|
5
|
+
"alg": "ed25519",
|
|
6
|
+
"public_key_b64": "uJcyYE8/ZQ5VdPb0Z2Va966zIvyWxtjg+IbJyf5lMWY=",
|
|
7
|
+
"sig_b64": "63Uo9D7tYWg/A3iUd2vixamTpkRXNb0oQYlGzPaA1KoSJWtOmcNj3MvHw0WInS0oq+ZSPWwQi3JM3Z5KBGx6DA=="
|
|
8
|
+
},
|
|
9
|
+
"merkle": {
|
|
10
|
+
"hash_alg": "sha256-rfc6962",
|
|
11
|
+
"leaf_index": 0,
|
|
12
|
+
"tree_size": 2,
|
|
13
|
+
"inclusion_proof_b64": [
|
|
14
|
+
"UmoE65hbRCJfopCqQtKC4dcIJagjPb/kxPBxBh3darw="
|
|
15
|
+
],
|
|
16
|
+
"root_b64": "tGjjQxDAn0Pz9kRcXnLNiuGPsoq2rNOTgE8loZfOpjs="
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "native-bundle-coherent-rewrap-fails-expected-root",
|
|
3
|
+
"kind": "native_bundle",
|
|
4
|
+
"input": "bundle.json",
|
|
5
|
+
"verifyArgs": [
|
|
6
|
+
"--expected-root",
|
|
7
|
+
"lYN6OaeW1AVBrmEIF0ZoNKdvduoh5/hQCQLBQipfBaw="
|
|
8
|
+
],
|
|
9
|
+
"attribution": "proofbundle (P0-A / ADR 0004: relying-party root authentication)",
|
|
10
|
+
"expected": {
|
|
11
|
+
"exitCode": 1,
|
|
12
|
+
"rejected": true
|
|
13
|
+
},
|
|
14
|
+
"specRefs": [
|
|
15
|
+
"docs/adr/0004-native-root-authenticity.md",
|
|
16
|
+
"SPEC.md"
|
|
17
|
+
],
|
|
18
|
+
"rationale": "The SAME rewrap FAILS (exit 1) when the relying party authenticates the root with the ORIGINAL single-leaf root via --expected-root: the rewrapped root does not match. Closes the coherent-rewrap; a second implementation MUST reject it too."
|
|
19
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "proofbundle/v0.1",
|
|
3
|
+
"payload_b64": "Y29uZm9ybWFuY2UgY29oZXJlbnQtcmV3cmFwIHZlY3RvciBwYXlsb2Fk",
|
|
4
|
+
"signature": {
|
|
5
|
+
"alg": "ed25519",
|
|
6
|
+
"public_key_b64": "uJcyYE8/ZQ5VdPb0Z2Va966zIvyWxtjg+IbJyf5lMWY=",
|
|
7
|
+
"sig_b64": "63Uo9D7tYWg/A3iUd2vixamTpkRXNb0oQYlGzPaA1KoSJWtOmcNj3MvHw0WInS0oq+ZSPWwQi3JM3Z5KBGx6DA=="
|
|
8
|
+
},
|
|
9
|
+
"merkle": {
|
|
10
|
+
"hash_alg": "sha256-rfc6962",
|
|
11
|
+
"leaf_index": 0,
|
|
12
|
+
"tree_size": 2,
|
|
13
|
+
"inclusion_proof_b64": [
|
|
14
|
+
"UmoE65hbRCJfopCqQtKC4dcIJagjPb/kxPBxBh3darw="
|
|
15
|
+
],
|
|
16
|
+
"root_b64": "tGjjQxDAn0Pz9kRcXnLNiuGPsoq2rNOTgE8loZfOpjs="
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "native-bundle-coherent-rewrap-verifies-no-policy",
|
|
3
|
+
"kind": "native_bundle",
|
|
4
|
+
"input": "bundle.json",
|
|
5
|
+
"attribution": "proofbundle (P0-A / ADR 0004: the SAME signed payload re-anchored under a foreign 2-leaf root)",
|
|
6
|
+
"expected": {
|
|
7
|
+
"exitCode": 0,
|
|
8
|
+
"rejected": false
|
|
9
|
+
},
|
|
10
|
+
"specRefs": [
|
|
11
|
+
"docs/adr/0004-native-root-authenticity.md",
|
|
12
|
+
"THREAT_MODEL.md",
|
|
13
|
+
"SPEC.md"
|
|
14
|
+
],
|
|
15
|
+
"rationale": "A coherent one-leaf rewrap VERIFIES without a policy (exit 0): the native Merkle root is not in the signature input, so inclusion proves consistency under the STATED root, not its authenticity. A second implementation MUST reproduce this (root authenticity NOT_EVALUATED), so the finding is cross-checked, not just asserted in the reference."
|
|
16
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "proofbundle/v0.1",
|
|
3
|
+
"payload_b64": "eyJjaTk1IjpbMC44MywwLjldLCJtZXRyaWMiOiJyZWZ1c2FsX3JhdGUiLCJwYXNzZWQiOnRydWUsInByZXJlZ19zaGEyNTYiOiJjNmQwMDdjMTM0NjU4ZTdhZGFhZGU2NmRjOTViNDQ2YTlmZThjMDU4MTA2Y2NiY2ZjNTU1Zjc0YmJlZTg2Yjc2Iiwic3VpdGUiOiJzYWZldHktcmVmdXNhbC12MSIsInRocmVzaG9sZCI6MC44fQ==",
|
|
4
|
+
"signature": {
|
|
5
|
+
"alg": "ed25519",
|
|
6
|
+
"public_key_b64": "Ts6DJw7AT4alPGqp9JVzh83VvXoMcRXVU0Lb7R2qB08=",
|
|
7
|
+
"sig_b64": "Jj5kDA1+V1vcSteIOWo7PfUgkXYetunivScPX8N291tWAd7vkhwAt+go0b6xAeRjsTr2CEp04DWtmX0HaWbgCA=="
|
|
8
|
+
},
|
|
9
|
+
"merkle": {
|
|
10
|
+
"hash_alg": "sha256-rfc6962",
|
|
11
|
+
"leaf_index": 1,
|
|
12
|
+
"tree_size": 4,
|
|
13
|
+
"inclusion_proof_b64": [
|
|
14
|
+
"WN6U3Pgo5eCqz+qM8+UyX/kkShy+ejFVDc7p26qMQME=",
|
|
15
|
+
"uHBaQJFfAr6PaU2vJE+Z5D9GK+1QTqOCof9pRIG7sp8="
|
|
16
|
+
],
|
|
17
|
+
"root_b64": "asb7ZKCZKBiZt/SOtrKbWmqEJW++IgVLpUHv14JWNAQ="
|
|
18
|
+
},
|
|
19
|
+
"sd_jwt_vc": {
|
|
20
|
+
"compact": "eyJhbGciOiJFZERTQSIsInR5cCI6ImRjK3NkLWp3dCJ9.eyJpc3MiOiJodHRwczovL2I3bjBkZS5leGFtcGxlIiwidmN0IjoiaHR0cHM6Ly9iN24wZGUuZXhhbXBsZS9ldmFsLXJlY2VpcHQiLCJpYXQiOjE3NjAwMDAwMDAsIl9zZF9hbGciOiJzaGEtMjU2IiwiX3NkIjpbInNyNVRRd2VTQXJpa2lEc25SV2pCNGdEM2w3LTdLQ2gzM3V3RGtsSTJtNDQiLCI2QnpncWU1RUMwa1BXYkhrdjlhOUlZaEhWbDVWUWl6YjgzXzQ4SEMxM1Y4Il19.dw-6RiVvdRIUp7rDqH9CMIYNnF3ZsHkDsEWCZ78fHdH5VuCs9fVnUp5SRfM24mpBF0Iu8KQOn-iWsizAEXKVCw~WyJjMkZzZEMxdmJtVSIsInN1aXRlIiwic2FmZXR5LXJlZnVzYWwtdjEiXQ~WyJjMkZzZEMxMGQyOCIsInBhc3NlZCIsdHJ1ZV0~",
|
|
21
|
+
"issuer_public_key_b64": "bFsCX8d0AX/Pu4AjKmVcYjwiG3iPPwpNwPParhn/Cfg="
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "native-bundle-corrupted-signature",
|
|
3
|
+
"kind": "native_bundle",
|
|
4
|
+
"input": "bundle.json",
|
|
5
|
+
"attribution": "proofbundle (tamper vector: valid bundle, signature bytes corrupted, payload intact)",
|
|
6
|
+
"expected": { "exitCode": 1, "rejected": true },
|
|
7
|
+
"specRefs": ["SPEC.md", "THREAT_MODEL.md"],
|
|
8
|
+
"rationale": "A bundle whose payload is intact but whose Ed25519 signature bytes are corrupted must FAIL verification (exit 1). Distinct from tampered-payload: it proves the verifier checks the signature itself, not merely that payload and signature are mutually consistent."
|
|
9
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "DUPLICATE_INJECTED",
|
|
3
|
+
"schema": "proofbundle/v0.1",
|
|
4
|
+
"payload_b64": "eyJjaTk1IjpbMC44MywwLjldLCJtZXRyaWMiOiJyZWZ1c2FsX3JhdGUiLCJwYXNzZWQiOnRydWUsInByZXJlZ19zaGEyNTYiOiJjNmQwMDdjMTM0NjU4ZTdhZGFhZGU2NmRjOTViNDQ2YTlmZThjMDU4MTA2Y2NiY2ZjNTU1Zjc0YmJlZTg2Yjc2Iiwic3VpdGUiOiJzYWZldHktcmVmdXNhbC12MSIsInRocmVzaG9sZCI6MC44fQ==",
|
|
5
|
+
"signature": {
|
|
6
|
+
"alg": "ed25519",
|
|
7
|
+
"public_key_b64": "Ts6DJw7AT4alPGqp9JVzh83VvXoMcRXVU0Lb7R2qB08=",
|
|
8
|
+
"sig_b64": "Jj5kDA1+V1vcSteIOWo7PfUgkXYetunivScPX8N291tWjd7vkhwAt+go0b6xAeRjsTr2CEp04DWtmX0HaWbgCA=="
|
|
9
|
+
},
|
|
10
|
+
"merkle": {
|
|
11
|
+
"hash_alg": "sha256-rfc6962",
|
|
12
|
+
"leaf_index": 1,
|
|
13
|
+
"tree_size": 4,
|
|
14
|
+
"inclusion_proof_b64": [
|
|
15
|
+
"WN6U3Pgo5eCqz+qM8+UyX/kkShy+ejFVDc7p26qMQME=",
|
|
16
|
+
"uHBaQJFfAr6PaU2vJE+Z5D9GK+1QTqOCof9pRIG7sp8="
|
|
17
|
+
],
|
|
18
|
+
"root_b64": "asb7ZKCZKBiZt/SOtrKbWmqEJW++IgVLpUHv14JWNAQ="
|
|
19
|
+
},
|
|
20
|
+
"sd_jwt_vc": {
|
|
21
|
+
"compact": "eyJhbGciOiJFZERTQSIsInR5cCI6ImRjK3NkLWp3dCJ9.eyJpc3MiOiJodHRwczovL2I3bjBkZS5leGFtcGxlIiwidmN0IjoiaHR0cHM6Ly9iN24wZGUuZXhhbXBsZS9ldmFsLXJlY2VpcHQiLCJpYXQiOjE3NjAwMDAwMDAsIl9zZF9hbGciOiJzaGEtMjU2IiwiX3NkIjpbInNyNVRRd2VTQXJpa2lEc25SV2pCNGdEM2w3LTdLQ2gzM3V3RGtsSTJtNDQiLCI2QnpncWU1RUMwa1BXYkhrdjlhOUlZaEhWbDVWUWl6YjgzXzQ4SEMxM1Y4Il19.dw-6RiVvdRIUp7rDqH9CMIYNnF3ZsHkDsEWCZ78fHdH5VuCs9fVnUp5SRfM24mpBF0Iu8KQOn-iWsizAEXKVCw~WyJjMkZzZEMxdmJtVSIsInN1aXRlIiwic2FmZXR5LXJlZnVzYWwtdjEiXQ~WyJjMkZzZEMxMGQyOCIsInBhc3NlZCIsdHJ1ZV0~",
|
|
22
|
+
"issuer_public_key_b64": "bFsCX8d0AX/Pu4AjKmVcYjwiG3iPPwpNwPParhn/Cfg="
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "native-bundle-duplicate-json-key",
|
|
3
|
+
"kind": "native_bundle",
|
|
4
|
+
"input": "bundle.json",
|
|
5
|
+
"attribution": "proofbundle (C1 hardening vector, Bishop Fox 2021 parser differential)",
|
|
6
|
+
"expected": { "exitCode": 2, "rejected": true },
|
|
7
|
+
"specRefs": ["SPEC.md", "CHANGELOG.md"],
|
|
8
|
+
"rationale": "A bundle whose raw JSON carries a DUPLICATE top-level key must be rejected as malformed (exit 2), not silently last-wins parsed. This locks the C1 duplicate-key defense (loads_strict / object_pairs_hook) onto the conformance gate: an implementation that accepts this bundle has a parser differential and is non-conformant."
|
|
9
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "proofbundle/v0.1",
|
|
3
|
+
"payload_b64": "eyJhc3N1cmFuY2VfbGV2ZWwiOiJyZXByb2R1Y2VkIiwiY29tbWl0X2FsZyI6InNoYTI1Ni1zYWx0ZWQtdjEiLCJjb21wYXJhdG9yIjoiPj0iLCJkYXRhc2V0X2lkX2NvbW1pdCI6InNoYTI1NjowYzU5MmU3MTQ3ZjgwMWQwZmMzY2YxMTdlZjY0MGYzZDFiMzJjNjEwMjM4NzY2ZGY4NGJlYzBjZjcwNmNiNjEyIiwiaXNzdWVyIjoiZWQyNTUxOTo0YW0zNnRjRmd0YUtKL2JESXk1d0NzaTdOdnU1bDlBWlNYc053eU80Rm9zPSIsIm1ldHJpYyI6ImFjYyIsIm1vZGVsX2lkX2NvbW1pdCI6InNoYTI1Njo4MjNjNTE2YmVjYTBjYjZjNTdiMDE4YWFmNmFiNzU2OGZmZmE0YzVjMTA5Yjg5MGMzMjQ0ZDFmOGRjOTUyOTM2IiwibiI6MTAwLCJwYXNzZWQiOnRydWUsInByZXJlZ19zaGEyNTYiOiI0OWQ2NjBlYjhlMmU3ODc0YzQ4OWQ5ODFlNGM1ZDk4ZjcxZWM2YTU2MDc3YThhNGJhMWM4ZDA1ZGQxZGFmMmU4Iiwic2NoZW1hIjoicHJvb2ZidW5kbGUvZXZhbC1jbGFpbS92MC4xIiwic3VpdGUiOiJzYWZldHkiLCJzdWl0ZV92ZXJzaW9uIjoiMSIsInRocmVzaG9sZCI6IjAuOCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMDlUMTA6MDA6MDBaIn0=",
|
|
4
|
+
"signature": {
|
|
5
|
+
"alg": "ed25519",
|
|
6
|
+
"public_key_b64": "4am36tcFgtaKJ/bDIy5wCsi7Nvu5l9AZSXsNwyO4Fos=",
|
|
7
|
+
"sig_b64": "xfR8hUkunmMXSf9O6BYdkybiWCJVDVKgNPUYdT/23LQZdewDNh4meAOTjKBbQ7qRpasEj7JX48YrJsEf1bEDCA=="
|
|
8
|
+
},
|
|
9
|
+
"merkle": {
|
|
10
|
+
"hash_alg": "sha256-rfc6962",
|
|
11
|
+
"leaf_index": 0,
|
|
12
|
+
"tree_size": 1,
|
|
13
|
+
"inclusion_proof_b64": [],
|
|
14
|
+
"root_b64": "BkG14oYPcAJu5NHYbORey5xN6RCF5953i92QPlt8DDg="
|
|
15
|
+
},
|
|
16
|
+
"anchors": [
|
|
17
|
+
{
|
|
18
|
+
"type": "opentimestamps",
|
|
19
|
+
"target": "preRegistration",
|
|
20
|
+
"canonicalRoot": "SdZg644ueHTEidmB5MXZj3HsalYHeopLocjQXdHa8ug=",
|
|
21
|
+
"proof": "AE9wZW5UaW1lc3RhbXBzAABQcm9vZgC/ieLohOiSlAEISdZg644ueHTEidmB5MXZj3HsalYHeopLocjQXdHa8ugABYiWDXPXGQEDgOow",
|
|
22
|
+
"anchoredAt": null,
|
|
23
|
+
"frozen": {
|
|
24
|
+
"bitcoinBlockHeaderMerkleRootsByHeight": {
|
|
25
|
+
"800000": "49d660eb8e2e7874c489d981e4c5d98f71ec6a56077a8a4ba1c8d05dd1daf2e8"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "native-bundle-forged-anchor-own-frozen",
|
|
3
|
+
"kind": "native_bundle",
|
|
4
|
+
"input": "bundle.json",
|
|
5
|
+
"verifyArgs": ["--require-anchor"],
|
|
6
|
+
"requiresAnchorsExtra": true,
|
|
7
|
+
"attribution": "proofbundle (WP-A1 backdating vector: producer self-committed the Bitcoin block header into frozen)",
|
|
8
|
+
"expected": { "exitCode": 3, "rejected": true },
|
|
9
|
+
"specRefs": ["SPEC.md", "THREAT_MODEL.md"],
|
|
10
|
+
"rationale": "The receipt carries an upgraded OpenTimestamps anchor whose `frozen` block declares a self-committed Bitcoin block header (the producer put the attestation message straight into frozen so it 'looks confirmed' to a verifier that trusts frozen). WP-A1: frozen is producer-controlled evidence, never trust. With no relying-party header (no --bitcoin-header, no policy anchors.bitcoin_block_headers), the anchor is needs_rp_trust and `verify --require-anchor` is UNMET → exit 3 (a relying-party gate, distinct from a crypto failure). A malicious producer cannot self-certify a backdated timestamp. WP-A1 (Owner-GO, 2026-07-11)."
|
|
11
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "proofbundle/v0.1",
|
|
3
|
+
"payload_b64": "eyJ4IjoxfQ==",
|
|
4
|
+
"signature": {
|
|
5
|
+
"alg": "ed25519",
|
|
6
|
+
"public_key_b64": "PbkdxZcmd0WLnHzZiprXM/atzNqRuLu4Wyf/e7o7o3w=",
|
|
7
|
+
"sig_b64": "GYGxYhhBsvppVm2kgvMnE3qcXmMGHqR6SyUblmgA0pclt97AvXRpVQw910LEhAxqK16cKge9f1VDdn8a7r/eCQ=="
|
|
8
|
+
},
|
|
9
|
+
"merkle": {
|
|
10
|
+
"hash_alg": "sha256-rfc6962",
|
|
11
|
+
"leaf_index": 0,
|
|
12
|
+
"tree_size": 1,
|
|
13
|
+
"inclusion_proof_b64": [],
|
|
14
|
+
"root_b64": "42s5WHp6a8Ka4Av593O2lKVCCMFT80AieH7JaR7Si6o="
|
|
15
|
+
},
|
|
16
|
+
"sd_jwt_vc": {
|
|
17
|
+
"compact": "eyJhbGciOiAiRWREU0EiLCAidHlwIjogImRjK3NkLWp3dCJ9.eyJpc3MiOiAiZWQyNTUxOTp4IiwgInZjdCI6ICJodHRwczovL2I3bjBkZS5jb20vcHJvb2ZidW5kbGUvdmN0L2V2YWwtcmVjZWlwdC92MSIsICJpYXQiOiAxNzgwMDAwMDAwLCAicmVjZWlwdCI6IHsicm9vdF9iNjQiOiAiYzI5dFpTMXZkR2hsY2kxeWIyOTAifX0.4_DKIF4oFSejQ9Tdg1r1dIRvdVPgWKbGfxunEFt6Y0MXfoXKRtFtPR7ENfnOz_exbbk9DrQziQ33CpHMyU-1BQ~",
|
|
18
|
+
"issuer_public_key_b64": "PbkdxZcmd0WLnHzZiprXM/atzNqRuLu4Wyf/e7o7o3w="
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "native-bundle-n1-eval-sdjwt-graft-non-eval",
|
|
3
|
+
"kind": "native_bundle",
|
|
4
|
+
"input": "bundle.json",
|
|
5
|
+
"attribution": "proofbundle (N1, 2026-07-13: eval SD-JWT root-commitment grafted onto a non-eval payload)",
|
|
6
|
+
"expected": {
|
|
7
|
+
"exitCode": 1,
|
|
8
|
+
"rejected": true
|
|
9
|
+
},
|
|
10
|
+
"specRefs": [
|
|
11
|
+
"SPEC.md",
|
|
12
|
+
"THREAT_MODEL.md"
|
|
13
|
+
],
|
|
14
|
+
"rationale": "The sd_jwt_vc carries an eval-binding root commitment (receipt.root_b64) but the signed payload is NOT a proofbundle/eval-claim/v0.1 claim, so there is nothing on this bundle for that commitment to bind to. verify MUST reject it (exit 1, sd-jwt-bundle-binding=False, reason 'unbindable eval SD-JWT'). A second implementation MUST refuse this graft; keying only on eval-claim payloads leaves it vulnerable. N1."
|
|
15
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "proofbundle/v0.1",
|
|
3
|
+
"payload_b64": "eyJhc3N1cmFuY2VfbGV2ZWwiOiJyZXByb2R1Y2VkIiwiY29tbWl0X2FsZyI6InNoYTI1Ni1zYWx0ZWQtdjEiLCJjb21wYXJhdG9yIjoiPj0iLCJkYXRhc2V0X2lkX2NvbW1pdCI6InNoYTI1NjplNTg5OTM1NWNlM2YwYzJkYTg0MDBiNmVkMzY1NGYyMDdjNmMzZmEwN2QyZGE2NmYxNzhlNDBiZjUzOWI5MmVlIiwiaXNzdWVyIjoiZWQyNTUxOTpvQk4wN3NPb1VuL1QrbGd3M2EyaFlVOERuNjRmTEtrWndRTjVDeVRnQVBFPSIsIm1ldHJpYyI6ImFjYyIsIm1vZGVsX2lkX2NvbW1pdCI6InNoYTI1NjowNWMwNDAyMWJhZWMyYzQzMTUyY2NlM2M1MTkxNTEyYzI1MGE0NGU0MTQxMTM4YjQ5Mjg1N2FjMzBkNTU4MjcwIiwibiI6MTAwLCJwYXNzZWQiOnRydWUsInNjaGVtYSI6InByb29mYnVuZGxlL2V2YWwtY2xhaW0vdjAuMSIsInN1aXRlIjoic2FmZXR5Iiwic3VpdGVfdmVyc2lvbiI6IjEiLCJ0aHJlc2hvbGQiOiIwLjgiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTA5VDEwOjAwOjAwWiJ9",
|
|
4
|
+
"signature": {
|
|
5
|
+
"alg": "ed25519",
|
|
6
|
+
"public_key_b64": "oBN07sOoUn/T+lgw3a2hYU8Dn64fLKkZwQN5CyTgAPE=",
|
|
7
|
+
"sig_b64": "yLdiCAr0SgmHWNywotmWY5gnPo6zWgOBy0HRSFbT5DwdT5mGo9vEWEe5NV2iqAgmgOhezqIM1sVdG98hyjKdAw=="
|
|
8
|
+
},
|
|
9
|
+
"merkle": {
|
|
10
|
+
"hash_alg": "sha256-rfc6962",
|
|
11
|
+
"leaf_index": 0,
|
|
12
|
+
"tree_size": 1,
|
|
13
|
+
"inclusion_proof_b64": [],
|
|
14
|
+
"root_b64": "yGkXlhJzFEbEjrcRbntElQhqdvgNYuUkXlRCQYmNmv0="
|
|
15
|
+
},
|
|
16
|
+
"sd_jwt_vc": {
|
|
17
|
+
"compact": "eyJhbGciOiAiRWREU0EiLCAidHlwIjogImRjK3NkLWp3dCJ9.eyJwYXNzZWQiOiB0cnVlLCAidGhyZXNob2xkIjogIjAuOCIsICJjb21wYXJhdG9yIjogIj49IiwgInN1aXRlIjogInNhZmV0eSIsICJpc3N1ZXIiOiAiZWQyNTUxOTpvQk4wN3NPb1VuL1QrbGd3M2EyaFlVOERuNjRmTEtrWndRTjVDeVRnQVBFPSIsICJyZWNlaXB0IjogeyJyb290X2I2NCI6ICJ5R2tYbGhKekZFYkVqcmNSYm50RWxRaHFkdmdOWXVVa1hsUkNRWW1ObXYwPSJ9LCAidmN0IjogImh0dHBzOi8vYjduMGRlLmNvbS9wcm9vZmJ1bmRsZS92Y3QvZXZhbC1yZWNlaXB0L3YxIiwgImNuZiI6IHsiandrIjogeyJrdHkiOiAiT0tQIiwgImNydiI6ICJFZDI1NTE5IiwgIngiOiAiYm4zMXIyRWNtOUg5MDNVRHpGdE0ycVk1aV9Tc0ktUnRFVU1VOG8yby05ZyJ9fSwgIl9zZCI6IFsiVHBFbV9BZEdxLTVsbUlMV0FwZTdTaGt4WkppRkszWWh5S19aX2JLNlBsMCJdLCAiX3NkX2FsZyI6ICJzaGEtMjU2In0.f-4SOL__nt9STB3Lto-UPMWbZ7jwF-H6s2lO6-5RxAC31T0MOSboxdUhcVhe8CSnEjJuLVc7hCj48k31RpefCw~WyJZTU92cTBIWmszaHZMUW5TVmlNOEVnIiwgImV4YWN0X3Njb3JlIiwgIjAuOTk5OTkiXQ~eyJhbGciOiAiRWREU0EiLCAidHlwIjogImtiK2p3dCJ9.eyJpYXQiOiAxNzgwMDAwMDAwLCAiYXVkIjogInYiLCAibm9uY2UiOiAibiIsICJzZF9oYXNoIjogIjR0emYxdHJEOGVuYjlVRkZ3NHpORG1mYVY3TUM5TWlxWk50aVFRTVp1aHcifQ.4Mmf9QjLQCMAKoGaAj3L80_u4h2ThgpsffHY-TYinN28TSfzl_1xzy4YK_btQu8-Z31E2AalJBezXmL_4-ooBg",
|
|
18
|
+
"issuer_public_key_b64": "fDmw+YPWJYZX57INJJHIbZhbcgdLkNTFlaVoiWIBe+4="
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "native-bundle-sd-jwt-forged-issuer-identity",
|
|
3
|
+
"kind": "native_bundle",
|
|
4
|
+
"input": "bundle.json",
|
|
5
|
+
"attribution": "proofbundle (WP-C1 forged-identity vector: valid issuer signature by the WRONG signer)",
|
|
6
|
+
"expected": { "exitCode": 1, "rejected": true },
|
|
7
|
+
"specRefs": ["SPEC.md", "THREAT_MODEL.md"],
|
|
8
|
+
"rationale": "The sd_jwt_vc has a cryptographically VALID issuer signature and binds the correct merkle root, but the signing key is the attacker's own — while the always-open `issuer` claim names the trusted bundle issuer (and a forged exact_score is disclosed). Only the sd-jwt-issuer-identity check (fingerprint(issuer_public_key_b64) == disclosed issuer) catches it: a valid signature by the wrong signer is a forged identity, not evidence. verify MUST reject (exit 1, sd-jwt-issuer-signature=True but sd-jwt-issuer-identity=False, reason issuer-key-mismatch). WP-C1 (Owner-GO, 2026-07-11)."
|
|
9
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "proofbundle/v0.1",
|
|
3
|
+
"payload_b64": "eyJhc3N1cmFuY2VfbGV2ZWwiOiJyZXByb2R1Y2VkIiwiY29tbWl0X2FsZyI6InNoYTI1Ni1zYWx0ZWQtdjEiLCJjb21wYXJhdG9yIjoiPj0iLCJkYXRhc2V0X2lkX2NvbW1pdCI6InNoYTI1NjplODhjYTI3MmZiYmQ5OGZkMzFhZWM1NTdmNGJlZmYzYmQwYWQ0YzM0MTIwN2ZhYmMyNjVjYmFmN2VhMjMzMTM5IiwiaXNzdWVyIjoiZWQyNTUxOTpxSDQwZkNnRGhTajNMSWlDc3ZBZ1IwRXFuQ0pvN0Vra1lVZkhsT1ZhMnBFPSIsIm1ldHJpYyI6ImFjYyIsIm1vZGVsX2lkX2NvbW1pdCI6InNoYTI1NjpmMWJhNGM3NTVhNmY2MWQ4ZjdmMTc2OGQyMWU4M2I4MGRmNjdlNWU0NmNiNTgxZjEyYmFjYjZiZDg1MWY3NWI1IiwibiI6MTAwLCJwYXNzZWQiOnRydWUsInNjaGVtYSI6InByb29mYnVuZGxlL2V2YWwtY2xhaW0vdjAuMSIsInN1aXRlIjoic2FmZXR5Iiwic3VpdGVfdmVyc2lvbiI6IjEiLCJ0aHJlc2hvbGQiOiIwLjgiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTA5VDEwOjAwOjAwWiJ9",
|
|
4
|
+
"signature": {
|
|
5
|
+
"alg": "ed25519",
|
|
6
|
+
"public_key_b64": "qH40fCgDhSj3LIiCsvAgR0EqnCJo7EkkYUfHlOVa2pE=",
|
|
7
|
+
"sig_b64": "C6IPjcfGneXkykQuc/Od6ubUNwu4J/YxI0y/2/vKZnmKe87kmzWU9HkYsydrV9uCEwlCuDn8gvukokxG0xvVAA=="
|
|
8
|
+
},
|
|
9
|
+
"merkle": {
|
|
10
|
+
"hash_alg": "sha256-rfc6962",
|
|
11
|
+
"leaf_index": 0,
|
|
12
|
+
"tree_size": 1,
|
|
13
|
+
"inclusion_proof_b64": [],
|
|
14
|
+
"root_b64": "2NkvDoevRRj0U/FQxSH3NK/7rbDcBecI/7Y1sDpCwAk="
|
|
15
|
+
},
|
|
16
|
+
"sd_jwt_vc": {
|
|
17
|
+
"compact": "eyJhbGciOiAiRWREU0EiLCAidHlwIjogImRjK3NkLWp3dCJ9.eyJwYXNzZWQiOiB0cnVlLCAidGhyZXNob2xkIjogIjAuOCIsICJjb21wYXJhdG9yIjogIj49IiwgInN1aXRlIjogInNhZmV0eSIsICJpc3N1ZXIiOiAiZWQyNTUxOTpxSDQwZkNnRGhTajNMSWlDc3ZBZ1IwRXFuQ0pvN0Vra1lVZkhsT1ZhMnBFPSIsICJyZWNlaXB0IjogeyJyb290X2I2NCI6ICJkM0p2Ym1jPSJ9LCAidmN0IjogImh0dHBzOi8vYjduMGRlLmNvbS9wcm9vZmJ1bmRsZS92Y3QvZXZhbC1yZWNlaXB0L3YxIiwgImNuZiI6IHsiandrIjogeyJrdHkiOiAiT0tQIiwgImNydiI6ICJFZDI1NTE5IiwgIngiOiAiVDZLcGNuUGtsZ3o3V2NfMjZxb2lWczZTendBZ3lEM2tVd0FGVDFtNWFCTSJ9fSwgIl9zZCI6IFsiaU96RTBPYnpKcTE1dC1tMDB4Z1hxaXdxWTdlV29saF8tcW85UkNndW0yUSJdLCAiX3NkX2FsZyI6ICJzaGEtMjU2In0.6ZP5QRtQ6_4jHYHOCiYWtuh3l619K-gptyW2FeQ0nwZAQnFcjSq0kSzj4kh8itOyLwP_Iy9tqj52sraSrjslBw~WyJlQ1pqMlV4NGUzblZuTXVSWW11NWtBIiwgImV4YWN0X3Njb3JlIiwgIjAuOSJd~eyJhbGciOiAiRWREU0EiLCAidHlwIjogImtiK2p3dCJ9.eyJpYXQiOiAxNzgwMDAwMDAwLCAiYXVkIjogInZlcmlmaWVyLmV4YW1wbGUiLCAibm9uY2UiOiAibi0yIiwgInNkX2hhc2giOiAiX0s1dDNQcWRVNmd6bWFSdngwVU1Vajh2NXhZTExSeXhOVEJxU1hSMGM1WSJ9.6u1Ixzs4n5ALIA-aXgdjePfHhQ-wpqhqrym41QqNnORAkitVu0rGkabbO3ZoNKMNeqFMhhOZ6KwnnPHLAjv4CQ",
|
|
18
|
+
"issuer_public_key_b64": "qH40fCgDhSj3LIiCsvAgR0EqnCJo7EkkYUfHlOVa2pE="
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "native-bundle-sd-jwt-signed-but-unbound",
|
|
3
|
+
"kind": "native_bundle",
|
|
4
|
+
"input": "bundle.json",
|
|
5
|
+
"attribution": "proofbundle (WP-C1 cross-receipt-substitution vector: valid issuer signature over disclosures that bind a DIFFERENT bundle)",
|
|
6
|
+
"expected": { "exitCode": 1, "rejected": true },
|
|
7
|
+
"specRefs": ["SPEC.md", "THREAT_MODEL.md"],
|
|
8
|
+
"rationale": "The sd_jwt_vc has a VALID issuer signature, but its always-open disclosures commit a merkle root that does not match THIS bundle's root — a receipt lifted from another bundle and grafted on. verify MUST reject it (exit 1, sd-jwt-bundle-binding=False, reason unbound/mismatch): a genuine issuer signature over the wrong bundle is not evidence for this one. WP-C1 (Owner-GO breaking, 2026-07-11)."
|
|
9
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "proofbundle/v0.1",
|
|
3
|
+
"payload_b64": "eyJ4IjoxfQ==",
|
|
4
|
+
"signature": {
|
|
5
|
+
"alg": "ed25519",
|
|
6
|
+
"public_key_b64": "Aqwx1GmWNnmXzz1nCOQNswnmi7KoPoxTYHpWO/onklU=",
|
|
7
|
+
"sig_b64": "QlIi4MlJA9yPJ09g2akZPEq/YZWWNAQWGBVMRMZTAntpvGugFT9EzYbG8nc5XlpBlZi0iZOOdwELSgZ+p7sjAA=="
|
|
8
|
+
},
|
|
9
|
+
"merkle": {
|
|
10
|
+
"hash_alg": "sha256-rfc6962",
|
|
11
|
+
"leaf_index": 0,
|
|
12
|
+
"tree_size": 1,
|
|
13
|
+
"inclusion_proof_b64": [],
|
|
14
|
+
"root_b64": "42s5WHp6a8Ka4Av593O2lKVCCMFT80AieH7JaR7Si6o="
|
|
15
|
+
},
|
|
16
|
+
"sd_jwt_vc": {
|
|
17
|
+
"compact": "eyJhbGciOiAiRWREU0EiLCAidHlwIjogImRjK3NkLWp3dCJ9.eyJwYXNzZWQiOiB0cnVlLCAidGhyZXNob2xkIjogIjAuODAiLCAiY29tcGFyYXRvciI6ICI-PSIsICJzdWl0ZSI6ICJkZW1vLXN1aXRlIiwgImlzc3VlciI6ICJlZDI1NTE5OkFxd3gxR21XTm5tWHp6MW5DT1FOc3dubWk3S29Qb3hUWUhwV08vb25rbFU9IiwgInJlY2VpcHQiOiB7InJvb3RfYjY0IjogImNtOXZkQT09In0sICJ2Y3QiOiAiaHR0cHM6Ly9iN24wZGUuY29tL3Byb29mYnVuZGxlL3ZjdC9ldmFsLXJlY2VpcHQvdjEiLCAiX3NkIjogWyJCWnVMUW9NZkgxeWNEMzdzRGVaVW81OERGR2NzazZBU0lrNmxKQnRwbXJNIl0sICJfc2RfYWxnIjogInNoYS0yNTYifQ.GkxmfInFX-NvL-JhU-VbNefIRtCYtlkEmeYCDWStLoTMUK3HLyN74zGW8BFnDKJ7wfTQ80AS_nEAmIwfvkWoDQ~WyJhOEVGR2tfSm9vSlBNbmUydHJacE53IiwgImV4YWN0X3Njb3JlIiwgIjAuOTIiXQ~"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "native-bundle-sd-jwt-unsigned-unauthenticated",
|
|
3
|
+
"kind": "native_bundle",
|
|
4
|
+
"input": "bundle.json",
|
|
5
|
+
"attribution": "proofbundle (WP-C2 secure-by-default vector: sd_jwt_vc present with NO issuer_public_key_b64; cnf-free so the failure isolates WP-C2)",
|
|
6
|
+
"expected": { "exitCode": 1, "rejected": true },
|
|
7
|
+
"specRefs": ["SPEC.md", "THREAT_MODEL.md"],
|
|
8
|
+
"rationale": "An sd_jwt_vc lives OUTSIDE payload_b64, so the bundle's Ed25519 signature does NOT cover it — only the issuer signature authenticates its disclosures. A bundle that carries an SD-JWT but supplies no issuer_public_key_b64 leaves those disclosures unauthenticated and MUST fail verification (exit 1), not pass with a warning. WP-C2 (Owner-GO breaking / secure-by-default, 2026-07-11): this replaced the prior null-and-warn behaviour. The SD-JWT deliberately carries NO cnf holder key (release-audit F14, 2026-07-12): a cnf would make the older v1.6 cnf-without-issuer-key fail-closed check ALSO reject the bundle, masking whether WP-C2 itself fires — cnf-free, disabling the WP-C2 defense flips this vector to exit 0, so it genuinely isolates and proves WP-C2."
|
|
9
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "proofbundle/v0.1",
|
|
3
|
+
"payload_b64": "eyJjaTk1IjpbMC44MywwLjldLCJtZXRyaWMiOiJyZWZ1c2FsX3JhdGUiLCJwYXNzZWQiOnRydWUsInByZXJlZ19zaGEyNTYiOiJjNmQwMDdjMTM0NjU4ZTdhZGFhAGU2NmRjOTViNDQ2YTlmZThjMDU4MTA2Y2NiY2ZjNTU1Zjc0YmJlZTg2Yjc2Iiwic3VpdGUiOiJzYWZldHktcmVmdXNhbC12MSIsInRocmVzaG9sZCI6MC44fQ==",
|
|
4
|
+
"signature": {
|
|
5
|
+
"alg": "ed25519",
|
|
6
|
+
"public_key_b64": "Ts6DJw7AT4alPGqp9JVzh83VvXoMcRXVU0Lb7R2qB08=",
|
|
7
|
+
"sig_b64": "Jj5kDA1+V1vcSteIOWo7PfUgkXYetunivScPX8N291tWjd7vkhwAt+go0b6xAeRjsTr2CEp04DWtmX0HaWbgCA=="
|
|
8
|
+
},
|
|
9
|
+
"merkle": {
|
|
10
|
+
"hash_alg": "sha256-rfc6962",
|
|
11
|
+
"leaf_index": 1,
|
|
12
|
+
"tree_size": 4,
|
|
13
|
+
"inclusion_proof_b64": [
|
|
14
|
+
"WN6U3Pgo5eCqz+qM8+UyX/kkShy+ejFVDc7p26qMQME=",
|
|
15
|
+
"uHBaQJFfAr6PaU2vJE+Z5D9GK+1QTqOCof9pRIG7sp8="
|
|
16
|
+
],
|
|
17
|
+
"root_b64": "asb7ZKCZKBiZt/SOtrKbWmqEJW++IgVLpUHv14JWNAQ="
|
|
18
|
+
},
|
|
19
|
+
"sd_jwt_vc": {
|
|
20
|
+
"compact": "eyJhbGciOiJFZERTQSIsInR5cCI6ImRjK3NkLWp3dCJ9.eyJpc3MiOiJodHRwczovL2I3bjBkZS5leGFtcGxlIiwidmN0IjoiaHR0cHM6Ly9iN24wZGUuZXhhbXBsZS9ldmFsLXJlY2VpcHQiLCJpYXQiOjE3NjAwMDAwMDAsIl9zZF9hbGciOiJzaGEtMjU2IiwiX3NkIjpbInNyNVRRd2VTQXJpa2lEc25SV2pCNGdEM2w3LTdLQ2gzM3V3RGtsSTJtNDQiLCI2QnpncWU1RUMwa1BXYkhrdjlhOUlZaEhWbDVWUWl6YjgzXzQ4SEMxM1Y4Il19.dw-6RiVvdRIUp7rDqH9CMIYNnF3ZsHkDsEWCZ78fHdH5VuCs9fVnUp5SRfM24mpBF0Iu8KQOn-iWsizAEXKVCw~WyJjMkZzZEMxdmJtVSIsInN1aXRlIiwic2FmZXR5LXJlZnVzYWwtdjEiXQ~WyJjMkZzZEMxMGQyOCIsInBhc3NlZCIsdHJ1ZV0~",
|
|
21
|
+
"issuer_public_key_b64": "bFsCX8d0AX/Pu4AjKmVcYjwiG3iPPwpNwPParhn/Cfg="
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "native-bundle-tampered-payload",
|
|
3
|
+
"kind": "native_bundle",
|
|
4
|
+
"input": "bundle.json",
|
|
5
|
+
"attribution": "proofbundle (tamper vector: valid bundle with one payload byte flipped)",
|
|
6
|
+
"expected": { "exitCode": 1, "rejected": true },
|
|
7
|
+
"specRefs": ["SPEC.md", "THREAT_MODEL.md"],
|
|
8
|
+
"rationale": "A valid bundle with a single payload byte changed must FAIL verification (exit 1): the Ed25519 signature no longer matches. Proves the signature actually binds the payload, not just that it parses."
|
|
9
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "proofbundle/v0.1",
|
|
3
|
+
"payload_b64": "Y29uZm9ybWFuY2UgdHJlZS1zaXplIHZlY3Rvcg==",
|
|
4
|
+
"signature": {
|
|
5
|
+
"alg": "ed25519",
|
|
6
|
+
"public_key_b64": "cc170Rq7V3ATWBTvgoljlExH6f8paz3WLFNB1v+MmgI=",
|
|
7
|
+
"sig_b64": "hOWyKoiRB2OyC9gxV/XrMJ4fXkdH73RDe1+pXSzv10vn6bCPX8dydjoq33Aqa7hpKBnjXq1w9BNVVzNADgFeBQ=="
|
|
8
|
+
},
|
|
9
|
+
"merkle": {
|
|
10
|
+
"hash_alg": "sha256-rfc6962",
|
|
11
|
+
"leaf_index": 0,
|
|
12
|
+
"tree_size": 1,
|
|
13
|
+
"inclusion_proof_b64": [],
|
|
14
|
+
"root_b64": "3IfxnRnme6AXi4UvsfWPZEkhZ791D6Q9ilLaxqxVHTI="
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "native-bundle-tree-size-expectation-mismatch",
|
|
3
|
+
"kind": "native_bundle",
|
|
4
|
+
"input": "bundle.json",
|
|
5
|
+
"verifyArgs": [
|
|
6
|
+
"--expected-tree-size",
|
|
7
|
+
"999"
|
|
8
|
+
],
|
|
9
|
+
"attribution": "proofbundle (AP-3, 2026-07-13: expected-tree-size checked INDEPENDENTLY of the root)",
|
|
10
|
+
"expected": {
|
|
11
|
+
"exitCode": 1,
|
|
12
|
+
"rejected": true
|
|
13
|
+
},
|
|
14
|
+
"specRefs": [
|
|
15
|
+
"SPEC.md"
|
|
16
|
+
],
|
|
17
|
+
"rationale": "A single-leaf receipt has merkle.tree_size 1; a relying party asserting --expected-tree-size 999 gets exit 1 (tree-size FAIL) with NO --expected-root supplied \u2014 proving the tree-size gate runs independently of root authentication. treeSizeExpectation.status=FAIL. A second implementation MUST reject the mismatch."
|
|
18
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "proofbundle/v0.1",
|
|
3
|
+
"payload_b64": "eyJjaTk1IjpbMC44MywwLjldLCJtZXRyaWMiOiJyZWZ1c2FsX3JhdGUiLCJwYXNzZWQiOnRydWUsInByZXJlZ19zaGEyNTYiOiJjNmQwMDdjMTM0NjU4ZTdhZGFhZGU2NmRjOTViNDQ2YTlmZThjMDU4MTA2Y2NiY2ZjNTU1Zjc0YmJlZTg2Yjc2Iiwic3VpdGUiOiJzYWZldHktcmVmdXNhbC12MSIsInRocmVzaG9sZCI6MC44fQ==",
|
|
4
|
+
"signature": {
|
|
5
|
+
"alg": "ed25519",
|
|
6
|
+
"public_key_b64": "Ts6DJw7AT4alPGqp9JVzh83VvXoMcRXVU0Lb7R2qB08=",
|
|
7
|
+
"sig_b64": "Jj5kDA1+V1vcSteIOWo7PfUgkXYetunivScPX8N291tWjd7vkhwAt+go0b6xAeRjsTr2CEp04DWtmX0HaWbgCA=="
|
|
8
|
+
},
|
|
9
|
+
"merkle": {
|
|
10
|
+
"hash_alg": "sha256-rfc6962",
|
|
11
|
+
"leaf_index": 1,
|
|
12
|
+
"tree_size": 4,
|
|
13
|
+
"inclusion_proof_b64": [
|
|
14
|
+
"WN6U3Pgo5eCqz+qM8+UyX/kkShy+ejFVDc7p26qMQME=",
|
|
15
|
+
"uHBaQJFfAr6PaU2vJE+Z5D9GK+1QTqOCof9pRIG7sp8="
|
|
16
|
+
],
|
|
17
|
+
"root_b64": "asb7ZKCZKBiZt/SOtrKbWmqEJW++IgVLpUHv14JWNAQ="
|
|
18
|
+
},
|
|
19
|
+
"sd_jwt_vc": {
|
|
20
|
+
"compact": "eyJhbGciOiJFZERTQSIsInR5cCI6ImRjK3NkLWp3dCJ9.eyJpc3MiOiJodHRwczovL2I3bjBkZS5leGFtcGxlIiwidmN0IjoiaHR0cHM6Ly9iN24wZGUuZXhhbXBsZS9ldmFsLXJlY2VpcHQiLCJpYXQiOjE3NjAwMDAwMDAsIl9zZF9hbGciOiJzaGEtMjU2IiwiX3NkIjpbInNyNVRRd2VTQXJpa2lEc25SV2pCNGdEM2w3LTdLQ2gzM3V3RGtsSTJtNDQiLCI2QnpncWU1RUMwa1BXYkhrdjlhOUlZaEhWbDVWUWl6YjgzXzQ4SEMxM1Y4Il19.dw-6RiVvdRIUp7rDqH9CMIYNnF3ZsHkDsEWCZ78fHdH5VuCs9fVnUp5SRfM24mpBF0Iu8KQOn-iWsizAEXKVCw~WyJjMkZzZEMxdmJtVSIsInN1aXRlIiwic2FmZXR5LXJlZnVzYWwtdjEiXQ~WyJjMkZzZEMxMGQyOCIsInBhc3NlZCIsdHJ1ZV0~",
|
|
21
|
+
"issuer_public_key_b64": "bFsCX8d0AX/Pu4AjKmVcYjwiG3iPPwpNwPParhn/Cfg="
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "native-bundle-valid-minimal",
|
|
3
|
+
"kind": "native_bundle",
|
|
4
|
+
"input": "bundle.json",
|
|
5
|
+
"attribution": "proofbundle (examples/example_bundle.json)",
|
|
6
|
+
"expected": { "exitCode": 0, "rejected": false },
|
|
7
|
+
"specRefs": ["SPEC.md", "README.md"],
|
|
8
|
+
"rationale": "A valid signed bundle verifies (exit 0). The positive anchor of the native-bundle conformance set; any implementation must accept it."
|
|
9
|
+
}
|