@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.
Files changed (214) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/CONTRIBUTING.md +33 -0
  3. package/LICENSE +21 -0
  4. package/NOTICE +4 -0
  5. package/README.md +263 -2
  6. package/SECURITY.md +21 -0
  7. package/dist/cli/commandV1.d.ts +5 -0
  8. package/dist/cli/commandV1.d.ts.map +1 -0
  9. package/dist/cli/commandV1.js +440 -0
  10. package/dist/cli/commandV1.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +5 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/contracts/verification.d.ts +77 -0
  16. package/dist/contracts/verification.d.ts.map +1 -0
  17. package/dist/contracts/verification.js +6 -0
  18. package/dist/contracts/verification.js.map +1 -0
  19. package/dist/crypto/sha3.d.ts +15 -0
  20. package/dist/crypto/sha3.d.ts.map +1 -0
  21. package/dist/crypto/sha3.js +27 -0
  22. package/dist/crypto/sha3.js.map +1 -0
  23. package/dist/crypto/streamSha3.d.ts +26 -0
  24. package/dist/crypto/streamSha3.d.ts.map +1 -0
  25. package/dist/crypto/streamSha3.js +52 -0
  26. package/dist/crypto/streamSha3.js.map +1 -0
  27. package/dist/hf/hashContractV1.d.ts +48 -0
  28. package/dist/hf/hashContractV1.d.ts.map +1 -0
  29. package/dist/hf/hashContractV1.js +185 -0
  30. package/dist/hf/hashContractV1.js.map +1 -0
  31. package/dist/index.d.ts +80 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +57 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/merkle/membership.d.ts +30 -0
  36. package/dist/merkle/membership.d.ts.map +1 -0
  37. package/dist/merkle/membership.js +105 -0
  38. package/dist/merkle/membership.js.map +1 -0
  39. package/dist/policy/contractV1.d.ts +37 -0
  40. package/dist/policy/contractV1.d.ts.map +1 -0
  41. package/dist/policy/contractV1.js +2 -0
  42. package/dist/policy/contractV1.js.map +1 -0
  43. package/dist/policy/evaluateV1.d.ts +24 -0
  44. package/dist/policy/evaluateV1.d.ts.map +1 -0
  45. package/dist/policy/evaluateV1.js +320 -0
  46. package/dist/policy/evaluateV1.js.map +1 -0
  47. package/dist/profiles/dataset/sourceV1.d.ts +22 -0
  48. package/dist/profiles/dataset/sourceV1.d.ts.map +1 -0
  49. package/dist/profiles/dataset/sourceV1.js +73 -0
  50. package/dist/profiles/dataset/sourceV1.js.map +1 -0
  51. package/dist/profiles/dataset/v1.d.ts +39 -0
  52. package/dist/profiles/dataset/v1.d.ts.map +1 -0
  53. package/dist/profiles/dataset/v1.js +362 -0
  54. package/dist/profiles/dataset/v1.js.map +1 -0
  55. package/dist/profiles/execution/contractV1.d.ts +279 -0
  56. package/dist/profiles/execution/contractV1.d.ts.map +1 -0
  57. package/dist/profiles/execution/contractV1.js +364 -0
  58. package/dist/profiles/execution/contractV1.js.map +1 -0
  59. package/dist/profiles/execution/independentStandardsV1.d.ts +44 -0
  60. package/dist/profiles/execution/independentStandardsV1.d.ts.map +1 -0
  61. package/dist/profiles/execution/independentStandardsV1.js +336 -0
  62. package/dist/profiles/execution/independentStandardsV1.js.map +1 -0
  63. package/dist/profiles/execution/reasonCodesV1.d.ts +30 -0
  64. package/dist/profiles/execution/reasonCodesV1.d.ts.map +1 -0
  65. package/dist/profiles/execution/reasonCodesV1.js +20 -0
  66. package/dist/profiles/execution/reasonCodesV1.js.map +1 -0
  67. package/dist/profiles/execution/recomputationV1.d.ts +11 -0
  68. package/dist/profiles/execution/recomputationV1.d.ts.map +1 -0
  69. package/dist/profiles/execution/recomputationV1.js +144 -0
  70. package/dist/profiles/execution/recomputationV1.js.map +1 -0
  71. package/dist/profiles/execution/rulesV1.d.ts +6 -0
  72. package/dist/profiles/execution/rulesV1.d.ts.map +1 -0
  73. package/dist/profiles/execution/rulesV1.js +855 -0
  74. package/dist/profiles/execution/rulesV1.js.map +1 -0
  75. package/dist/profiles/execution/standardsPlanV1.d.ts +18 -0
  76. package/dist/profiles/execution/standardsPlanV1.d.ts.map +1 -0
  77. package/dist/profiles/execution/standardsPlanV1.js +16 -0
  78. package/dist/profiles/execution/standardsPlanV1.js.map +1 -0
  79. package/dist/profiles/execution/verificationV1.d.ts +28 -0
  80. package/dist/profiles/execution/verificationV1.d.ts.map +1 -0
  81. package/dist/profiles/execution/verificationV1.js +188 -0
  82. package/dist/profiles/execution/verificationV1.js.map +1 -0
  83. package/dist/profiles/ingest/sourceV1.d.ts +36 -0
  84. package/dist/profiles/ingest/sourceV1.d.ts.map +1 -0
  85. package/dist/profiles/ingest/sourceV1.js +99 -0
  86. package/dist/profiles/ingest/sourceV1.js.map +1 -0
  87. package/dist/profiles/ingest/v1.d.ts +65 -0
  88. package/dist/profiles/ingest/v1.d.ts.map +1 -0
  89. package/dist/profiles/ingest/v1.js +477 -0
  90. package/dist/profiles/ingest/v1.js.map +1 -0
  91. package/dist/profiles/sourceV1Helpers.d.ts +48 -0
  92. package/dist/profiles/sourceV1Helpers.d.ts.map +1 -0
  93. package/dist/profiles/sourceV1Helpers.js +141 -0
  94. package/dist/profiles/sourceV1Helpers.js.map +1 -0
  95. package/dist/reports/coreV1.d.ts +7 -0
  96. package/dist/reports/coreV1.d.ts.map +1 -0
  97. package/dist/reports/coreV1.js +195 -0
  98. package/dist/reports/coreV1.js.map +1 -0
  99. package/dist/reports/portableV1.d.ts +48 -0
  100. package/dist/reports/portableV1.d.ts.map +1 -0
  101. package/dist/reports/portableV1.js +279 -0
  102. package/dist/reports/portableV1.js.map +1 -0
  103. package/dist/reports/validationV1.d.ts +19 -0
  104. package/dist/reports/validationV1.d.ts.map +1 -0
  105. package/dist/reports/validationV1.js +441 -0
  106. package/dist/reports/validationV1.js.map +1 -0
  107. package/dist/resolvers/executionMirrorV1.d.ts +15 -0
  108. package/dist/resolvers/executionMirrorV1.d.ts.map +1 -0
  109. package/dist/resolvers/executionMirrorV1.js +206 -0
  110. package/dist/resolvers/executionMirrorV1.js.map +1 -0
  111. package/dist/resolvers/explorerExecutionV1.d.ts +17 -0
  112. package/dist/resolvers/explorerExecutionV1.d.ts.map +1 -0
  113. package/dist/resolvers/explorerExecutionV1.js +61 -0
  114. package/dist/resolvers/explorerExecutionV1.js.map +1 -0
  115. package/dist/resolvers/explorerPublicV1.d.ts +37 -0
  116. package/dist/resolvers/explorerPublicV1.d.ts.map +1 -0
  117. package/dist/resolvers/explorerPublicV1.js +210 -0
  118. package/dist/resolvers/explorerPublicV1.js.map +1 -0
  119. package/dist/resolvers/explorerPublicationV1.d.ts +20 -0
  120. package/dist/resolvers/explorerPublicationV1.d.ts.map +1 -0
  121. package/dist/resolvers/explorerPublicationV1.js +195 -0
  122. package/dist/resolvers/explorerPublicationV1.js.map +1 -0
  123. package/dist/resolvers/explorerTransportV1.d.ts +17 -0
  124. package/dist/resolvers/explorerTransportV1.d.ts.map +1 -0
  125. package/dist/resolvers/explorerTransportV1.js +112 -0
  126. package/dist/resolvers/explorerTransportV1.js.map +1 -0
  127. package/dist/resolvers/hcs11MirrorV1.d.ts +49 -0
  128. package/dist/resolvers/hcs11MirrorV1.d.ts.map +1 -0
  129. package/dist/resolvers/hcs11MirrorV1.js +293 -0
  130. package/dist/resolvers/hcs11MirrorV1.js.map +1 -0
  131. package/dist/resolvers/hcs13MirrorV1.d.ts +35 -0
  132. package/dist/resolvers/hcs13MirrorV1.d.ts.map +1 -0
  133. package/dist/resolvers/hcs13MirrorV1.js +72 -0
  134. package/dist/resolvers/hcs13MirrorV1.js.map +1 -0
  135. package/dist/resolvers/hcs1MirrorV1.d.ts +28 -0
  136. package/dist/resolvers/hcs1MirrorV1.d.ts.map +1 -0
  137. package/dist/resolvers/hcs1MirrorV1.js +220 -0
  138. package/dist/resolvers/hcs1MirrorV1.js.map +1 -0
  139. package/dist/resolvers/hcs26MirrorV1.d.ts +67 -0
  140. package/dist/resolvers/hcs26MirrorV1.d.ts.map +1 -0
  141. package/dist/resolvers/hcs26MirrorV1.js +218 -0
  142. package/dist/resolvers/hcs26MirrorV1.js.map +1 -0
  143. package/dist/resolvers/hcs26RegistryMirrorV1.d.ts +26 -0
  144. package/dist/resolvers/hcs26RegistryMirrorV1.d.ts.map +1 -0
  145. package/dist/resolvers/hcs26RegistryMirrorV1.js +200 -0
  146. package/dist/resolvers/hcs26RegistryMirrorV1.js.map +1 -0
  147. package/dist/resolvers/hcs2MirrorV1.d.ts +26 -0
  148. package/dist/resolvers/hcs2MirrorV1.d.ts.map +1 -0
  149. package/dist/resolvers/hcs2MirrorV1.js +196 -0
  150. package/dist/resolvers/hcs2MirrorV1.js.map +1 -0
  151. package/dist/resolvers/hederaMirrorV1.d.ts +22 -0
  152. package/dist/resolvers/hederaMirrorV1.d.ts.map +1 -0
  153. package/dist/resolvers/hederaMirrorV1.js +338 -0
  154. package/dist/resolvers/hederaMirrorV1.js.map +1 -0
  155. package/dist/standards/hcs/hcs11V1.d.ts +51 -0
  156. package/dist/standards/hcs/hcs11V1.d.ts.map +1 -0
  157. package/dist/standards/hcs/hcs11V1.js +289 -0
  158. package/dist/standards/hcs/hcs11V1.js.map +1 -0
  159. package/dist/standards/hcs/hcs13V1.d.ts +39 -0
  160. package/dist/standards/hcs/hcs13V1.d.ts.map +1 -0
  161. package/dist/standards/hcs/hcs13V1.js +114 -0
  162. package/dist/standards/hcs/hcs13V1.js.map +1 -0
  163. package/dist/standards/hcs/hcs14V1.d.ts +35 -0
  164. package/dist/standards/hcs/hcs14V1.d.ts.map +1 -0
  165. package/dist/standards/hcs/hcs14V1.js +168 -0
  166. package/dist/standards/hcs/hcs14V1.js.map +1 -0
  167. package/dist/standards/hcs/hcs1V1.d.ts +30 -0
  168. package/dist/standards/hcs/hcs1V1.d.ts.map +1 -0
  169. package/dist/standards/hcs/hcs1V1.js +140 -0
  170. package/dist/standards/hcs/hcs1V1.js.map +1 -0
  171. package/dist/standards/hcs/hcs26V1.d.ts +58 -0
  172. package/dist/standards/hcs/hcs26V1.d.ts.map +1 -0
  173. package/dist/standards/hcs/hcs26V1.js +339 -0
  174. package/dist/standards/hcs/hcs26V1.js.map +1 -0
  175. package/dist/standards/hcs/hcs2V1.d.ts +36 -0
  176. package/dist/standards/hcs/hcs2V1.d.ts.map +1 -0
  177. package/dist/standards/hcs/hcs2V1.js +181 -0
  178. package/dist/standards/hcs/hcs2V1.js.map +1 -0
  179. package/dist/standards/hcs/jsonCanonicalV1.d.ts +15 -0
  180. package/dist/standards/hcs/jsonCanonicalV1.d.ts.map +1 -0
  181. package/dist/standards/hcs/jsonCanonicalV1.js +160 -0
  182. package/dist/standards/hcs/jsonCanonicalV1.js.map +1 -0
  183. package/dist/triangulation/compareV1.d.ts +50 -0
  184. package/dist/triangulation/compareV1.d.ts.map +1 -0
  185. package/dist/triangulation/compareV1.js +236 -0
  186. package/dist/triangulation/compareV1.js.map +1 -0
  187. package/dist/triangulation/executionPlanV1.d.ts +39 -0
  188. package/dist/triangulation/executionPlanV1.d.ts.map +1 -0
  189. package/dist/triangulation/executionPlanV1.js +208 -0
  190. package/dist/triangulation/executionPlanV1.js.map +1 -0
  191. package/dist/triangulation/executionPublicV1.d.ts +22 -0
  192. package/dist/triangulation/executionPublicV1.d.ts.map +1 -0
  193. package/dist/triangulation/executionPublicV1.js +39 -0
  194. package/dist/triangulation/executionPublicV1.js.map +1 -0
  195. package/dist/triangulation/messageObservationV1.d.ts +26 -0
  196. package/dist/triangulation/messageObservationV1.d.ts.map +1 -0
  197. package/dist/triangulation/messageObservationV1.js +69 -0
  198. package/dist/triangulation/messageObservationV1.js.map +1 -0
  199. package/dist/triangulation/publicV1.d.ts +29 -0
  200. package/dist/triangulation/publicV1.d.ts.map +1 -0
  201. package/dist/triangulation/publicV1.js +170 -0
  202. package/dist/triangulation/publicV1.js.map +1 -0
  203. package/dist/verification/sourceIntentV1.d.ts +15 -0
  204. package/dist/verification/sourceIntentV1.d.ts.map +1 -0
  205. package/dist/verification/sourceIntentV1.js +206 -0
  206. package/dist/verification/sourceIntentV1.js.map +1 -0
  207. package/docs/cli-v0.1.md +237 -0
  208. package/docs/conformance.md +38 -0
  209. package/docs/threat-model.md +37 -0
  210. package/docs/verification-semantics.md +65 -0
  211. package/examples/README.md +35 -0
  212. package/examples/dataset-offline.mjs +58 -0
  213. package/examples/dataset-policy.mjs +59 -0
  214. package/package.json +65 -4
