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.
Files changed (601) hide show
  1. proofbundle-3.6.1/MANIFEST.in +39 -0
  2. {proofbundle-3.6.0/src/proofbundle.egg-info → proofbundle-3.6.1}/PKG-INFO +9 -1
  3. proofbundle-3.6.1/conformance/README.md +73 -0
  4. proofbundle-3.6.1/conformance/bundle/coherent-rewrap-fails-expected-root/bundle.json +18 -0
  5. proofbundle-3.6.1/conformance/bundle/coherent-rewrap-fails-expected-root/case.json +19 -0
  6. proofbundle-3.6.1/conformance/bundle/coherent-rewrap-verifies-no-policy/bundle.json +18 -0
  7. proofbundle-3.6.1/conformance/bundle/coherent-rewrap-verifies-no-policy/case.json +16 -0
  8. proofbundle-3.6.1/conformance/bundle/corrupted-signature/bundle.json +23 -0
  9. proofbundle-3.6.1/conformance/bundle/corrupted-signature/case.json +9 -0
  10. proofbundle-3.6.1/conformance/bundle/duplicate-json-key/bundle.json +24 -0
  11. proofbundle-3.6.1/conformance/bundle/duplicate-json-key/case.json +9 -0
  12. proofbundle-3.6.1/conformance/bundle/forged-anchor-own-frozen/bundle.json +30 -0
  13. proofbundle-3.6.1/conformance/bundle/forged-anchor-own-frozen/case.json +11 -0
  14. proofbundle-3.6.1/conformance/bundle/n1-eval-sdjwt-graft-non-eval/bundle.json +20 -0
  15. proofbundle-3.6.1/conformance/bundle/n1-eval-sdjwt-graft-non-eval/case.json +15 -0
  16. proofbundle-3.6.1/conformance/bundle/sd-jwt-forged-issuer-identity/bundle.json +20 -0
  17. proofbundle-3.6.1/conformance/bundle/sd-jwt-forged-issuer-identity/case.json +9 -0
  18. proofbundle-3.6.1/conformance/bundle/sd-jwt-signed-but-unbound/bundle.json +20 -0
  19. proofbundle-3.6.1/conformance/bundle/sd-jwt-signed-but-unbound/case.json +9 -0
  20. proofbundle-3.6.1/conformance/bundle/sd-jwt-unsigned-unauthenticated/bundle.json +19 -0
  21. proofbundle-3.6.1/conformance/bundle/sd-jwt-unsigned-unauthenticated/case.json +9 -0
  22. proofbundle-3.6.1/conformance/bundle/tampered-payload/bundle.json +23 -0
  23. proofbundle-3.6.1/conformance/bundle/tampered-payload/case.json +9 -0
  24. proofbundle-3.6.1/conformance/bundle/tree-size-expectation-mismatch/bundle.json +16 -0
  25. proofbundle-3.6.1/conformance/bundle/tree-size-expectation-mismatch/case.json +18 -0
  26. proofbundle-3.6.1/conformance/bundle/valid-minimal/bundle.json +23 -0
  27. proofbundle-3.6.1/conformance/bundle/valid-minimal/case.json +9 -0
  28. proofbundle-3.6.1/conformance/common_vocabulary.py +155 -0
  29. proofbundle-3.6.1/conformance/cross_format.py +152 -0
  30. proofbundle-3.6.1/conformance/decision/crossimpl/canonicalization-root-binding/MANIFEST.json +10 -0
  31. proofbundle-3.6.1/conformance/decision/crossimpl/canonicalization-root-binding/case.json +24 -0
  32. proofbundle-3.6.1/conformance/decision/crossimpl/canonicalization-root-binding/decision_receipt.jcs +1 -0
  33. proofbundle-3.6.1/conformance/decision/crossimpl/canonicalization-root-binding/decision_receipt.jcs.ots +0 -0
  34. proofbundle-3.6.1/conformance/decision/crossimpl/canonicalization-root-binding/decision_receipt.json +44 -0
  35. proofbundle-3.6.1/conformance/decision/crossimpl/canonicalization-root-binding/evidence_eval_result.jcs +1 -0
  36. proofbundle-3.6.1/conformance/decision/crossimpl/canonicalization-root-binding/evidence_eval_result.json +30 -0
  37. proofbundle-3.6.1/conformance/decision/crossimpl/confirmed-anchor-lifecycle/MANIFEST.json +8 -0
  38. proofbundle-3.6.1/conformance/decision/crossimpl/confirmed-anchor-lifecycle/case.json +42 -0
  39. proofbundle-3.6.1/conformance/decision/crossimpl/confirmed-anchor-lifecycle/decision_receipt.jcs +1 -0
  40. proofbundle-3.6.1/conformance/decision/crossimpl/confirmed-anchor-lifecycle/decision_receipt.jcs.ots +0 -0
  41. proofbundle-3.6.1/conformance/decision/crossimpl/confirmed-anchor-lifecycle/decision_receipt.json +44 -0
  42. proofbundle-3.6.1/conformance/decision/crossimpl/confirmed-anchor-lifecycle/evidence_eval_result.jcs +1 -0
  43. proofbundle-3.6.1/conformance/decision/crossimpl/confirmed-anchor-lifecycle/evidence_eval_result.json +30 -0
  44. proofbundle-3.6.1/conformance/manifest.json +62 -0
  45. proofbundle-3.6.1/conformance/relation/declared-supersedes-verified/case.json +21 -0
  46. proofbundle-3.6.1/conformance/relation/declared-supersedes-verified/pub.b64 +1 -0
  47. proofbundle-3.6.1/conformance/relation/declared-supersedes-verified/receipt.json +9 -0
  48. proofbundle-3.6.1/conformance/relation/declared-supersedes-verified/related_b.json +9 -0
  49. proofbundle-3.6.1/conformance/relation/declared-unresolved/case.json +17 -0
  50. proofbundle-3.6.1/conformance/relation/declared-unresolved/pub.b64 +1 -0
  51. proofbundle-3.6.1/conformance/relation/declared-unresolved/receipt.json +9 -0
  52. proofbundle-3.6.1/conformance/relation/decoy-accept-path/case.json +25 -0
  53. proofbundle-3.6.1/conformance/relation/decoy-accept-path/policy.json +11 -0
  54. proofbundle-3.6.1/conformance/relation/decoy-accept-path/pub.b64 +1 -0
  55. proofbundle-3.6.1/conformance/relation/decoy-accept-path/receipt.json +9 -0
  56. proofbundle-3.6.1/conformance/relation/decoy-accept-path/related_rx.json +9 -0
  57. proofbundle-3.6.1/conformance/relation/decoy-parent-correct-pass/case.json +26 -0
  58. proofbundle-3.6.1/conformance/relation/decoy-parent-correct-pass/policy.json +11 -0
  59. proofbundle-3.6.1/conformance/relation/decoy-parent-correct-pass/pub.b64 +1 -0
  60. proofbundle-3.6.1/conformance/relation/decoy-parent-correct-pass/receipt.json +9 -0
  61. proofbundle-3.6.1/conformance/relation/decoy-parent-correct-pass/related_r0.json +9 -0
  62. proofbundle-3.6.1/conformance/relation/decoy-parent-correct-pass/related_rx.json +9 -0
  63. proofbundle-3.6.1/conformance/relation/decoy-parent-no-pin-old-behavior/case.json +26 -0
  64. proofbundle-3.6.1/conformance/relation/decoy-parent-no-pin-old-behavior/policy.json +9 -0
  65. proofbundle-3.6.1/conformance/relation/decoy-parent-no-pin-old-behavior/pub.b64 +1 -0
  66. proofbundle-3.6.1/conformance/relation/decoy-parent-no-pin-old-behavior/receipt.json +9 -0
  67. proofbundle-3.6.1/conformance/relation/decoy-parent-no-pin-old-behavior/related_r0.json +9 -0
  68. proofbundle-3.6.1/conformance/relation/decoy-parent-no-pin-old-behavior/related_rx.json +9 -0
  69. proofbundle-3.6.1/conformance/relation/decoy-parent-target-mismatch/case.json +28 -0
  70. proofbundle-3.6.1/conformance/relation/decoy-parent-target-mismatch/policy.json +11 -0
  71. proofbundle-3.6.1/conformance/relation/decoy-parent-target-mismatch/pub.b64 +1 -0
  72. proofbundle-3.6.1/conformance/relation/decoy-parent-target-mismatch/receipt.json +9 -0
  73. proofbundle-3.6.1/conformance/relation/decoy-parent-target-mismatch/related_r0.json +9 -0
  74. proofbundle-3.6.1/conformance/relation/decoy-parent-target-mismatch/related_rx.json +9 -0
  75. proofbundle-3.6.1/conformance/relation/depth-exceeded/case.json +53 -0
  76. proofbundle-3.6.1/conformance/relation/depth-exceeded/pub.b64 +1 -0
  77. proofbundle-3.6.1/conformance/relation/depth-exceeded/receipt.json +9 -0
  78. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_001.json +9 -0
  79. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_002.json +9 -0
  80. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_003.json +9 -0
  81. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_004.json +9 -0
  82. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_005.json +9 -0
  83. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_006.json +9 -0
  84. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_007.json +9 -0
  85. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_008.json +9 -0
  86. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_009.json +9 -0
  87. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_010.json +9 -0
  88. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_011.json +9 -0
  89. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_012.json +9 -0
  90. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_013.json +9 -0
  91. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_014.json +9 -0
  92. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_015.json +9 -0
  93. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_016.json +9 -0
  94. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_017.json +9 -0
  95. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_018.json +9 -0
  96. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_019.json +9 -0
  97. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_020.json +9 -0
  98. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_021.json +9 -0
  99. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_022.json +9 -0
  100. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_023.json +9 -0
  101. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_024.json +9 -0
  102. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_025.json +9 -0
  103. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_026.json +9 -0
  104. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_027.json +9 -0
  105. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_028.json +9 -0
  106. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_029.json +9 -0
  107. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_030.json +9 -0
  108. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_031.json +9 -0
  109. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_032.json +9 -0
  110. proofbundle-3.6.1/conformance/relation/depth-exceeded/related_033.json +9 -0
  111. proofbundle-3.6.1/conformance/relation/digest-mismatch/case.json +23 -0
  112. proofbundle-3.6.1/conformance/relation/digest-mismatch/policy.json +9 -0
  113. proofbundle-3.6.1/conformance/relation/digest-mismatch/pub.b64 +1 -0
  114. proofbundle-3.6.1/conformance/relation/digest-mismatch/receipt.json +9 -0
  115. proofbundle-3.6.1/conformance/relation/digest-mismatch/related_b.json +9 -0
  116. proofbundle-3.6.1/conformance/relation/generate_vectors.py +669 -0
  117. proofbundle-3.6.1/conformance/relation/malformed-digest/case.json +18 -0
  118. proofbundle-3.6.1/conformance/relation/malformed-digest/pub.b64 +1 -0
  119. proofbundle-3.6.1/conformance/relation/malformed-digest/receipt.json +9 -0
  120. proofbundle-3.6.1/conformance/relation/outcome-declared-supersedes-verified/case.json +21 -0
  121. proofbundle-3.6.1/conformance/relation/outcome-declared-supersedes-verified/pub.b64 +1 -0
  122. proofbundle-3.6.1/conformance/relation/outcome-declared-supersedes-verified/receipt.json +9 -0
  123. proofbundle-3.6.1/conformance/relation/outcome-declared-supersedes-verified/related_b.json +9 -0
  124. proofbundle-3.6.1/conformance/relation/outcome-decoy-parent-target-mismatch/case.json +28 -0
  125. proofbundle-3.6.1/conformance/relation/outcome-decoy-parent-target-mismatch/policy.json +11 -0
  126. proofbundle-3.6.1/conformance/relation/outcome-decoy-parent-target-mismatch/pub.b64 +1 -0
  127. proofbundle-3.6.1/conformance/relation/outcome-decoy-parent-target-mismatch/receipt.json +9 -0
  128. proofbundle-3.6.1/conformance/relation/outcome-decoy-parent-target-mismatch/related_r0.json +9 -0
  129. proofbundle-3.6.1/conformance/relation/outcome-decoy-parent-target-mismatch/related_rx.json +9 -0
  130. proofbundle-3.6.1/conformance/relation/outcome-digest-mismatch/case.json +23 -0
  131. proofbundle-3.6.1/conformance/relation/outcome-digest-mismatch/policy.json +9 -0
  132. proofbundle-3.6.1/conformance/relation/outcome-digest-mismatch/pub.b64 +1 -0
  133. proofbundle-3.6.1/conformance/relation/outcome-digest-mismatch/receipt.json +9 -0
  134. proofbundle-3.6.1/conformance/relation/outcome-digest-mismatch/related_b.json +9 -0
  135. proofbundle-3.6.1/conformance/relation/outcome-relation-signer-unauthorized/case.json +25 -0
  136. proofbundle-3.6.1/conformance/relation/outcome-relation-signer-unauthorized/policy.json +14 -0
  137. proofbundle-3.6.1/conformance/relation/outcome-relation-signer-unauthorized/pub.b64 +1 -0
  138. proofbundle-3.6.1/conformance/relation/outcome-relation-signer-unauthorized/receipt.json +9 -0
  139. proofbundle-3.6.1/conformance/relation/outcome-relation-signer-unauthorized/related_b.json +9 -0
  140. proofbundle-3.6.1/conformance/relation/outcome-renews/case.json +21 -0
  141. proofbundle-3.6.1/conformance/relation/outcome-renews/pub.b64 +1 -0
  142. proofbundle-3.6.1/conformance/relation/outcome-renews/receipt.json +9 -0
  143. proofbundle-3.6.1/conformance/relation/outcome-renews/related_b.json +9 -0
  144. proofbundle-3.6.1/conformance/relation/outcome-silent-landing/case.json +17 -0
  145. proofbundle-3.6.1/conformance/relation/outcome-silent-landing/pub.b64 +1 -0
  146. proofbundle-3.6.1/conformance/relation/outcome-silent-landing/receipt.json +9 -0
  147. proofbundle-3.6.1/conformance/relation/outcome-valid-baseline/case.json +18 -0
  148. proofbundle-3.6.1/conformance/relation/outcome-valid-baseline/pub.b64 +1 -0
  149. proofbundle-3.6.1/conformance/relation/outcome-valid-baseline/receipt.json +9 -0
  150. proofbundle-3.6.1/conformance/relation/relation-amends/case.json +20 -0
  151. proofbundle-3.6.1/conformance/relation/relation-amends/pub.b64 +1 -0
  152. proofbundle-3.6.1/conformance/relation/relation-amends/receipt.json +9 -0
  153. proofbundle-3.6.1/conformance/relation/relation-amends/related_b.json +9 -0
  154. proofbundle-3.6.1/conformance/relation/relation-corrects/case.json +20 -0
  155. proofbundle-3.6.1/conformance/relation/relation-corrects/pub.b64 +1 -0
  156. proofbundle-3.6.1/conformance/relation/relation-corrects/receipt.json +9 -0
  157. proofbundle-3.6.1/conformance/relation/relation-corrects/related_b.json +9 -0
  158. proofbundle-3.6.1/conformance/relation/relation-derivedfrom/case.json +20 -0
  159. proofbundle-3.6.1/conformance/relation/relation-derivedfrom/pub.b64 +1 -0
  160. proofbundle-3.6.1/conformance/relation/relation-derivedfrom/receipt.json +9 -0
  161. proofbundle-3.6.1/conformance/relation/relation-derivedfrom/related_b.json +9 -0
  162. proofbundle-3.6.1/conformance/relation/relation-retracts/case.json +20 -0
  163. proofbundle-3.6.1/conformance/relation/relation-retracts/pub.b64 +1 -0
  164. proofbundle-3.6.1/conformance/relation/relation-retracts/receipt.json +9 -0
  165. proofbundle-3.6.1/conformance/relation/relation-retracts/related_b.json +9 -0
  166. proofbundle-3.6.1/conformance/relation/relation-revises/case.json +20 -0
  167. proofbundle-3.6.1/conformance/relation/relation-revises/pub.b64 +1 -0
  168. proofbundle-3.6.1/conformance/relation/relation-revises/receipt.json +9 -0
  169. proofbundle-3.6.1/conformance/relation/relation-revises/related_b.json +9 -0
  170. proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-unauthorized/case.json +25 -0
  171. proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-unauthorized/policy.json +14 -0
  172. proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-unauthorized/pub.b64 +1 -0
  173. proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-unauthorized/receipt.json +9 -0
  174. proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-unauthorized/related_b.json +9 -0
  175. proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-verified/case.json +24 -0
  176. proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-verified/policy.json +14 -0
  177. proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-verified/pub.b64 +1 -0
  178. proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-verified/receipt.json +9 -0
  179. proofbundle-3.6.1/conformance/relation/relation-signer-cross-issuer-verified/related_b.json +9 -0
  180. proofbundle-3.6.1/conformance/relation/relation-signer-same-key-explicit/case.json +24 -0
  181. proofbundle-3.6.1/conformance/relation/relation-signer-same-key-explicit/policy.json +11 -0
  182. proofbundle-3.6.1/conformance/relation/relation-signer-same-key-explicit/pub.b64 +1 -0
  183. proofbundle-3.6.1/conformance/relation/relation-signer-same-key-explicit/receipt.json +9 -0
  184. proofbundle-3.6.1/conformance/relation/relation-signer-same-key-explicit/related_b.json +9 -0
  185. proofbundle-3.6.1/conformance/relation/relation-signer-verified-under-not-claim/case.json +25 -0
  186. proofbundle-3.6.1/conformance/relation/relation-signer-verified-under-not-claim/policy.json +11 -0
  187. proofbundle-3.6.1/conformance/relation/relation-signer-verified-under-not-claim/pub.b64 +1 -0
  188. proofbundle-3.6.1/conformance/relation/relation-signer-verified-under-not-claim/receipt.json +9 -0
  189. proofbundle-3.6.1/conformance/relation/relation-signer-verified-under-not-claim/related_b.json +9 -0
  190. proofbundle-3.6.1/conformance/relation/renews-vector/case.json +21 -0
  191. proofbundle-3.6.1/conformance/relation/renews-vector/pub.b64 +1 -0
  192. proofbundle-3.6.1/conformance/relation/renews-vector/receipt.json +9 -0
  193. proofbundle-3.6.1/conformance/relation/renews-vector/related_b.json +9 -0
  194. proofbundle-3.6.1/conformance/relation/retracts-then-use/case.json +21 -0
  195. proofbundle-3.6.1/conformance/relation/retracts-then-use/policy.json +7 -0
  196. proofbundle-3.6.1/conformance/relation/retracts-then-use/pub.b64 +1 -0
  197. proofbundle-3.6.1/conformance/relation/retracts-then-use/receipt.json +9 -0
  198. proofbundle-3.6.1/conformance/relation/retracts-then-use/related_r.json +9 -0
  199. proofbundle-3.6.1/conformance/relation/silent-landing/case.json +17 -0
  200. proofbundle-3.6.1/conformance/relation/silent-landing/pub.b64 +1 -0
  201. proofbundle-3.6.1/conformance/relation/silent-landing/receipt.json +9 -0
  202. proofbundle-3.6.1/conformance/relation/statement-malformed/case.json +17 -0
  203. proofbundle-3.6.1/conformance/relation/statement-malformed/pub.b64 +1 -0
  204. proofbundle-3.6.1/conformance/relation/statement-malformed/receipt.json +9 -0
  205. proofbundle-3.6.1/conformance/relation/statement-retracts-declared-unresolved/case.json +17 -0
  206. proofbundle-3.6.1/conformance/relation/statement-retracts-declared-unresolved/pub.b64 +1 -0
  207. proofbundle-3.6.1/conformance/relation/statement-retracts-declared-unresolved/receipt.json +9 -0
  208. proofbundle-3.6.1/conformance/relation/statement-retracts-unauthorized/case.json +25 -0
  209. proofbundle-3.6.1/conformance/relation/statement-retracts-unauthorized/policy.json +14 -0
  210. proofbundle-3.6.1/conformance/relation/statement-retracts-unauthorized/pub.b64 +1 -0
  211. proofbundle-3.6.1/conformance/relation/statement-retracts-unauthorized/receipt.json +9 -0
  212. proofbundle-3.6.1/conformance/relation/statement-retracts-unauthorized/related_t.json +9 -0
  213. proofbundle-3.6.1/conformance/relation/statement-retracts-verified-blocked/case.json +25 -0
  214. proofbundle-3.6.1/conformance/relation/statement-retracts-verified-blocked/policy.json +15 -0
  215. proofbundle-3.6.1/conformance/relation/statement-retracts-verified-blocked/pub.b64 +1 -0
  216. proofbundle-3.6.1/conformance/relation/statement-retracts-verified-blocked/receipt.json +9 -0
  217. proofbundle-3.6.1/conformance/relation/statement-retracts-verified-blocked/related_t.json +9 -0
  218. proofbundle-3.6.1/conformance/relation/statement-retracts-verified-visible/case.json +23 -0
  219. proofbundle-3.6.1/conformance/relation/statement-retracts-verified-visible/pub.b64 +1 -0
  220. proofbundle-3.6.1/conformance/relation/statement-retracts-verified-visible/receipt.json +9 -0
  221. proofbundle-3.6.1/conformance/relation/statement-retracts-verified-visible/related_t.json +9 -0
  222. proofbundle-3.6.1/conformance/relation/statement-supersedes-verified/case.json +23 -0
  223. proofbundle-3.6.1/conformance/relation/statement-supersedes-verified/pub.b64 +1 -0
  224. proofbundle-3.6.1/conformance/relation/statement-supersedes-verified/receipt.json +9 -0
  225. proofbundle-3.6.1/conformance/relation/statement-supersedes-verified/related_t.json +9 -0
  226. proofbundle-3.6.1/conformance/relation/t1-canonical-invalid-signature/case.json +16 -0
  227. proofbundle-3.6.1/conformance/relation/t1-canonical-invalid-signature/pub.b64 +1 -0
  228. proofbundle-3.6.1/conformance/relation/t1-canonical-invalid-signature/receipt.json +9 -0
  229. proofbundle-3.6.1/conformance/relation/target-subject-ambiguous/case.json +24 -0
  230. proofbundle-3.6.1/conformance/relation/target-subject-ambiguous/pub.b64 +1 -0
  231. proofbundle-3.6.1/conformance/relation/target-subject-ambiguous/receipt.json +9 -0
  232. proofbundle-3.6.1/conformance/relation/target-subject-ambiguous/related_r0.json +9 -0
  233. proofbundle-3.6.1/conformance/relation/target-subject-correct-pass/case.json +23 -0
  234. proofbundle-3.6.1/conformance/relation/target-subject-correct-pass/pub.b64 +1 -0
  235. proofbundle-3.6.1/conformance/relation/target-subject-correct-pass/receipt.json +9 -0
  236. proofbundle-3.6.1/conformance/relation/target-subject-correct-pass/related_r0.json +9 -0
  237. proofbundle-3.6.1/conformance/relation/target-subject-mismatch/case.json +24 -0
  238. proofbundle-3.6.1/conformance/relation/target-subject-mismatch/pub.b64 +1 -0
  239. proofbundle-3.6.1/conformance/relation/target-subject-mismatch/receipt.json +9 -0
  240. proofbundle-3.6.1/conformance/relation/target-subject-mismatch/related_r0.json +9 -0
  241. proofbundle-3.6.1/conformance/relation/target-subject-missing/case.json +24 -0
  242. proofbundle-3.6.1/conformance/relation/target-subject-missing/pub.b64 +1 -0
  243. proofbundle-3.6.1/conformance/relation/target-subject-missing/receipt.json +9 -0
  244. proofbundle-3.6.1/conformance/relation/target-subject-missing/related_r0.json +9 -0
  245. proofbundle-3.6.1/conformance/relation/unauthorized-signer/case.json +21 -0
  246. proofbundle-3.6.1/conformance/relation/unauthorized-signer/pub.b64 +1 -0
  247. proofbundle-3.6.1/conformance/relation/unauthorized-signer/receipt.json +9 -0
  248. proofbundle-3.6.1/conformance/relation/unauthorized-signer/related_b.json +9 -0
  249. proofbundle-3.6.1/conformance/relation/valid-baseline/case.json +18 -0
  250. proofbundle-3.6.1/conformance/relation/valid-baseline/pub.b64 +1 -0
  251. proofbundle-3.6.1/conformance/relation/valid-baseline/receipt.json +9 -0
  252. proofbundle-3.6.1/conformance/relation/wrong-payloadtype-target/case.json +21 -0
  253. proofbundle-3.6.1/conformance/relation/wrong-payloadtype-target/pub.b64 +1 -0
  254. proofbundle-3.6.1/conformance/relation/wrong-payloadtype-target/receipt.json +9 -0
  255. proofbundle-3.6.1/conformance/relation/wrong-payloadtype-target/related_t.json +9 -0
  256. proofbundle-3.6.1/conformance/run_conformance.py +353 -0
  257. proofbundle-3.6.1/conformance/vector_schema.json +95 -0
  258. proofbundle-3.6.1/docs/adr/renewal_policy.example.json +8 -0
  259. proofbundle-3.6.1/docs/readiness_pack/AUDITOR_OPEN_POINTS.md +83 -0
  260. proofbundle-3.6.1/docs/readiness_pack/MANIFEST.sha256 +11 -0
  261. proofbundle-3.6.1/docs/readiness_pack/OPEN_QUESTIONS.md +29 -0
  262. proofbundle-3.6.1/docs/readiness_pack/PROGRESS.md +37 -0
  263. proofbundle-3.6.1/docs/readiness_pack/README.md +48 -0
  264. proofbundle-3.6.1/docs/readiness_pack/REPRODUCTION_RUNBOOK.md +92 -0
  265. proofbundle-3.6.1/docs/readiness_pack/calendar_independence.md +64 -0
  266. proofbundle-3.6.1/docs/readiness_pack/differential_matrix.md +28 -0
  267. proofbundle-3.6.1/docs/readiness_pack/index.json +110 -0
  268. proofbundle-3.6.1/docs/readiness_pack/proofbundle/readiness_pack.bundle.json +16 -0
  269. proofbundle-3.6.1/docs/readiness_pack/proofbundle/readiness_pack.pub.b64 +1 -0
  270. proofbundle-3.6.1/docs/readiness_pack/rust_parity_scope.md +50 -0
  271. proofbundle-3.6.1/docs/readiness_pack/tamper_resistance.md +49 -0
  272. proofbundle-3.6.1/docs/readiness_pack/threat_model_delta_360.md +49 -0
  273. proofbundle-3.6.1/examples/README.md +22 -0
  274. proofbundle-3.6.1/examples/anchors/chia-datalayer-invalid-root.json +23 -0
  275. proofbundle-3.6.1/examples/anchors/chia-datalayer-valid.json +24 -0
  276. proofbundle-3.6.1/examples/checkpoint_example.py +28 -0
  277. proofbundle-3.6.1/examples/decision_receipt_allow.json +107 -0
  278. proofbundle-3.6.1/examples/decision_receipt_deny.json +123 -0
  279. proofbundle-3.6.1/examples/decision_receipt_escalate.json +105 -0
  280. proofbundle-3.6.1/examples/decision_receipt_with_eval_ref.intoto.json +104 -0
  281. proofbundle-3.6.1/examples/eee_receipt.py +28 -0
  282. proofbundle-3.6.1/examples/example.tlog-proof +12 -0
  283. proofbundle-3.6.1/examples/example_bundle.json +23 -0
  284. proofbundle-3.6.1/examples/experimental_enclave.py +64 -0
  285. proofbundle-3.6.1/examples/inspect_hook_example.py +35 -0
  286. proofbundle-3.6.1/examples/inspect_receipt.py +32 -0
  287. proofbundle-3.6.1/examples/intoto/private-model-commitment.statement.json +55 -0
  288. proofbundle-3.6.1/examples/intoto/public-model.statement.json +50 -0
  289. proofbundle-3.6.1/examples/intoto/release-gate.statement.json +50 -0
  290. proofbundle-3.6.1/examples/intoto/svr.statement.json +24 -0
  291. proofbundle-3.6.1/examples/intoto_dsse_export.py +26 -0
  292. proofbundle-3.6.1/examples/lm_eval_receipt.py +31 -0
  293. proofbundle-3.6.1/examples/make_example.py +137 -0
  294. proofbundle-3.6.1/examples/persample_audit.py +89 -0
  295. proofbundle-3.6.1/examples/pytest_plugin_example.py +30 -0
  296. proofbundle-3.6.1/examples/rekor_interop.py +61 -0
  297. proofbundle-3.6.1/examples/tlog_proof_example.py +70 -0
  298. proofbundle-3.6.1/examples/trust_policy_decision_strict.json +18 -0
  299. proofbundle-3.6.1/examples/trust_policy_strict.json +18 -0
  300. proofbundle-3.6.1/formal/README.md +65 -0
  301. proofbundle-3.6.1/formal/model.py +284 -0
  302. {proofbundle-3.6.0 → proofbundle-3.6.1}/pyproject.toml +7 -2
  303. proofbundle-3.6.1/schemas/action-outcome-v0.1.schema.json +110 -0
  304. proofbundle-3.6.1/schemas/decision-receipt-v0.1.schema.json +238 -0
  305. proofbundle-3.6.1/schemas/eval_claim_v0_1.schema.json +138 -0
  306. proofbundle-3.6.1/schemas/in_toto_statement_v1.schema.json +31 -0
  307. proofbundle-3.6.1/schemas/proofbundle_v0_1.schema.json +84 -0
  308. proofbundle-3.6.1/schemas/run-ledger-v0.1.schema.json +43 -0
  309. proofbundle-3.6.1/schemas/trust-pack-v0.1.schema.json +73 -0
  310. proofbundle-3.6.1/schemas/trust_policy_v0_1.schema.json +350 -0
  311. proofbundle-3.6.1/schemas/verification-summary-v0.1.schema.json +43 -0
  312. proofbundle-3.6.1/scripts/_build_anchor_fixture.py +43 -0
  313. proofbundle-3.6.1/scripts/audit_candidate_matrix.py +605 -0
  314. proofbundle-3.6.1/scripts/branch_base_check.py +89 -0
  315. proofbundle-3.6.1/scripts/build_reproducible.py +147 -0
  316. proofbundle-3.6.1/scripts/check_version_and_changelog.py +121 -0
  317. proofbundle-3.6.1/scripts/claims_hygiene_check.py +422 -0
  318. proofbundle-3.6.1/scripts/demo.sh +28 -0
  319. proofbundle-3.6.1/scripts/demo_tamper.sh +17 -0
  320. proofbundle-3.6.1/scripts/doc_link_check.py +74 -0
  321. proofbundle-3.6.1/scripts/findings_register.py +228 -0
  322. proofbundle-3.6.1/scripts/fork_pr_secret_isolation.py +404 -0
  323. proofbundle-3.6.1/scripts/fuzz_soak.py +287 -0
  324. proofbundle-3.6.1/scripts/gen_findings_register.py +147 -0
  325. proofbundle-3.6.1/scripts/gen_synthetic_ots_fixture.py +97 -0
  326. proofbundle-3.6.1/scripts/mutation_check.py +457 -0
  327. proofbundle-3.6.1/scripts/pre_tag_audit_gate.py +177 -0
  328. proofbundle-3.6.1/scripts/readiness_pack_gate.py +119 -0
  329. proofbundle-3.6.1/scripts/readiness_pack_manifest.py +132 -0
  330. proofbundle-3.6.1/scripts/render_demo.py +91 -0
  331. proofbundle-3.6.1/scripts/rust_parity_gate.py +298 -0
  332. proofbundle-3.6.1/scripts/rust_parity_registry.json +313 -0
  333. proofbundle-3.6.1/scripts/test_manifest_gate.py +181 -0
  334. proofbundle-3.6.1/scripts/type_confusion_gate.py +262 -0
  335. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/__init__.py +1 -1
  336. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/_strict_json.py +56 -16
  337. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/assurance.py +1 -1
  338. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/budget.py +9 -0
  339. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/bundle.py +107 -15
  340. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/checkpoint.py +18 -0
  341. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/cli.py +88 -31
  342. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/decision.py +131 -49
  343. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/evalcard.py +9 -1
  344. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/evalclaim.py +17 -7
  345. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/hashalg.py +6 -0
  346. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/hf_evals.py +6 -1
  347. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/intoto.py +31 -13
  348. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/kbjwt.py +9 -3
  349. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/merkle.py +29 -1
  350. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/outcome.py +97 -23
  351. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/persample.py +11 -3
  352. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/policy.py +7 -0
  353. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/prereg.py +31 -5
  354. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/public_transparency.py +5 -0
  355. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/relation.py +73 -17
  356. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/relation_statement.py +39 -21
  357. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/renewal.py +13 -0
  358. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/run_ledger.py +37 -22
  359. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/sdjwt.py +9 -3
  360. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/sdjwt_vc.py +6 -0
  361. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/signature.py +6 -1
  362. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/statuslist.py +9 -3
  363. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/tlogproof.py +21 -2
  364. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/trust_pack.py +47 -40
  365. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/verification_summary.py +34 -22
  366. {proofbundle-3.6.0 → proofbundle-3.6.1/src/proofbundle.egg-info}/PKG-INFO +9 -1
  367. proofbundle-3.6.1/src/proofbundle.egg-info/SOURCES.txt +598 -0
  368. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle.egg-info/requires.txt +9 -0
  369. proofbundle-3.6.1/tests/conftest.py +96 -0
  370. proofbundle-3.6.1/tests/fixtures/anchors/chia_datalayer_proof.json +23 -0
  371. proofbundle-3.6.1/tests/fixtures/anchors/freetsa_receipt_anchor.json +14 -0
  372. proofbundle-3.6.1/tests/fixtures/checkpoint/PROVENANCE.json +39 -0
  373. proofbundle-3.6.1/tests/fixtures/checkpoint/gosumdb_known_keys.go +9 -0
  374. proofbundle-3.6.1/tests/fixtures/checkpoint/rekor_v2_checkpoint.txt +5 -0
  375. proofbundle-3.6.1/tests/fixtures/checkpoint/sumdb_latest.txt +5 -0
  376. proofbundle-3.6.1/tests/fixtures/checkpoint/trusted_root.json +126 -0
  377. proofbundle-3.6.1/tests/fixtures/ed25519_speccheck_cases.LICENSE +201 -0
  378. proofbundle-3.6.1/tests/fixtures/ed25519_speccheck_cases.README.md +31 -0
  379. proofbundle-3.6.1/tests/fixtures/ed25519_speccheck_cases.json +1 -0
  380. proofbundle-3.6.1/tests/fixtures/eee_arc_easy.json +44 -0
  381. proofbundle-3.6.1/tests/fixtures/inspect_logs/safety_refusal_demo.eval +0 -0
  382. proofbundle-3.6.1/tests/fixtures/lm_eval_arc_easy_real.json +114 -0
  383. proofbundle-3.6.1/tests/fixtures/markovian_anchor_confirmed.json +12 -0
  384. proofbundle-3.6.1/tests/fixtures/mldsa_acvp/PROVENANCE.json +21 -0
  385. proofbundle-3.6.1/tests/fixtures/mldsa_acvp/mldsa_sigver_slice.json +49 -0
  386. proofbundle-3.6.1/tests/fixtures/ots/PROVENANCE.json +123 -0
  387. proofbundle-3.6.1/tests/fixtures/ots/block358391.json +1 -0
  388. proofbundle-3.6.1/tests/fixtures/ots/hello-world.txt +1 -0
  389. proofbundle-3.6.1/tests/fixtures/ots/hello-world.txt.ots +0 -0
  390. proofbundle-3.6.1/tests/fixtures/ots/incomplete.txt +1 -0
  391. proofbundle-3.6.1/tests/fixtures/ots/incomplete.txt.ots +0 -0
  392. proofbundle-3.6.1/tests/fixtures/ots/known-and-unknown-notary.txt +2 -0
  393. proofbundle-3.6.1/tests/fixtures/ots/known-and-unknown-notary.txt.ots +0 -0
  394. proofbundle-3.6.1/tests/fixtures/ots/merkle2.txt +2 -0
  395. proofbundle-3.6.1/tests/fixtures/ots/merkle2.txt.ots +0 -0
  396. proofbundle-3.6.1/tests/fixtures/ots/synthetic-upgraded-sha256.block.json +6 -0
  397. proofbundle-3.6.1/tests/fixtures/ots/synthetic-upgraded-sha256.txt +1 -0
  398. proofbundle-3.6.1/tests/fixtures/ots/synthetic-upgraded-sha256.txt.ots +0 -0
  399. proofbundle-3.6.1/tests/fixtures/ots/two-calendars.txt +1 -0
  400. proofbundle-3.6.1/tests/fixtures/ots/two-calendars.txt.ots +0 -0
  401. proofbundle-3.6.1/tests/fixtures/promptfoo_results_v3.json +58 -0
  402. proofbundle-3.6.1/tests/fixtures/rekor_inclusion_25579.json +34 -0
  403. proofbundle-3.6.1/tests/fixtures/rfc6962_vectors.json +119 -0
  404. proofbundle-3.6.1/tests/fixtures/sdjwt_disclosure_vector.json +8 -0
  405. proofbundle-3.6.1/tests/fixtures/sdjwt_reference_eddsa.json +11 -0
  406. proofbundle-3.6.1/tests/fixtures/sdjwtvc/PROVENANCE.json +24 -0
  407. proofbundle-3.6.1/tests/fixtures/sdjwtvc/sdjwtvc_examples.txt +5 -0
  408. proofbundle-3.6.1/tests/fixtures/sdjwtvc/sdjwtvc_issuer_pubkey.json +9 -0
  409. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_audit_candidate_360.py +50 -40
  410. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_budget.py +11 -5
  411. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_conformance.py +6 -0
  412. proofbundle-3.6.1/tests/test_conformance_retention_361.py +56 -0
  413. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_content_root_property.py +3 -2
  414. proofbundle-3.6.1/tests/test_cross_format_singleton_361.py +72 -0
  415. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_dup_key_reject.py +29 -12
  416. proofbundle-3.6.1/tests/test_findings_register_rt10.py +233 -0
  417. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_fork_pr_secret_isolation.py +5 -1
  418. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_intoto_dsse.py +4 -3
  419. proofbundle-3.6.1/tests/test_jcs_mandatory_361.py +90 -0
  420. proofbundle-3.6.1/tests/test_legacy_assurance_deprecation_361.py +107 -0
  421. proofbundle-3.6.1/tests/test_manifest_lock.json +10 -0
  422. proofbundle-3.6.1/tests/test_never_raise_361.py +75 -0
  423. proofbundle-3.6.1/tests/test_never_raise_recursion_361.py +154 -0
  424. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_relation_property.py +6 -2
  425. proofbundle-3.6.1/tests/test_relation_same_key_361.py +84 -0
  426. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_relation_signer_target_340.py +6 -2
  427. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_relation_statement.py +6 -2
  428. proofbundle-3.6.1/tests/test_relation_subject_pin_361.py +266 -0
  429. proofbundle-3.6.1/tests/test_reproducible_build_361.py +78 -0
  430. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_roadmap_frontload_foundations.py +45 -0
  431. proofbundle-3.6.1/tests/test_sdist_packaging_361.py +76 -0
  432. proofbundle-3.6.1/tests/test_sibling_never_raise_361.py +602 -0
  433. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_tlogproof.py +20 -2
  434. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_trust_pack.py +7 -3
  435. proofbundle-3.6.0/src/proofbundle.egg-info/SOURCES.txt +0 -213
  436. {proofbundle-3.6.0 → proofbundle-3.6.1}/LICENSE +0 -0
  437. {proofbundle-3.6.0 → proofbundle-3.6.1}/README.md +0 -0
  438. {proofbundle-3.6.0 → proofbundle-3.6.1}/setup.cfg +0 -0
  439. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/_inspect_registry.py +0 -0
  440. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/_integration.py +0 -0
  441. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/adapters/__init__.py +0 -0
  442. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/adapters/_provenance.py +0 -0
  443. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/adapters/eee.py +0 -0
  444. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/adapters/inspect_ai.py +0 -0
  445. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/adapters/lm_eval.py +0 -0
  446. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/adapters/promptfoo.py +0 -0
  447. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/adapters/samples.py +0 -0
  448. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/anchors.py +0 -0
  449. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/anchors_chia.py +0 -0
  450. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/anchors_chia_add.py +0 -0
  451. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/anchors_markovian.py +0 -0
  452. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/anchors_ots.py +0 -0
  453. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/anchors_rfc3161.py +0 -0
  454. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/automation_verdict.py +0 -0
  455. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/beacon.py +0 -0
  456. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/canonical.py +0 -0
  457. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/demo.py +0 -0
  458. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/dsse.py +0 -0
  459. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/eee_eval_schema.json +0 -0
  460. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/emit.py +0 -0
  461. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/errors.py +0 -0
  462. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/evidence_pack.py +0 -0
  463. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/experimental/__init__.py +0 -0
  464. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/experimental/enclave.py +0 -0
  465. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/inspect_hook.py +0 -0
  466. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/policies/decision-receipt-template-v1.json +0 -0
  467. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/policies/research-preview-v1.json +0 -0
  468. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/policies/strict-eval-authenticated-root-template-v1.json +0 -0
  469. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/policies/strict-eval-template-v1.json +0 -0
  470. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/policies/strict-prereg-template-v1.json +0 -0
  471. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/policy_profiles.py +0 -0
  472. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/pqsig.py +0 -0
  473. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/py.typed +0 -0
  474. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/pytest_plugin.py +0 -0
  475. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/sdjwt_issue.py +0 -0
  476. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle/subject_binding.py +0 -0
  477. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle.egg-info/dependency_links.txt +0 -0
  478. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle.egg-info/entry_points.txt +0 -0
  479. {proofbundle-3.6.0 → proofbundle-3.6.1}/src/proofbundle.egg-info/top_level.txt +0 -0
  480. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_adapters.py +0 -0
  481. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_adversarial.py +0 -0
  482. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchor_hardening_321.py +0 -0
  483. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchor_longevity_property.py +0 -0
  484. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchor_target_trustedtime.py +0 -0
  485. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchors_chia.py +0 -0
  486. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchors_chia_add.py +0 -0
  487. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchors_chia_claims.py +0 -0
  488. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchors_generic.py +0 -0
  489. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchors_markovian.py +0 -0
  490. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchors_ots.py +0 -0
  491. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_anchors_rfc3161.py +0 -0
  492. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_assurance.py +0 -0
  493. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_automation_verdict.py +0 -0
  494. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_beacon.py +0 -0
  495. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_branch_base_check.py +0 -0
  496. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_bundle.py +0 -0
  497. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_bundle_robustness.py +0 -0
  498. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_canonical.py +0 -0
  499. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_checkpoint.py +0 -0
  500. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_checkpoint_external_vectors.py +0 -0
  501. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_checkpoint_quorum_property.py +0 -0
  502. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_claims_hygiene.py +0 -0
  503. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_cli.py +0 -0
  504. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_cli_eval.py +0 -0
  505. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_cli_require_anchor.py +0 -0
  506. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_cosignature.py +0 -0
  507. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_cosignature_mldsa.py +0 -0
  508. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_anchors.py +0 -0
  509. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_cli.py +0 -0
  510. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_evidence.py +0 -0
  511. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_fuzz.py +0 -0
  512. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_hardening.py +0 -0
  513. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_policy.py +0 -0
  514. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_schema.py +0 -0
  515. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_validator_api.py +0 -0
  516. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_decision_verify.py +0 -0
  517. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_demo.py +0 -0
  518. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_docs_truth.py +0 -0
  519. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_dsse_adversarial.py +0 -0
  520. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_ed25519_semantics.py +0 -0
  521. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_eee.py +0 -0
  522. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_emit.py +0 -0
  523. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_enclave_assurance.py +0 -0
  524. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_eval_claim_schema.py +0 -0
  525. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_eval_evidence_class.py +0 -0
  526. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_evalcard.py +0 -0
  527. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_evalclaim.py +0 -0
  528. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_evidence_pack.py +0 -0
  529. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_examples.py +0 -0
  530. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_experimental_enclave.py +0 -0
  531. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_fuzz_parsers.py +0 -0
  532. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_fuzz_soak_regression.py +0 -0
  533. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_hashalg.py +0 -0
  534. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_hf_entry_verify_eee_digest.py +0 -0
  535. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_hf_evals.py +0 -0
  536. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_inspect_hook.py +0 -0
  537. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_intoto.py +0 -0
  538. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_intoto_claims_hygiene.py +0 -0
  539. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_intoto_content_root_migration.py +0 -0
  540. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_intoto_eval_result.py +0 -0
  541. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_intoto_examples.py +0 -0
  542. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_intoto_spec_diff.py +0 -0
  543. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_intoto_svr.py +0 -0
  544. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_kbjwt.py +0 -0
  545. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_lens_review_fixes_3_1_3.py +0 -0
  546. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_merkle.py +0 -0
  547. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_merkle_consistency_property.py +0 -0
  548. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_merkle_property.py +0 -0
  549. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_mldsa_acvp_vectors.py +0 -0
  550. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_official_vectors.py +0 -0
  551. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_ok_semantics.py +0 -0
  552. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_ots_calendar_hardening.py +0 -0
  553. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_ots_external_vectors.py +0 -0
  554. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_outcome_receiver_corroboration.py +0 -0
  555. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_outcome_verify.py +0 -0
  556. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_oversized_int_guard.py +0 -0
  557. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_persample.py +0 -0
  558. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_pinned_key_validation.py +0 -0
  559. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_policy_explain_lint.py +0 -0
  560. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_policy_lifecycle_purpose.py +0 -0
  561. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_policy_profiles.py +0 -0
  562. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_policy_templates.py +0 -0
  563. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_pqsig.py +0 -0
  564. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_predicate_type_enforcement.py +0 -0
  565. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_prereg.py +0 -0
  566. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_promptfoo.py +0 -0
  567. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_provenance.py +0 -0
  568. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_public_transparency.py +0 -0
  569. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_pytest_plugin.py +0 -0
  570. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_rekor_interop.py +0 -0
  571. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_relation_profile.py +0 -0
  572. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_relation_statement_rust_parity.py +0 -0
  573. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_release_integrity_gate.py +0 -0
  574. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_renewal.py +0 -0
  575. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_renewal_external_token_glue.py +0 -0
  576. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_renewal_policy.py +0 -0
  577. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_renewal_signed.py +0 -0
  578. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_rfc6962_external_vectors.py +0 -0
  579. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_root_authenticity.py +0 -0
  580. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_run_ledger.py +0 -0
  581. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_rust_parity_gate.py +0 -0
  582. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_schema.py +0 -0
  583. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_schema_parity.py +0 -0
  584. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_sdjwt_adversarial.py +0 -0
  585. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_sdjwt_duplicate_cnf.py +0 -0
  586. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_sdjwt_issue.py +0 -0
  587. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_sdjwt_reference.py +0 -0
  588. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_sdjwt_resource_budget.py +0 -0
  589. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_sdjwt_vc.py +0 -0
  590. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_sdjwt_verify_binding.py +0 -0
  591. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_sdjwtvc_external_vectors.py +0 -0
  592. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_signature.py +0 -0
  593. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_statuslist.py +0 -0
  594. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_subject_binding.py +0 -0
  595. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_tree_context_authenticity.py +0 -0
  596. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_trust_pack_crypto_agility.py +0 -0
  597. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_trust_pack_outcome_receivers_role.py +0 -0
  598. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_trust_pack_payloadtype_negatives.py +0 -0
  599. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_trust_policy.py +0 -0
  600. {proofbundle-3.6.0 → proofbundle-3.6.1}/tests/test_verification_summary.py +0 -0
  601. {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.0
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
+ }