xoonya 3.1.17 → 3.2.1

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 (240) hide show
  1. package/README.md +97 -74
  2. package/RELEASE_NOTES.md +1 -1
  3. package/START_HERE.md +38 -134
  4. package/bin/xoonya-first-run.js +22 -10
  5. package/bin/xoonya.js +61 -29
  6. package/lib/native_verify.js +1918 -0
  7. package/package.json +19 -42
  8. package/scripts/verify_release_candidate.js +243 -116
  9. package/scripts/verify_vectors.js +351 -104
  10. package/verify.js +95 -0
  11. package/.env.example +0 -10
  12. package/CARRIED_HANDOFF_DEMO.md +0 -60
  13. package/COMPATIBILITY_NOTE.md +0 -27
  14. package/CROSS_RUNTIME_POSTURE.md +0 -77
  15. package/EXAMPLE_PATHS.md +0 -53
  16. package/FINAL_CONTRACT.md +0 -445
  17. package/PARTNER_READY_PATH.md +0 -67
  18. package/PUBLIC_DEMO_SCRIPT.md +0 -79
  19. package/SERVICE_CONTRACT.md +0 -207
  20. package/TERMINOLOGY.md +0 -55
  21. package/WHY_XYTARA_XOONYA.md +0 -43
  22. package/XNYA_CONFORMANCE_MARK.md +0 -78
  23. package/XNYA_REFERENCE_IMPLEMENTATIONS.md +0 -157
  24. package/XOONYA_DEFAULT_PATH_MODEL.md +0 -63
  25. package/XOONYA_FOLLOWTHROUGH_TRUTH_MODEL.md +0 -63
  26. package/XOONYA_NATIVE_ATOM_SPEC.md +0 -184
  27. package/XOONYA_NATIVE_PROOF_FORMAT.md +0 -570
  28. package/XOONYA_NATIVE_STANDARD_GOVERNANCE.md +0 -119
  29. package/XOONYA_PROOF_TRUTH_MODEL.md +0 -58
  30. package/bin/xoonya-release.js +0 -1367
  31. package/bin/xoonya-review.js +0 -70
  32. package/examples/integration_boundary_walkthrough.js +0 -37
  33. package/examples/package_quickstart.js +0 -1007
  34. package/examples/partner_proof_walkthrough.js +0 -68
  35. package/examples/proof_review_walkthrough.js +0 -66
  36. package/examples/review_carried_handoff.js +0 -72
  37. package/index.js +0 -31
  38. package/integrations/PROOF_INTEGRATION_PROCESS.md +0 -45
  39. package/integrations/examples/example-third-party-verifier-registration.record.json +0 -22
  40. package/integrations/registration-record.schema.json +0 -99
  41. package/integrations/registry-snapshot.schema.json +0 -36
  42. package/integrations/registry.js +0 -636
  43. package/integrations/views.js +0 -36
  44. package/lib/adapter_certification_contract.js +0 -90
  45. package/lib/announcement_pack.js +0 -61
  46. package/lib/artifact_distribution_lane_contract.js +0 -54
  47. package/lib/asyncapi_contract.js +0 -135
  48. package/lib/auth_interop_contract.js +0 -69
  49. package/lib/authority_binding_lifecycle_contract.js +0 -182
  50. package/lib/bridge_intelligence.js +0 -102
  51. package/lib/cloudevents_contract.js +0 -79
  52. package/lib/crypto_agility_matrix.js +0 -131
  53. package/lib/default_path_contract.js +0 -380
  54. package/lib/ecosystem_entry.js +0 -64
  55. package/lib/erc8004_proof_lane_contract.js +0 -64
  56. package/lib/event_system_lane_contract.js +0 -76
  57. package/lib/external_proof_import_lane_contract.js +0 -87
  58. package/lib/feature_control_lane_contract.js +0 -54
  59. package/lib/followthrough_truth_contract.js +0 -214
  60. package/lib/framework_lane_contract.js +0 -76
  61. package/lib/governance_disputes_summary.js +0 -36
  62. package/lib/governance_intelligence.js +0 -108
  63. package/lib/identity_interop_contract.js +0 -83
  64. package/lib/integration_matrix_contract.js +0 -81
  65. package/lib/launch_narrative.js +0 -53
  66. package/lib/machine_identity_registry_contract.js +0 -199
  67. package/lib/major_rails_proof_lane_contract.js +0 -87
  68. package/lib/offline_verifiability_recovery_contract.js +0 -155
  69. package/lib/openapi_contract.js +0 -227
  70. package/lib/operational_receipt_contract.js +0 -165
  71. package/lib/outreach_proof.js +0 -71
  72. package/lib/phase_10_closeout_pack.js +0 -45
  73. package/lib/phase_10_completion_pack.js +0 -76
  74. package/lib/phase_10_decision_record_pack.js +0 -54
  75. package/lib/phase_10_decision_resolution_pack.js +0 -53
  76. package/lib/phase_10_demand_signal_adapters_proof_pack.js +0 -74
  77. package/lib/phase_10_ecosystem_backlog_triage_proof_pack.js +0 -74
  78. package/lib/phase_10_freeze_baseline_pack.js +0 -67
  79. package/lib/phase_10_freeze_review_pack.js +0 -64
  80. package/lib/phase_10_gate_pack.js +0 -57
  81. package/lib/phase_10_long_tail_continuity_pack.js +0 -80
  82. package/lib/phase_10_long_tail_ecosystem_pack.js +0 -68
  83. package/lib/phase_10_niche_extension_registry_proof_pack.js +0 -74
  84. package/lib/phase_1_claude_mcp_pack.js +0 -60
  85. package/lib/phase_1_claude_mcp_proof_pack.js +0 -57
  86. package/lib/phase_1_ecosystem_pack.js +0 -51
  87. package/lib/phase_1_openai_codex_pack.js +0 -60
  88. package/lib/phase_1_openai_codex_proof_pack.js +0 -57
  89. package/lib/phase_2_base_proof_pack.js +0 -71
  90. package/lib/phase_2_base_usdc_proof_pack.js +0 -72
  91. package/lib/phase_2_closeout_pack.js +0 -65
  92. package/lib/phase_2_completion_pack.js +0 -113
  93. package/lib/phase_2_decision_record_pack.js +0 -66
  94. package/lib/phase_2_decision_resolution_pack.js +0 -69
  95. package/lib/phase_2_eth_proof_pack.js +0 -70
  96. package/lib/phase_2_evm_base_proof_pack.js +0 -73
  97. package/lib/phase_2_evm_proof_pack.js +0 -71
  98. package/lib/phase_2_flip_preview_pack.js +0 -60
  99. package/lib/phase_2_freeze_review_pack.js +0 -99
  100. package/lib/phase_2_gate_pack.js +0 -77
  101. package/lib/phase_2_payment_rails_pack.js +0 -71
  102. package/lib/phase_2_usdc_proof_pack.js +0 -71
  103. package/lib/phase_3_brc_proof_pack.js +0 -81
  104. package/lib/phase_3_bsv_teranode_proof_pack.js +0 -81
  105. package/lib/phase_3_closeout_pack.js +0 -62
  106. package/lib/phase_3_completion_pack.js +0 -92
  107. package/lib/phase_3_decision_record_pack.js +0 -64
  108. package/lib/phase_3_decision_resolution_pack.js +0 -69
  109. package/lib/phase_3_freeze_baseline_pack.js +0 -67
  110. package/lib/phase_3_freeze_review_pack.js +0 -80
  111. package/lib/phase_3_gate_pack.js +0 -76
  112. package/lib/phase_3_metanet_proof_pack.js +0 -81
  113. package/lib/phase_3_native_bsv_pack.js +0 -89
  114. package/lib/phase_3_native_continuity_pack.js +0 -82
  115. package/lib/phase_4_attestation_proof_pack.js +0 -75
  116. package/lib/phase_4_closeout_pack.js +0 -45
  117. package/lib/phase_4_completion_pack.js +0 -82
  118. package/lib/phase_4_decision_record_pack.js +0 -54
  119. package/lib/phase_4_decision_resolution_pack.js +0 -45
  120. package/lib/phase_4_erc8004_proof_pack.js +0 -76
  121. package/lib/phase_4_freeze_baseline_pack.js +0 -67
  122. package/lib/phase_4_freeze_review_pack.js +0 -68
  123. package/lib/phase_4_gate_pack.js +0 -58
  124. package/lib/phase_4_identity_registry_proof_pack.js +0 -75
  125. package/lib/phase_4_identity_trust_pack.js +0 -73
  126. package/lib/phase_4_trust_continuity_pack.js +0 -86
  127. package/lib/phase_5_antelope_proof_pack.js +0 -76
  128. package/lib/phase_5_closeout_pack.js +0 -44
  129. package/lib/phase_5_completion_pack.js +0 -82
  130. package/lib/phase_5_decision_record_pack.js +0 -54
  131. package/lib/phase_5_decision_resolution_pack.js +0 -45
  132. package/lib/phase_5_freeze_baseline_pack.js +0 -67
  133. package/lib/phase_5_freeze_review_pack.js +0 -68
  134. package/lib/phase_5_gate_pack.js +0 -58
  135. package/lib/phase_5_major_rails_continuity_pack.js +0 -86
  136. package/lib/phase_5_major_rails_pack.js +0 -74
  137. package/lib/phase_5_proton_xpr_proof_pack.js +0 -76
  138. package/lib/phase_5_solana_proof_pack.js +0 -76
  139. package/lib/phase_6_autogen_proof_pack.js +0 -74
  140. package/lib/phase_6_closeout_pack.js +0 -46
  141. package/lib/phase_6_completion_pack.js +0 -77
  142. package/lib/phase_6_decision_record_pack.js +0 -54
  143. package/lib/phase_6_decision_resolution_pack.js +0 -53
  144. package/lib/phase_6_framework_continuity_pack.js +0 -81
  145. package/lib/phase_6_framework_runtime_pack.js +0 -68
  146. package/lib/phase_6_freeze_baseline_pack.js +0 -68
  147. package/lib/phase_6_freeze_review_pack.js +0 -65
  148. package/lib/phase_6_gate_pack.js +0 -59
  149. package/lib/phase_6_langchain_proof_pack.js +0 -74
  150. package/lib/phase_6_langgraph_proof_pack.js +0 -74
  151. package/lib/phase_6_semantic_kernel_proof_pack.js +0 -74
  152. package/lib/phase_7_closeout_pack.js +0 -45
  153. package/lib/phase_7_completion_pack.js +0 -85
  154. package/lib/phase_7_decision_record_pack.js +0 -53
  155. package/lib/phase_7_decision_resolution_pack.js +0 -53
  156. package/lib/phase_7_event_system_continuity_pack.js +0 -89
  157. package/lib/phase_7_event_system_pack.js +0 -76
  158. package/lib/phase_7_freeze_baseline_pack.js +0 -74
  159. package/lib/phase_7_freeze_review_pack.js +0 -65
  160. package/lib/phase_7_gate_pack.js +0 -58
  161. package/lib/phase_7_kafka_proof_pack.js +0 -76
  162. package/lib/phase_7_mqtt_proof_pack.js +0 -76
  163. package/lib/phase_7_nats_proof_pack.js +0 -76
  164. package/lib/phase_7_webhook_event_bus_proof_pack.js +0 -76
  165. package/lib/phase_8_closeout_pack.js +0 -46
  166. package/lib/phase_8_completion_pack.js +0 -82
  167. package/lib/phase_8_decision_record_pack.js +0 -54
  168. package/lib/phase_8_decision_resolution_pack.js +0 -53
  169. package/lib/phase_8_external_receipt_import_proof_pack.js +0 -74
  170. package/lib/phase_8_external_result_import_proof_pack.js +0 -74
  171. package/lib/phase_8_freeze_baseline_pack.js +0 -71
  172. package/lib/phase_8_freeze_review_pack.js +0 -64
  173. package/lib/phase_8_gate_pack.js +0 -58
  174. package/lib/phase_8_proof_bridge_continuity_pack.js +0 -86
  175. package/lib/phase_8_proof_bridges_pack.js +0 -72
  176. package/lib/phase_8_proof_bundle_normalization_proof_pack.js +0 -74
  177. package/lib/phase_9_closeout_pack.js +0 -46
  178. package/lib/phase_9_completion_pack.js +0 -82
  179. package/lib/phase_9_custody_refs_proof_pack.js +0 -74
  180. package/lib/phase_9_decision_record_pack.js +0 -54
  181. package/lib/phase_9_decision_resolution_pack.js +0 -53
  182. package/lib/phase_9_freeze_baseline_pack.js +0 -71
  183. package/lib/phase_9_freeze_review_pack.js +0 -64
  184. package/lib/phase_9_gate_pack.js +0 -58
  185. package/lib/phase_9_operator_accounting_bridges_proof_pack.js +0 -74
  186. package/lib/phase_9_treasury_connectivity_pack.js +0 -72
  187. package/lib/phase_9_treasury_continuity_pack.js +0 -86
  188. package/lib/phase_9_treasury_destinations_proof_pack.js +0 -74
  189. package/lib/phase_program_pack.js +0 -47
  190. package/lib/proof_bridge_lane_contract.js +0 -82
  191. package/lib/proof_truth_contract.js +0 -224
  192. package/lib/provenance_lane_contract.js +0 -54
  193. package/lib/provider_lane_contract.js +0 -67
  194. package/lib/public_surface_policy_contract.js +0 -111
  195. package/lib/publish_plan.js +0 -51
  196. package/lib/release_candidate.js +0 -50
  197. package/lib/release_center.js +0 -1037
  198. package/lib/release_history.js +0 -206
  199. package/lib/release_manifest.js +0 -114
  200. package/lib/release_pack.js +0 -391
  201. package/lib/result_package_trust_lane_contract.js +0 -74
  202. package/lib/review_intelligence.js +0 -100
  203. package/lib/role_freeze.js +0 -436
  204. package/lib/shared_signals_lane_contract.js +0 -54
  205. package/lib/signed_audit_provenance_contract.js +0 -93
  206. package/lib/telemetry_lane_contract.js +0 -54
  207. package/lib/treasury_proof_lane_contract.js +0 -83
  208. package/lib/trust_intelligence.js +0 -106
  209. package/lib/trust_portability_boundary_contract.js +0 -66
  210. package/lib/trust_portability_pack.js +0 -224
  211. package/lib/verification_service_pack.js +0 -149
  212. package/proof_sdk.js +0 -6692
  213. package/reference/python/README.md +0 -35
  214. package/reference/python/requirements-optional.txt +0 -1
  215. package/reference/python/verify_vectors.py +0 -223
  216. package/reference/python/xnya_reference.py +0 -810
  217. package/reference/rust/Cargo.toml +0 -11
  218. package/reference/rust/README.md +0 -28
  219. package/reference/rust/src/lib.rs +0 -87
  220. package/scripts/registry_cli.js +0 -157
  221. package/scripts/verify_all.js +0 -603
  222. package/scripts/verify_control_plane_contracts.js +0 -34
  223. package/scripts/verify_control_plane_routes.js +0 -70
  224. package/scripts/verify_examples.js +0 -19
  225. package/scripts/verify_external_proof_import_gate.js +0 -84
  226. package/scripts/verify_external_proof_signature.js +0 -142
  227. package/scripts/verify_forgery_resistance.js +0 -281
  228. package/scripts/verify_integrations.js +0 -170
  229. package/scripts/verify_native_hybrid_design_gate.js +0 -114
  230. package/scripts/verify_paid_execute.js +0 -133
  231. package/scripts/verify_paywall_flag.js +0 -86
  232. package/scripts/verify_reference_promotion_gate.js +0 -74
  233. package/scripts/verify_reference_python.js +0 -49
  234. package/scripts/verify_reference_python_crypto.js +0 -87
  235. package/scripts/verify_reference_rust_scaffold.js +0 -50
  236. package/scripts/verify_service.js +0 -3038
  237. package/scripts/verify_tooling.js +0 -1251
  238. package/scripts/verify_trust_portability.js +0 -56
  239. package/scripts/verify_verification_services.js +0 -56
  240. package/server.js +0 -4430
