@veraanchor/verifier 0.0.0-stage → 0.1.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/CHANGELOG.md +22 -0
- package/CONTRIBUTING.md +33 -0
- package/LICENSE +21 -0
- package/NOTICE +4 -0
- package/README.md +263 -2
- package/SECURITY.md +21 -0
- package/dist/cli/commandV1.d.ts +5 -0
- package/dist/cli/commandV1.d.ts.map +1 -0
- package/dist/cli/commandV1.js +440 -0
- package/dist/cli/commandV1.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +5 -0
- package/dist/cli.js.map +1 -0
- package/dist/contracts/verification.d.ts +77 -0
- package/dist/contracts/verification.d.ts.map +1 -0
- package/dist/contracts/verification.js +6 -0
- package/dist/contracts/verification.js.map +1 -0
- package/dist/crypto/sha3.d.ts +15 -0
- package/dist/crypto/sha3.d.ts.map +1 -0
- package/dist/crypto/sha3.js +27 -0
- package/dist/crypto/sha3.js.map +1 -0
- package/dist/crypto/streamSha3.d.ts +26 -0
- package/dist/crypto/streamSha3.d.ts.map +1 -0
- package/dist/crypto/streamSha3.js +52 -0
- package/dist/crypto/streamSha3.js.map +1 -0
- package/dist/hf/hashContractV1.d.ts +48 -0
- package/dist/hf/hashContractV1.d.ts.map +1 -0
- package/dist/hf/hashContractV1.js +185 -0
- package/dist/hf/hashContractV1.js.map +1 -0
- package/dist/index.d.ts +80 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/merkle/membership.d.ts +30 -0
- package/dist/merkle/membership.d.ts.map +1 -0
- package/dist/merkle/membership.js +105 -0
- package/dist/merkle/membership.js.map +1 -0
- package/dist/policy/contractV1.d.ts +37 -0
- package/dist/policy/contractV1.d.ts.map +1 -0
- package/dist/policy/contractV1.js +2 -0
- package/dist/policy/contractV1.js.map +1 -0
- package/dist/policy/evaluateV1.d.ts +24 -0
- package/dist/policy/evaluateV1.d.ts.map +1 -0
- package/dist/policy/evaluateV1.js +320 -0
- package/dist/policy/evaluateV1.js.map +1 -0
- package/dist/profiles/dataset/sourceV1.d.ts +22 -0
- package/dist/profiles/dataset/sourceV1.d.ts.map +1 -0
- package/dist/profiles/dataset/sourceV1.js +73 -0
- package/dist/profiles/dataset/sourceV1.js.map +1 -0
- package/dist/profiles/dataset/v1.d.ts +39 -0
- package/dist/profiles/dataset/v1.d.ts.map +1 -0
- package/dist/profiles/dataset/v1.js +362 -0
- package/dist/profiles/dataset/v1.js.map +1 -0
- package/dist/profiles/execution/contractV1.d.ts +279 -0
- package/dist/profiles/execution/contractV1.d.ts.map +1 -0
- package/dist/profiles/execution/contractV1.js +364 -0
- package/dist/profiles/execution/contractV1.js.map +1 -0
- package/dist/profiles/execution/independentStandardsV1.d.ts +44 -0
- package/dist/profiles/execution/independentStandardsV1.d.ts.map +1 -0
- package/dist/profiles/execution/independentStandardsV1.js +336 -0
- package/dist/profiles/execution/independentStandardsV1.js.map +1 -0
- package/dist/profiles/execution/reasonCodesV1.d.ts +30 -0
- package/dist/profiles/execution/reasonCodesV1.d.ts.map +1 -0
- package/dist/profiles/execution/reasonCodesV1.js +20 -0
- package/dist/profiles/execution/reasonCodesV1.js.map +1 -0
- package/dist/profiles/execution/recomputationV1.d.ts +11 -0
- package/dist/profiles/execution/recomputationV1.d.ts.map +1 -0
- package/dist/profiles/execution/recomputationV1.js +144 -0
- package/dist/profiles/execution/recomputationV1.js.map +1 -0
- package/dist/profiles/execution/rulesV1.d.ts +6 -0
- package/dist/profiles/execution/rulesV1.d.ts.map +1 -0
- package/dist/profiles/execution/rulesV1.js +855 -0
- package/dist/profiles/execution/rulesV1.js.map +1 -0
- package/dist/profiles/execution/standardsPlanV1.d.ts +18 -0
- package/dist/profiles/execution/standardsPlanV1.d.ts.map +1 -0
- package/dist/profiles/execution/standardsPlanV1.js +16 -0
- package/dist/profiles/execution/standardsPlanV1.js.map +1 -0
- package/dist/profiles/execution/verificationV1.d.ts +28 -0
- package/dist/profiles/execution/verificationV1.d.ts.map +1 -0
- package/dist/profiles/execution/verificationV1.js +188 -0
- package/dist/profiles/execution/verificationV1.js.map +1 -0
- package/dist/profiles/ingest/sourceV1.d.ts +36 -0
- package/dist/profiles/ingest/sourceV1.d.ts.map +1 -0
- package/dist/profiles/ingest/sourceV1.js +99 -0
- package/dist/profiles/ingest/sourceV1.js.map +1 -0
- package/dist/profiles/ingest/v1.d.ts +65 -0
- package/dist/profiles/ingest/v1.d.ts.map +1 -0
- package/dist/profiles/ingest/v1.js +477 -0
- package/dist/profiles/ingest/v1.js.map +1 -0
- package/dist/profiles/sourceV1Helpers.d.ts +48 -0
- package/dist/profiles/sourceV1Helpers.d.ts.map +1 -0
- package/dist/profiles/sourceV1Helpers.js +141 -0
- package/dist/profiles/sourceV1Helpers.js.map +1 -0
- package/dist/reports/coreV1.d.ts +7 -0
- package/dist/reports/coreV1.d.ts.map +1 -0
- package/dist/reports/coreV1.js +195 -0
- package/dist/reports/coreV1.js.map +1 -0
- package/dist/reports/portableV1.d.ts +48 -0
- package/dist/reports/portableV1.d.ts.map +1 -0
- package/dist/reports/portableV1.js +279 -0
- package/dist/reports/portableV1.js.map +1 -0
- package/dist/reports/validationV1.d.ts +19 -0
- package/dist/reports/validationV1.d.ts.map +1 -0
- package/dist/reports/validationV1.js +441 -0
- package/dist/reports/validationV1.js.map +1 -0
- package/dist/resolvers/executionMirrorV1.d.ts +15 -0
- package/dist/resolvers/executionMirrorV1.d.ts.map +1 -0
- package/dist/resolvers/executionMirrorV1.js +206 -0
- package/dist/resolvers/executionMirrorV1.js.map +1 -0
- package/dist/resolvers/explorerExecutionV1.d.ts +17 -0
- package/dist/resolvers/explorerExecutionV1.d.ts.map +1 -0
- package/dist/resolvers/explorerExecutionV1.js +61 -0
- package/dist/resolvers/explorerExecutionV1.js.map +1 -0
- package/dist/resolvers/explorerPublicV1.d.ts +37 -0
- package/dist/resolvers/explorerPublicV1.d.ts.map +1 -0
- package/dist/resolvers/explorerPublicV1.js +210 -0
- package/dist/resolvers/explorerPublicV1.js.map +1 -0
- package/dist/resolvers/explorerPublicationV1.d.ts +20 -0
- package/dist/resolvers/explorerPublicationV1.d.ts.map +1 -0
- package/dist/resolvers/explorerPublicationV1.js +195 -0
- package/dist/resolvers/explorerPublicationV1.js.map +1 -0
- package/dist/resolvers/explorerTransportV1.d.ts +17 -0
- package/dist/resolvers/explorerTransportV1.d.ts.map +1 -0
- package/dist/resolvers/explorerTransportV1.js +112 -0
- package/dist/resolvers/explorerTransportV1.js.map +1 -0
- package/dist/resolvers/hcs11MirrorV1.d.ts +49 -0
- package/dist/resolvers/hcs11MirrorV1.d.ts.map +1 -0
- package/dist/resolvers/hcs11MirrorV1.js +293 -0
- package/dist/resolvers/hcs11MirrorV1.js.map +1 -0
- package/dist/resolvers/hcs13MirrorV1.d.ts +35 -0
- package/dist/resolvers/hcs13MirrorV1.d.ts.map +1 -0
- package/dist/resolvers/hcs13MirrorV1.js +72 -0
- package/dist/resolvers/hcs13MirrorV1.js.map +1 -0
- package/dist/resolvers/hcs1MirrorV1.d.ts +28 -0
- package/dist/resolvers/hcs1MirrorV1.d.ts.map +1 -0
- package/dist/resolvers/hcs1MirrorV1.js +220 -0
- package/dist/resolvers/hcs1MirrorV1.js.map +1 -0
- package/dist/resolvers/hcs26MirrorV1.d.ts +67 -0
- package/dist/resolvers/hcs26MirrorV1.d.ts.map +1 -0
- package/dist/resolvers/hcs26MirrorV1.js +218 -0
- package/dist/resolvers/hcs26MirrorV1.js.map +1 -0
- package/dist/resolvers/hcs26RegistryMirrorV1.d.ts +26 -0
- package/dist/resolvers/hcs26RegistryMirrorV1.d.ts.map +1 -0
- package/dist/resolvers/hcs26RegistryMirrorV1.js +200 -0
- package/dist/resolvers/hcs26RegistryMirrorV1.js.map +1 -0
- package/dist/resolvers/hcs2MirrorV1.d.ts +26 -0
- package/dist/resolvers/hcs2MirrorV1.d.ts.map +1 -0
- package/dist/resolvers/hcs2MirrorV1.js +196 -0
- package/dist/resolvers/hcs2MirrorV1.js.map +1 -0
- package/dist/resolvers/hederaMirrorV1.d.ts +22 -0
- package/dist/resolvers/hederaMirrorV1.d.ts.map +1 -0
- package/dist/resolvers/hederaMirrorV1.js +338 -0
- package/dist/resolvers/hederaMirrorV1.js.map +1 -0
- package/dist/standards/hcs/hcs11V1.d.ts +51 -0
- package/dist/standards/hcs/hcs11V1.d.ts.map +1 -0
- package/dist/standards/hcs/hcs11V1.js +289 -0
- package/dist/standards/hcs/hcs11V1.js.map +1 -0
- package/dist/standards/hcs/hcs13V1.d.ts +39 -0
- package/dist/standards/hcs/hcs13V1.d.ts.map +1 -0
- package/dist/standards/hcs/hcs13V1.js +114 -0
- package/dist/standards/hcs/hcs13V1.js.map +1 -0
- package/dist/standards/hcs/hcs14V1.d.ts +35 -0
- package/dist/standards/hcs/hcs14V1.d.ts.map +1 -0
- package/dist/standards/hcs/hcs14V1.js +168 -0
- package/dist/standards/hcs/hcs14V1.js.map +1 -0
- package/dist/standards/hcs/hcs1V1.d.ts +30 -0
- package/dist/standards/hcs/hcs1V1.d.ts.map +1 -0
- package/dist/standards/hcs/hcs1V1.js +140 -0
- package/dist/standards/hcs/hcs1V1.js.map +1 -0
- package/dist/standards/hcs/hcs26V1.d.ts +58 -0
- package/dist/standards/hcs/hcs26V1.d.ts.map +1 -0
- package/dist/standards/hcs/hcs26V1.js +339 -0
- package/dist/standards/hcs/hcs26V1.js.map +1 -0
- package/dist/standards/hcs/hcs2V1.d.ts +36 -0
- package/dist/standards/hcs/hcs2V1.d.ts.map +1 -0
- package/dist/standards/hcs/hcs2V1.js +181 -0
- package/dist/standards/hcs/hcs2V1.js.map +1 -0
- package/dist/standards/hcs/jsonCanonicalV1.d.ts +15 -0
- package/dist/standards/hcs/jsonCanonicalV1.d.ts.map +1 -0
- package/dist/standards/hcs/jsonCanonicalV1.js +160 -0
- package/dist/standards/hcs/jsonCanonicalV1.js.map +1 -0
- package/dist/triangulation/compareV1.d.ts +50 -0
- package/dist/triangulation/compareV1.d.ts.map +1 -0
- package/dist/triangulation/compareV1.js +236 -0
- package/dist/triangulation/compareV1.js.map +1 -0
- package/dist/triangulation/executionPlanV1.d.ts +39 -0
- package/dist/triangulation/executionPlanV1.d.ts.map +1 -0
- package/dist/triangulation/executionPlanV1.js +208 -0
- package/dist/triangulation/executionPlanV1.js.map +1 -0
- package/dist/triangulation/executionPublicV1.d.ts +22 -0
- package/dist/triangulation/executionPublicV1.d.ts.map +1 -0
- package/dist/triangulation/executionPublicV1.js +39 -0
- package/dist/triangulation/executionPublicV1.js.map +1 -0
- package/dist/triangulation/messageObservationV1.d.ts +26 -0
- package/dist/triangulation/messageObservationV1.d.ts.map +1 -0
- package/dist/triangulation/messageObservationV1.js +69 -0
- package/dist/triangulation/messageObservationV1.js.map +1 -0
- package/dist/triangulation/publicV1.d.ts +29 -0
- package/dist/triangulation/publicV1.d.ts.map +1 -0
- package/dist/triangulation/publicV1.js +170 -0
- package/dist/triangulation/publicV1.js.map +1 -0
- package/dist/verification/sourceIntentV1.d.ts +15 -0
- package/dist/verification/sourceIntentV1.d.ts.map +1 -0
- package/dist/verification/sourceIntentV1.js +206 -0
- package/dist/verification/sourceIntentV1.js.map +1 -0
- package/docs/cli-v0.1.md +237 -0
- package/docs/conformance.md +38 -0
- package/docs/threat-model.md +37 -0
- package/docs/verification-semantics.md +65 -0
- package/examples/README.md +35 -0
- package/examples/dataset-offline.mjs +58 -0
- package/examples/dataset-policy.mjs +59 -0
- package/package.json +65 -4
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { sha3_512Hex } from "../crypto/sha3.js";
|
|
2
|
+
import { canonicalizeVerificationCoreV1, computeVerificationCoreDigestV1 } from "./coreV1.js";
|
|
3
|
+
export const PORTABLE_VERIFICATION_REPORT_SCHEMA_VERSION = "va.portable-verification-report.v1";
|
|
4
|
+
const DOMAIN = "va:portable-verification-report:v1";
|
|
5
|
+
const MAX_BYTES = 1024 * 1024;
|
|
6
|
+
const MAX_DEPTH = 32;
|
|
7
|
+
const SHA256 = /^[a-f0-9]{64}$/;
|
|
8
|
+
const ID = /^[a-z][a-z0-9._:-]{0,159}$/;
|
|
9
|
+
const UUID = /^[a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/i;
|
|
10
|
+
const OUTCOMES = new Set(["pass", "fail", "indeterminate", "unsupported", "skipped"]);
|
|
11
|
+
const STATUS = ["resolved", "conflict", "invalid", "unavailable", "unsupported"];
|
|
12
|
+
function object(value, name) {
|
|
13
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
14
|
+
throw new TypeError(`Invalid ${name}`);
|
|
15
|
+
const proto = Object.getPrototypeOf(value);
|
|
16
|
+
if (proto !== Object.prototype && proto !== null)
|
|
17
|
+
throw new TypeError(`Invalid ${name}`);
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
function string(value, name, max = 256) {
|
|
21
|
+
if (typeof value !== "string" || !value || value.length > max || value.trim() !== value) {
|
|
22
|
+
throw new TypeError(`Invalid ${name}`);
|
|
23
|
+
}
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
function optionalString(value, name, max = 256) {
|
|
27
|
+
return value === null ? null : string(value, name, max);
|
|
28
|
+
}
|
|
29
|
+
/** Clone supported JSON only; never stringify raw, potentially cyclic caller input. */
|
|
30
|
+
function json(value, depth = 0) {
|
|
31
|
+
if (depth > MAX_DEPTH)
|
|
32
|
+
throw new TypeError("Portable report exceeds nesting limit");
|
|
33
|
+
if (value === null || typeof value === "boolean")
|
|
34
|
+
return value;
|
|
35
|
+
if (typeof value === "string") {
|
|
36
|
+
if (value.length > MAX_BYTES || /[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u.test(value)) {
|
|
37
|
+
throw new TypeError("Invalid portable report string");
|
|
38
|
+
}
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
if (typeof value === "number") {
|
|
42
|
+
if (!Number.isFinite(value) || Object.is(value, -0)) {
|
|
43
|
+
throw new TypeError("Invalid portable report number");
|
|
44
|
+
}
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
if (Array.isArray(value)) {
|
|
48
|
+
if (value.length > 512)
|
|
49
|
+
throw new TypeError("Portable report array exceeds limit");
|
|
50
|
+
return Array.from({ length: value.length }, (_, i) => {
|
|
51
|
+
if (!Object.hasOwn(value, i))
|
|
52
|
+
throw new TypeError("Sparse portable report array");
|
|
53
|
+
return json(value[i], depth + 1);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
const row = object(value, "portable report JSON object");
|
|
57
|
+
const keys = Object.keys(row).sort();
|
|
58
|
+
if (keys.length > 512)
|
|
59
|
+
throw new TypeError("Portable report object exceeds field limit");
|
|
60
|
+
const entries = [];
|
|
61
|
+
for (const key of keys) {
|
|
62
|
+
if (!key || key.length > 160 || /[\u0000-\u001f\u007f]/.test(key))
|
|
63
|
+
throw new TypeError("Invalid portable report field");
|
|
64
|
+
entries.push([key, json(row[key], depth + 1)]);
|
|
65
|
+
}
|
|
66
|
+
return Object.fromEntries(entries);
|
|
67
|
+
}
|
|
68
|
+
function checkedCore(report) {
|
|
69
|
+
const canonical = canonicalizeVerificationCoreV1(report);
|
|
70
|
+
return {
|
|
71
|
+
core: JSON.parse(canonical),
|
|
72
|
+
core_sha3_512: computeVerificationCoreDigestV1(report),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function checkedExecutionScope(report) {
|
|
76
|
+
const scope = object(report.verification_scope, "execution scope");
|
|
77
|
+
if (report.intent.subject.kind !== "execution" ||
|
|
78
|
+
(scope.profile !== "execution-v1" && scope.profile !== "sage-standards-v1")) {
|
|
79
|
+
throw new TypeError("Invalid execution report scope");
|
|
80
|
+
}
|
|
81
|
+
if (scope.expected_program !== null)
|
|
82
|
+
string(scope.expected_program, "expected program", 128);
|
|
83
|
+
if (scope.requested_result_id !== null &&
|
|
84
|
+
!UUID.test(string(scope.requested_result_id, "requested result ID", 64))) {
|
|
85
|
+
throw new TypeError("Invalid execution result scope");
|
|
86
|
+
}
|
|
87
|
+
if (scope.profile === "execution-v1" && scope.expected_program === null) {
|
|
88
|
+
throw new TypeError("Generic execution profile requires expected program");
|
|
89
|
+
}
|
|
90
|
+
const selected = report.findings.find((f) => f.check_id === "intent.result");
|
|
91
|
+
if (scope.requested_result_id !== null && !selected)
|
|
92
|
+
throw new TypeError("Missing result-scope finding");
|
|
93
|
+
return json({ profile: scope.profile, expected_program: scope.expected_program,
|
|
94
|
+
requested_result_id: scope.requested_result_id });
|
|
95
|
+
}
|
|
96
|
+
function expectedOutcome(status) {
|
|
97
|
+
return status === "resolved" ? "pass" : status === "conflict" || status === "invalid" ? "fail" :
|
|
98
|
+
status === "unsupported" ? "unsupported" : "indeterminate";
|
|
99
|
+
}
|
|
100
|
+
function requireFinding(report, check_id, outcome) {
|
|
101
|
+
const found = report.findings.find((item) => item.check_id === check_id);
|
|
102
|
+
if (!found || found.outcome !== outcome)
|
|
103
|
+
throw new TypeError(`Inconsistent report finding: ${check_id}`);
|
|
104
|
+
}
|
|
105
|
+
function standardsContext(report) {
|
|
106
|
+
const standards = report.independent_standards;
|
|
107
|
+
if (!standards || standards.network !== report.intent.subject.hedera_network ||
|
|
108
|
+
!["verified", "failed", "unavailable", "not_performed"].includes(standards.status) ||
|
|
109
|
+
!["mirror_corroborated", "not_established"].includes(standards.assurance) ||
|
|
110
|
+
!Array.isArray(standards.items) || standards.items.length > 16) {
|
|
111
|
+
throw new TypeError("Invalid independent standards summary");
|
|
112
|
+
}
|
|
113
|
+
const allResolved = standards.items.length > 0 && standards.items.every((item) => item.status === "resolved");
|
|
114
|
+
const anyFailed = standards.items.some((item) => item.status === "conflict" || item.status === "invalid");
|
|
115
|
+
if ((standards.status === "verified") !== allResolved ||
|
|
116
|
+
(standards.status === "failed") !== anyFailed ||
|
|
117
|
+
(standards.status === "not_performed") !== (standards.items.length === 0) ||
|
|
118
|
+
(standards.assurance === "mirror_corroborated") !== (standards.status === "verified")) {
|
|
119
|
+
throw new TypeError("Inconsistent independent standards aggregate");
|
|
120
|
+
}
|
|
121
|
+
const seen = new Set();
|
|
122
|
+
standards.items.forEach((item, i) => {
|
|
123
|
+
const key = string(item.key, "standards plan key");
|
|
124
|
+
if (seen.has(key) || !STATUS.includes(item.status) ||
|
|
125
|
+
item.assurance !== (item.status === "resolved" ? "mirror_corroborated" : "not_established") ||
|
|
126
|
+
(item.content_sha256 !== null && !SHA256.test(item.content_sha256))) {
|
|
127
|
+
throw new TypeError("Invalid independent standards item");
|
|
128
|
+
}
|
|
129
|
+
seen.add(key);
|
|
130
|
+
requireFinding(report, `standards.reference.${i}`, expectedOutcome(item.status));
|
|
131
|
+
});
|
|
132
|
+
requireFinding(report, "standards.references_resolved", standards.status === "verified" ? "pass" :
|
|
133
|
+
standards.status === "failed" ? "fail" : "indeterminate");
|
|
134
|
+
return json({ verification_scope: checkedExecutionScope(report), independent_standards: standards });
|
|
135
|
+
}
|
|
136
|
+
function relationshipContext(report, relationships) {
|
|
137
|
+
if (!Array.isArray(relationships) || relationships.length > 3)
|
|
138
|
+
throw new TypeError("Invalid triangulation relationships");
|
|
139
|
+
const used = new Set();
|
|
140
|
+
for (const rel of relationships) {
|
|
141
|
+
if (!["provided_public_record", "public_record_hedera", "provided_hedera"].includes(rel.id) ||
|
|
142
|
+
used.has(rel.id) || !["consistent", "conflict", "incomplete", "not_applicable"].includes(rel.status) ||
|
|
143
|
+
!Array.isArray(rel.fact_comparisons) || rel.fact_comparisons.length > 64) {
|
|
144
|
+
throw new TypeError("Invalid triangulation relationship");
|
|
145
|
+
}
|
|
146
|
+
used.add(rel.id);
|
|
147
|
+
const keys = new Set();
|
|
148
|
+
for (const fact of rel.fact_comparisons) {
|
|
149
|
+
if (!ID.test(fact.key) || keys.has(fact.key) || !OUTCOMES.has(fact.outcome)) {
|
|
150
|
+
throw new TypeError("Invalid triangulation fact result");
|
|
151
|
+
}
|
|
152
|
+
keys.add(fact.key);
|
|
153
|
+
requireFinding(report, `triangulation.${rel.id}.${fact.key}`, fact.outcome);
|
|
154
|
+
}
|
|
155
|
+
const checks = rel.fact_comparisons.map((f) => f.outcome);
|
|
156
|
+
const aggregate = checks.length === 0 || checks.every((outcome) => outcome === "skipped") ? "not_applicable" :
|
|
157
|
+
checks.includes("fail") ? "conflict" :
|
|
158
|
+
checks.some((outcome) => outcome === "indeterminate" || outcome === "unsupported") ? "incomplete" : "consistent";
|
|
159
|
+
if (rel.status !== aggregate)
|
|
160
|
+
throw new TypeError("Inconsistent triangulation relationship status");
|
|
161
|
+
}
|
|
162
|
+
return json(relationships);
|
|
163
|
+
}
|
|
164
|
+
function consistency(value) {
|
|
165
|
+
if (value !== "consistent" && value !== "conflict" && value !== "incomplete") {
|
|
166
|
+
throw new TypeError("Invalid triangulation consistency");
|
|
167
|
+
}
|
|
168
|
+
return value;
|
|
169
|
+
}
|
|
170
|
+
function context(input) {
|
|
171
|
+
if (input.kind === "verification") {
|
|
172
|
+
const row = object(input.result, "shared verification result");
|
|
173
|
+
if ("verification_scope" in row || "independent_standards" in row ||
|
|
174
|
+
input.result.intent?.subject?.kind === "execution") {
|
|
175
|
+
throw new TypeError("Execution assurance requires an explicit portable report kind");
|
|
176
|
+
}
|
|
177
|
+
return { report: input.result, context: {} };
|
|
178
|
+
}
|
|
179
|
+
if (input.kind === "execution") {
|
|
180
|
+
if ("independent_standards" in object(input.result, "execution result")) {
|
|
181
|
+
throw new TypeError("Independent standards require an explicit portable report kind");
|
|
182
|
+
}
|
|
183
|
+
return { report: input.result, context: { verification_scope: checkedExecutionScope(input.result) } };
|
|
184
|
+
}
|
|
185
|
+
if (input.kind === "independent_standards") {
|
|
186
|
+
return { report: input.result, context: standardsContext(input.result) };
|
|
187
|
+
}
|
|
188
|
+
if (input.kind === "public_triangulation") {
|
|
189
|
+
const result = input.result;
|
|
190
|
+
const state = consistency(result.consistency);
|
|
191
|
+
if (state === "consistent" && (!result.relationships.length ||
|
|
192
|
+
result.relationships.some((r) => r.status !== "consistent"))) {
|
|
193
|
+
throw new TypeError("Incomplete triangulation cannot be consistent");
|
|
194
|
+
}
|
|
195
|
+
return { report: result.report, context: {
|
|
196
|
+
consistency: state,
|
|
197
|
+
relationships: relationshipContext(result.report, result.relationships),
|
|
198
|
+
resolution: json(result.resolution),
|
|
199
|
+
} };
|
|
200
|
+
}
|
|
201
|
+
if (input.kind !== "execution_triangulation")
|
|
202
|
+
throw new TypeError("Unsupported portable report kind");
|
|
203
|
+
const result = input.result;
|
|
204
|
+
if (!["resolved", "not_found", "unavailable", "invalid", "conflict", "verification_material_unavailable"].includes(result.status) ||
|
|
205
|
+
!["resolved", "not_found", "unavailable", "invalid", "conflict", "verification_material_unavailable"].includes(result.public_record_acquisition)) {
|
|
206
|
+
throw new TypeError("Invalid public execution acquisition");
|
|
207
|
+
}
|
|
208
|
+
if (result.plan === null) {
|
|
209
|
+
if (result.comparison !== null || result.mirror !== null || result.hedera_resolution !== "not_checked" ||
|
|
210
|
+
result.public_record_acquisition === "resolved" || !input.source_report) {
|
|
211
|
+
throw new TypeError("Unresolved execution requires independently computed offline report");
|
|
212
|
+
}
|
|
213
|
+
const report = input.source_report;
|
|
214
|
+
return { report, context: {
|
|
215
|
+
verification_scope: checkedExecutionScope(report),
|
|
216
|
+
public_execution: json({ status: result.status, reason_code: result.reason_code,
|
|
217
|
+
public_record_acquisition: result.public_record_acquisition,
|
|
218
|
+
hedera_resolution: result.hedera_resolution }),
|
|
219
|
+
} };
|
|
220
|
+
}
|
|
221
|
+
if (!result.comparison || !result.mirror || result.public_record_acquisition !== "resolved" ||
|
|
222
|
+
result.plan.stage !== "unresolved_authority_plan" ||
|
|
223
|
+
result.plan.hedera_resolution !== "not_checked" || result.plan.public_record_acquisition !== "not_checked") {
|
|
224
|
+
throw new TypeError("Invalid resolved execution triangulation structure");
|
|
225
|
+
}
|
|
226
|
+
const report = result.comparison.report;
|
|
227
|
+
const source = result.plan.source_report;
|
|
228
|
+
if (report.intent.subject.kind !== "execution" ||
|
|
229
|
+
JSON.stringify(report.intent) !== JSON.stringify(source.intent) ||
|
|
230
|
+
result.hedera_resolution !== result.mirror.status) {
|
|
231
|
+
throw new TypeError("Execution triangulation subject or resolver mismatch");
|
|
232
|
+
}
|
|
233
|
+
for (const target of result.plan.hedera_targets) {
|
|
234
|
+
if (target.network !== report.intent.subject.hedera_network) {
|
|
235
|
+
throw new TypeError("Execution Hedera target network mismatch");
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
const state = consistency(result.comparison.consistency);
|
|
239
|
+
if (state === "consistent" && (!result.comparison.relationships.length ||
|
|
240
|
+
result.comparison.relationships.some((r) => r.status !== "consistent"))) {
|
|
241
|
+
throw new TypeError("Incomplete execution triangulation cannot be consistent");
|
|
242
|
+
}
|
|
243
|
+
return { report, context: {
|
|
244
|
+
verification_scope: checkedExecutionScope(source),
|
|
245
|
+
source_core_sha3_512: computeVerificationCoreDigestV1(source),
|
|
246
|
+
public_execution: json({ status: result.status, reason_code: result.reason_code,
|
|
247
|
+
public_record_acquisition: result.public_record_acquisition, hedera_resolution: result.hedera_resolution,
|
|
248
|
+
mirror_status: result.mirror.status, mirror_reason_code: result.mirror.reason_code }),
|
|
249
|
+
triangulation: json({ consistency: state, relationships: relationshipContext(report, result.comparison.relationships),
|
|
250
|
+
targets: result.plan.hedera_targets, plan_relationships: result.plan.triangulation.relationships }),
|
|
251
|
+
} };
|
|
252
|
+
}
|
|
253
|
+
/** A content-addressed record of claimed findings, not proof of their authenticity. */
|
|
254
|
+
export function createPortableVerificationReportV1(input) {
|
|
255
|
+
if (!input || typeof input !== "object")
|
|
256
|
+
throw new TypeError("Portable report input is required");
|
|
257
|
+
const selected = context(input);
|
|
258
|
+
const normalized = checkedCore(selected.report);
|
|
259
|
+
const base = json({ schema_version: PORTABLE_VERIFICATION_REPORT_SCHEMA_VERSION,
|
|
260
|
+
kind: input.kind, core_sha3_512: normalized.core_sha3_512,
|
|
261
|
+
core: normalized.core, context: selected.context });
|
|
262
|
+
const canonical = JSON.stringify(base);
|
|
263
|
+
if (Buffer.byteLength(canonical, "utf8") > MAX_BYTES)
|
|
264
|
+
throw new RangeError("Portable report exceeds size limit");
|
|
265
|
+
const report_sha3_512 = sha3_512Hex(Buffer.concat([
|
|
266
|
+
Buffer.from(DOMAIN, "utf8"), Buffer.from([0]), Buffer.from(canonical, "utf8"),
|
|
267
|
+
]));
|
|
268
|
+
return Object.freeze({ schema_version: PORTABLE_VERIFICATION_REPORT_SCHEMA_VERSION,
|
|
269
|
+
kind: input.kind, core_sha3_512: normalized.core_sha3_512, report_sha3_512,
|
|
270
|
+
core: Object.freeze(normalized.core), context: Object.freeze(selected.context) });
|
|
271
|
+
}
|
|
272
|
+
/** Deterministic serialized report, including the digest of its material conclusions. */
|
|
273
|
+
export function canonicalizePortableVerificationReportV1(input) {
|
|
274
|
+
return JSON.stringify(json(createPortableVerificationReportV1(input)));
|
|
275
|
+
}
|
|
276
|
+
export function computePortableVerificationReportDigestV1(input) {
|
|
277
|
+
return createPortableVerificationReportV1(input).report_sha3_512;
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=portableV1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portableV1.js","sourceRoot":"","sources":["../../src/reports/portableV1.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type PortableVerificationReportValidationV1 = Readonly<{
|
|
2
|
+
status: "valid" | "invalid";
|
|
3
|
+
reason_code: "PORTABLE_REPORT_INVALID" | "PORTABLE_CORE_DIGEST_MISMATCH" | "PORTABLE_REPORT_DIGEST_MISMATCH" | null;
|
|
4
|
+
/** Validity means internal structure and content digests only. */
|
|
5
|
+
authenticity: "not_checked";
|
|
6
|
+
evidence_recomputation: "not_performed";
|
|
7
|
+
}>;
|
|
8
|
+
export type PortableVerificationReportComparisonV1 = Readonly<{
|
|
9
|
+
status: "equivalent" | "different";
|
|
10
|
+
differences: readonly ("kind" | "subject" | "intent" | "findings" | "observations" | "context")[];
|
|
11
|
+
/** Comparing two saved reports does not independently verify either report's claims. */
|
|
12
|
+
authenticity: "not_checked";
|
|
13
|
+
evidence_recomputation: "not_performed";
|
|
14
|
+
}>;
|
|
15
|
+
/** Checks only saved-document structure and self-consistency, never evidence authenticity. */
|
|
16
|
+
export declare function validatePortableVerificationReportV1(value: unknown): PortableVerificationReportValidationV1;
|
|
17
|
+
/** Compares internally valid saved documents. Throws on invalid input; does not authenticate either report. */
|
|
18
|
+
export declare function comparePortableVerificationReportsV1(left: unknown, right: unknown): PortableVerificationReportComparisonV1;
|
|
19
|
+
//# sourceMappingURL=validationV1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validationV1.d.ts","sourceRoot":"","sources":["../../src/reports/validationV1.ts"],"names":[],"mappings":"AAuBA,MAAM,MAAM,sCAAsC,GAAG,QAAQ,CAAC;IAC5D,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,yBAAyB,GAAG,+BAA+B,GACtE,iCAAiC,GAAG,IAAI,CAAC;IAC3C,kEAAkE;IAClE,YAAY,EAAE,aAAa,CAAC;IAC5B,sBAAsB,EAAE,eAAe,CAAC;CACzC,CAAC,CAAC;AAEH,MAAM,MAAM,sCAAsC,GAAG,QAAQ,CAAC;IAC5D,MAAM,EAAE,YAAY,GAAG,WAAW,CAAC;IACnC,WAAW,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC,EAAE,CAAC;IAClG,wFAAwF;IACxF,YAAY,EAAE,aAAa,CAAC;IAC5B,sBAAsB,EAAE,eAAe,CAAC;CACzC,CAAC,CAAC;AAoWH,8FAA8F;AAC9F,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,OAAO,GAAG,sCAAsC,CAW3G;AAED,+GAA+G;AAC/G,wBAAgB,oCAAoC,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,sCAAsC,CAc1H"}
|