@@ -0,0 +1,141 @@
1
+ import { posix } from "node:path";
2
+ import { sha3_512Stream } from "../crypto/streamSha3.js";
3
+ import { canonicalizeHfV1Json, hashHfV1, MAX_HF_V1_PAYLOAD_BYTES } from "../hf/hashContractV1.js";
4
+ export const DEFAULT_SOURCE_V1_MAX_BYTES = 1024 * 1024 * 1024;
5
+ const DIGEST = /^[0-9a-f]{128}$/;
6
+ const TEXT_SUFFIXES = new Set([
7
+ ".txt", ".text", ".csv", ".tsv", ".fasta", ".fa", ".fna", ".ffn", ".faa", ".frn",
8
+ ".json", ".jsonl", ".ndjson", ".md", ".yaml", ".yml", ".xml", ".html", ".htm",
9
+ ]);
10
+ const MEDIA_BY_SUFFIX = {
11
+ ".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".webp": "image/webp",
12
+ ".gif": "image/gif", ".bmp": "image/bmp", ".tif": "image/tiff", ".tiff": "image/tiff",
13
+ ".svg": "image/svg+xml", ".txt": "text/plain", ".text": "text/plain", ".csv": "text/csv",
14
+ ".tsv": "text/tab-separated-values", ".fasta": "chemical/seq-na-fasta", ".fa": "chemical/seq-na-fasta",
15
+ ".fna": "chemical/seq-na-fasta", ".ffn": "chemical/seq-na-fasta", ".faa": "chemical/seq-aa-fasta",
16
+ ".frn": "chemical/seq-na-fasta", ".json": "application/json", ".jsonl": "application/x-ndjson",
17
+ ".ndjson": "application/x-ndjson", ".md": "text/markdown", ".yaml": "application/yaml",
18
+ ".yml": "application/yaml", ".xml": "application/xml", ".html": "text/html", ".htm": "text/html",
19
+ };
20
+ function hasControlChars(value) {
21
+ for (let i = 0; i < value.length; i++) {
22
+ const code = value.charCodeAt(i);
23
+ if (code <= 31 || code === 127)
24
+ return true;
25
+ }
26
+ return false;
27
+ }
28
+ export function sourceV1Path(value, maxLength) {
29
+ if (typeof value !== "string" || !value || value.length > maxLength || hasControlChars(value)) {
30
+ throw new TypeError("Source path must be a bounded relative path");
31
+ }
32
+ if (value.trim() !== value || value.includes("\\") || value.startsWith("/") || /^[a-zA-Z]:/.test(value)) {
33
+ throw new TypeError("Source path is not canonical POSIX relative form");
34
+ }
35
+ if (value.split("/").some((segment) => !segment || segment === "." || segment === "..")) {
36
+ throw new TypeError("Source path contains invalid segments");
37
+ }
38
+ if (posix.normalize(value) !== value)
39
+ throw new TypeError("Source path is not normalized");
40
+ return value;
41
+ }
42
+ export function sourceV1MediaType(pathRel) {
43
+ const suffix = posix.extname(pathRel).trim().toLowerCase();
44
+ return MEDIA_BY_SUFFIX[suffix];
45
+ }
46
+ export function sourceV1TextFile(pathRel) {
47
+ return TEXT_SUFFIXES.has(posix.extname(pathRel).trim().toLowerCase());
48
+ }
49
+ export function sourceV1PathDigest(pathRel, profile) {
50
+ if (profile === "dataset") {
51
+ return hashHfV1({ domain: "va:dataset:path:v1", material: "raw", bytes: Buffer.from(pathRel, "utf8") });
52
+ }
53
+ return hashHfV1({ domain: "va:ingest:path:v1", material: "json", value: { path_rel: pathRel } });
54
+ }
55
+ export function sourceV1Leaf(profile, value) {
56
+ return hashHfV1({
57
+ domain: profile === "dataset" ? "va:dataset:leaf:v1" : "va:ingest:leaf:v1",
58
+ material: "json",
59
+ value: {
60
+ ...(profile === "ingest" ? { item_kind: value.item_kind } : {}),
61
+ ...(value.path_rel ? { path_rel: value.path_rel } : {}),
62
+ ...(value.path_hash ? { path_hash: value.path_hash } : {}),
63
+ ...(value.media_type ? { media_type: value.media_type } : {}),
64
+ bytes: value.bytes,
65
+ sha3_512: value.sha3_512,
66
+ },
67
+ });
68
+ }
69
+ export function sourceV1Root(profile, leaves) {
70
+ if (!leaves.length || leaves.some((leaf) => !DIGEST.test(leaf)))
71
+ throw new TypeError("Invalid source Merkle leaves");
72
+ let level = leaves.slice();
73
+ while (level.length > 1) {
74
+ const next = [];
75
+ for (let index = 0; index < level.length; index += 2) {
76
+ const left = level[index];
77
+ if (!left)
78
+ throw new TypeError("Invalid Merkle level");
79
+ const right = level[index + 1] ?? left;
80
+ next.push(hashHfV1({ domain: `va:${profile}:node:v1`, material: "raw", bytes: Buffer.from(left + right, "hex") }));
81
+ }
82
+ level = next;
83
+ }
84
+ const root = level[0];
85
+ if (!root)
86
+ throw new TypeError("Invalid source Merkle tree");
87
+ return root;
88
+ }
89
+ export function sourceV1Mismatch(field, expected, actual) {
90
+ return Object.freeze({ field, expected, actual });
91
+ }
92
+ export function sourceV1Compare(mismatches, field, expected, actual) {
93
+ if (expected !== actual)
94
+ mismatches.push(sourceV1Mismatch(field, expected, actual));
95
+ }
96
+ export function sourceV1SafeLimit(value, field) {
97
+ if (!Number.isSafeInteger(value) || value < 0)
98
+ throw new TypeError(`${field} must be a non-negative safe integer`);
99
+ return value;
100
+ }
101
+ export function sourceV1Limits(limits) {
102
+ return {
103
+ total: sourceV1SafeLimit(limits?.max_total_bytes ?? DEFAULT_SOURCE_V1_MAX_BYTES, "max_total_bytes"),
104
+ file: sourceV1SafeLimit(limits?.max_file_bytes ?? DEFAULT_SOURCE_V1_MAX_BYTES, "max_file_bytes"),
105
+ };
106
+ }
107
+ export async function sourceV1HashFile(source, maxBytes, normalizeText) {
108
+ if (!normalizeText) {
109
+ const result = await sha3_512Stream(source, { max_bytes: maxBytes });
110
+ return { bytes: result.bytes_hashed, sha3_512: result.digest };
111
+ }
112
+ const ceiling = Math.min(maxBytes, MAX_HF_V1_PAYLOAD_BYTES);
113
+ const chunks = [];
114
+ let bytes = 0;
115
+ for await (const chunk of source) {
116
+ if (!(chunk instanceof Uint8Array))
117
+ throw new TypeError("Source chunks must be Uint8Array");
118
+ if (chunk.byteLength > ceiling - bytes)
119
+ throw new RangeError("Normalized text exceeds source byte limit");
120
+ bytes += chunk.byteLength;
121
+ chunks.push(Buffer.from(chunk));
122
+ }
123
+ const normalized = Buffer.concat(chunks, bytes).toString("utf8").replace(/\r\n/g, "\n").replace(/\r/g, "\n");
124
+ return { bytes, sha3_512: hashHfV1({ domain: "va:ingest:file-text:v1", material: "utf8", text: normalized }) };
125
+ }
126
+ export function sourceV1JsonMaterial(value) {
127
+ const canonical = canonicalizeHfV1Json(value);
128
+ return {
129
+ bytes: canonical.byteLength,
130
+ sha3_512: hashHfV1({ domain: "va:ingest:json:v1", material: "raw", bytes: canonical }),
131
+ };
132
+ }
133
+ export function sourceV1TextMaterial(text) {
134
+ if (typeof text !== "string")
135
+ throw new TypeError("Ingest text material must be a string");
136
+ return {
137
+ bytes: Buffer.byteLength(text, "utf8"),
138
+ sha3_512: hashHfV1({ domain: "va:ingest:text:v1", material: "utf8", text }),
139
+ };
140
+ }
141
+ //# sourceMappingURL=sourceV1Helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourceV1Helpers.js","sourceRoot":"","sources":["../../src/profiles/sourceV1Helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,cAAc,EAAwB,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAKlG,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9D,MAAM,MAAM,GAAG,iBAAiB,CAAC;AACjC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAChF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAC9E,CAAC,CAAC;AACH,MAAM,eAAe,GAAqC;IACxD,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY;IACvF,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY;IACrF,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU;IACxF,MAAM,EAAE,2BAA2B,EAAE,QAAQ,EAAE,uBAAuB,EAAE,KAAK,EAAE,uBAAuB;IACtG,MAAM,EAAE,uBAAuB,EAAE,MAAM,EAAE,uBAAuB,EAAE,MAAM,EAAE,uBAAuB;IACjG,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,sBAAsB;IAC9F,SAAS,EAAE,sBAAsB,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,kBAAkB;IACtF,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW;CACjG,CAAC;AAEF,SAAS,eAAe,CAAC,KAAa;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,SAAiB;IAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9F,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACxG,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC;QACxF,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK;QAAE,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;IAC3F,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3D,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AACD,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACxE,CAAC;AACD,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,OAA6B;IAC/E,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1G,CAAC;IACD,OAAO,QAAQ,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;AACnG,CAAC;AACD,MAAM,UAAU,YAAY,CAC1B,OAA6B,EAC7B,KAAsJ;IAEtJ,OAAO,QAAQ,CAAC;QACd,MAAM,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB;QAC1E,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE;YACL,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB;KACF,CAAC,CAAC;AACL,CAAC;AACD,MAAM,UAAU,YAAY,CAAC,OAA6B,EAAE,MAAyB;IACnF,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAC;IACrH,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IAC3B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,SAAS,CAAC,sBAAsB,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,OAAO,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACrH,CAAC;QACD,KAAK,GAAG,IAAI,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAC7D,OAAO,IAAI,CAAC;AACd,CAAC;AACD,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,QAAiB,EAAE,MAAe;IAChF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AACpD,CAAC;AACD,MAAM,UAAU,eAAe,CAC7B,UAA8B,EAAE,KAAa,EAAE,QAAiB,EAAE,MAAe;IAEjF,IAAI,QAAQ,KAAK,MAAM;QAAE,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AACtF,CAAC;AACD,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,KAAa;IAC7D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAK,KAAgB,GAAG,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,sCAAsC,CAAC,CAAC;IAC/H,OAAO,KAAe,CAAC;AACzB,CAAC;AACD,MAAM,UAAU,cAAc,CAAC,MAAuB;IACpD,OAAO;QACL,KAAK,EAAE,iBAAiB,CAAC,MAAM,EAAE,eAAe,IAAI,2BAA2B,EAAE,iBAAiB,CAAC;QACnG,IAAI,EAAE,iBAAiB,CAAC,MAAM,EAAE,cAAc,IAAI,2BAA2B,EAAE,gBAAgB,CAAC;KACjG,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAuB,EAAE,QAAgB,EAAE,aAAsB;IAEjE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IACjE,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC5F,IAAI,KAAK,CAAC,UAAU,GAAG,OAAO,GAAG,KAAK;YAAE,MAAM,IAAI,UAAU,CAAC,2CAA2C,CAAC,CAAC;QAC1G,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7G,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;AACjH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,UAAU;QAC3B,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;KACvF,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;IAC3F,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC;QACtC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAC5E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { VerificationReport } from "../contracts/verification.js";
2
+ export declare const VERIFICATION_CORE_SCHEMA_VERSION = "va.verification-core.v1";
3
+ /** Canonical shared findings/observations only; profile-specific assurance is NOT included. */
4
+ export declare function canonicalizeVerificationCoreV1(input: VerificationReport): string;
5
+ /** Unauthenticated content digest, NOT proof that these checks were performed. */
6
+ export declare function computeVerificationCoreDigestV1(input: VerificationReport): string;
7
+ //# sourceMappingURL=coreV1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coreV1.d.ts","sourceRoot":"","sources":["../../src/reports/coreV1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAGvE,eAAO,MAAM,gCAAgC,4BAA4B,CAAC;AAkK1E,+FAA+F;AAC/F,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAmBhF;AAED,kFAAkF;AAClF,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAIjF"}
@@ -0,0 +1,195 @@
1
+ import { sha3_512Hex } from "../crypto/sha3.js";
2
+ export const VERIFICATION_CORE_SCHEMA_VERSION = "va.verification-core.v1";
3
+ const DOMAIN = "va:verification-core:v1";
4
+ const CHECK_ID = /^[a-z][a-z0-9._:-]{0,159}$/;
5
+ const OBSERVATION_ID = /^[a-z][a-z0-9._:-]{0,127}$/;
6
+ const EXPECTED_KEY = /^[a-z][a-z0-9_]{0,63}$/;
7
+ const HEX_512 = /^[0-9a-f]{128}$/i;
8
+ const SUBJECT_KINDS = ["artifact", "dataset", "ingest", "evidence_package", "merkle_anchor",
9
+ "merkle_root", "merkle_leaf", "execution", "result"];
10
+ const OUTCOMES = ["pass", "fail", "indeterminate", "unsupported", "skipped"];
11
+ const SOURCES = ["provided_evidence", "public_record", "hedera_mirror", "local_computation"];
12
+ const MAX_CANONICAL_BYTES = 1024 * 1024;
13
+ function record(value, name) {
14
+ if (!value || typeof value !== "object" || Array.isArray(value))
15
+ throw new TypeError(`Invalid ${name}`);
16
+ const proto = Object.getPrototypeOf(value);
17
+ if (proto !== Object.prototype && proto !== null)
18
+ throw new TypeError(`Invalid ${name}`);
19
+ return value;
20
+ }
21
+ function fields(value, allowed, name) {
22
+ if (Object.keys(value).some((key) => !allowed.includes(key)))
23
+ throw new TypeError(`Unknown ${name} field`);
24
+ }
25
+ function items(value, max, name) {
26
+ if (!Array.isArray(value) || value.length > max)
27
+ throw new TypeError(`Invalid ${name}`);
28
+ for (let i = 0; i < value.length; i += 1) {
29
+ if (!Object.hasOwn(value, i))
30
+ throw new TypeError(`Sparse ${name}`);
31
+ }
32
+ return value;
33
+ }
34
+ function text(value, name, max, nonempty = true) {
35
+ if (typeof value !== "string" || value.length > max || (nonempty && !value.length)) {
36
+ throw new TypeError(`Invalid ${name}`);
37
+ }
38
+ for (let i = 0; i < value.length; i += 1) {
39
+ const u = value.charCodeAt(i);
40
+ if (u >= 0xd800 && u <= 0xdbff) {
41
+ const next = value.charCodeAt(++i);
42
+ if (!(next >= 0xdc00 && next <= 0xdfff))
43
+ throw new TypeError(`Invalid ${name}`);
44
+ }
45
+ else if (u >= 0xdc00 && u <= 0xdfff)
46
+ throw new TypeError(`Invalid ${name}`);
47
+ }
48
+ return value;
49
+ }
50
+ function identifier(value, name, pattern) {
51
+ const result = text(value, name, 160);
52
+ if (!pattern.test(result))
53
+ throw new TypeError(`Invalid ${name}`);
54
+ return result;
55
+ }
56
+ function digest(value, name) {
57
+ const result = text(value, name, 128);
58
+ if (!HEX_512.test(result))
59
+ throw new TypeError(`Invalid ${name}`);
60
+ return result.toLowerCase();
61
+ }
62
+ function subject(value) {
63
+ const row = record(value, "verification subject");
64
+ fields(row, ["kind", "id", "hedera_network"], "subject");
65
+ if (!SUBJECT_KINDS.includes(row.kind))
66
+ throw new TypeError("Invalid subject kind");
67
+ const id = text(row.id, "subject id", 256);
68
+ if (id.trim() !== id)
69
+ throw new TypeError("Invalid subject id");
70
+ if (Object.hasOwn(row, "hedera_network")) {
71
+ if (row.hedera_network !== "mainnet" && row.hedera_network !== "testnet") {
72
+ throw new TypeError("Invalid subject network");
73
+ }
74
+ return { kind: row.kind, id, hedera_network: row.hedera_network };
75
+ }
76
+ return { kind: row.kind, id };
77
+ }
78
+ function commitment(value) {
79
+ const row = record(value, "expected commitment");
80
+ const key = identifier(row.key, "expected commitment key", EXPECTED_KEY);
81
+ if (row.kind === "merkle-root") {
82
+ fields(row, ["key", "kind", "tree_alg", "root_hash", "leaf_count"], "merkle commitment");
83
+ if (!["binary-sorted", "binary-sorted-v2", "hf-dataset-v1", "hf-ingest-v1"].includes(row.tree_alg) ||
84
+ !Number.isSafeInteger(row.leaf_count) || row.leaf_count < 1) {
85
+ throw new TypeError("Invalid Merkle commitment");
86
+ }
87
+ return { key, kind: "merkle-root", tree_alg: row.tree_alg,
88
+ root_hash: digest(row.root_hash, "root hash"), leaf_count: row.leaf_count };
89
+ }
90
+ if (row.kind !== "digest")
91
+ throw new TypeError("Invalid commitment kind");
92
+ if (row.contract === "hf-contract-v1") {
93
+ fields(row, ["key", "kind", "contract", "material", "domain", "digest"], "HF commitment");
94
+ if (!["json", "utf8", "raw"].includes(row.material))
95
+ throw new TypeError("Invalid HF material");
96
+ const domain = text(row.domain, "HF domain", 256);
97
+ return { key, kind: "digest", contract: "hf-contract-v1", material: row.material,
98
+ domain, digest: digest(row.digest, "expected digest") };
99
+ }
100
+ fields(row, ["key", "kind", "contract", "digest"], "digest commitment");
101
+ if (row.contract !== "raw-sha3-512" && row.contract !== "core-canonical-json") {
102
+ throw new TypeError("Invalid digest contract");
103
+ }
104
+ return { key, kind: "digest", contract: row.contract, digest: digest(row.digest, "expected digest") };
105
+ }
106
+ function fact(value) {
107
+ const row = record(value, "verification fact");
108
+ const key = identifier(row.key, "fact key", CHECK_ID);
109
+ if (row.state === "available") {
110
+ fields(row, ["key", "state", "value"], "available fact");
111
+ if (!Object.hasOwn(row, "value"))
112
+ throw new TypeError("Missing fact value");
113
+ const v = row.value;
114
+ if (typeof v === "number" && (!Number.isFinite(v) || Object.is(v, -0))) {
115
+ throw new TypeError("Invalid numeric fact");
116
+ }
117
+ if (typeof v === "string")
118
+ text(v, "fact value", 4096, false);
119
+ else if (v !== null && typeof v !== "number" && typeof v !== "boolean") {
120
+ throw new TypeError("Invalid fact value");
121
+ }
122
+ return { key, state: "available", value: v };
123
+ }
124
+ if (row.state !== "unavailable" && row.state !== "not_applicable") {
125
+ throw new TypeError("Invalid fact state");
126
+ }
127
+ fields(row, ["key", "state", "reason_code"], "unavailable fact");
128
+ if (Object.hasOwn(row, "reason_code")) {
129
+ return { key, state: row.state,
130
+ reason_code: row.reason_code === null ? null : text(row.reason_code, "fact reason", 160) };
131
+ }
132
+ return { key, state: row.state };
133
+ }
134
+ function unique(values, key, name) {
135
+ values.sort((a, b) => key(a) < key(b) ? -1 : key(a) > key(b) ? 1 : 0);
136
+ for (let i = 1; i < values.length; i += 1) {
137
+ if (key(values[i]) === key(values[i - 1]))
138
+ throw new TypeError(`Duplicate ${name}`);
139
+ }
140
+ return values;
141
+ }
142
+ function observation(value) {
143
+ const row = record(value, "observation");
144
+ fields(row, ["id", "subject", "source", "resolver_id", "observed_at", "facts"], "observation");
145
+ const id = identifier(row.id, "observation id", OBSERVATION_ID);
146
+ if (!SOURCES.includes(row.source))
147
+ throw new TypeError("Invalid observation source");
148
+ const facts = unique(items(row.facts, 256, "observation facts").map(fact), (v) => v.key, "fact key");
149
+ const result = { id, subject: subject(row.subject), source: row.source };
150
+ if (Object.hasOwn(row, "resolver_id"))
151
+ result.resolver_id = text(row.resolver_id, "resolver id", 256);
152
+ if (Object.hasOwn(row, "observed_at")) {
153
+ result.observed_at = row.observed_at === null ? null : text(row.observed_at, "observation time", 128);
154
+ }
155
+ result.facts = facts;
156
+ return result;
157
+ }
158
+ function finding(value) {
159
+ const row = record(value, "finding");
160
+ fields(row, ["check_id", "outcome", "reason_code", "observation_ids"], "finding");
161
+ const check_id = identifier(row.check_id, "check id", CHECK_ID);
162
+ if (!OUTCOMES.includes(row.outcome))
163
+ throw new TypeError("Invalid finding outcome");
164
+ const reason_code = row.reason_code === null ? null : text(row.reason_code, "finding reason", 160);
165
+ const observation_ids = unique(items(row.observation_ids, 32, "finding observation ids")
166
+ .map((id) => identifier(id, "finding observation id", OBSERVATION_ID)), (id) => id, "finding observation id");
167
+ return { check_id, outcome: row.outcome, reason_code, observation_ids };
168
+ }
169
+ /** Canonical shared findings/observations only; profile-specific assurance is NOT included. */
170
+ export function canonicalizeVerificationCoreV1(input) {
171
+ const report = record(input, "verification report");
172
+ const intent = record(report.intent, "verification intent");
173
+ fields(intent, ["subject", "expected"], "intent");
174
+ const expected = unique(items(intent.expected, 32, "expectations").map(commitment), (v) => v.key, "expectation key");
175
+ const observations = unique(items(report.observations, 32, "observations").map(observation), (v) => v.id, "observation id");
176
+ const findings = unique(items(report.findings, 512, "findings").map(finding), (v) => v.check_id, "check id");
177
+ const ids = new Set(observations.map((v) => v.id));
178
+ for (const entry of findings) {
179
+ if (entry.observation_ids.some((id) => !ids.has(id)))
180
+ throw new TypeError("Finding references missing observation");
181
+ }
182
+ const canonical = JSON.stringify({ schema_version: VERIFICATION_CORE_SCHEMA_VERSION,
183
+ intent: { subject: subject(intent.subject), expected }, findings, observations });
184
+ if (Buffer.byteLength(canonical, "utf8") > MAX_CANONICAL_BYTES) {
185
+ throw new RangeError("Verification core exceeds size limit");
186
+ }
187
+ return canonical;
188
+ }
189
+ /** Unauthenticated content digest, NOT proof that these checks were performed. */
190
+ export function computeVerificationCoreDigestV1(input) {
191
+ const canonical = canonicalizeVerificationCoreV1(input);
192
+ return sha3_512Hex(Buffer.concat([Buffer.from(DOMAIN, "utf8"), Buffer.from([0]),
193
+ Buffer.from(canonical, "utf8")]));
194
+ }
195
+ //# sourceMappingURL=coreV1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coreV1.js","sourceRoot":"","sources":["../../src/reports/coreV1.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { VerificationReport } from "../contracts/verification.js";
2
+ import type { ExecutionV1Report } from "../profiles/execution/verificationV1.js";
3
+ import type { IndependentStandardsV1Report } from "../profiles/execution/independentStandardsV1.js";
4
+ import type { PublicTriangulationV1Result } from "../triangulation/publicV1.js";
5
+ import type { PublicExecutionTriangulationV1Result } from "../triangulation/executionPublicV1.js";
6
+ export declare const PORTABLE_VERIFICATION_REPORT_SCHEMA_VERSION = "va.portable-verification-report.v1";
7
+ type Json = null | string | number | boolean | Json[] | {
8
+ [key: string]: Json;
9
+ };
10
+ type JsonObject = {
11
+ [key: string]: Json;
12
+ };
13
+ export type PortableVerificationReportV1Input = Readonly<{
14
+ kind: "verification";
15
+ result: VerificationReport;
16
+ }> | Readonly<{
17
+ kind: "execution";
18
+ result: ExecutionV1Report;
19
+ }> | Readonly<{
20
+ kind: "independent_standards";
21
+ result: IndependentStandardsV1Report;
22
+ }> | Readonly<{
23
+ kind: "public_triangulation";
24
+ result: PublicTriangulationV1Result;
25
+ }> | Readonly<{
26
+ kind: "execution_triangulation";
27
+ result: PublicExecutionTriangulationV1Result;
28
+ /** Required only when the public execution was not acquired and no plan exists. */
29
+ source_report?: ExecutionV1Report;
30
+ }>;
31
+ export type PortableVerificationReportV1 = Readonly<{
32
+ schema_version: typeof PORTABLE_VERIFICATION_REPORT_SCHEMA_VERSION;
33
+ kind: PortableVerificationReportV1Input["kind"];
34
+ core_sha3_512: string;
35
+ report_sha3_512: string;
36
+ core: VerificationReport & Readonly<{
37
+ schema_version: string;
38
+ }>;
39
+ /** Profile-specific, bounded and digest-bound assurance context. */
40
+ context: Readonly<JsonObject>;
41
+ }>;
42
+ /** A content-addressed record of claimed findings, not proof of their authenticity. */
43
+ export declare function createPortableVerificationReportV1(input: PortableVerificationReportV1Input): PortableVerificationReportV1;
44
+ /** Deterministic serialized report, including the digest of its material conclusions. */
45
+ export declare function canonicalizePortableVerificationReportV1(input: PortableVerificationReportV1Input): string;
46
+ export declare function computePortableVerificationReportDigestV1(input: PortableVerificationReportV1Input): string;
47
+ export {};
48
+ //# sourceMappingURL=portableV1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portableV1.d.ts","sourceRoot":"","sources":["../../src/reports/portableV1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAuB,MAAM,8BAA8B,CAAC;AAG5F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AACpG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,uCAAuC,CAAC;AAGlG,eAAO,MAAM,2CAA2C,uCAAuC,CAAC;AAUhG,KAAK,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAChF,KAAK,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAE1C,MAAM,MAAM,iCAAiC,GACzC,QAAQ,CAAC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC,GAC9D,QAAQ,CAAC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAC,GAC1D,QAAQ,CAAC;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,MAAM,EAAE,4BAA4B,CAAA;CAAE,CAAC,GACjF,QAAQ,CAAC;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,MAAM,EAAE,2BAA2B,CAAA;CAAE,CAAC,GAC/E,QAAQ,CAAC;IAAE,IAAI,EAAE,yBAAyB,CAAC;IAAC,MAAM,EAAE,oCAAoC,CAAC;IACvF,mFAAmF;IACnF,aAAa,CAAC,EAAE,iBAAiB,CAAA;CAAE,CAAC,CAAC;AAE3C,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IAClD,cAAc,EAAE,OAAO,2CAA2C,CAAC;IACnE,IAAI,EAAE,iCAAiC,CAAC,MAAM,CAAC,CAAC;IAChD,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,kBAAkB,GAAG,QAAQ,CAAC;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,oEAAoE;IACpE,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;CAC/B,CAAC,CAAC;AAiPH,uFAAuF;AACvF,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,iCAAiC,GAAG,4BAA4B,CAezH;AAED,yFAAyF;AACzF,wBAAgB,wCAAwC,CAAC,KAAK,EAAE,iCAAiC,GAAG,MAAM,CAEzG;AAED,wBAAgB,yCAAyC,CAAC,KAAK,EAAE,iCAAiC,GAAG,MAAM,CAE1G"}