@@ -1,35 +0,0 @@
1
- # XNYA Python Candidate Reference
2
-
3
- This folder contains an independent Python candidate for the XNYA atom, payload profile, and line-rate frame vector floor.
4
-
5
- It does not import the JavaScript implementation. It is not yet a full `XNYA-compatible` reference implementation because full promotion also requires proof-envelope parity, round-trip generation, and conformance-mark review.
6
-
7
- Run:
8
-
9
- ```bash
10
- python reference/python/verify_vectors.py
11
- ```
12
-
13
- Current boundary:
14
-
15
- - implemented: XNYA atom v1/v2 creation, parsing, verification, deterministic reject codes
16
- - implemented: XNYP payload profile encoding/parsing
17
- - implemented: line-rate frame checksum vector
18
- - implemented: canonical event hash parity
19
- - implemented: receipt emission for external assertion, native digest, legacy OP_RETURN, and native anchored methods
20
- - implemented: proof-bundle build/verify parity for non-signed native methods
21
- - implemented: adversarial reason parity for non-signed proof-bundle checks
22
- - implemented when optional dependency exists: Ed25519 native signed verification with `cryptography`
23
- - implemented without optional dependency: deterministic `native_signature_crypto_dependency_missing` gate
24
- - not claimed: always-on native signed cryptographic verification
25
- - not claimed: secp256k1 or P-256 Python signature-suite verification
26
- - not claimed: PQ/hybrid verification
27
- - not claimed: external issuer, chain, custody, auth, or settlement truth
28
-
29
- Optional Ed25519 suite check:
30
-
31
- ```bash
32
- npm run verify:reference-python-crypto
33
- ```
34
-
35
- The crypto-enabled command creates a temporary isolated virtual environment, installs `requirements-optional.txt`, and requires the Ed25519 vector to verify.
@@ -1 +0,0 @@
1
- cryptography>=42.0.0
@@ -1,223 +0,0 @@
1
- #!/usr/bin/env python3
2
- """Verify Python XNYA candidate helpers against the published vector floor."""
3
-
4
- from __future__ import annotations
5
-
6
- import json
7
- import pathlib
8
- import sys
9
-
10
- from xnya_reference import (
11
- XnyaReferenceError,
12
- build_proof_bundle,
13
- canonicalize_event,
14
- create_atom_v1,
15
- create_atom_v2,
16
- emit_receipt,
17
- encode_payload_profile,
18
- hash_event,
19
- line_rate_frame_checksum,
20
- parse_atom,
21
- parse_payload_profile,
22
- verify_proof_bundle,
23
- verify_atom,
24
- _ed25519_crypto_available,
25
- )
26
-
27
-
28
- ROOT = pathlib.Path(__file__).resolve().parents[2]
29
-
30
-
31
- def load_json(relative_path: str) -> dict:
32
- with (ROOT / relative_path).open("r", encoding="utf-8") as handle:
33
- return json.load(handle)
34
-
35
-
36
- def assert_equal(actual, expected, message: str) -> None:
37
- if actual != expected:
38
- raise AssertionError(f"{message}: expected {expected!r}, got {actual!r}")
39
-
40
-
41
- def verify_atom_vectors() -> tuple[int, int]:
42
- vectors_doc = load_json("vectors/native-atom-vectors.json")
43
- identity = vectors_doc["identity_material_hex"]
44
- payload = vectors_doc["payload_ascii"].encode("ascii")
45
- positive_count = 0
46
- adversarial_count = 0
47
- for vector in vectors_doc["vectors"]:
48
- actual = (
49
- create_atom_v1(identity, payload if "with-payload" in vector["id"] else None)
50
- if vector["atom_version"] == "xoonya-native-atom/v1"
51
- else create_atom_v2(identity, payload if "with-payload" in vector["id"] else None)
52
- )
53
- assert_equal(actual["atom_hex"], vector["atom_hex"], f"{vector['id']} atom hex")
54
- assert_equal(actual["agent_id"], vector["agent_id"], f"{vector['id']} agent id")
55
- assert_equal(actual["payload_hash_sha256"], vector["payload_hash_sha256"], f"{vector['id']} payload hash")
56
- parsed = parse_atom(vector["atom_hex"])
57
- assert_equal(parsed.byte_length, vector["byte_length"], f"{vector['id']} byte length")
58
- if "atom_hash_sha256" in vector:
59
- assert_equal(parsed.atom_hash_sha256, vector["atom_hash_sha256"], f"{vector['id']} atom hash")
60
- verification = verify_atom(vector["atom_hex"], identity_material_hex=identity)
61
- assert_equal(verification["valid"], True, f"{vector['id']} verify")
62
- positive_count += 1
63
-
64
- for vector in vectors_doc["adversarial"]:
65
- try:
66
- result = verify_atom(
67
- vector["atom_hex"],
68
- identity_material_hex=vector.get("identity_material_hex"),
69
- payload=vector.get("payload_ascii", "").encode("ascii") if "payload_ascii" in vector else None,
70
- )
71
- if result["valid"]:
72
- raise AssertionError(f"{vector['id']} unexpectedly passed")
73
- assert_equal(result["error_code"], vector["expected_error_code"], f"{vector['id']} error code")
74
- except XnyaReferenceError as error:
75
- assert_equal(error.code, vector["expected_error_code"], f"{vector['id']} error code")
76
- adversarial_count += 1
77
- return positive_count, adversarial_count
78
-
79
-
80
- def verify_payload_profile_vectors() -> tuple[int, int]:
81
- vectors_doc = load_json("vectors/native-payload-profile-vectors.json")
82
- profile_vector = vectors_doc["profile_vector"]
83
- encoded = encode_payload_profile(profile_vector["input"])
84
- expected = profile_vector["expected"]
85
- assert_equal(encoded["canonical_bytes_hex"], expected["canonical_bytes_hex"], "payload profile canonical bytes")
86
- assert_equal(encoded["payload_hash_sha256"], expected["payload_hash_sha256"], "payload profile hash")
87
- assert_equal(encoded["schema_hash_sha256"], expected["schema_hash_sha256"], "payload profile schema hash")
88
- assert_equal(encoded["field_order"], expected["field_order"], "payload profile field order")
89
- parsed = parse_payload_profile(expected["canonical_bytes_hex"])
90
- assert_equal(parsed["payload_hash_sha256"], expected["payload_hash_sha256"], "payload profile parsed hash")
91
-
92
- frame_vector = vectors_doc["line_rate_frame_vector"]
93
- checksum = line_rate_frame_checksum(bytes.fromhex(frame_vector["atom_hex"]))
94
- assert_equal(checksum, frame_vector["checksum_hex"], "line-rate frame checksum")
95
- assert_equal(frame_vector["atom_hex"] + checksum, frame_vector["frame_hex"], "line-rate frame hex")
96
- return 1, 1
97
-
98
-
99
- def verify_proof_vectors() -> tuple[int, int, int, int]:
100
- vectors_doc = load_json("vectors/conformance-vectors.json")
101
- positive_count = 0
102
- verified_count = 0
103
- signed_crypto_gated_count = 0
104
- signed_crypto_verified_count = 0
105
- signed_dependency_missing_count = 0
106
- anchored_count = 0
107
- ed25519_available = _ed25519_crypto_available()
108
- for vector in vectors_doc["vectors"]:
109
- event = vector["event"]
110
- expected = vector["expected"]
111
- canonical_event = canonicalize_event(event)
112
- assert_equal(hash_event(canonical_event), expected["event_commitment"], f"{vector['id']} event commitment")
113
- options = dict(vector.get("receipt_options", {}))
114
- if expected["receipt"].get("algorithm") == "xoonya-native-hybrid-v1":
115
- assert_equal(expected["receipt"]["native_proof"]["method"], "xoonya-native-hybrid-v1", f"{vector['id']} native hybrid method")
116
- bundle = {
117
- "version": expected["proof_bundle_version"],
118
- "ceb": canonical_event,
119
- "receipt": expected["receipt"],
120
- }
121
- verification = verify_proof_bundle(bundle)
122
- assert_equal(verification["valid"], False, f"{vector['id']} python hybrid boundary")
123
- assert_equal(verification["reason"], "native_hybrid_runtime_unavailable_in_python_candidate", f"{vector['id']} python hybrid reason")
124
- positive_count += 1
125
- continue
126
- if expected["receipt"].get("algorithm") == "xoonya-native-signed-v1":
127
- assert_equal(expected["receipt"]["native_proof"]["method"], "xoonya-native-signed-v1", f"{vector['id']} native signed method")
128
- assert_equal(expected["receipt"]["native_proof"]["signature_suite"], options.get("signature_suite"), f"{vector['id']} native signed suite")
129
- bundle = {
130
- "version": expected["proof_bundle_version"],
131
- "ceb": canonical_event,
132
- "receipt": expected["receipt"],
133
- }
134
- verification = verify_proof_bundle(bundle)
135
- if ed25519_available:
136
- assert_equal(verification["valid"], True, f"{vector['id']} native signed verification")
137
- assert_equal(verification["verification_state"], "verified_native_signature", f"{vector['id']} native signed state")
138
- signed_crypto_verified_count += 1
139
- verified_count += 1
140
- else:
141
- assert_equal(verification["valid"], False, f"{vector['id']} native signed dependency gate")
142
- assert_equal(verification["reason"], "native_signature_crypto_dependency_missing", f"{vector['id']} native signed dependency reason")
143
- signed_dependency_missing_count += 1
144
- signed_crypto_gated_count += 1
145
- positive_count += 1
146
- continue
147
- if expected["receipt"].get("algorithm") == "xoonya-native-anchored-v1":
148
- options["anchors"] = vector["anchors"]
149
- receipt = emit_receipt(canonical_event, options)
150
- assert_equal(receipt, expected["receipt"], f"{vector['id']} emitted receipt")
151
- bundle_input = {"event": event, "receipt_options": options}
152
- if "anchors" in vector:
153
- bundle_input["anchors"] = vector["anchors"]
154
- bundle = build_proof_bundle(bundle_input)
155
- assert_equal(bundle["version"], expected["proof_bundle_version"], f"{vector['id']} proof bundle version")
156
- assert_equal(bundle["receipt"], expected["receipt"], f"{vector['id']} proof bundle receipt")
157
- verification = verify_proof_bundle(bundle)
158
- assert_equal(verification["valid"], True, f"{vector['id']} proof bundle verification")
159
- if expected["receipt"].get("algorithm") == "xoonya-native-anchored-v1":
160
- anchored_count += 1
161
- verified_count += 1
162
- positive_count += 1
163
-
164
- adversarial_doc = load_json("vectors/adversarial-vectors.json")
165
- adversarial_count = 0
166
- for vector in adversarial_doc["vectors"]:
167
- if vector["kind"] == "canonicalize_event_error":
168
- try:
169
- canonicalize_event(vector["event"])
170
- raise AssertionError(f"{vector['id']} unexpectedly passed")
171
- except ValueError as error:
172
- assert_equal(str(error), vector["expected_reason"], f"{vector['id']} reason")
173
- adversarial_count += 1
174
- continue
175
- if vector["kind"] != "verify_bundle_reason":
176
- continue
177
- result = verify_proof_bundle(vector["bundle"])
178
- expected_reason = vector["expected_reason"]
179
- if vector["bundle"].get("receipt", {}).get("algorithm") == "xoonya-native-hybrid-v1":
180
- expected_reason = "native_hybrid_runtime_unavailable_in_python_candidate"
181
- if expected_reason == "native_signature_invalid" and not ed25519_available:
182
- expected_reason = "native_signature_crypto_dependency_missing"
183
- assert_equal(result["valid"], False, f"{vector['id']} adversarial should fail")
184
- assert_equal(result["reason"], expected_reason, f"{vector['id']} adversarial reason")
185
- adversarial_count += 1
186
- return positive_count, verified_count, signed_crypto_gated_count, adversarial_count + anchored_count, signed_crypto_verified_count, signed_dependency_missing_count
187
-
188
-
189
- def main() -> int:
190
- atom_positive, atom_adversarial = verify_atom_vectors()
191
- payload_positive, frame_positive = verify_payload_profile_vectors()
192
- (
193
- proof_positive,
194
- proof_verified,
195
- signed_crypto_gated,
196
- proof_adversarial_and_anchor,
197
- signed_crypto_verified,
198
- signed_dependency_missing,
199
- ) = verify_proof_vectors()
200
- summary = {
201
- "ok": True,
202
- "product": "xoonya",
203
- "category": "xnya-python-reference-vector-parity",
204
- "status": "candidate_atom_payload_and_proof_bundle_vector_parity_passed",
205
- "atom_vector_count": atom_positive,
206
- "atom_adversarial_count": atom_adversarial,
207
- "payload_profile_vector_count": payload_positive,
208
- "line_rate_frame_vector_count": frame_positive,
209
- "proof_bundle_vector_count": proof_positive,
210
- "proof_bundle_verified_vector_count": proof_verified,
211
- "native_signed_crypto_gated_vector_count": signed_crypto_gated,
212
- "native_signed_crypto_verified_vector_count": signed_crypto_verified,
213
- "native_signature_crypto_dependency_missing_count": signed_dependency_missing,
214
- "verified_signature_suite_count": 1 if signed_crypto_verified else 0,
215
- "proof_adversarial_and_anchor_check_count": proof_adversarial_and_anchor,
216
- "boundary": "python_candidate_verifies_ed25519_native_signed_vectors_when_cryptography_dependency_is_available_other_signature_suites_stay_gated"
217
- }
218
- print(json.dumps(summary, indent=2, sort_keys=True))
219
- return 0
220
-
221
-
222
- if __name__ == "__main__":
223
- sys.exit(main())