@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,105 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { normalizeSha3_512Digest } from "../crypto/sha3.js";
|
|
3
|
+
export const MAX_MERKLE_PROOF_STEPS = 64;
|
|
4
|
+
function result(outcome, reason_code, expected_root, computed_root) {
|
|
5
|
+
return Object.freeze({ outcome, reason_code, expected_root, computed_root });
|
|
6
|
+
}
|
|
7
|
+
function digestBytes(hex) {
|
|
8
|
+
return Buffer.from(hex, "hex");
|
|
9
|
+
}
|
|
10
|
+
function sha3(parts) {
|
|
11
|
+
const hash = createHash("sha3-512");
|
|
12
|
+
for (const part of parts)
|
|
13
|
+
hash.update(part);
|
|
14
|
+
return hash.digest("hex");
|
|
15
|
+
}
|
|
16
|
+
function leafNode(digest, isV2) {
|
|
17
|
+
return isV2 ? sha3([Buffer.from([0]), digestBytes(digest)]) : digest;
|
|
18
|
+
}
|
|
19
|
+
function parentNode(left, right, isV2) {
|
|
20
|
+
if (isV2) {
|
|
21
|
+
return sha3([Buffer.from([1]), digestBytes(left), digestBytes(right)]);
|
|
22
|
+
}
|
|
23
|
+
// Both keys are fixed and ordered: identical to the historical sorted-key
|
|
24
|
+
// canonical JSON pair hash, without accepting general-purpose JSON inputs.
|
|
25
|
+
return sha3([Buffer.from(JSON.stringify({ left, right }), "utf8")]);
|
|
26
|
+
}
|
|
27
|
+
function parseProof(value, count) {
|
|
28
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
29
|
+
throw new TypeError("Merkle proof must be an object");
|
|
30
|
+
}
|
|
31
|
+
const leaf = normalizeSha3_512Digest(value.leaf_hash);
|
|
32
|
+
const index = value.leaf_index;
|
|
33
|
+
if (!Number.isSafeInteger(index) || index < 0 || index >= count) {
|
|
34
|
+
throw new TypeError("Merkle leaf_index must be within the expected leaf_count");
|
|
35
|
+
}
|
|
36
|
+
if (!Array.isArray(value.path) || value.path.length > MAX_MERKLE_PROOF_STEPS) {
|
|
37
|
+
throw new TypeError("Merkle path must be a bounded array");
|
|
38
|
+
}
|
|
39
|
+
let width = count;
|
|
40
|
+
let depth = 0;
|
|
41
|
+
while (width > 1) {
|
|
42
|
+
width = Math.ceil(width / 2);
|
|
43
|
+
depth++;
|
|
44
|
+
}
|
|
45
|
+
if (value.path.length !== depth) {
|
|
46
|
+
throw new TypeError("Merkle path depth does not match expected leaf_count");
|
|
47
|
+
}
|
|
48
|
+
const path = value.path.map((step, i) => {
|
|
49
|
+
if (!step || typeof step !== "object" || Array.isArray(step)) {
|
|
50
|
+
throw new TypeError(`Merkle path step ${i} must be an object`);
|
|
51
|
+
}
|
|
52
|
+
if (Object.keys(step).some((key) => key !== "position" && key !== "hash")) {
|
|
53
|
+
throw new TypeError(`Merkle path step ${i} contains unexpected fields`);
|
|
54
|
+
}
|
|
55
|
+
if (step.position !== "left" && step.position !== "right") {
|
|
56
|
+
throw new TypeError(`Merkle path step ${i} has invalid position`);
|
|
57
|
+
}
|
|
58
|
+
return Object.freeze({
|
|
59
|
+
position: step.position,
|
|
60
|
+
hash: normalizeSha3_512Digest(step.hash),
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
return { leaf, index, path };
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Verify membership against a separately trusted root, algorithm, and leaf count.
|
|
67
|
+
* This establishes a mathematical commitment relationship, not ledger authenticity.
|
|
68
|
+
*/
|
|
69
|
+
export function verifyMerkleMembership(input) {
|
|
70
|
+
const expected = input?.expected;
|
|
71
|
+
if (!expected || expected.kind !== "merkle-root") {
|
|
72
|
+
throw new TypeError("Expected a Merkle root commitment");
|
|
73
|
+
}
|
|
74
|
+
const expectedRoot = normalizeSha3_512Digest(expected.root_hash);
|
|
75
|
+
const count = expected.leaf_count;
|
|
76
|
+
if (!Number.isSafeInteger(count) || count < 1) {
|
|
77
|
+
throw new TypeError("Expected Merkle leaf_count must be a positive safe integer");
|
|
78
|
+
}
|
|
79
|
+
if (expected.tree_alg !== "binary-sorted" &&
|
|
80
|
+
expected.tree_alg !== "binary-sorted-v2") {
|
|
81
|
+
return result("unsupported", "MERKLE_ALGORITHM_UNSUPPORTED", expectedRoot, null);
|
|
82
|
+
}
|
|
83
|
+
const isV2 = expected.tree_alg === "binary-sorted-v2";
|
|
84
|
+
const { leaf, path, index } = parseProof(input.proof, count);
|
|
85
|
+
let current = leafNode(leaf, isV2);
|
|
86
|
+
let width = count;
|
|
87
|
+
let position = index;
|
|
88
|
+
for (const sibling of path) {
|
|
89
|
+
const isRight = position % 2 === 1;
|
|
90
|
+
if (sibling.position !== (isRight ? "left" : "right")) {
|
|
91
|
+
return result("fail", "MERKLE_PATH_POSITION_MISMATCH", expectedRoot, null);
|
|
92
|
+
}
|
|
93
|
+
if (!isRight && position + 1 === width && sibling.hash !== current) {
|
|
94
|
+
return result("fail", "MERKLE_ODD_SIBLING_MISMATCH", expectedRoot, null);
|
|
95
|
+
}
|
|
96
|
+
const left = isRight ? sibling.hash : current;
|
|
97
|
+
const right = isRight ? current : sibling.hash;
|
|
98
|
+
current = parentNode(left, right, isV2);
|
|
99
|
+
position = Math.floor(position / 2);
|
|
100
|
+
width = Math.ceil(width / 2);
|
|
101
|
+
}
|
|
102
|
+
const matches = current === expectedRoot;
|
|
103
|
+
return result(matches ? "pass" : "fail", matches ? null : "MERKLE_ROOT_MISMATCH", expectedRoot, current);
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=membership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"membership.js","sourceRoot":"","sources":["../../src/merkle/membership.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { VerificationSubject } from "../contracts/verification.js";
|
|
2
|
+
import type { PortableVerificationReportV1 } from "../reports/portableV1.js";
|
|
3
|
+
export declare const VERIFICATION_POLICY_SCHEMA_VERSION = "va.verification-policy.v1";
|
|
4
|
+
/** Assurance dimensions are independent; they are not a numeric trust score. */
|
|
5
|
+
export type VerificationPolicyAssuranceV1 = "mirror_corroboration";
|
|
6
|
+
export type VerificationPolicyV1 = Readonly<{
|
|
7
|
+
schema_version: typeof VERIFICATION_POLICY_SCHEMA_VERSION;
|
|
8
|
+
/** Relying-party expectation, NOT copied from supplied evidence. */
|
|
9
|
+
subject: VerificationSubject;
|
|
10
|
+
report_kind: PortableVerificationReportV1["kind"];
|
|
11
|
+
required_checks: readonly string[];
|
|
12
|
+
required_assurance?: readonly VerificationPolicyAssuranceV1[];
|
|
13
|
+
/** Exact caller-selected scope, required when report_kind is an execution profile. */
|
|
14
|
+
execution_scope?: Readonly<{
|
|
15
|
+
profile: "execution-v1" | "sage-standards-v1";
|
|
16
|
+
expected_program: string | null;
|
|
17
|
+
requested_result_id: string | null;
|
|
18
|
+
}>;
|
|
19
|
+
on_unresolved?: "review" | "deny";
|
|
20
|
+
}>;
|
|
21
|
+
export type VerificationPolicyRequirementV1 = Readonly<{
|
|
22
|
+
key: string;
|
|
23
|
+
outcome: "pass" | "fail" | "unresolved";
|
|
24
|
+
reason_code: string | null;
|
|
25
|
+
}>;
|
|
26
|
+
export type VerificationPolicyDecisionV1 = Readonly<{
|
|
27
|
+
decision: "allow" | "deny" | "review";
|
|
28
|
+
report_sha3_512: string | null;
|
|
29
|
+
authority: "sdk_verification" | "unauthenticated_report";
|
|
30
|
+
requirements: readonly VerificationPolicyRequirementV1[];
|
|
31
|
+
reason_codes: readonly string[];
|
|
32
|
+
}>;
|
|
33
|
+
export type VerificationPolicyWorkflowV1 = Readonly<{
|
|
34
|
+
report: PortableVerificationReportV1;
|
|
35
|
+
policy: VerificationPolicyDecisionV1;
|
|
36
|
+
}>;
|
|
37
|
+
//# sourceMappingURL=contractV1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contractV1.d.ts","sourceRoot":"","sources":["../../src/policy/contractV1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAE7E,eAAO,MAAM,kCAAkC,8BAA8B,CAAC;AAE9E,gFAAgF;AAChF,MAAM,MAAM,6BAA6B,GACrC,sBAAsB,CAAC;AAE3B,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,cAAc,EAAE,OAAO,kCAAkC,CAAC;IAC1D,oEAAoE;IACpE,OAAO,EAAE,mBAAmB,CAAC;IAC7B,WAAW,EAAE,4BAA4B,CAAC,MAAM,CAAC,CAAC;IAClD,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,kBAAkB,CAAC,EAAE,SAAS,6BAA6B,EAAE,CAAC;IAC9D,sFAAsF;IACtF,eAAe,CAAC,EAAE,QAAQ,CAAC;QACzB,OAAO,EAAE,cAAc,GAAG,mBAAmB,CAAC;QAC9C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;KACpC,CAAC,CAAC;IACH,aAAa,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,MAAM,+BAA+B,GAAG,QAAQ,CAAC;IACrD,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;IACxC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IAClD,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACtC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,kBAAkB,GAAG,wBAAwB,CAAC;IACzD,YAAY,EAAE,SAAS,+BAA+B,EAAE,CAAC;IACzD,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IAClD,MAAM,EAAE,4BAA4B,CAAC;IACrC,MAAM,EAAE,4BAA4B,CAAC;CACtC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contractV1.js","sourceRoot":"","sources":["../../src/policy/contractV1.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,kCAAkC,GAAG,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type DatasetV1IntentInput, type IngestV1IntentInput } from "../verification/sourceIntentV1.js";
|
|
2
|
+
import { type ExecutionV1Input } from "../profiles/execution/verificationV1.js";
|
|
3
|
+
import { verifyExecutionWithIndependentStandardsV1 } from "../profiles/execution/independentStandardsV1.js";
|
|
4
|
+
import { type PublicTriangulationV1Config, type PublicIngestTriangulationV1Input } from "../triangulation/publicV1.js";
|
|
5
|
+
import { type PublicExecutionTriangulationV1Config } from "../triangulation/executionPublicV1.js";
|
|
6
|
+
import { type VerificationPolicyDecisionV1, type VerificationPolicyWorkflowV1, type VerificationPolicyV1 } from "./contractV1.js";
|
|
7
|
+
/** Assess a saved report's *claims*. This cannot approve evidence: anyone can forge an unsigned report. */
|
|
8
|
+
export declare function assessPortableVerificationPolicyV1(report: unknown, policy: VerificationPolicyV1): VerificationPolicyDecisionV1;
|
|
9
|
+
/** These entry points actually invoke the SDK verifier. There is no public
|
|
10
|
+
* function that can mark an arbitrary caller-owned report as SDK-verified. */
|
|
11
|
+
export declare function verifyDatasetWithPolicyV1(input: DatasetV1IntentInput, policy: VerificationPolicyV1): Promise<VerificationPolicyWorkflowV1>;
|
|
12
|
+
export declare function verifyIngestWithPolicyV1(input: IngestV1IntentInput, policy: VerificationPolicyV1): Promise<VerificationPolicyWorkflowV1>;
|
|
13
|
+
export declare function verifyExecutionWithPolicyV1(input: ExecutionV1Input, policy: VerificationPolicyV1): VerificationPolicyWorkflowV1;
|
|
14
|
+
/** SDK-owned source recomputation, Explorer publication resolution and Hedera corroboration. */
|
|
15
|
+
export declare function triangulateDatasetWithPolicyV1(config: PublicTriangulationV1Config, input: DatasetV1IntentInput, policy: VerificationPolicyV1): Promise<VerificationPolicyWorkflowV1>;
|
|
16
|
+
/** Ingest source identity is independent of the Core Merkle anchor request ID. */
|
|
17
|
+
export declare function triangulateIngestWithPolicyV1(config: PublicTriangulationV1Config, input: PublicIngestTriangulationV1Input, policy: VerificationPolicyV1): Promise<VerificationPolicyWorkflowV1>;
|
|
18
|
+
/** Original HCS anchors remain provenance only, not public plaintext authority.
|
|
19
|
+
* Recompute offline verification on unresolved acquisition to preserve its scope. */
|
|
20
|
+
export declare function triangulateExecutionWithPolicyV1(config: PublicExecutionTriangulationV1Config, input: ExecutionV1Input, policy: VerificationPolicyV1): Promise<VerificationPolicyWorkflowV1>;
|
|
21
|
+
/** Resolve pinned independent HCS standards before applying relying-party policy.
|
|
22
|
+
* A Mirror-corroborated standards result does not authenticate consensus or DID control. */
|
|
23
|
+
export declare function verifyExecutionStandardsWithPolicyV1(config: Parameters<typeof verifyExecutionWithIndependentStandardsV1>[0], input: Parameters<typeof verifyExecutionWithIndependentStandardsV1>[1], options: Parameters<typeof verifyExecutionWithIndependentStandardsV1>[2], policy: VerificationPolicyV1): Promise<VerificationPolicyWorkflowV1>;
|
|
24
|
+
//# sourceMappingURL=evaluateV1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluateV1.d.ts","sourceRoot":"","sources":["../../src/policy/evaluateV1.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACjG,OAAO,EAA+B,KAAK,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC7G,OAAO,EAAE,yCAAyC,EAAE,MAAM,iDAAiD,CAAC;AAE5G,OAAO,EACL,KAAK,2BAA2B,EAAE,KAAK,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AAChH,OAAO,EACL,KAAK,oCAAoC,EAAE,MAAM,uCAAuC,CAAC;AAC3F,OAAO,EACL,KAAK,4BAA4B,EAAwC,KAAK,4BAA4B,EAC1G,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAyOrD,2GAA2G;AAC3G,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,oBAAoB,GAAG,4BAA4B,CAE9H;AAED;8EAC8E;AAC9E,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,oBAAoB,EACzE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAKrE;AAED,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,mBAAmB,EACvE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAKrE;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gBAAgB,EACjE,MAAM,EAAE,oBAAoB,GAAG,4BAA4B,CAK5D;AAkBD,gGAAgG;AAChG,wBAAsB,8BAA8B,CAAC,MAAM,EAAE,2BAA2B,EACtF,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAKlG;AAED,kFAAkF;AAClF,wBAAsB,6BAA6B,CAAC,MAAM,EAAE,2BAA2B,EACrF,KAAK,EAAE,gCAAgC,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAK9G;AAED;qFACqF;AACrF,wBAAsB,gCAAgC,CAAC,MAAM,EAAE,oCAAoC,EACjG,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAM9F;AAGD;4FAC4F;AAC5F,wBAAsB,oCAAoC,CACxD,MAAM,EAAE,UAAU,CAAC,OAAO,yCAAyC,CAAC,CAAC,CAAC,CAAC,EACvE,KAAK,EAAE,UAAU,CAAC,OAAO,yCAAyC,CAAC,CAAC,CAAC,CAAC,EACtE,OAAO,EAAE,UAAU,CAAC,OAAO,yCAAyC,CAAC,CAAC,CAAC,CAAC,EACxE,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,4BAA4B,CAAC,CAcvC"}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
import { createPortableVerificationReportV1 } from "../reports/portableV1.js";
|
|
2
|
+
import { verifyDatasetV1WithIntent, verifyIngestV1WithIntent } from "../verification/sourceIntentV1.js";
|
|
3
|
+
import { verifyExecutionV1WithIntent } from "../profiles/execution/verificationV1.js";
|
|
4
|
+
import { verifyExecutionWithIndependentStandardsV1 } from "../profiles/execution/independentStandardsV1.js";
|
|
5
|
+
import { validatePortableVerificationReportV1 } from "../reports/validationV1.js";
|
|
6
|
+
import { triangulateDatasetV1, triangulateIngestV1 } from "../triangulation/publicV1.js";
|
|
7
|
+
import { triangulatePublicExecutionV1 } from "../triangulation/executionPublicV1.js";
|
|
8
|
+
import { VERIFICATION_POLICY_SCHEMA_VERSION } from "./contractV1.js";
|
|
9
|
+
const CHECK_ID = /^[a-z][a-z0-9._:-]{0,159}$/;
|
|
10
|
+
const ASSURANCE = ["mirror_corroboration"];
|
|
11
|
+
const KINDS = ["verification", "execution", "independent_standards", "public_triangulation", "execution_triangulation"];
|
|
12
|
+
function object(value, name) {
|
|
13
|
+
if (!value || 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
|
+
if (Reflect.ownKeys(value).some((key) => typeof key !== "string"))
|
|
19
|
+
throw new TypeError(`Invalid ${name}`);
|
|
20
|
+
for (const key of Object.keys(value)) {
|
|
21
|
+
const field = Object.getOwnPropertyDescriptor(value, key);
|
|
22
|
+
if (!field || !("value" in field) || field.value === undefined)
|
|
23
|
+
throw new TypeError(`Invalid ${name} field`);
|
|
24
|
+
}
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
function exact(row, allowed, name) {
|
|
28
|
+
if (Object.keys(row).some((key) => !allowed.includes(key)))
|
|
29
|
+
throw new TypeError(`Unknown ${name} field`);
|
|
30
|
+
}
|
|
31
|
+
function identifier(value, name, max = 160) {
|
|
32
|
+
if (typeof value !== "string" || !value || value.length > max || value.trim() !== value) {
|
|
33
|
+
throw new TypeError(`Invalid ${name}`);
|
|
34
|
+
}
|
|
35
|
+
for (let i = 0; i < value.length; i++) {
|
|
36
|
+
const unit = value.charCodeAt(i);
|
|
37
|
+
if (unit >= 0xd800 && unit <= 0xdbff) {
|
|
38
|
+
const next = value.charCodeAt(++i);
|
|
39
|
+
if (!(next >= 0xdc00 && next <= 0xdfff))
|
|
40
|
+
throw new TypeError(`Invalid ${name}`);
|
|
41
|
+
}
|
|
42
|
+
else if (unit >= 0xdc00 && unit <= 0xdfff)
|
|
43
|
+
throw new TypeError(`Invalid ${name}`);
|
|
44
|
+
}
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
function boundedList(value, name, max, parse) {
|
|
48
|
+
if (!Array.isArray(value) || value.length > max || value.length === 0)
|
|
49
|
+
throw new TypeError(`Invalid ${name}`);
|
|
50
|
+
const result = [];
|
|
51
|
+
for (let i = 0; i < value.length; i++) {
|
|
52
|
+
if (!Object.hasOwn(value, i))
|
|
53
|
+
throw new TypeError(`Sparse ${name}`);
|
|
54
|
+
result.push(parse(value[i]));
|
|
55
|
+
}
|
|
56
|
+
result.sort();
|
|
57
|
+
if (result.some((item, index) => index > 0 && item === result[index - 1]))
|
|
58
|
+
throw new TypeError(`Duplicate ${name}`);
|
|
59
|
+
return Object.freeze(result);
|
|
60
|
+
}
|
|
61
|
+
function checkedPolicy(value) {
|
|
62
|
+
const p = object(value, "verification policy");
|
|
63
|
+
exact(p, ["schema_version", "subject", "report_kind", "required_checks", "required_assurance",
|
|
64
|
+
"execution_scope", "on_unresolved"], "policy");
|
|
65
|
+
if (p.schema_version !== VERIFICATION_POLICY_SCHEMA_VERSION || !KINDS.includes(p.report_kind)) {
|
|
66
|
+
throw new TypeError("Unsupported verification policy contract");
|
|
67
|
+
}
|
|
68
|
+
const subject = object(p.subject, "policy subject");
|
|
69
|
+
exact(subject, ["kind", "id", "hedera_network"], "policy subject");
|
|
70
|
+
if (!["artifact", "dataset", "ingest", "evidence_package", "merkle_anchor", "merkle_root", "merkle_leaf", "execution", "result"].includes(subject.kind)) {
|
|
71
|
+
throw new TypeError("Invalid policy subject kind");
|
|
72
|
+
}
|
|
73
|
+
const id = identifier(subject.id, "policy subject ID", 256);
|
|
74
|
+
const network = subject.hedera_network;
|
|
75
|
+
if (network !== undefined && network !== "testnet" && network !== "mainnet")
|
|
76
|
+
throw new TypeError("Invalid policy network");
|
|
77
|
+
if (["execution", "independent_standards", "public_triangulation", "execution_triangulation"].includes(p.report_kind) && !network) {
|
|
78
|
+
throw new TypeError("Network-scoped policy requires explicit Hedera network");
|
|
79
|
+
}
|
|
80
|
+
const required_checks = boundedList(p.required_checks, "required checks", 64, (x) => {
|
|
81
|
+
const key = identifier(x, "required check");
|
|
82
|
+
if (!CHECK_ID.test(key))
|
|
83
|
+
throw new TypeError("Invalid required check");
|
|
84
|
+
return key;
|
|
85
|
+
});
|
|
86
|
+
const required_assurance = p.required_assurance === undefined ||
|
|
87
|
+
(Array.isArray(p.required_assurance) && p.required_assurance.length === 0) ?
|
|
88
|
+
Object.freeze([]) :
|
|
89
|
+
boundedList(p.required_assurance, "required assurance", 1, (x) => {
|
|
90
|
+
if (!ASSURANCE.includes(x))
|
|
91
|
+
throw new TypeError("Unsupported assurance dimension");
|
|
92
|
+
return x;
|
|
93
|
+
});
|
|
94
|
+
if (p.on_unresolved !== undefined && p.on_unresolved !== "review" && p.on_unresolved !== "deny") {
|
|
95
|
+
throw new TypeError("Invalid unresolved policy behavior");
|
|
96
|
+
}
|
|
97
|
+
const executionKind = ["execution", "independent_standards", "execution_triangulation"].includes(p.report_kind);
|
|
98
|
+
if (executionKind !== (p.execution_scope !== undefined)) {
|
|
99
|
+
throw new TypeError("Execution policy requires exact execution scope; non-execution policy must omit it");
|
|
100
|
+
}
|
|
101
|
+
let execution_scope;
|
|
102
|
+
if (executionKind) {
|
|
103
|
+
const scope = object(p.execution_scope, "policy execution scope");
|
|
104
|
+
exact(scope, ["profile", "expected_program", "requested_result_id"], "execution scope");
|
|
105
|
+
if (scope.profile !== "execution-v1" && scope.profile !== "sage-standards-v1")
|
|
106
|
+
throw new TypeError("Invalid policy execution profile");
|
|
107
|
+
if (scope.expected_program !== null)
|
|
108
|
+
identifier(scope.expected_program, "expected program", 128);
|
|
109
|
+
if (scope.profile === "execution-v1" && scope.expected_program === null)
|
|
110
|
+
throw new TypeError("Generic execution requires expected program");
|
|
111
|
+
if (scope.requested_result_id !== null &&
|
|
112
|
+
(typeof scope.requested_result_id !== "string" || !/^[a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/i.test(scope.requested_result_id))) {
|
|
113
|
+
throw new TypeError("Invalid expected result UUID");
|
|
114
|
+
}
|
|
115
|
+
execution_scope = Object.freeze({ profile: scope.profile, expected_program: scope.expected_program,
|
|
116
|
+
requested_result_id: scope.requested_result_id });
|
|
117
|
+
}
|
|
118
|
+
return Object.freeze({ schema_version: VERIFICATION_POLICY_SCHEMA_VERSION,
|
|
119
|
+
subject: Object.freeze({ kind: subject.kind, id,
|
|
120
|
+
...(network === undefined ? {} : { hedera_network: network }) }),
|
|
121
|
+
report_kind: p.report_kind, required_checks, required_assurance,
|
|
122
|
+
...(execution_scope ? { execution_scope } : {}), on_unresolved: p.on_unresolved === "deny" ? "deny" : "review" });
|
|
123
|
+
}
|
|
124
|
+
function outcome(key, state, reason_code) {
|
|
125
|
+
return Object.freeze({ key, outcome: state, reason_code });
|
|
126
|
+
}
|
|
127
|
+
function equalScope(a, b) {
|
|
128
|
+
const actual = object(a, "report execution scope");
|
|
129
|
+
const expected = object(b, "policy execution scope");
|
|
130
|
+
return actual.profile === expected.profile && actual.expected_program === expected.expected_program &&
|
|
131
|
+
actual.requested_result_id === expected.requested_result_id;
|
|
132
|
+
}
|
|
133
|
+
function assurance(report, requirement) {
|
|
134
|
+
const ctx = report.context;
|
|
135
|
+
let established = false;
|
|
136
|
+
if (requirement === "mirror_corroboration") {
|
|
137
|
+
if (report.kind === "independent_standards") {
|
|
138
|
+
const standards = ctx.independent_standards;
|
|
139
|
+
established = standards?.status === "verified" && standards.assurance === "mirror_corroborated";
|
|
140
|
+
}
|
|
141
|
+
else if (report.kind === "public_triangulation") {
|
|
142
|
+
const resolution = ctx.resolution;
|
|
143
|
+
const rels = ctx.relationships;
|
|
144
|
+
established = resolution?.hedera_mirror === "resolved" && rels?.some((r) => r.id === "public_record_hedera" && r.status === "consistent") === true;
|
|
145
|
+
}
|
|
146
|
+
else if (report.kind === "execution_triangulation") {
|
|
147
|
+
const pub = ctx.public_execution;
|
|
148
|
+
const tri = ctx.triangulation;
|
|
149
|
+
const rels = tri?.relationships;
|
|
150
|
+
established = pub?.mirror_status === "resolved" && rels?.some((r) => (r.id === "provided_hedera" || r.id === "public_record_hedera") && r.status === "consistent") === true;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Mirror corroboration is the only policy assurance established by v1.
|
|
154
|
+
return outcome(`assurance.${requirement}`, established ? "pass" : "unresolved", established ? null : "POLICY_ASSURANCE_NOT_ESTABLISHED");
|
|
155
|
+
}
|
|
156
|
+
/** Public-source acquisition is an additional requirement of a public workflow.
|
|
157
|
+
* Offline recomputation alone cannot complete the requested triangulation. */
|
|
158
|
+
function publicEvidence(report) {
|
|
159
|
+
if (report.kind === "public_triangulation") {
|
|
160
|
+
const ctx = report.context;
|
|
161
|
+
const resolution = ctx.resolution;
|
|
162
|
+
const rels = ctx.relationships;
|
|
163
|
+
const statuses = [resolution.public_record, resolution.publication_disclosure, resolution.hedera_mirror];
|
|
164
|
+
const conflicting = ctx.consistency === "conflict" || statuses.some((status) => status === "conflict" || status === "invalid");
|
|
165
|
+
const complete = ctx.consistency === "consistent" && statuses.every((status) => status === "resolved") &&
|
|
166
|
+
["provided_public_record", "public_record_hedera"].every((id) => rels.some((rel) => rel.id === id && rel.status === "consistent"));
|
|
167
|
+
return outcome("verification.public_evidence", conflicting ? "fail" : complete ? "pass" : "unresolved", conflicting ? "POLICY_PUBLIC_EVIDENCE_CONFLICT" : complete ? null : "POLICY_PUBLIC_EVIDENCE_INCOMPLETE");
|
|
168
|
+
}
|
|
169
|
+
if (report.kind === "execution_triangulation") {
|
|
170
|
+
const ctx = report.context;
|
|
171
|
+
const acquisition = ctx.public_execution;
|
|
172
|
+
const tri = ctx.triangulation;
|
|
173
|
+
const rels = tri?.relationships;
|
|
174
|
+
const conflicting = acquisition.status === "conflict" || acquisition.status === "invalid" ||
|
|
175
|
+
tri?.consistency === "conflict";
|
|
176
|
+
const complete = acquisition.status === "resolved" && acquisition.public_record_acquisition === "resolved" &&
|
|
177
|
+
acquisition.mirror_status === "resolved" && tri?.consistency === "consistent" &&
|
|
178
|
+
rels?.some((rel) => (rel.id === "provided_hedera" || rel.id === "public_record_hedera") &&
|
|
179
|
+
rel.status === "consistent") === true;
|
|
180
|
+
return outcome("verification.public_evidence", conflicting ? "fail" : complete ? "pass" : "unresolved", conflicting ? "POLICY_PUBLIC_EVIDENCE_CONFLICT" : complete ? null : "POLICY_PUBLIC_EVIDENCE_INCOMPLETE");
|
|
181
|
+
}
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
function decide(reportValue, value, authority) {
|
|
185
|
+
const policy = checkedPolicy(value);
|
|
186
|
+
const validity = validatePortableVerificationReportV1(reportValue);
|
|
187
|
+
if (validity.status !== "valid") {
|
|
188
|
+
return Object.freeze({ decision: "deny", report_sha3_512: null, authority,
|
|
189
|
+
requirements: Object.freeze([outcome("report.integrity", "fail", validity.reason_code)]),
|
|
190
|
+
reason_codes: Object.freeze(["POLICY_REPORT_INVALID"]) });
|
|
191
|
+
}
|
|
192
|
+
const report = reportValue;
|
|
193
|
+
const req = [];
|
|
194
|
+
const subject = report.core.intent.subject;
|
|
195
|
+
const expected = policy.subject;
|
|
196
|
+
const sameSubject = subject.kind === expected.kind && subject.id === expected.id &&
|
|
197
|
+
subject.hedera_network === expected.hedera_network;
|
|
198
|
+
req.push(outcome("intent.subject", sameSubject ? "pass" : "fail", sameSubject ? null : "POLICY_SUBJECT_MISMATCH"));
|
|
199
|
+
req.push(outcome("report.kind", report.kind === policy.report_kind ? "pass" : "fail", report.kind === policy.report_kind ? null : "POLICY_PROFILE_MISMATCH"));
|
|
200
|
+
if (policy.execution_scope) {
|
|
201
|
+
const scoped = report.context.verification_scope;
|
|
202
|
+
const matched = scoped !== undefined && report.kind === policy.report_kind && equalScope(scoped, policy.execution_scope);
|
|
203
|
+
req.push(outcome("execution.scope", matched ? "pass" : "fail", matched ? null : "POLICY_EXECUTION_SCOPE_MISMATCH"));
|
|
204
|
+
}
|
|
205
|
+
const intentFinding = report.core.findings.find((f) => f.check_id === "intent.subject");
|
|
206
|
+
req.push(outcome("verification.intent.subject", intentFinding?.outcome === "pass" ? "pass" :
|
|
207
|
+
intentFinding?.outcome === "fail" ? "fail" : "unresolved", intentFinding?.outcome === "pass" ? null : intentFinding?.outcome === "fail" ? "POLICY_INTENT_FAILED" : "POLICY_INTENT_UNRESOLVED"));
|
|
208
|
+
for (const check of policy.required_checks) {
|
|
209
|
+
const f = report.core.findings.find((item) => item.check_id === check);
|
|
210
|
+
req.push(outcome(`check.${check}`, f?.outcome === "pass" ? "pass" : f?.outcome === "fail" ? "fail" : "unresolved", f?.outcome === "pass" ? null : f?.outcome === "fail" ? "POLICY_REQUIRED_CHECK_FAILED" : "POLICY_REQUIRED_CHECK_UNRESOLVED"));
|
|
211
|
+
}
|
|
212
|
+
for (const check of policy.required_assurance ?? [])
|
|
213
|
+
req.push(assurance(report, check));
|
|
214
|
+
const publicRequirement = publicEvidence(report);
|
|
215
|
+
if (publicRequirement)
|
|
216
|
+
req.push(publicRequirement);
|
|
217
|
+
// An SDK invocation alone is not substantive proof. At least one *required*
|
|
218
|
+
// successful check must cite material recomputed by the verifier itself.
|
|
219
|
+
// A scope match or a producer-supplied claim is not enough to authorize.
|
|
220
|
+
if (authority === "sdk_verification") {
|
|
221
|
+
const locallySupported = policy.required_checks.some((key) => {
|
|
222
|
+
const check = report.core.findings.find((f) => f.check_id === key);
|
|
223
|
+
return check?.outcome === "pass" && check.observation_ids.some((id) => report.core.observations.some((obs) => obs.id === id && obs.source === "local_computation"));
|
|
224
|
+
});
|
|
225
|
+
if (!locallySupported)
|
|
226
|
+
req.push(outcome("verification.local_support", "unresolved", "POLICY_LOCAL_VERIFICATION_NOT_ESTABLISHED"));
|
|
227
|
+
}
|
|
228
|
+
// A conflicting finding is never ignored merely because it wasn't named in policy.
|
|
229
|
+
if (report.core.findings.some((f) => f.outcome === "fail")) {
|
|
230
|
+
req.push(outcome("verification.conflict", "fail", "POLICY_VERIFICATION_CONFLICT"));
|
|
231
|
+
}
|
|
232
|
+
const failed = req.some((entry) => entry.outcome === "fail");
|
|
233
|
+
const unresolved = req.some((entry) => entry.outcome === "unresolved");
|
|
234
|
+
const canAllow = authority === "sdk_verification";
|
|
235
|
+
const decision = failed || (unresolved && policy.on_unresolved === "deny") ? "deny" :
|
|
236
|
+
unresolved || !canAllow ? "review" : "allow";
|
|
237
|
+
const reason_codes = Array.from(new Set([
|
|
238
|
+
...req.filter((r) => r.reason_code !== null).map((r) => r.reason_code),
|
|
239
|
+
...(!failed && !unresolved && !canAllow ? ["POLICY_REPORT_NOT_AUTHENTICATED"] : []),
|
|
240
|
+
])).sort();
|
|
241
|
+
return Object.freeze({ decision, report_sha3_512: report.report_sha3_512, authority,
|
|
242
|
+
requirements: Object.freeze(req), reason_codes: Object.freeze(reason_codes) });
|
|
243
|
+
}
|
|
244
|
+
/** Assess a saved report's *claims*. This cannot approve evidence: anyone can forge an unsigned report. */
|
|
245
|
+
export function assessPortableVerificationPolicyV1(report, policy) {
|
|
246
|
+
return decide(report, policy, "unauthenticated_report");
|
|
247
|
+
}
|
|
248
|
+
/** These entry points actually invoke the SDK verifier. There is no public
|
|
249
|
+
* function that can mark an arbitrary caller-owned report as SDK-verified. */
|
|
250
|
+
export async function verifyDatasetWithPolicyV1(input, policy) {
|
|
251
|
+
checkedPolicy(policy);
|
|
252
|
+
const result = await verifyDatasetV1WithIntent(input);
|
|
253
|
+
const report = createPortableVerificationReportV1({ kind: "verification", result });
|
|
254
|
+
return Object.freeze({ report, policy: decide(report, policy, "sdk_verification") });
|
|
255
|
+
}
|
|
256
|
+
export async function verifyIngestWithPolicyV1(input, policy) {
|
|
257
|
+
checkedPolicy(policy);
|
|
258
|
+
const result = await verifyIngestV1WithIntent(input);
|
|
259
|
+
const report = createPortableVerificationReportV1({ kind: "verification", result });
|
|
260
|
+
return Object.freeze({ report, policy: decide(report, policy, "sdk_verification") });
|
|
261
|
+
}
|
|
262
|
+
export function verifyExecutionWithPolicyV1(input, policy) {
|
|
263
|
+
checkedPolicy(policy);
|
|
264
|
+
const result = verifyExecutionV1WithIntent(input);
|
|
265
|
+
const report = createPortableVerificationReportV1({ kind: "execution", result });
|
|
266
|
+
return Object.freeze({ report, policy: decide(report, policy, "sdk_verification") });
|
|
267
|
+
}
|
|
268
|
+
/** Reject incompatible caller expectations before any public resolver is invoked. */
|
|
269
|
+
function checkedPublicPolicy(input, policy, kind, subjectKind) {
|
|
270
|
+
const checked = checkedPolicy(policy);
|
|
271
|
+
const actual = input.intent?.subject;
|
|
272
|
+
const expected = checked.subject;
|
|
273
|
+
if (checked.report_kind !== kind || !actual || actual.kind !== subjectKind ||
|
|
274
|
+
expected.kind !== subjectKind || actual.id !== expected.id ||
|
|
275
|
+
!actual.hedera_network || actual.hedera_network !== expected.hedera_network) {
|
|
276
|
+
throw new TypeError("Public verification request does not match relying-party policy intent");
|
|
277
|
+
}
|
|
278
|
+
return checked;
|
|
279
|
+
}
|
|
280
|
+
/** SDK-owned source recomputation, Explorer publication resolution and Hedera corroboration. */
|
|
281
|
+
export async function triangulateDatasetWithPolicyV1(config, input, policy) {
|
|
282
|
+
const checked = checkedPublicPolicy(input, policy, "public_triangulation", "dataset");
|
|
283
|
+
const result = await triangulateDatasetV1(config, input);
|
|
284
|
+
const report = createPortableVerificationReportV1({ kind: "public_triangulation", result });
|
|
285
|
+
return Object.freeze({ report, policy: decide(report, checked, "sdk_verification") });
|
|
286
|
+
}
|
|
287
|
+
/** Ingest source identity is independent of the Core Merkle anchor request ID. */
|
|
288
|
+
export async function triangulateIngestWithPolicyV1(config, input, policy) {
|
|
289
|
+
const checked = checkedPublicPolicy(input, policy, "public_triangulation", "ingest");
|
|
290
|
+
const result = await triangulateIngestV1(config, input);
|
|
291
|
+
const report = createPortableVerificationReportV1({ kind: "public_triangulation", result });
|
|
292
|
+
return Object.freeze({ report, policy: decide(report, checked, "sdk_verification") });
|
|
293
|
+
}
|
|
294
|
+
/** Original HCS anchors remain provenance only, not public plaintext authority.
|
|
295
|
+
* Recompute offline verification on unresolved acquisition to preserve its scope. */
|
|
296
|
+
export async function triangulateExecutionWithPolicyV1(config, input, policy) {
|
|
297
|
+
const checked = checkedPublicPolicy(input, policy, "execution_triangulation", "execution");
|
|
298
|
+
const result = await triangulatePublicExecutionV1(config, input);
|
|
299
|
+
const report = createPortableVerificationReportV1({ kind: "execution_triangulation", result,
|
|
300
|
+
...(result.plan === null ? { source_report: verifyExecutionV1WithIntent(input) } : {}) });
|
|
301
|
+
return Object.freeze({ report, policy: decide(report, checked, "sdk_verification") });
|
|
302
|
+
}
|
|
303
|
+
/** Resolve pinned independent HCS standards before applying relying-party policy.
|
|
304
|
+
* A Mirror-corroborated standards result does not authenticate consensus or DID control. */
|
|
305
|
+
export async function verifyExecutionStandardsWithPolicyV1(config, input, options, policy) {
|
|
306
|
+
const checked = checkedPolicy(policy);
|
|
307
|
+
const subject = input.intent?.subject;
|
|
308
|
+
if (checked.report_kind !== "independent_standards" ||
|
|
309
|
+
checked.subject.kind !== "execution" || subject?.kind !== "execution" ||
|
|
310
|
+
subject.id !== checked.subject.id ||
|
|
311
|
+
!subject.hedera_network || subject.hedera_network !== checked.subject.hedera_network ||
|
|
312
|
+
checked.execution_scope?.profile !== "sage-standards-v1" ||
|
|
313
|
+
input.profile !== "sage-standards-v1") {
|
|
314
|
+
throw new TypeError("Independent standards request does not match relying-party policy intent");
|
|
315
|
+
}
|
|
316
|
+
const result = await verifyExecutionWithIndependentStandardsV1(config, input, options);
|
|
317
|
+
const report = createPortableVerificationReportV1({ kind: "independent_standards", result });
|
|
318
|
+
return Object.freeze({ report, policy: decide(report, checked, "sdk_verification") });
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=evaluateV1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluateV1.js","sourceRoot":"","sources":["../../src/policy/evaluateV1.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SourceV1File, SourceV1Limits, SourceV1Mismatch } from "../sourceV1Helpers.js";
|
|
2
|
+
import { type DatasetV1BundleComputed, type DatasetV1ReceiptComputed } from "./v1.js";
|
|
3
|
+
export type DatasetV1SourceInput = Readonly<{
|
|
4
|
+
bundle: unknown;
|
|
5
|
+
files: readonly SourceV1File[];
|
|
6
|
+
receipt?: unknown;
|
|
7
|
+
limits?: SourceV1Limits;
|
|
8
|
+
}>;
|
|
9
|
+
export type DatasetV1SourceResult = Readonly<{
|
|
10
|
+
ok: boolean;
|
|
11
|
+
mismatches: readonly SourceV1Mismatch[];
|
|
12
|
+
computed: Readonly<{
|
|
13
|
+
bundle: DatasetV1BundleComputed;
|
|
14
|
+
receipt?: DatasetV1ReceiptComputed;
|
|
15
|
+
source_merkle_root?: string;
|
|
16
|
+
source_file_count: number;
|
|
17
|
+
source_total_bytes: number;
|
|
18
|
+
}>;
|
|
19
|
+
}>;
|
|
20
|
+
/** Independently bind all supplied file bytes to Dataset v1 leaves, root, bundle and optional receipt. */
|
|
21
|
+
export declare function verifyDatasetV1Sources(input: DatasetV1SourceInput): Promise<DatasetV1SourceResult>;
|
|
22
|
+
//# sourceMappingURL=sourceV1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourceV1.d.ts","sourceRoot":"","sources":["../../../src/profiles/dataset/sourceV1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAW5F,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB,CAAC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACxC,QAAQ,EAAE,QAAQ,CAAC;QACjB,MAAM,EAAE,uBAAuB,CAAC;QAChC,OAAO,CAAC,EAAE,wBAAwB,CAAC;QACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC,CAAC;CACJ,CAAC,CAAC;AAiBH,0GAA0G;AAC1G,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAmExG"}
|