xoonya 2.14.0 → 3.0.0

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.
@@ -1,47 +1,52 @@
1
1
  "use strict";
2
2
 
3
3
  const assert = require("assert");
4
+ const crypto = require("crypto");
4
5
  const sdk = require("..");
5
6
 
6
- function buildHybridAttemptBundle() {
7
+ function runNativeHybridVerification() {
8
+ const readiness = sdk.summarizexoonyaNativeHybridReadinessPack();
9
+ assert.strictEqual(readiness.status, "implemented", "hybrid readiness must be implemented");
10
+ assert.strictEqual(readiness.implemented_hybrid_suite_count >= 1, true, "hybrid readiness must expose implemented suites");
11
+ assert.strictEqual(
12
+ readiness.current_decision.includes("runtime_supported"),
13
+ true,
14
+ "hybrid readiness must describe runtime-supported suites"
15
+ );
16
+
7
17
  const event = sdk.canonicalizeEvent({
8
18
  version: "canonical-event-bundle/v1",
9
- domain_id: "hybrid.gate",
19
+ domain_id: "hybrid.live",
10
20
  sequence: "1",
11
21
  actor_id: "agent-hybrid",
12
22
  adapter_source: "verify_native_hybrid_design_gate",
13
- event_type: "native.hybrid.attempt",
23
+ event_type: "native.hybrid.verify",
14
24
  event_hash: "89".repeat(32)
15
25
  });
26
+
27
+ const classical = crypto.generateKeyPairSync("ed25519");
28
+ const pq = crypto.generateKeyPairSync("ml-dsa-65");
16
29
  const receipt = sdk.emitReceipt(event, {
17
30
  agent_identity: "agent-hybrid-signing",
18
- algorithm: "xoonya-native-sha256-v1"
19
- });
20
- return sdk.buildProofBundle({
21
- ceb: event,
22
- receipt: {
23
- ...receipt,
24
- algorithm: "xoonya-native-hybrid-v1",
25
- signature: "xoonya-native-hybrid-v1:design-gated-placeholder"
26
- }
31
+ algorithm: "xoonya-native-hybrid-v1",
32
+ identity_ref: "did:xoonya:agent-hybrid-signing",
33
+ classical_signature_suite: "ed25519",
34
+ pq_signature_suite: "ml-dsa-65",
35
+ classical_public_key_pem: classical.publicKey.export({ type: "spki", format: "pem" }),
36
+ classical_private_key_pem: classical.privateKey.export({ type: "pkcs8", format: "pem" }),
37
+ pq_public_key_pem: pq.publicKey.export({ type: "spki", format: "pem" }),
38
+ pq_private_key_pem: pq.privateKey.export({ type: "pkcs8", format: "pem" })
27
39
  });
28
- }
29
-
30
- function runNativeHybridDesignGateVerification() {
31
- const readiness = sdk.summarizexoonyaNativeHybridReadinessPack();
32
- assert.strictEqual(readiness.status, "design_gated", "hybrid readiness must stay design gated");
33
- assert.strictEqual(
34
- readiness.current_decision.includes("do_not_claim_pqc"),
35
- true,
36
- "hybrid readiness must forbid premature PQ claims"
37
- );
38
40
 
39
- const verification = sdk.verifyProofBundle(buildHybridAttemptBundle());
40
- assert.strictEqual(verification.valid, false, "hybrid method must not verify before validators exist");
41
+ const verification = sdk.verifyProofBundle(sdk.buildProofBundle({
42
+ ceb: event,
43
+ receipt
44
+ }));
45
+ assert.strictEqual(verification.valid, true, "hybrid method must verify");
41
46
  assert.strictEqual(
42
- verification.reason,
43
- "native_hybrid_design_gated",
44
- "hybrid method must fail with deterministic design-gate reason"
47
+ verification.verification_state,
48
+ "verified_native_hybrid_signature",
49
+ "hybrid method verification state mismatch"
45
50
  );
46
51
 
47
52
  const downgradeEvent = sdk.canonicalizeEvent({
@@ -56,7 +61,7 @@ function runNativeHybridDesignGateVerification() {
56
61
  const detachedReceipt = sdk.emitReceipt(downgradeEvent, {
57
62
  agent_identity: "agent-hybrid-signing",
58
63
  algorithm: "detached-assertion-v1",
59
- signature: "xoonya-native-hybrid-v1:attempted-downgrade"
64
+ signature: receipt.signature
60
65
  });
61
66
  const downgradeVerification = sdk.verifyProofBundle(sdk.buildProofBundle({
62
67
  ceb: downgradeEvent,
@@ -72,18 +77,19 @@ function runNativeHybridDesignGateVerification() {
72
77
  return {
73
78
  ok: true,
74
79
  product: "xoonya",
75
- category: "xoonya-native-hybrid-design-gate-verification",
80
+ category: "xoonya-native-hybrid-verification",
76
81
  method: "xoonya-native-hybrid-v1",
77
82
  readiness_status: readiness.status,
78
- deterministic_reject_reason: verification.reason,
83
+ implemented_hybrid_suites: readiness.implemented_hybrid_suites,
84
+ verification_state: verification.verification_state,
79
85
  downgrade_reject_reason: downgradeVerification.reason,
80
- boundary: "pq_or_hybrid_verification_is_not_claimed_until_real_validators_vectors_and_error_codes_exist"
86
+ boundary: "registered_runtime_supported_vector_covered_hybrid_suites_may_be_claimed"
81
87
  };
82
88
  }
83
89
 
84
90
  function main() {
85
91
  const json = process.argv.includes("--json");
86
- const summary = runNativeHybridDesignGateVerification();
92
+ const summary = runNativeHybridVerification();
87
93
  if (json) {
88
94
  process.stdout.write(`${JSON.stringify(summary, null, 2)}\n`);
89
95
  return;
@@ -93,7 +99,7 @@ function main() {
93
99
  "xoonya verify:native-hybrid-gate passed",
94
100
  `method: ${summary.method}`,
95
101
  `readiness: ${summary.readiness_status}`,
96
- `deterministic reject: ${summary.deterministic_reject_reason}`,
102
+ `verification state: ${summary.verification_state}`,
97
103
  `downgrade reject: ${summary.downgrade_reject_reason}`
98
104
  ].join("\n") + "\n"
99
105
  );
@@ -104,5 +110,5 @@ if (require.main === module) {
104
110
  }
105
111
 
106
112
  module.exports = {
107
- runNativeHybridDesignGateVerification
113
+ runNativeHybridVerification
108
114
  };
@@ -64,9 +64,9 @@ function main() {
64
64
  assert.strictEqual(conformanceSummary.conformance_count >= 8, true, "conformance vector count too small");
65
65
  assert.strictEqual(conformanceSummary.adversarial_count >= 8, true, "adversarial vector count too small");
66
66
  assert.strictEqual(
67
- conformanceSummary.adversarial_reasons.includes("native_hybrid_design_gated"),
67
+ conformanceSummary.adversarial_reasons.includes("native_hybrid_pq_signature_invalid"),
68
68
  true,
69
- "native hybrid design-gate adversarial reason missing"
69
+ "native hybrid adversarial reason missing"
70
70
  );
71
71
  assert.deepStrictEqual(
72
72
  conformanceSummary.verification_methods,
@@ -79,6 +79,7 @@ function main() {
79
79
  "sd-jwt-vc-v1",
80
80
  "signed-envelope-v1",
81
81
  "xoonya-native-anchored-v1",
82
+ "xoonya-native-hybrid-v1",
82
83
  "xoonya-native-sha256-v1",
83
84
  "xoonya-native-signed-v1"
84
85
  ],
@@ -99,7 +100,7 @@ function main() {
99
100
  assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_reference_python_crypto.js"), true, "npm pack dry-run missing Python crypto reference verifier script");
100
101
  assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_reference_promotion_gate.js"), true, "npm pack dry-run missing reference promotion gate verifier script");
101
102
  assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_reference_rust_scaffold.js"), true, "npm pack dry-run missing Rust reference scaffold verifier script");
102
- assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_native_hybrid_design_gate.js"), true, "npm pack dry-run missing native hybrid design-gate verifier script");
103
+ assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_native_hybrid_design_gate.js"), true, "npm pack dry-run missing native hybrid verifier script");
103
104
  assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_verification_services.js"), true, "npm pack dry-run missing verification services verifier script");
104
105
  assert.strictEqual(dryRun.files.some((entry) => entry.path === "scripts/verify_all.js"), true, "npm pack dry-run missing package verifier script");
105
106
  assert.strictEqual(dryRun.files.some((entry) => entry.path === "vectors/conformance-vectors.json"), true, "npm pack dry-run missing conformance vectors");
@@ -127,6 +127,65 @@ async function main() {
127
127
  assert.strictEqual(trustPortabilityDetailResponse.status, 200, 'trust portability detail route failed');
128
128
  assert.strictEqual(trustPortabilityDetailResponse.json.profile.profile_id, 'agent_identity_portability', 'trust portability detail profile missing');
129
129
 
130
+ const proofTruthResponse = await getJson(baseUrl, '/v1/proof-truth');
131
+ assert.strictEqual(proofTruthResponse.status, 200, 'proof truth route failed');
132
+ assert.strictEqual(proofTruthResponse.json.category, 'xoonya-proof-truth-model', 'proof truth category missing');
133
+ assert.strictEqual(proofTruthResponse.json.pack_version, 'xoonya-proof-truth-model-v1', 'proof truth version missing');
134
+ assert.strictEqual(proofTruthResponse.json.canonical_objects.length >= 6, true, 'proof truth object count missing');
135
+
136
+ const proofTruthSummaryResponse = await getJson(baseUrl, '/v1/proof-truth/summary');
137
+ assert.strictEqual(proofTruthSummaryResponse.status, 200, 'proof truth summary route failed');
138
+ assert.strictEqual(proofTruthSummaryResponse.json.category, 'xoonya-proof-truth-model', 'proof truth summary category missing');
139
+ assert.strictEqual(proofTruthSummaryResponse.json.pack_version, 'xoonya-proof-truth-model-v1', 'proof truth summary version missing');
140
+
141
+ const proofBundleTruthDetailResponse = await getJson(baseUrl, '/v1/proof-truth/proof_bundle');
142
+ assert.strictEqual(proofBundleTruthDetailResponse.status, 200, 'proof truth proof_bundle detail route failed');
143
+ assert.strictEqual(proofBundleTruthDetailResponse.json.object.object_id, 'proof_bundle', 'proof truth proof_bundle detail missing');
144
+
145
+ const xnyaTruthDetailResponse = await getJson(baseUrl, '/v1/proof-truth/xnya_native_artifact');
146
+ assert.strictEqual(xnyaTruthDetailResponse.status, 200, 'proof truth xnya detail route failed');
147
+ assert.strictEqual(xnyaTruthDetailResponse.json.object.object_id, 'xnya_native_artifact', 'proof truth xnya detail missing');
148
+
149
+ const defaultPathResponse = await getJson(baseUrl, '/v1/default-path');
150
+ assert.strictEqual(defaultPathResponse.status, 200, 'default path route failed');
151
+ assert.strictEqual(defaultPathResponse.json.category, 'xoonya-default-path-model', 'default path category missing');
152
+ assert.strictEqual(defaultPathResponse.json.pack_version, 'xoonya-default-path-model-v1', 'default path version missing');
153
+ assert.strictEqual(defaultPathResponse.json.supported_surface_count >= 5, true, 'default path surface count missing');
154
+
155
+ const defaultPathSummaryResponse = await getJson(baseUrl, '/v1/default-path/summary');
156
+ assert.strictEqual(defaultPathSummaryResponse.status, 200, 'default path summary route failed');
157
+ assert.strictEqual(defaultPathSummaryResponse.json.category, 'xoonya-default-path-model', 'default path summary category missing');
158
+ assert.strictEqual(defaultPathSummaryResponse.json.pack_version, 'xoonya-default-path-model-v1', 'default path summary version missing');
159
+ assert.strictEqual(defaultPathSummaryResponse.json.default_path_stage_count, 7, 'default path stage count missing');
160
+
161
+ const cliDefaultPathDetailResponse = await getJson(baseUrl, '/v1/default-path/cli_terminal');
162
+ assert.strictEqual(cliDefaultPathDetailResponse.status, 200, 'cli default path detail route failed');
163
+ assert.strictEqual(cliDefaultPathDetailResponse.json.surface.surface_id, 'cli_terminal', 'cli default path detail missing');
164
+
165
+ const handoffDefaultPathDetailResponse = await getJson(baseUrl, '/v1/default-path/carried_handoff_review');
166
+ assert.strictEqual(handoffDefaultPathDetailResponse.status, 200, 'carried handoff default path detail route failed');
167
+ assert.strictEqual(handoffDefaultPathDetailResponse.json.surface.surface_id, 'carried_handoff_review', 'carried handoff default path detail missing');
168
+
169
+ const followthroughTruthResponse = await getJson(baseUrl, '/v1/followthrough-truth');
170
+ assert.strictEqual(followthroughTruthResponse.status, 200, 'followthrough truth route failed');
171
+ assert.strictEqual(followthroughTruthResponse.json.category, 'xoonya-followthrough-truth-model', 'followthrough truth category missing');
172
+ assert.strictEqual(followthroughTruthResponse.json.pack_version, 'xoonya-followthrough-truth-model-v1', 'followthrough truth version missing');
173
+ assert.strictEqual(followthroughTruthResponse.json.profile_count >= 4, true, 'followthrough truth profile count missing');
174
+
175
+ const followthroughTruthSummaryResponse = await getJson(baseUrl, '/v1/followthrough-truth/summary');
176
+ assert.strictEqual(followthroughTruthSummaryResponse.status, 200, 'followthrough truth summary route failed');
177
+ assert.strictEqual(followthroughTruthSummaryResponse.json.category, 'xoonya-followthrough-truth-model', 'followthrough truth summary category missing');
178
+ assert.strictEqual(followthroughTruthSummaryResponse.json.pack_version, 'xoonya-followthrough-truth-model-v1', 'followthrough truth summary version missing');
179
+ assert.strictEqual(followthroughTruthSummaryResponse.json.bounded_live_profile_count >= 3, true, 'followthrough truth bounded live count missing');
180
+
181
+ const bridgeFollowthroughDetailResponse = await getJson(baseUrl, '/v1/followthrough-truth/bridge_followthrough');
182
+ assert.strictEqual(bridgeFollowthroughDetailResponse.status, 200, 'bridge followthrough detail route failed');
183
+ assert.strictEqual(bridgeFollowthroughDetailResponse.json.profile.profile_id, 'bridge_followthrough', 'bridge followthrough detail missing');
184
+
185
+ const governanceFollowthroughDetailResponse = await getJson(baseUrl, '/v1/followthrough-truth/governance_followthrough');
186
+ assert.strictEqual(governanceFollowthroughDetailResponse.status, 200, 'governance followthrough detail route failed');
187
+ assert.strictEqual(governanceFollowthroughDetailResponse.json.profile.profile_id, 'governance_followthrough', 'governance followthrough detail missing');
188
+
130
189
  const providerLaneResponse = await getJson(baseUrl, '/v1/providers');
131
190
  assert.strictEqual(providerLaneResponse.status, 200, 'provider lane route failed');
132
191
  assert.strictEqual(providerLaneResponse.json.product, 'xoonya', 'provider lane product missing');
@@ -1063,18 +1122,18 @@ async function main() {
1063
1122
  const nativeHybridReadinessResponse = await getJson(baseUrl, '/v1/proof-center/native-hybrid-readiness');
1064
1123
  assert.strictEqual(nativeHybridReadinessResponse.status, 200, 'native hybrid readiness route failed');
1065
1124
  assert.strictEqual(nativeHybridReadinessResponse.json.method, 'xoonya-native-hybrid-v1', 'native hybrid readiness method missing');
1066
- assert.strictEqual(nativeHybridReadinessResponse.json.status, 'design_gated', 'native hybrid readiness gate missing');
1125
+ assert.strictEqual(nativeHybridReadinessResponse.json.status, 'implemented', 'native hybrid readiness implementation missing');
1067
1126
  assert.strictEqual(nativeHybridReadinessResponse.json.implemented_classical_suites.some((entry) => entry.suite === 'secp256k1'), true, 'native hybrid readiness secp256k1 suite missing');
1068
- assert.strictEqual(nativeHybridReadinessResponse.json.gated_candidate_suites.some((entry) => entry.suite === 'dilithium'), true, 'native hybrid readiness pq candidate missing');
1127
+ assert.strictEqual(nativeHybridReadinessResponse.json.implemented_hybrid_suites.some((entry) => entry.suite === 'ed25519+ml-dsa-65'), true, 'native hybrid readiness implemented suite missing');
1069
1128
  const nativeHybridReadinessSummaryResponse = await getJson(baseUrl, '/v1/proof-center/native-hybrid-readiness/summary');
1070
1129
  assert.strictEqual(nativeHybridReadinessSummaryResponse.status, 200, 'native hybrid readiness summary route failed');
1071
1130
  assert.strictEqual(nativeHybridReadinessSummaryResponse.json.category, 'xoonya-native-hybrid-readiness-summary', 'native hybrid readiness summary category missing');
1072
- assert.strictEqual(nativeHybridReadinessSummaryResponse.json.current_decision.includes('do_not_claim_pqc'), true, 'native hybrid readiness summary boundary missing');
1131
+ assert.strictEqual(nativeHybridReadinessSummaryResponse.json.current_decision.includes('runtime_supported'), true, 'native hybrid readiness summary boundary missing');
1073
1132
  const nativeStandardizationResponse = await getJson(baseUrl, '/v1/proof-center/native-standardization');
1074
1133
  assert.strictEqual(nativeStandardizationResponse.status, 200, 'native standardization route failed');
1075
1134
  assert.strictEqual(nativeStandardizationResponse.json.canonical_magic, 'XNYA', 'native standardization magic missing');
1076
1135
  assert.strictEqual(nativeStandardizationResponse.json.conformance_mark_policy.mark, 'XNYA-compatible', 'native standardization mark missing');
1077
- assert.strictEqual(nativeStandardizationResponse.json.conformance_mark_policy.not_allowed_when.includes('pqc_or_hybrid_support_is_claimed_without_validators_and_vectors'), true, 'native standardization pq boundary missing');
1136
+ assert.strictEqual(nativeStandardizationResponse.json.conformance_mark_policy.not_allowed_when.includes('unregistered_or_runtime_unsupported_pqc_or_hybrid_support_is_claimed'), true, 'native standardization pq boundary missing');
1078
1137
  const nativeStandardizationSummaryResponse = await getJson(baseUrl, '/v1/proof-center/native-standardization/summary');
1079
1138
  assert.strictEqual(nativeStandardizationSummaryResponse.status, 200, 'native standardization summary route failed');
1080
1139
  assert.strictEqual(nativeStandardizationSummaryResponse.json.category, 'xoonya-native-standardization-summary', 'native standardization summary category missing');
@@ -30,7 +30,35 @@ function runVectorVerification() {
30
30
  assert.strictEqual(eventCommitment, vector.expected.event_commitment, `${vector.id} event commitment mismatch`);
31
31
 
32
32
  const receipt = sdk.emitReceipt(vector.event, vector.receipt_options || {});
33
- assert.deepStrictEqual(receipt, vector.expected.receipt, `${vector.id} receipt mismatch`);
33
+ if (vector.expected.receipt.algorithm === "xoonya-native-hybrid-v1") {
34
+ assert.strictEqual(receipt.version, vector.expected.receipt.version, `${vector.id} hybrid receipt version mismatch`);
35
+ assert.strictEqual(receipt.receipt_id, vector.expected.receipt.receipt_id, `${vector.id} hybrid receipt id mismatch`);
36
+ assert.strictEqual(receipt.agent_identity, vector.expected.receipt.agent_identity, `${vector.id} hybrid agent mismatch`);
37
+ assert.strictEqual(receipt.domain_id, vector.expected.receipt.domain_id, `${vector.id} hybrid domain mismatch`);
38
+ assert.strictEqual(receipt.sequence, vector.expected.receipt.sequence, `${vector.id} hybrid sequence mismatch`);
39
+ assert.strictEqual(receipt.event_commitment, vector.expected.receipt.event_commitment, `${vector.id} hybrid event commitment mismatch`);
40
+ assert.strictEqual(receipt.algorithm, vector.expected.receipt.algorithm, `${vector.id} hybrid algorithm mismatch`);
41
+ assert.strictEqual(receipt.native_proof.method, vector.expected.receipt.native_proof.method, `${vector.id} hybrid method mismatch`);
42
+ assert.strictEqual(receipt.native_proof.hybrid_suite, vector.expected.receipt.native_proof.hybrid_suite, `${vector.id} hybrid suite mismatch`);
43
+ assert.strictEqual(receipt.native_proof.identity_ref, vector.expected.receipt.native_proof.identity_ref, `${vector.id} hybrid identity ref mismatch`);
44
+ assert.strictEqual(receipt.native_proof.hybrid_public_key_ref, vector.expected.receipt.native_proof.hybrid_public_key_ref, `${vector.id} hybrid public key ref mismatch`);
45
+ assert.strictEqual(receipt.native_proof.classical_public_key_ref, vector.expected.receipt.native_proof.classical_public_key_ref, `${vector.id} hybrid classical key ref mismatch`);
46
+ assert.strictEqual(receipt.native_proof.pq_public_key_ref, vector.expected.receipt.native_proof.pq_public_key_ref, `${vector.id} hybrid pq key ref mismatch`);
47
+ assert.deepStrictEqual(receipt.native_proof.classical_public_key_material, vector.expected.receipt.native_proof.classical_public_key_material, `${vector.id} hybrid classical key material mismatch`);
48
+ assert.deepStrictEqual(receipt.native_proof.pq_public_key_material, vector.expected.receipt.native_proof.pq_public_key_material, `${vector.id} hybrid pq key material mismatch`);
49
+ assert.strictEqual(receipt.native_proof.proof_material.signing_material_sha256, vector.expected.receipt.native_proof.proof_material.signing_material_sha256, `${vector.id} hybrid signing material hash mismatch`);
50
+ assert.strictEqual(typeof receipt.native_proof.proof_material.classical_signature, "string", `${vector.id} hybrid classical signature missing`);
51
+ assert.strictEqual(receipt.native_proof.proof_material.classical_signature.length > 10, true, `${vector.id} hybrid classical signature too small`);
52
+ assert.strictEqual(typeof receipt.native_proof.proof_material.pq_signature, "string", `${vector.id} hybrid pq signature missing`);
53
+ assert.strictEqual(receipt.native_proof.proof_material.pq_signature.length > 100, true, `${vector.id} hybrid pq signature too small`);
54
+ assert.strictEqual(
55
+ receipt.signature,
56
+ `xoonya-native-hybrid-v1:${receipt.native_proof.hybrid_suite}:${receipt.native_proof.proof_material.classical_signature}.${receipt.native_proof.proof_material.pq_signature}`,
57
+ `${vector.id} hybrid compact signature mismatch`
58
+ );
59
+ } else {
60
+ assert.deepStrictEqual(receipt, vector.expected.receipt, `${vector.id} receipt mismatch`);
61
+ }
34
62
 
35
63
  const bundle = sdk.buildProofBundle({
36
64
  ceb: vector.event,
package/server.js CHANGED
@@ -85,6 +85,21 @@ const {
85
85
  getTrustPortabilityProfile,
86
86
  summarizeTrustPortabilityPack
87
87
  } = require('./lib/trust_portability_pack');
88
+ const {
89
+ buildProofTruthModelPack,
90
+ summarizeProofTruthModelPack,
91
+ getProofTruthObjectDetail
92
+ } = require('./lib/proof_truth_contract');
93
+ const {
94
+ buildDefaultPathPack,
95
+ summarizeDefaultPathPack,
96
+ getDefaultPathSurfaceDetail
97
+ } = require('./lib/default_path_contract');
98
+ const {
99
+ buildFollowthroughTruthPack,
100
+ summarizeFollowthroughTruthPack,
101
+ getFollowthroughTruthProfileDetail
102
+ } = require('./lib/followthrough_truth_contract');
88
103
  const {
89
104
  buildOpenApiDocument,
90
105
  summarizeOpenApiDocument,
@@ -796,6 +811,90 @@ async function routeRequest(req, res) {
796
811
  return;
797
812
  }
798
813
 
814
+ if (req.method === 'GET' && url.pathname === '/v1/proof-truth') {
815
+ sendJson(res, 200, buildProofTruthModelPack());
816
+ return;
817
+ }
818
+
819
+ if (req.method === 'GET' && url.pathname === '/v1/proof-truth/summary') {
820
+ sendJson(res, 200, summarizeProofTruthModelPack());
821
+ return;
822
+ }
823
+
824
+ if (req.method === 'GET' && url.pathname.startsWith('/v1/proof-truth/')) {
825
+ const suffix = decodeURIComponent(url.pathname.slice('/v1/proof-truth/'.length));
826
+ if (suffix && suffix !== 'summary') {
827
+ const objectDetail = getProofTruthObjectDetail(suffix);
828
+ if (!objectDetail) {
829
+ sendJson(res, 404, { ok: false, error: 'proof_truth_object_not_found' });
830
+ return;
831
+ }
832
+ sendJson(res, 200, {
833
+ ok: true,
834
+ product: 'xoonya',
835
+ category: 'xoonya-proof-truth-detail',
836
+ object: objectDetail
837
+ });
838
+ return;
839
+ }
840
+ }
841
+
842
+ if (req.method === 'GET' && url.pathname === '/v1/default-path') {
843
+ sendJson(res, 200, buildDefaultPathPack());
844
+ return;
845
+ }
846
+
847
+ if (req.method === 'GET' && url.pathname === '/v1/default-path/summary') {
848
+ sendJson(res, 200, summarizeDefaultPathPack());
849
+ return;
850
+ }
851
+
852
+ if (req.method === 'GET' && url.pathname.startsWith('/v1/default-path/')) {
853
+ const suffix = decodeURIComponent(url.pathname.slice('/v1/default-path/'.length));
854
+ if (suffix && suffix !== 'summary') {
855
+ const surface = getDefaultPathSurfaceDetail(suffix);
856
+ if (!surface) {
857
+ sendJson(res, 404, { ok: false, error: 'default_path_surface_not_found' });
858
+ return;
859
+ }
860
+ sendJson(res, 200, {
861
+ ok: true,
862
+ product: 'xoonya',
863
+ category: 'xoonya-default-path-surface-detail',
864
+ surface
865
+ });
866
+ return;
867
+ }
868
+ }
869
+
870
+ if (req.method === 'GET' && url.pathname === '/v1/followthrough-truth') {
871
+ sendJson(res, 200, buildFollowthroughTruthPack());
872
+ return;
873
+ }
874
+
875
+ if (req.method === 'GET' && url.pathname === '/v1/followthrough-truth/summary') {
876
+ sendJson(res, 200, summarizeFollowthroughTruthPack());
877
+ return;
878
+ }
879
+
880
+ if (req.method === 'GET' && url.pathname.startsWith('/v1/followthrough-truth/')) {
881
+ const suffix = decodeURIComponent(url.pathname.slice('/v1/followthrough-truth/'.length));
882
+ if (suffix && suffix !== 'summary') {
883
+ const profile = getFollowthroughTruthProfileDetail(suffix);
884
+ if (!profile) {
885
+ sendJson(res, 404, { ok: false, error: 'followthrough_truth_profile_not_found' });
886
+ return;
887
+ }
888
+ sendJson(res, 200, {
889
+ ok: true,
890
+ product: 'xoonya',
891
+ category: 'xoonya-followthrough-truth-profile-detail',
892
+ profile
893
+ });
894
+ return;
895
+ }
896
+ }
897
+
799
898
  if (req.method === 'GET' && url.pathname === '/v1/providers') {
800
899
  sendJson(res, 200, buildProviderLanePack());
801
900
  return;
@@ -159,33 +159,6 @@
159
159
  },
160
160
  "expected_reason": "verification_method_unsupported"
161
161
  },
162
- {
163
- "id": "reject-native-hybrid-design-gated",
164
- "kind": "verify_bundle_reason",
165
- "bundle": {
166
- "version": "proof-bundle/v1",
167
- "ceb": {
168
- "version": "canonical-event-bundle/v1",
169
- "domain_id": "vectors.native",
170
- "sequence": "7",
171
- "actor_id": "agent-native",
172
- "adapter_source": "vector-suite",
173
- "event_type": "native.event",
174
- "event_hash": "3434343434343434343434343434343434343434343434343434343434343434"
175
- },
176
- "receipt": {
177
- "version": "receipt/v1",
178
- "receipt_id": "7c4930d56110f0b9623f79025c7be4789e0c0a6155b2645b243ce4c126f53e96",
179
- "agent_identity": "agent-native-signing",
180
- "domain_id": "vectors.native",
181
- "sequence": "7",
182
- "event_commitment": "7361278f20b4d6c6f305ebfb490989b0faa3928823954d1852a7d7e78d92d8cd",
183
- "algorithm": "xoonya-native-hybrid-v1",
184
- "signature": "xoonya-native-hybrid-v1:design-gated-placeholder"
185
- }
186
- },
187
- "expected_reason": "native_hybrid_design_gated"
188
- },
189
162
  {
190
163
  "id": "reject-replayed-receipt-sequence",
191
164
  "kind": "verify_bundle_reason",
@@ -267,6 +240,102 @@
267
240
  },
268
241
  "expected_reason": "signature_method_mismatch"
269
242
  },
243
+ {
244
+ "id": "reject-native-hybrid-pq-signature-tamper",
245
+ "kind": "verify_bundle_reason",
246
+ "bundle": {
247
+ "version": "proof-bundle/v1",
248
+ "ceb": {
249
+ "version": "canonical-event-bundle/v1",
250
+ "domain_id": "vectors.native.hybrid",
251
+ "sequence": "11",
252
+ "actor_id": "agent-native-hybrid",
253
+ "adapter_source": "vector-suite",
254
+ "event_type": "native.hybrid.event",
255
+ "event_hash": "7878787878787878787878787878787878787878787878787878787878787878"
256
+ },
257
+ "receipt": {
258
+ "version": "receipt/v1",
259
+ "receipt_id": "e425569c2d6ff3768ad2f6026e53ac30b35bc763cccfbbd39eb1a89bded363c9",
260
+ "agent_identity": "agent-native-hybrid-key",
261
+ "domain_id": "vectors.native.hybrid",
262
+ "sequence": "11",
263
+ "event_commitment": "038909c465d532f536bf2224a3fe18db46ad1672b1cf7df152dd5586354e6a1e",
264
+ "algorithm": "xoonya-native-hybrid-v1",
265
+ "native_proof": {
266
+ "method": "xoonya-native-hybrid-v1",
267
+ "hybrid_suite": "ed25519+ml-dsa-65",
268
+ "identity_ref": "did:xoonya:agent-native-hybrid-key",
269
+ "hybrid_public_key_ref": "ed25519+ml-dsa-65-hybrid-spki-sha256:625b3dcdc278dbeebf2933dffe10f045dd7e0d4c26ec028ed45df967cd4783b6",
270
+ "classical_public_key_ref": "ed25519-spki-sha256:cfe0edcaec323648d600ef93820a9a185c01fa6b5dc981572a2a2c8aa3e89447",
271
+ "pq_public_key_ref": "ml-dsa-65-spki-sha256:15912c8aef9ca907bc700af72aed43a5a5401aa19ecf03ac3ce1c0f6d2563a54",
272
+ "classical_public_key_material": {
273
+ "format": "spki-pem",
274
+ "value": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEASl0Xu0vZRLgFIrdzXoH8L2EX3VlMFHwlrz3xWqsz09k=\n-----END PUBLIC KEY-----\n"
275
+ },
276
+ "pq_public_key_material": {
277
+ "format": "spki-pem",
278
+ "value": "-----BEGIN PUBLIC KEY-----\n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\nthoRK7+z\n-----END PUBLIC KEY-----\n"
279
+ },
280
+ "proof_material": {
281
+ "signing_material_sha256": "90428e067086cba5d076f0ae420a48f13177c2927dfa5f7c8e70d18bcdaad9d8",
282
+ "classical_signature": "ubSwFZ8wt4iLHEhMsMJ2YB6HVAmVAI25KEyoFbSmQNRcpnI7Gz5H9GwusneInS7M5WjaM5cVK1fa-sptFL9aDw",
283
+ "pq_signature": "ApCw-CfAbAiF4czyils2cjdyVMqRaNbYls9vp3VeT1D2vUOIC06KtCQRGXy7pjYtGnUjLxCpwmGu1sJJq3a6SDBV-S-bEoG3KW9VdMWWzIuqWdD25jMwfP8LcZxd5zKyB7uarExTc0zn7eHy4j7jQtKa9VuzT9RCxnvyH9OcFwn1TKTJfjXax0Wk4CUtqi1CviGmYlh2VZlBf5E7NcRzQbP5UueAc6pT9OuRMjtHp8zyC_lw6ufL9sjJ1KSVEfGUzEigeNHebgb910d-LChnTSqoleNpjjLC7qGfdHcmcbk8VyuufbCeFxcHGjPfwkqDcchnI3QU_zUjgwsr0xZNu12pGVPunm39HfC6Hd0-VTPR4c0NK7XFylg5TgfsFe_pj0a3X_aWKjkyPOgsvOihQY6AVs7z_qQpfeKXQiCmw83HmhaHUyinUHIKnirNxl7ZkI5QmlB2RG6SB_4Ks5E9ETQArRPeq-Erhe4sEQBBSowJLi5vXYuMsjKT1oLdfTsvxnkjHXZyIg4DOgpEFTUDWAROqzzk6Rn7MKTIEA1Fj_g13nn0dkZsAGwPanky2j7pERejxCjcIKNuFsym0eZ_tJxArUakg-FUz0pMxo2W-kMxcG3Afc6w_dgd5dpoJpDAr6-Wrp10poxyFRi-Yi-HvyVT84uTgKRtPJN5xFUB0lL1C4C-dPuHkSUvQ1VARsbiVZX3o_m5ebBGivi7F8f5ZQmm_FJOH2jrwjNVE_kIBqtq-ecnwN5tns2aSxWeZ1uEaKyoQOjp52Bwo0Vh90gzmy_arJGJkMZq-krgrRIz6dOdR7s6s0_URDbjHBDkbmCcptU0FPTRrtiHdB6WeRUUKzyUrJOD7x437jd4pbckYXA92N08hDfuf9Y5VsaAVQfbKlT8zki6xIdap-E4RPrc8zwZ2VlXX1NlUHignIIzlnwlt90-D3D8xPn697zNuwGeNomMoMSRmhPs7wNw1TtL6Z6j8cclw56KHQT0ndFe5uiBnwApwHqKMjNIVkq6T21IzwgxUaR2h-LUQ06IgjUTvi9I2LbRYF4wJ2WAr-INXxDMmPhDg4oTJxvEaz4CTaJ0kCKEJ8GKxB6_ublEOzkUKxm7hXbmaVoM9nt7E04lDDj8oimredDB2Ye7trnC6rfb3KsofAjf02jkViE7bv_ZZ9-TW5H7pqmHaq1iOc8pJV_icFDKw8t5F5VO1Kf-BpPGE01QJ_tf9hXyIgRlw4kcmyhIQs558Laq9BOB1_itsbY8L0VTQd8aOH-a3X9utC4MXqHplL1BXjfooXBw5Daep54LA8cJwqrwOb15lj-2RUpiBDBu1mXX8kGP0Bf2SnYBrM7HDALZZOPDFGV8a343gEVJJXKOYuRgdLs0Dit4uVShmvahO0CyItPAMOEGBX5u89xEMpSdWpw2b1VkRiGeKdw7_kkWFUMHL7crC29IAD4IGkOMQc6K8QYL4etD6tE7yC6td4rwYAx4C4ZwcWFk1rPjFUr8i08aFQcR4JtK8zXJXuqcjpebIkoldMf_nZn7rwifMiSdMjNVBzo7XtoU3Be8H2Z3UzCNVOj_yeB5xfoY2ptlCqov7BF5Xmiquv6hHlvgwnnUQqTqeqOZiJVNMK-5_q4qllIjACycpxO4e2CXq355wUpUw_kqxiHn1VLox6z05LW7EELRn6soh7FCCKgFUo86_b05XM2XFqmkwYyAsbRuN2d95syRstwwCdHBNrzquMP4a-0hzAMJ5pcIJlY7ucI0URGcPvsYZt0K94LEmFZ1ZmlG-6uBNOrteQaNCsia-4ST53Utsddtwwz7Aec5JMqrcQQg6PvwP9Y_96nGUt3zFGxiSQb4iDJd0X-vqsM3HP6IYNA6Vkual0Gcf8pggM_rxjdUdC8aQfjEeCQHR7hYTt547EyP2djTdSKg9MvDYdtOdvyb-S_rjgSXnWBi-8l3y5rq6ZSm9fd2aHLq3YAshMzstDpuoxxSqWbVWixn8KrBAYbTizbV_6S7MaABan4_ProkQ9VDzkeNWtfxoRKY5eyji9V1LfCpGbSs6ZrR0XUzOXdFTJhnEIN3jYMDJyBGzPKzt3SGEJ9O9ClkE36feKFUUZVXaya7mN39e98NNBPjeC2ky8n7cms_uc6FGReu_uD6X44bI05bc17_HQNSHN4EkwNeGfrrwSdAvZ6jl3FOEsKOxkJua4qnejl8WSe0B6AMLrr9DsLxZeEFKQoKDe706L5nZUqEB06SpRT5gwrrNy3236e-mRMGO3MpBiiepFU22yKRWLFz_lUk_KIdFyECWhey8j7yL9EC85gS3-ZMWRVoADq7weKCu30CHIEvv7q3kJ0H_8r9V9wuNgRUlmkOiiUubuQxDASOgp7nxPh2GRNccufqAkls8gwPBwjAsdERtFlT0PWWiGNHkm1bn78DG5_Ld02a9wW6kjusJ84qia0Wtv1aeZ9KL6xDJ8tyMkLjyOXG0tXRmsJkPw7HhJA-9bBUQe6eihip0GH9nYCS5ns10WKv7jbCZ8PMLggYtKo4EaiAqzff0XA8Po83ms_yFRXV0tCsEo51Ls2hBaI31XSS8ldzEcZOMgyM2kqGAuSZD1IBbnnMQSGNq03lwZLPaMyEJ_w4-nr_ENBMACn1h9DP3iBaYQOaK_jVhCjRTlcIev7vN4xXUSZ7_Pd0U6T7VOqnDBxoxPRkzakTQ71KzKG2KgcMHtQ3PhkUbSnZj-xAFVo7jKjS4ozN_vGf9lME1W1-xLhxcLjqBwrh3rVrjqAu7p-HWf2tDDB0o8LUmku3xR6_jMLakILpohKIlIrDcvJcQqH6AM2fRTUuNicj76MSP9S0GD2wnExy0xWVZ6u3_gfWj7Wmoxsv4wrf8u_uUramydyN-BIhti6EM-2MUkZVjlwCPlb6mhECWY0pQCUcy-EjjSMUcGe5CiQe2S42AtHiuTzEdMhrSZVoi8wK2m7V-t6X5aTLP7vZO-ORasWswspeI3-BQ2N08zdnTSvBGUgwjRXb-86LBOTPv_DoIj2bYKxuGJNzu0S_ctlFHKI_FmtAJ_AyxQwVw7_ZojTtuFaQCPAYsbPYQv5qCBx8LRz7EJCpYz2oicBz_1Wof5ecB_sLXZjvR4k68RHVhkeliR0bbBR7tWQmd5A8m3oOwOoY8V3Rme0yP6XPm22mLa1e8G0qf0-XAI421E0bjQq6V31LotZWR8uBmvES1g7lSHKjO27kd35UeCR_rBty-0-PQ93y_UyVhZIvE4Ywu2NvfrXyNqe--euyi4RkxJsM6IEha86C2WEipT-UP7i3dnG-1P8T0WoYT5SNQgX2Yt62v8_M-OoVVNufueZHTlDTQLa1zSRLQMfL5KDkfpIVTKNB2_qTme4MQ5iZlCMQjb5xU_1e1HFW2SXPnX9MyqQlS6lDJz5HSIv2u5g2RW2QkVPsWkwpJAZla4wf0s0_DfQJ4uGNoK2Hj6pWUW9QfupO23fEfyLT8bi_2jgaylcT9o9kVuZLEwEfTiTtwojPpiz_7DHW-Un3QhCgEiFfN0hHgfIpadQlmnLXhB6k8Zuo7jn4c2_tu-XJ7wdUo701S9t9WM4kmBb_olHr6wM1Q1w3j-YyjC86bGD0EKWytync0tgVZNZZtCrqy_POVKww1-n5PSRdSfIJdyH_X8aFoXKACdfzRv6Oi24t226sPHMfF6VyJFsWAhbD83NpOCS6GWpYx948eSxkMFvS350Ky3QjhTv9rkf15akcm0BVx9YTQNNVCaooh8vlPYwVgUefEDARAl7T16hqO-gL9k5hDcz-Ff3KPsbOmiCPcGuyFP4HV-1f63t-ARD0nyCFhCNQOugEgAQ6iyc9n0u6MoTI1W90AQ-ISS9lNZgtrH8i7pLlDUYdRKeHfuj5aT-ZMT5xYi3e-tCg4AirknGUoRDXiKPopQvs2uII1VrRWSJNQiJZVDYRR725X8V-T1CR3xHaXyoQweGWx-T8o4dr_dZM0mmlhQBGI_wP71xThxTPYET1sCaLXdezFT7OoRRNtr4jV9JuD8pb2A2w9fs2mM-eKsSb7h7rqZ0rCP_voUZTBQ_BOvmGp9b6Y5_BxVDj7LqqcpN8Lw1FZrTtYgjR0tHmtWajYBp88Qmic1s9boD1B4zisr-12bQYzzzvXTdi1ju3PICH1wpfQgVsmF9v0DlvCyQP0XntmDshNIt9rwAIvXV1a1X5JCqyFBvt5w36af7j6DlaszayJ3P1Bd4zQ61OGc2XSuvFyWu6mYhn78OlZbaK-Q-aniqnnC_6A8Iz8YB-aCVUDmQ9-1YWpQm6r4EDd4i5T1d9xRC46d-PwxwbXYK0mpQHDI-SCQmSzHdDaW6crMUPqKziCT128yBTcZCotr3cAg8gOFFVfe8TTE1SaKnB7gAAAAAAAAAAAAAAAAAAAAAABgoOFh4m"
284
+ }
285
+ },
286
+ "signature": "xoonya-native-hybrid-v1:ed25519+ml-dsa-65:ubSwFZ8wt4iLHEhMsMJ2YB6HVAmVAI25KEyoFbSmQNRcpnI7Gz5H9GwusneInS7M5WjaM5cVK1fa-sptFL9aDw.ApCw-CfAbAiF4czyils2cjdyVMqRaNbYls9vp3VeT1D2vUOIC06KtCQRGXy7pjYtGnUjLxCpwmGu1sJJq3a6SDBV-S-bEoG3KW9VdMWWzIuqWdD25jMwfP8LcZxd5zKyB7uarExTc0zn7eHy4j7jQtKa9VuzT9RCxnvyH9OcFwn1TKTJfjXax0Wk4CUtqi1CviGmYlh2VZlBf5E7NcRzQbP5UueAc6pT9OuRMjtHp8zyC_lw6ufL9sjJ1KSVEfGUzEigeNHebgb910d-LChnTSqoleNpjjLC7qGfdHcmcbk8VyuufbCeFxcHGjPfwkqDcchnI3QU_zUjgwsr0xZNu12pGVPunm39HfC6Hd0-VTPR4c0NK7XFylg5TgfsFe_pj0a3X_aWKjkyPOgsvOihQY6AVs7z_qQpfeKXQiCmw83HmhaHUyinUHIKnirNxl7ZkI5QmlB2RG6SB_4Ks5E9ETQArRPeq-Erhe4sEQBBSowJLi5vXYuMsjKT1oLdfTsvxnkjHXZyIg4DOgpEFTUDWAROqzzk6Rn7MKTIEA1Fj_g13nn0dkZsAGwPanky2j7pERejxCjcIKNuFsym0eZ_tJxArUakg-FUz0pMxo2W-kMxcG3Afc6w_dgd5dpoJpDAr6-Wrp10poxyFRi-Yi-HvyVT84uTgKRtPJN5xFUB0lL1C4C-dPuHkSUvQ1VARsbiVZX3o_m5ebBGivi7F8f5ZQmm_FJOH2jrwjNVE_kIBqtq-ecnwN5tns2aSxWeZ1uEaKyoQOjp52Bwo0Vh90gzmy_arJGJkMZq-krgrRIz6dOdR7s6s0_URDbjHBDkbmCcptU0FPTRrtiHdB6WeRUUKzyUrJOD7x437jd4pbckYXA92N08hDfuf9Y5VsaAVQfbKlT8zki6xIdap-E4RPrc8zwZ2VlXX1NlUHignIIzlnwlt90-D3D8xPn697zNuwGeNomMoMSRmhPs7wNw1TtL6Z6j8cclw56KHQT0ndFe5uiBnwApwHqKMjNIVkq6T21IzwgxUaR2h-LUQ06IgjUTvi9I2LbRYF4wJ2WAr-INXxDMmPhDg4oTJxvEaz4CTaJ0kCKEJ8GKxB6_ublEOzkUKxm7hXbmaVoM9nt7E04lDDj8oimredDB2Ye7trnC6rfb3KsofAjf02jkViE7bv_ZZ9-TW5H7pqmHaq1iOc8pJV_icFDKw8t5F5VO1Kf-BpPGE01QJ_tf9hXyIgRlw4kcmyhIQs558Laq9BOB1_itsbY8L0VTQd8aOH-a3X9utC4MXqHplL1BXjfooXBw5Daep54LA8cJwqrwOb15lj-2RUpiBDBu1mXX8kGP0Bf2SnYBrM7HDALZZOPDFGV8a343gEVJJXKOYuRgdLs0Dit4uVShmvahO0CyItPAMOEGBX5u89xEMpSdWpw2b1VkRiGeKdw7_kkWFUMHL7crC29IAD4IGkOMQc6K8QYL4etD6tE7yC6td4rwYAx4C4ZwcWFk1rPjFUr8i08aFQcR4JtK8zXJXuqcjpebIkoldMf_nZn7rwifMiSdMjNVBzo7XtoU3Be8H2Z3UzCNVOj_yeB5xfoY2ptlCqov7BF5Xmiquv6hHlvgwnnUQqTqeqOZiJVNMK-5_q4qllIjACycpxO4e2CXq355wUpUw_kqxiHn1VLox6z05LW7EELRn6soh7FCCKgFUo86_b05XM2XFqmkwYyAsbRuN2d95syRstwwCdHBNrzquMP4a-0hzAMJ5pcIJlY7ucI0URGcPvsYZt0K94LEmFZ1ZmlG-6uBNOrteQaNCsia-4ST53Utsddtwwz7Aec5JMqrcQQg6PvwP9Y_96nGUt3zFGxiSQb4iDJd0X-vqsM3HP6IYNA6Vkual0Gcf8pggM_rxjdUdC8aQfjEeCQHR7hYTt547EyP2djTdSKg9MvDYdtOdvyb-S_rjgSXnWBi-8l3y5rq6ZSm9fd2aHLq3YAshMzstDpuoxxSqWbVWixn8KrBAYbTizbV_6S7MaABan4_ProkQ9VDzkeNWtfxoRKY5eyji9V1LfCpGbSs6ZrR0XUzOXdFTJhnEIN3jYMDJyBGzPKzt3SGEJ9O9ClkE36feKFUUZVXaya7mN39e98NNBPjeC2ky8n7cms_uc6FGReu_uD6X44bI05bc17_HQNSHN4EkwNeGfrrwSdAvZ6jl3FOEsKOxkJua4qnejl8WSe0B6AMLrr9DsLxZeEFKQoKDe706L5nZUqEB06SpRT5gwrrNy3236e-mRMGO3MpBiiepFU22yKRWLFz_lUk_KIdFyECWhey8j7yL9EC85gS3-ZMWRVoADq7weKCu30CHIEvv7q3kJ0H_8r9V9wuNgRUlmkOiiUubuQxDASOgp7nxPh2GRNccufqAkls8gwPBwjAsdERtFlT0PWWiGNHkm1bn78DG5_Ld02a9wW6kjusJ84qia0Wtv1aeZ9KL6xDJ8tyMkLjyOXG0tXRmsJkPw7HhJA-9bBUQe6eihip0GH9nYCS5ns10WKv7jbCZ8PMLggYtKo4EaiAqzff0XA8Po83ms_yFRXV0tCsEo51Ls2hBaI31XSS8ldzEcZOMgyM2kqGAuSZD1IBbnnMQSGNq03lwZLPaMyEJ_w4-nr_ENBMACn1h9DP3iBaYQOaK_jVhCjRTlcIev7vN4xXUSZ7_Pd0U6T7VOqnDBxoxPRkzakTQ71KzKG2KgcMHtQ3PhkUbSnZj-xAFVo7jKjS4ozN_vGf9lME1W1-xLhxcLjqBwrh3rVrjqAu7p-HWf2tDDB0o8LUmku3xR6_jMLakILpohKIlIrDcvJcQqH6AM2fRTUuNicj76MSP9S0GD2wnExy0xWVZ6u3_gfWj7Wmoxsv4wrf8u_uUramydyN-BIhti6EM-2MUkZVjlwCPlb6mhECWY0pQCUcy-EjjSMUcGe5CiQe2S42AtHiuTzEdMhrSZVoi8wK2m7V-t6X5aTLP7vZO-ORasWswspeI3-BQ2N08zdnTSvBGUgwjRXb-86LBOTPv_DoIj2bYKxuGJNzu0S_ctlFHKI_FmtAJ_AyxQwVw7_ZojTtuFaQCPAYsbPYQv5qCBx8LRz7EJCpYz2oicBz_1Wof5ecB_sLXZjvR4k68RHVhkeliR0bbBR7tWQmd5A8m3oOwOoY8V3Rme0yP6XPm22mLa1e8G0qf0-XAI421E0bjQq6V31LotZWR8uBmvES1g7lSHKjO27kd35UeCR_rBty-0-PQ93y_UyVhZIvE4Ywu2NvfrXyNqe--euyi4RkxJsM6IEha86C2WEipT-UP7i3dnG-1P8T0WoYT5SNQgX2Yt62v8_M-OoVVNufueZHTlDTQLa1zSRLQMfL5KDkfpIVTKNB2_qTme4MQ5iZlCMQjb5xU_1e1HFW2SXPnX9MyqQlS6lDJz5HSIv2u5g2RW2QkVPsWkwpJAZla4wf0s0_DfQJ4uGNoK2Hj6pWUW9QfupO23fEfyLT8bi_2jgaylcT9o9kVuZLEwEfTiTtwojPpiz_7DHW-Un3QhCgEiFfN0hHgfIpadQlmnLXhB6k8Zuo7jn4c2_tu-XJ7wdUo701S9t9WM4kmBb_olHr6wM1Q1w3j-YyjC86bGD0EKWytync0tgVZNZZtCrqy_POVKww1-n5PSRdSfIJdyH_X8aFoXKACdfzRv6Oi24t226sPHMfF6VyJFsWAhbD83NpOCS6GWpYx948eSxkMFvS350Ky3QjhTv9rkf15akcm0BVx9YTQNNVCaooh8vlPYwVgUefEDARAl7T16hqO-gL9k5hDcz-Ff3KPsbOmiCPcGuyFP4HV-1f63t-ARD0nyCFhCNQOugEgAQ6iyc9n0u6MoTI1W90AQ-ISS9lNZgtrH8i7pLlDUYdRKeHfuj5aT-ZMT5xYi3e-tCg4AirknGUoRDXiKPopQvs2uII1VrRWSJNQiJZVDYRR725X8V-T1CR3xHaXyoQweGWx-T8o4dr_dZM0mmlhQBGI_wP71xThxTPYET1sCaLXdezFT7OoRRNtr4jV9JuD8pb2A2w9fs2mM-eKsSb7h7rqZ0rCP_voUZTBQ_BOvmGp9b6Y5_BxVDj7LqqcpN8Lw1FZrTtYgjR0tHmtWajYBp88Qmic1s9boD1B4zisr-12bQYzzzvXTdi1ju3PICH1wpfQgVsmF9v0DlvCyQP0XntmDshNIt9rwAIvXV1a1X5JCqyFBvt5w36af7j6DlaszayJ3P1Bd4zQ61OGc2XSuvFyWu6mYhn78OlZbaK-Q-aniqnnC_6A8Iz8YB-aCVUDmQ9-1YWpQm6r4EDd4i5T1d9xRC46d-PwxwbXYK0mpQHDI-SCQmSzHdDaW6crMUPqKziCT128yBTcZCotr3cAg8gOFFVfe8TTE1SaKnB7gAAAAAAAAAAAAAAAAAAAAAABgoOFh4m"
287
+ }
288
+ },
289
+ "expected_reason": "native_hybrid_pq_signature_invalid"
290
+ },
291
+ {
292
+ "id": "reject-native-hybrid-public-key-ref-mismatch",
293
+ "kind": "verify_bundle_reason",
294
+ "bundle": {
295
+ "version": "proof-bundle/v1",
296
+ "ceb": {
297
+ "version": "canonical-event-bundle/v1",
298
+ "domain_id": "vectors.native.hybrid",
299
+ "sequence": "11",
300
+ "actor_id": "agent-native-hybrid",
301
+ "adapter_source": "vector-suite",
302
+ "event_type": "native.hybrid.event",
303
+ "event_hash": "7878787878787878787878787878787878787878787878787878787878787878"
304
+ },
305
+ "receipt": {
306
+ "version": "receipt/v1",
307
+ "receipt_id": "e425569c2d6ff3768ad2f6026e53ac30b35bc763cccfbbd39eb1a89bded363c9",
308
+ "agent_identity": "agent-native-hybrid-key",
309
+ "domain_id": "vectors.native.hybrid",
310
+ "sequence": "11",
311
+ "event_commitment": "038909c465d532f536bf2224a3fe18db46ad1672b1cf7df152dd5586354e6a1e",
312
+ "algorithm": "xoonya-native-hybrid-v1",
313
+ "native_proof": {
314
+ "method": "xoonya-native-hybrid-v1",
315
+ "hybrid_suite": "ed25519+ml-dsa-65",
316
+ "identity_ref": "did:xoonya:agent-native-hybrid-key",
317
+ "hybrid_public_key_ref": "ed25519+ml-dsa-65-hybrid-spki-sha256:625b3dcdc278dbeebf2933dffe10f045dd7e0d4c26ec028ed45df967cd4783b0",
318
+ "classical_public_key_ref": "ed25519-spki-sha256:cfe0edcaec323648d600ef93820a9a185c01fa6b5dc981572a2a2c8aa3e89447",
319
+ "pq_public_key_ref": "ml-dsa-65-spki-sha256:15912c8aef9ca907bc700af72aed43a5a5401aa19ecf03ac3ce1c0f6d2563a54",
320
+ "classical_public_key_material": {
321
+ "format": "spki-pem",
322
+ "value": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEASl0Xu0vZRLgFIrdzXoH8L2EX3VlMFHwlrz3xWqsz09k=\n-----END PUBLIC KEY-----\n"
323
+ },
324
+ "pq_public_key_material": {
325
+ "format": "spki-pem",
326
+ "value": "-----BEGIN PUBLIC KEY-----\n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\nthoRK7+z\n-----END PUBLIC KEY-----\n"
327
+ },
328
+ "proof_material": {
329
+ "signing_material_sha256": "90428e067086cba5d076f0ae420a48f13177c2927dfa5f7c8e70d18bcdaad9d8",
330
+ "classical_signature": "ubSwFZ8wt4iLHEhMsMJ2YB6HVAmVAI25KEyoFbSmQNRcpnI7Gz5H9GwusneInS7M5WjaM5cVK1fa-sptFL9aDw",
331
+ "pq_signature": "UpCw-CfAbAiF4czyils2cjdyVMqRaNbYls9vp3VeT1D2vUOIC06KtCQRGXy7pjYtGnUjLxCpwmGu1sJJq3a6SDBV-S-bEoG3KW9VdMWWzIuqWdD25jMwfP8LcZxd5zKyB7uarExTc0zn7eHy4j7jQtKa9VuzT9RCxnvyH9OcFwn1TKTJfjXax0Wk4CUtqi1CviGmYlh2VZlBf5E7NcRzQbP5UueAc6pT9OuRMjtHp8zyC_lw6ufL9sjJ1KSVEfGUzEigeNHebgb910d-LChnTSqoleNpjjLC7qGfdHcmcbk8VyuufbCeFxcHGjPfwkqDcchnI3QU_zUjgwsr0xZNu12pGVPunm39HfC6Hd0-VTPR4c0NK7XFylg5TgfsFe_pj0a3X_aWKjkyPOgsvOihQY6AVs7z_qQpfeKXQiCmw83HmhaHUyinUHIKnirNxl7ZkI5QmlB2RG6SB_4Ks5E9ETQArRPeq-Erhe4sEQBBSowJLi5vXYuMsjKT1oLdfTsvxnkjHXZyIg4DOgpEFTUDWAROqzzk6Rn7MKTIEA1Fj_g13nn0dkZsAGwPanky2j7pERejxCjcIKNuFsym0eZ_tJxArUakg-FUz0pMxo2W-kMxcG3Afc6w_dgd5dpoJpDAr6-Wrp10poxyFRi-Yi-HvyVT84uTgKRtPJN5xFUB0lL1C4C-dPuHkSUvQ1VARsbiVZX3o_m5ebBGivi7F8f5ZQmm_FJOH2jrwjNVE_kIBqtq-ecnwN5tns2aSxWeZ1uEaKyoQOjp52Bwo0Vh90gzmy_arJGJkMZq-krgrRIz6dOdR7s6s0_URDbjHBDkbmCcptU0FPTRrtiHdB6WeRUUKzyUrJOD7x437jd4pbckYXA92N08hDfuf9Y5VsaAVQfbKlT8zki6xIdap-E4RPrc8zwZ2VlXX1NlUHignIIzlnwlt90-D3D8xPn697zNuwGeNomMoMSRmhPs7wNw1TtL6Z6j8cclw56KHQT0ndFe5uiBnwApwHqKMjNIVkq6T21IzwgxUaR2h-LUQ06IgjUTvi9I2LbRYF4wJ2WAr-INXxDMmPhDg4oTJxvEaz4CTaJ0kCKEJ8GKxB6_ublEOzkUKxm7hXbmaVoM9nt7E04lDDj8oimredDB2Ye7trnC6rfb3KsofAjf02jkViE7bv_ZZ9-TW5H7pqmHaq1iOc8pJV_icFDKw8t5F5VO1Kf-BpPGE01QJ_tf9hXyIgRlw4kcmyhIQs558Laq9BOB1_itsbY8L0VTQd8aOH-a3X9utC4MXqHplL1BXjfooXBw5Daep54LA8cJwqrwOb15lj-2RUpiBDBu1mXX8kGP0Bf2SnYBrM7HDALZZOPDFGV8a343gEVJJXKOYuRgdLs0Dit4uVShmvahO0CyItPAMOEGBX5u89xEMpSdWpw2b1VkRiGeKdw7_kkWFUMHL7crC29IAD4IGkOMQc6K8QYL4etD6tE7yC6td4rwYAx4C4ZwcWFk1rPjFUr8i08aFQcR4JtK8zXJXuqcjpebIkoldMf_nZn7rwifMiSdMjNVBzo7XtoU3Be8H2Z3UzCNVOj_yeB5xfoY2ptlCqov7BF5Xmiquv6hHlvgwnnUQqTqeqOZiJVNMK-5_q4qllIjACycpxO4e2CXq355wUpUw_kqxiHn1VLox6z05LW7EELRn6soh7FCCKgFUo86_b05XM2XFqmkwYyAsbRuN2d95syRstwwCdHBNrzquMP4a-0hzAMJ5pcIJlY7ucI0URGcPvsYZt0K94LEmFZ1ZmlG-6uBNOrteQaNCsia-4ST53Utsddtwwz7Aec5JMqrcQQg6PvwP9Y_96nGUt3zFGxiSQb4iDJd0X-vqsM3HP6IYNA6Vkual0Gcf8pggM_rxjdUdC8aQfjEeCQHR7hYTt547EyP2djTdSKg9MvDYdtOdvyb-S_rjgSXnWBi-8l3y5rq6ZSm9fd2aHLq3YAshMzstDpuoxxSqWbVWixn8KrBAYbTizbV_6S7MaABan4_ProkQ9VDzkeNWtfxoRKY5eyji9V1LfCpGbSs6ZrR0XUzOXdFTJhnEIN3jYMDJyBGzPKzt3SGEJ9O9ClkE36feKFUUZVXaya7mN39e98NNBPjeC2ky8n7cms_uc6FGReu_uD6X44bI05bc17_HQNSHN4EkwNeGfrrwSdAvZ6jl3FOEsKOxkJua4qnejl8WSe0B6AMLrr9DsLxZeEFKQoKDe706L5nZUqEB06SpRT5gwrrNy3236e-mRMGO3MpBiiepFU22yKRWLFz_lUk_KIdFyECWhey8j7yL9EC85gS3-ZMWRVoADq7weKCu30CHIEvv7q3kJ0H_8r9V9wuNgRUlmkOiiUubuQxDASOgp7nxPh2GRNccufqAkls8gwPBwjAsdERtFlT0PWWiGNHkm1bn78DG5_Ld02a9wW6kjusJ84qia0Wtv1aeZ9KL6xDJ8tyMkLjyOXG0tXRmsJkPw7HhJA-9bBUQe6eihip0GH9nYCS5ns10WKv7jbCZ8PMLggYtKo4EaiAqzff0XA8Po83ms_yFRXV0tCsEo51Ls2hBaI31XSS8ldzEcZOMgyM2kqGAuSZD1IBbnnMQSGNq03lwZLPaMyEJ_w4-nr_ENBMACn1h9DP3iBaYQOaK_jVhCjRTlcIev7vN4xXUSZ7_Pd0U6T7VOqnDBxoxPRkzakTQ71KzKG2KgcMHtQ3PhkUbSnZj-xAFVo7jKjS4ozN_vGf9lME1W1-xLhxcLjqBwrh3rVrjqAu7p-HWf2tDDB0o8LUmku3xR6_jMLakILpohKIlIrDcvJcQqH6AM2fRTUuNicj76MSP9S0GD2wnExy0xWVZ6u3_gfWj7Wmoxsv4wrf8u_uUramydyN-BIhti6EM-2MUkZVjlwCPlb6mhECWY0pQCUcy-EjjSMUcGe5CiQe2S42AtHiuTzEdMhrSZVoi8wK2m7V-t6X5aTLP7vZO-ORasWswspeI3-BQ2N08zdnTSvBGUgwjRXb-86LBOTPv_DoIj2bYKxuGJNzu0S_ctlFHKI_FmtAJ_AyxQwVw7_ZojTtuFaQCPAYsbPYQv5qCBx8LRz7EJCpYz2oicBz_1Wof5ecB_sLXZjvR4k68RHVhkeliR0bbBR7tWQmd5A8m3oOwOoY8V3Rme0yP6XPm22mLa1e8G0qf0-XAI421E0bjQq6V31LotZWR8uBmvES1g7lSHKjO27kd35UeCR_rBty-0-PQ93y_UyVhZIvE4Ywu2NvfrXyNqe--euyi4RkxJsM6IEha86C2WEipT-UP7i3dnG-1P8T0WoYT5SNQgX2Yt62v8_M-OoVVNufueZHTlDTQLa1zSRLQMfL5KDkfpIVTKNB2_qTme4MQ5iZlCMQjb5xU_1e1HFW2SXPnX9MyqQlS6lDJz5HSIv2u5g2RW2QkVPsWkwpJAZla4wf0s0_DfQJ4uGNoK2Hj6pWUW9QfupO23fEfyLT8bi_2jgaylcT9o9kVuZLEwEfTiTtwojPpiz_7DHW-Un3QhCgEiFfN0hHgfIpadQlmnLXhB6k8Zuo7jn4c2_tu-XJ7wdUo701S9t9WM4kmBb_olHr6wM1Q1w3j-YyjC86bGD0EKWytync0tgVZNZZtCrqy_POVKww1-n5PSRdSfIJdyH_X8aFoXKACdfzRv6Oi24t226sPHMfF6VyJFsWAhbD83NpOCS6GWpYx948eSxkMFvS350Ky3QjhTv9rkf15akcm0BVx9YTQNNVCaooh8vlPYwVgUefEDARAl7T16hqO-gL9k5hDcz-Ff3KPsbOmiCPcGuyFP4HV-1f63t-ARD0nyCFhCNQOugEgAQ6iyc9n0u6MoTI1W90AQ-ISS9lNZgtrH8i7pLlDUYdRKeHfuj5aT-ZMT5xYi3e-tCg4AirknGUoRDXiKPopQvs2uII1VrRWSJNQiJZVDYRR725X8V-T1CR3xHaXyoQweGWx-T8o4dr_dZM0mmlhQBGI_wP71xThxTPYET1sCaLXdezFT7OoRRNtr4jV9JuD8pb2A2w9fs2mM-eKsSb7h7rqZ0rCP_voUZTBQ_BOvmGp9b6Y5_BxVDj7LqqcpN8Lw1FZrTtYgjR0tHmtWajYBp88Qmic1s9boD1B4zisr-12bQYzzzvXTdi1ju3PICH1wpfQgVsmF9v0DlvCyQP0XntmDshNIt9rwAIvXV1a1X5JCqyFBvt5w36af7j6DlaszayJ3P1Bd4zQ61OGc2XSuvFyWu6mYhn78OlZbaK-Q-aniqnnC_6A8Iz8YB-aCVUDmQ9-1YWpQm6r4EDd4i5T1d9xRC46d-PwxwbXYK0mpQHDI-SCQmSzHdDaW6crMUPqKziCT128yBTcZCotr3cAg8gOFFVfe8TTE1SaKnB7gAAAAAAAAAAAAAAAAAAAAAABgoOFh4m"
332
+ }
333
+ },
334
+ "signature": "xoonya-native-hybrid-v1:ed25519+ml-dsa-65:ubSwFZ8wt4iLHEhMsMJ2YB6HVAmVAI25KEyoFbSmQNRcpnI7Gz5H9GwusneInS7M5WjaM5cVK1fa-sptFL9aDw.UpCw-CfAbAiF4czyils2cjdyVMqRaNbYls9vp3VeT1D2vUOIC06KtCQRGXy7pjYtGnUjLxCpwmGu1sJJq3a6SDBV-S-bEoG3KW9VdMWWzIuqWdD25jMwfP8LcZxd5zKyB7uarExTc0zn7eHy4j7jQtKa9VuzT9RCxnvyH9OcFwn1TKTJfjXax0Wk4CUtqi1CviGmYlh2VZlBf5E7NcRzQbP5UueAc6pT9OuRMjtHp8zyC_lw6ufL9sjJ1KSVEfGUzEigeNHebgb910d-LChnTSqoleNpjjLC7qGfdHcmcbk8VyuufbCeFxcHGjPfwkqDcchnI3QU_zUjgwsr0xZNu12pGVPunm39HfC6Hd0-VTPR4c0NK7XFylg5TgfsFe_pj0a3X_aWKjkyPOgsvOihQY6AVs7z_qQpfeKXQiCmw83HmhaHUyinUHIKnirNxl7ZkI5QmlB2RG6SB_4Ks5E9ETQArRPeq-Erhe4sEQBBSowJLi5vXYuMsjKT1oLdfTsvxnkjHXZyIg4DOgpEFTUDWAROqzzk6Rn7MKTIEA1Fj_g13nn0dkZsAGwPanky2j7pERejxCjcIKNuFsym0eZ_tJxArUakg-FUz0pMxo2W-kMxcG3Afc6w_dgd5dpoJpDAr6-Wrp10poxyFRi-Yi-HvyVT84uTgKRtPJN5xFUB0lL1C4C-dPuHkSUvQ1VARsbiVZX3o_m5ebBGivi7F8f5ZQmm_FJOH2jrwjNVE_kIBqtq-ecnwN5tns2aSxWeZ1uEaKyoQOjp52Bwo0Vh90gzmy_arJGJkMZq-krgrRIz6dOdR7s6s0_URDbjHBDkbmCcptU0FPTRrtiHdB6WeRUUKzyUrJOD7x437jd4pbckYXA92N08hDfuf9Y5VsaAVQfbKlT8zki6xIdap-E4RPrc8zwZ2VlXX1NlUHignIIzlnwlt90-D3D8xPn697zNuwGeNomMoMSRmhPs7wNw1TtL6Z6j8cclw56KHQT0ndFe5uiBnwApwHqKMjNIVkq6T21IzwgxUaR2h-LUQ06IgjUTvi9I2LbRYF4wJ2WAr-INXxDMmPhDg4oTJxvEaz4CTaJ0kCKEJ8GKxB6_ublEOzkUKxm7hXbmaVoM9nt7E04lDDj8oimredDB2Ye7trnC6rfb3KsofAjf02jkViE7bv_ZZ9-TW5H7pqmHaq1iOc8pJV_icFDKw8t5F5VO1Kf-BpPGE01QJ_tf9hXyIgRlw4kcmyhIQs558Laq9BOB1_itsbY8L0VTQd8aOH-a3X9utC4MXqHplL1BXjfooXBw5Daep54LA8cJwqrwOb15lj-2RUpiBDBu1mXX8kGP0Bf2SnYBrM7HDALZZOPDFGV8a343gEVJJXKOYuRgdLs0Dit4uVShmvahO0CyItPAMOEGBX5u89xEMpSdWpw2b1VkRiGeKdw7_kkWFUMHL7crC29IAD4IGkOMQc6K8QYL4etD6tE7yC6td4rwYAx4C4ZwcWFk1rPjFUr8i08aFQcR4JtK8zXJXuqcjpebIkoldMf_nZn7rwifMiSdMjNVBzo7XtoU3Be8H2Z3UzCNVOj_yeB5xfoY2ptlCqov7BF5Xmiquv6hHlvgwnnUQqTqeqOZiJVNMK-5_q4qllIjACycpxO4e2CXq355wUpUw_kqxiHn1VLox6z05LW7EELRn6soh7FCCKgFUo86_b05XM2XFqmkwYyAsbRuN2d95syRstwwCdHBNrzquMP4a-0hzAMJ5pcIJlY7ucI0URGcPvsYZt0K94LEmFZ1ZmlG-6uBNOrteQaNCsia-4ST53Utsddtwwz7Aec5JMqrcQQg6PvwP9Y_96nGUt3zFGxiSQb4iDJd0X-vqsM3HP6IYNA6Vkual0Gcf8pggM_rxjdUdC8aQfjEeCQHR7hYTt547EyP2djTdSKg9MvDYdtOdvyb-S_rjgSXnWBi-8l3y5rq6ZSm9fd2aHLq3YAshMzstDpuoxxSqWbVWixn8KrBAYbTizbV_6S7MaABan4_ProkQ9VDzkeNWtfxoRKY5eyji9V1LfCpGbSs6ZrR0XUzOXdFTJhnEIN3jYMDJyBGzPKzt3SGEJ9O9ClkE36feKFUUZVXaya7mN39e98NNBPjeC2ky8n7cms_uc6FGReu_uD6X44bI05bc17_HQNSHN4EkwNeGfrrwSdAvZ6jl3FOEsKOxkJua4qnejl8WSe0B6AMLrr9DsLxZeEFKQoKDe706L5nZUqEB06SpRT5gwrrNy3236e-mRMGO3MpBiiepFU22yKRWLFz_lUk_KIdFyECWhey8j7yL9EC85gS3-ZMWRVoADq7weKCu30CHIEvv7q3kJ0H_8r9V9wuNgRUlmkOiiUubuQxDASOgp7nxPh2GRNccufqAkls8gwPBwjAsdERtFlT0PWWiGNHkm1bn78DG5_Ld02a9wW6kjusJ84qia0Wtv1aeZ9KL6xDJ8tyMkLjyOXG0tXRmsJkPw7HhJA-9bBUQe6eihip0GH9nYCS5ns10WKv7jbCZ8PMLggYtKo4EaiAqzff0XA8Po83ms_yFRXV0tCsEo51Ls2hBaI31XSS8ldzEcZOMgyM2kqGAuSZD1IBbnnMQSGNq03lwZLPaMyEJ_w4-nr_ENBMACn1h9DP3iBaYQOaK_jVhCjRTlcIev7vN4xXUSZ7_Pd0U6T7VOqnDBxoxPRkzakTQ71KzKG2KgcMHtQ3PhkUbSnZj-xAFVo7jKjS4ozN_vGf9lME1W1-xLhxcLjqBwrh3rVrjqAu7p-HWf2tDDB0o8LUmku3xR6_jMLakILpohKIlIrDcvJcQqH6AM2fRTUuNicj76MSP9S0GD2wnExy0xWVZ6u3_gfWj7Wmoxsv4wrf8u_uUramydyN-BIhti6EM-2MUkZVjlwCPlb6mhECWY0pQCUcy-EjjSMUcGe5CiQe2S42AtHiuTzEdMhrSZVoi8wK2m7V-t6X5aTLP7vZO-ORasWswspeI3-BQ2N08zdnTSvBGUgwjRXb-86LBOTPv_DoIj2bYKxuGJNzu0S_ctlFHKI_FmtAJ_AyxQwVw7_ZojTtuFaQCPAYsbPYQv5qCBx8LRz7EJCpYz2oicBz_1Wof5ecB_sLXZjvR4k68RHVhkeliR0bbBR7tWQmd5A8m3oOwOoY8V3Rme0yP6XPm22mLa1e8G0qf0-XAI421E0bjQq6V31LotZWR8uBmvES1g7lSHKjO27kd35UeCR_rBty-0-PQ93y_UyVhZIvE4Ywu2NvfrXyNqe--euyi4RkxJsM6IEha86C2WEipT-UP7i3dnG-1P8T0WoYT5SNQgX2Yt62v8_M-OoVVNufueZHTlDTQLa1zSRLQMfL5KDkfpIVTKNB2_qTme4MQ5iZlCMQjb5xU_1e1HFW2SXPnX9MyqQlS6lDJz5HSIv2u5g2RW2QkVPsWkwpJAZla4wf0s0_DfQJ4uGNoK2Hj6pWUW9QfupO23fEfyLT8bi_2jgaylcT9o9kVuZLEwEfTiTtwojPpiz_7DHW-Un3QhCgEiFfN0hHgfIpadQlmnLXhB6k8Zuo7jn4c2_tu-XJ7wdUo701S9t9WM4kmBb_olHr6wM1Q1w3j-YyjC86bGD0EKWytync0tgVZNZZtCrqy_POVKww1-n5PSRdSfIJdyH_X8aFoXKACdfzRv6Oi24t226sPHMfF6VyJFsWAhbD83NpOCS6GWpYx948eSxkMFvS350Ky3QjhTv9rkf15akcm0BVx9YTQNNVCaooh8vlPYwVgUefEDARAl7T16hqO-gL9k5hDcz-Ff3KPsbOmiCPcGuyFP4HV-1f63t-ARD0nyCFhCNQOugEgAQ6iyc9n0u6MoTI1W90AQ-ISS9lNZgtrH8i7pLlDUYdRKeHfuj5aT-ZMT5xYi3e-tCg4AirknGUoRDXiKPopQvs2uII1VrRWSJNQiJZVDYRR725X8V-T1CR3xHaXyoQweGWx-T8o4dr_dZM0mmlhQBGI_wP71xThxTPYET1sCaLXdezFT7OoRRNtr4jV9JuD8pb2A2w9fs2mM-eKsSb7h7rqZ0rCP_voUZTBQ_BOvmGp9b6Y5_BxVDj7LqqcpN8Lw1FZrTtYgjR0tHmtWajYBp88Qmic1s9boD1B4zisr-12bQYzzzvXTdi1ju3PICH1wpfQgVsmF9v0DlvCyQP0XntmDshNIt9rwAIvXV1a1X5JCqyFBvt5w36af7j6DlaszayJ3P1Bd4zQ61OGc2XSuvFyWu6mYhn78OlZbaK-Q-aniqnnC_6A8Iz8YB-aCVUDmQ9-1YWpQm6r4EDd4i5T1d9xRC46d-PwxwbXYK0mpQHDI-SCQmSzHdDaW6crMUPqKziCT128yBTcZCotr3cAg8gOFFVfe8TTE1SaKnB7gAAAAAAAAAAAAAAAAAAAAAABgoOFh4m"
335
+ }
336
+ },
337
+ "expected_reason": "native_hybrid_public_key_ref_mismatch"
338
+ },
270
339
  {
271
340
  "id": "reject-native-signed-signature-tamper",
272
341
  "kind": "verify_bundle_reason",