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.
- package/README.md +74 -19
- package/RELEASE_NOTES.md +8 -7
- package/START_HERE.md +42 -21
- package/XNYA_REFERENCE_IMPLEMENTATIONS.md +3 -3
- package/XOONYA_DEFAULT_PATH_MODEL.md +63 -0
- package/XOONYA_FOLLOWTHROUGH_TRUTH_MODEL.md +63 -0
- package/XOONYA_NATIVE_PROOF_FORMAT.md +27 -4
- package/XOONYA_PROOF_TRUTH_MODEL.md +58 -0
- package/index.js +3 -0
- package/lib/default_path_contract.js +380 -0
- package/lib/followthrough_truth_contract.js +214 -0
- package/lib/proof_truth_contract.js +224 -0
- package/lib/release_history.js +13 -0
- package/package.json +5 -2
- package/proof_sdk.js +351 -19
- package/reference/python/verify_vectors.py +14 -0
- package/reference/python/xnya_reference.py +1 -1
- package/scripts/verify_all.js +18 -8
- package/scripts/verify_native_hybrid_design_gate.js +40 -34
- package/scripts/verify_release_candidate.js +4 -3
- package/scripts/verify_service.js +63 -4
- package/scripts/verify_vectors.js +29 -1
- package/server.js +99 -0
- package/vectors/adversarial-vectors.json +96 -27
- package/vectors/conformance-vectors.json +58 -0
|
@@ -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
|
|
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.
|
|
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.
|
|
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-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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(
|
|
40
|
-
|
|
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.
|
|
43
|
-
"
|
|
44
|
-
"hybrid method
|
|
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:
|
|
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-
|
|
80
|
+
category: "xoonya-native-hybrid-verification",
|
|
76
81
|
method: "xoonya-native-hybrid-v1",
|
|
77
82
|
readiness_status: readiness.status,
|
|
78
|
-
|
|
83
|
+
implemented_hybrid_suites: readiness.implemented_hybrid_suites,
|
|
84
|
+
verification_state: verification.verification_state,
|
|
79
85
|
downgrade_reject_reason: downgradeVerification.reason,
|
|
80
|
-
boundary: "
|
|
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 =
|
|
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
|
-
`
|
|
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
|
-
|
|
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("
|
|
67
|
+
conformanceSummary.adversarial_reasons.includes("native_hybrid_pq_signature_invalid"),
|
|
68
68
|
true,
|
|
69
|
-
"native hybrid
|
|
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
|
|
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, '
|
|
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.
|
|
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('
|
|
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('
|
|
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
|
-
|
|
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",
|