@mikeargento/bitgraph-audit 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 (108) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/dist/anchors.d.ts +31 -0
  4. package/dist/anchors.d.ts.map +1 -0
  5. package/dist/anchors.js +116 -0
  6. package/dist/anchors.js.map +1 -0
  7. package/dist/anomalies.d.ts +42 -0
  8. package/dist/anomalies.d.ts.map +1 -0
  9. package/dist/anomalies.js +642 -0
  10. package/dist/anomalies.js.map +1 -0
  11. package/dist/attestation.d.ts +20 -0
  12. package/dist/attestation.d.ts.map +1 -0
  13. package/dist/attestation.js +795 -0
  14. package/dist/attestation.js.map +1 -0
  15. package/dist/audit.d.ts +19 -0
  16. package/dist/audit.d.ts.map +1 -0
  17. package/dist/audit.js +116 -0
  18. package/dist/audit.js.map +1 -0
  19. package/dist/authority.d.ts +37 -0
  20. package/dist/authority.d.ts.map +1 -0
  21. package/dist/authority.js +126 -0
  22. package/dist/authority.js.map +1 -0
  23. package/dist/aws-nitro-root-ca.d.ts +24 -0
  24. package/dist/aws-nitro-root-ca.d.ts.map +1 -0
  25. package/dist/aws-nitro-root-ca.js +44 -0
  26. package/dist/aws-nitro-root-ca.js.map +1 -0
  27. package/dist/cli.d.ts +3 -0
  28. package/dist/cli.d.ts.map +1 -0
  29. package/dist/cli.js +257 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/contents-hash.d.ts +30 -0
  32. package/dist/contents-hash.d.ts.map +1 -0
  33. package/dist/contents-hash.js +73 -0
  34. package/dist/contents-hash.js.map +1 -0
  35. package/dist/export.d.ts +64 -0
  36. package/dist/export.d.ts.map +1 -0
  37. package/dist/export.js +192 -0
  38. package/dist/export.js.map +1 -0
  39. package/dist/index.d.ts +31 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +17 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/ingest.d.ts +36 -0
  44. package/dist/ingest.d.ts.map +1 -0
  45. package/dist/ingest.js +828 -0
  46. package/dist/ingest.js.map +1 -0
  47. package/dist/reconstruct.d.ts +40 -0
  48. package/dist/reconstruct.d.ts.map +1 -0
  49. package/dist/reconstruct.js +400 -0
  50. package/dist/reconstruct.js.map +1 -0
  51. package/dist/report-json.d.ts +3 -0
  52. package/dist/report-json.d.ts.map +1 -0
  53. package/dist/report-json.js +290 -0
  54. package/dist/report-json.js.map +1 -0
  55. package/dist/report-md.d.ts +3 -0
  56. package/dist/report-md.d.ts.map +1 -0
  57. package/dist/report-md.js +853 -0
  58. package/dist/report-md.js.map +1 -0
  59. package/dist/rlp.d.ts +37 -0
  60. package/dist/rlp.d.ts.map +1 -0
  61. package/dist/rlp.js +120 -0
  62. package/dist/rlp.js.map +1 -0
  63. package/dist/tar.d.ts +47 -0
  64. package/dist/tar.d.ts.map +1 -0
  65. package/dist/tar.js +483 -0
  66. package/dist/tar.js.map +1 -0
  67. package/dist/temporal.d.ts +55 -0
  68. package/dist/temporal.d.ts.map +1 -0
  69. package/dist/temporal.js +461 -0
  70. package/dist/temporal.js.map +1 -0
  71. package/dist/types.d.ts +1389 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/types.js +3 -0
  74. package/dist/types.js.map +1 -0
  75. package/dist/validity.d.ts +21 -0
  76. package/dist/validity.d.ts.map +1 -0
  77. package/dist/validity.js +86 -0
  78. package/dist/validity.js.map +1 -0
  79. package/dist/verify-tiers.d.ts +11 -0
  80. package/dist/verify-tiers.d.ts.map +1 -0
  81. package/dist/verify-tiers.js +120 -0
  82. package/dist/verify-tiers.js.map +1 -0
  83. package/dist/witness.d.ts +25 -0
  84. package/dist/witness.d.ts.map +1 -0
  85. package/dist/witness.js +308 -0
  86. package/dist/witness.js.map +1 -0
  87. package/package.json +42 -0
  88. package/src/anchors.ts +168 -0
  89. package/src/anomalies.ts +773 -0
  90. package/src/attestation.ts +878 -0
  91. package/src/audit.ts +136 -0
  92. package/src/authority.ts +165 -0
  93. package/src/aws-nitro-root-ca.ts +47 -0
  94. package/src/cli.ts +284 -0
  95. package/src/contents-hash.ts +95 -0
  96. package/src/export.ts +278 -0
  97. package/src/index.ts +122 -0
  98. package/src/ingest.ts +967 -0
  99. package/src/reconstruct.ts +491 -0
  100. package/src/report-json.ts +331 -0
  101. package/src/report-md.ts +1067 -0
  102. package/src/rlp.ts +142 -0
  103. package/src/tar.ts +587 -0
  104. package/src/temporal.ts +629 -0
  105. package/src/types.ts +1528 -0
  106. package/src/validity.ts +90 -0
  107. package/src/verify-tiers.ts +137 -0
  108. package/src/witness.ts +407 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // Copyright (c) 2024-2026 Mike Argento. Licensed under the MIT License. See LICENSE.
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,qFAAqF"}
@@ -0,0 +1,21 @@
1
+ import type { ObservedProof } from "./types.js";
2
+ /** See module doc. Results are cached per ObservedProof object. */
3
+ export declare function isIntrinsicallyValid(observed: ObservedProof): Promise<boolean>;
4
+ /**
5
+ * Strict decimal counter parse for topology purposes. Accepts ASCII digit
6
+ * strings (leading zeros normalize through BigInt); anything else is
7
+ * treated as no counter evidence. The canonical verifier separately
8
+ * reports malformed counters on the verification dimension.
9
+ */
10
+ export declare function parseCounter(value: string | undefined): bigint | undefined;
11
+ /** Deterministic member order: parseable counter ascending, then canonical hash. */
12
+ export declare function byCounterThenHash(a: {
13
+ counter?: string;
14
+ proofHash: string;
15
+ }, b: {
16
+ counter?: string;
17
+ proofHash: string;
18
+ }): number;
19
+ /** Append to a Map-of-arrays. */
20
+ export declare function pushMap<K, V>(map: Map<K, V[]>, key: K, value: V): void;
21
+ //# sourceMappingURL=validity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validity.d.ts","sourceRoot":"","sources":["../src/validity.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,mEAAmE;AACnE,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBpF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAG1E;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC1C,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzC,MAAM,CAOR;AAED,iCAAiC;AACjC,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAItE"}
@@ -0,0 +1,86 @@
1
+ // Copyright (c) 2024-2026 Mike Argento. Licensed under the MIT License. See LICENSE.
2
+ /**
3
+ * bitgraph-audit intrinsic validity (internal)
4
+ *
5
+ * Shared by reconstruction and anomaly classification to answer one
6
+ * question: is this proof object cryptographically sound on its own
7
+ * (structure, canonical signature, slot binding, epoch link shape and
8
+ * successor binding), independent of run-order effects and of any supplied
9
+ * trust policy?
10
+ *
11
+ * Sources, in order:
12
+ *
13
+ * 1. The run verification record: "verified" and "artifact-unavailable"
14
+ * are intrinsically valid.
15
+ * 2. Anything else (status "failed", or the verification pass has not
16
+ * run) gets an isolated bytes-free recheck through
17
+ * verifyProofIntegrity with a fresh epoch link state and no policy.
18
+ * This separates order-dependent failures (the epoch link
19
+ * single-successor check fails whichever fork consumer verifies
20
+ * second) and policy rejections from cryptographic unsoundness.
21
+ *
22
+ * The run verification record is never modified: a proof that failed in
23
+ * the run keeps that status everywhere it is reported. Intrinsic validity
24
+ * only decides whether the proof may stand as a competing branch in a
25
+ * divergence or carry a hard lineage edge.
26
+ *
27
+ * State discipline: the recheck resets the verify package's module-level
28
+ * epoch link state before and after each call. Callers therefore run
29
+ * reconstruction and classification only after verifyObservedProofs has
30
+ * completed; that pass resets its own state at the start of every run, so
31
+ * later audit runs are unaffected.
32
+ */
33
+ import { resetEpochLinkState, verifyProofIntegrity } from "@mikeargento/bitgraph-verify";
34
+ const cache = new WeakMap();
35
+ /** See module doc. Results are cached per ObservedProof object. */
36
+ export async function isIntrinsicallyValid(observed) {
37
+ const status = observed.verification?.status;
38
+ if (status === "verified" || status === "artifact-unavailable")
39
+ return true;
40
+ const cached = cache.get(observed);
41
+ if (cached !== undefined)
42
+ return cached;
43
+ resetEpochLinkState();
44
+ let valid = false;
45
+ try {
46
+ valid = (await verifyProofIntegrity({ proof: observed.proof })).valid;
47
+ }
48
+ catch {
49
+ valid = false;
50
+ }
51
+ resetEpochLinkState();
52
+ cache.set(observed, valid);
53
+ return valid;
54
+ }
55
+ /**
56
+ * Strict decimal counter parse for topology purposes. Accepts ASCII digit
57
+ * strings (leading zeros normalize through BigInt); anything else is
58
+ * treated as no counter evidence. The canonical verifier separately
59
+ * reports malformed counters on the verification dimension.
60
+ */
61
+ export function parseCounter(value) {
62
+ if (value === undefined || value.length === 0 || !/^[0-9]+$/.test(value))
63
+ return undefined;
64
+ return BigInt(value);
65
+ }
66
+ /** Deterministic member order: parseable counter ascending, then canonical hash. */
67
+ export function byCounterThenHash(a, b) {
68
+ const ca = parseCounter(a.counter);
69
+ const cb = parseCounter(b.counter);
70
+ if (ca !== undefined && cb !== undefined && ca !== cb)
71
+ return ca < cb ? -1 : 1;
72
+ if (ca !== undefined && cb === undefined)
73
+ return -1;
74
+ if (ca === undefined && cb !== undefined)
75
+ return 1;
76
+ return a.proofHash < b.proofHash ? -1 : a.proofHash > b.proofHash ? 1 : 0;
77
+ }
78
+ /** Append to a Map-of-arrays. */
79
+ export function pushMap(map, key, value) {
80
+ const list = map.get(key);
81
+ if (list === undefined)
82
+ map.set(key, [value]);
83
+ else
84
+ list.push(value);
85
+ }
86
+ //# sourceMappingURL=validity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validity.js","sourceRoot":"","sources":["../src/validity.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGzF,MAAM,KAAK,GAAG,IAAI,OAAO,EAAmB,CAAC;AAE7C,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,QAAuB;IAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC7C,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,sBAAsB;QAAE,OAAO,IAAI,CAAC;IAE5E,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,mBAAmB,EAAE,CAAC;IACtB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,CAAC;QACH,KAAK,GAAG,CAAC,MAAM,oBAAoB,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IACD,mBAAmB,EAAE,CAAC;IAEtB,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAyB;IACpD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3F,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,iBAAiB,CAC/B,CAA0C,EAC1C,CAA0C;IAE1C,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,CAAC;IACpD,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACnD,OAAO,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,OAAO,CAAO,GAAgB,EAAE,GAAM,EAAE,KAAQ;IAC9D,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,IAAI,KAAK,SAAS;QAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;;QACzC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { IngestResult, VerificationSummary, VerifyObservedOptions } from "./types.js";
2
+ /**
3
+ * Verify every unique observed proof in the ingest result, attaching a
4
+ * ProofVerification record to each. Idempotent per proof: records already
5
+ * attached (from a previous call on the same object) are left untouched;
6
+ * for a fresh deterministic run, re-ingest the bundle first.
7
+ *
8
+ * @returns aggregate counts. Per-proof results live on ingest.proofs.
9
+ */
10
+ export declare function verifyObservedProofs(ingest: IngestResult, options?: VerifyObservedOptions): Promise<VerificationSummary>;
11
+ //# sourceMappingURL=verify-tiers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-tiers.d.ts","sourceRoot":"","sources":["../src/verify-tiers.ts"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EACV,YAAY,EAGZ,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAEpB;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,mBAAmB,CAAC,CA8E9B"}
@@ -0,0 +1,120 @@
1
+ // Copyright (c) 2024-2026 Mike Argento. Licensed under the MIT License. See LICENSE.
2
+ /**
3
+ * bitgraph-audit verification tiers
4
+ *
5
+ * Applies the canonical verification tiers to every unique observed proof
6
+ * in an IngestResult:
7
+ *
8
+ * - Artifact bytes present (content-addressed match in the bundle):
9
+ * full verification through verify() from @mikeargento/bitgraph-verify,
10
+ * with the actual artifact bytes. Status "verified" or "failed" with
11
+ * the verifier's exact reason.
12
+ * - Artifact bytes absent: verifyProofIntegrity(), the bytes-free
13
+ * integrity API. Status "artifact-unavailable" when the checks pass;
14
+ * never "verified", because digest matching was not independently
15
+ * checked. Status "failed" with the exact reason otherwise.
16
+ *
17
+ * All verification semantics live in the verify package; this module only
18
+ * routes proofs and records results. Verification status and chain
19
+ * topology are separate dimensions: nothing here reads or writes chain
20
+ * structure, and chainless proofs (tagged at ingest) verify exactly like
21
+ * any other proof.
22
+ *
23
+ * Ordering and epoch link state: verifyEpochLink() in the verify package
24
+ * keeps module-level single-successor state, so resetEpochLinkState() is
25
+ * called exactly once per audit run, before any proof is verified. Within
26
+ * a run, proofs are verified in a deterministic order: first the
27
+ * artifact-matched proofs as their artifact bytes stream by (container
28
+ * order), then the remaining proofs in first-observation order. Re-running
29
+ * the pass over a re-ingested bundle therefore always reproduces the same
30
+ * results.
31
+ */
32
+ import { resetEpochLinkState, verify, verifyProofIntegrity, } from "@mikeargento/bitgraph-verify";
33
+ import { streamMatchedArtifacts } from "./ingest.js";
34
+ /**
35
+ * Verify every unique observed proof in the ingest result, attaching a
36
+ * ProofVerification record to each. Idempotent per proof: records already
37
+ * attached (from a previous call on the same object) are left untouched;
38
+ * for a fresh deterministic run, re-ingest the bundle first.
39
+ *
40
+ * @returns aggregate counts. Per-proof results live on ingest.proofs.
41
+ */
42
+ export async function verifyObservedProofs(ingest, options) {
43
+ // Fresh single-successor state once per audit run (verify package G7).
44
+ resetEpochLinkState();
45
+ const trustAnchors = options?.trustAnchors;
46
+ // Index proofs by the hex form of their artifact digest, mirroring the
47
+ // strict decoding used for artifact matching at ingest. Resolution goes
48
+ // through a proofHash map so a bundle with many artifacts stays
49
+ // O(proofs + artifacts + matches); ingest built matchedProofHashes in
50
+ // first-observation order, so the per-artifact proof order is unchanged.
51
+ const proofsByHash = new Map(ingest.proofs.map((p) => [p.proofHash, p]));
52
+ const byDigestHex = new Map();
53
+ for (const artifact of ingest.artifacts) {
54
+ if (artifact.matchedProofHashes.length === 0)
55
+ continue;
56
+ const matched = artifact.matchedProofHashes
57
+ .map((hash) => proofsByHash.get(hash))
58
+ .filter((p) => p !== undefined);
59
+ byDigestHex.set(artifact.sha256Hex, matched);
60
+ }
61
+ // Tier 1: full verification for proofs whose artifact bytes are present.
62
+ for await (const artifact of streamMatchedArtifacts(ingest)) {
63
+ const proofs = byDigestHex.get(artifact.sha256Hex) ?? [];
64
+ for (const proof of proofs) {
65
+ if (proof.verification !== undefined)
66
+ continue;
67
+ const result = await verify({
68
+ proof: proof.proof,
69
+ bytes: artifact.bytes,
70
+ ...(trustAnchors !== undefined ? { trustAnchors } : {}),
71
+ });
72
+ const record = {
73
+ tier: "full",
74
+ status: result.valid ? "verified" : "failed",
75
+ ...(result.reason !== undefined ? { reason: result.reason } : {}),
76
+ artifactPath: artifact.path,
77
+ };
78
+ proof.verification = record;
79
+ }
80
+ }
81
+ // Tier 2: bytes-free integrity for everything else, in observation order.
82
+ for (const proof of ingest.proofs) {
83
+ if (proof.verification !== undefined)
84
+ continue;
85
+ const result = await verifyProofIntegrity({
86
+ proof: proof.proof,
87
+ ...(trustAnchors !== undefined ? { trustAnchors } : {}),
88
+ });
89
+ const record = {
90
+ tier: "integrity",
91
+ status: result.valid ? "artifact-unavailable" : "failed",
92
+ ...(result.reason !== undefined ? { reason: result.reason } : {}),
93
+ };
94
+ proof.verification = record;
95
+ }
96
+ // Summary.
97
+ let verified = 0;
98
+ let failed = 0;
99
+ let artifactUnavailable = 0;
100
+ let chainless = 0;
101
+ for (const proof of ingest.proofs) {
102
+ const status = proof.verification?.status;
103
+ if (status === "verified")
104
+ verified++;
105
+ else if (status === "failed")
106
+ failed++;
107
+ else if (status === "artifact-unavailable")
108
+ artifactUnavailable++;
109
+ if (proof.chainless)
110
+ chainless++;
111
+ }
112
+ return {
113
+ total: ingest.proofs.length,
114
+ verified,
115
+ failed,
116
+ artifactUnavailable,
117
+ chainless,
118
+ };
119
+ }
120
+ //# sourceMappingURL=verify-tiers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-tiers.js","sourceRoot":"","sources":["../src/verify-tiers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { AnchorIdentification, AnchorWitnessAnalysis, AnchorWitnessFile, AnchorWitnessOutcome, IngestResult, ObservedProof } from "./types.js";
2
+ /**
3
+ * Verify every witness file in the bundle against the identified anchors.
4
+ *
5
+ * Matching is by block hash: a witness is a candidate for every anchor
6
+ * whose signed attribution.message equals (case-insensitively) either the
7
+ * locally recomputed header hash or the witness's claimed blockHash. The
8
+ * second route exists so a witness with a tampered header still fails
9
+ * loudly against its intended anchor (witness-hash-mismatch) instead of
10
+ * disappearing as unmatched. A witness matching no anchor is reported
11
+ * witness-unmatched.
12
+ *
13
+ * Deterministic: witnesses in observation order, candidate anchors in
14
+ * identification (observation) order. Run after verifyObservedProofs and
15
+ * identifyAnchors.
16
+ */
17
+ export declare function verifyAnchorWitnesses(ingest: IngestResult, identification: AnchorIdentification): Promise<AnchorWitnessAnalysis>;
18
+ /**
19
+ * Verify one witness file against one specific anchor proof, running the
20
+ * full spec 10.3 procedure. Exposed for targeted use; the pipeline
21
+ * (verifyAnchorWitnesses) applies the same procedure with hash-based
22
+ * matching.
23
+ */
24
+ export declare function verifyAnchorWitness(witnessFile: AnchorWitnessFile, anchorProof: ObservedProof): Promise<AnchorWitnessOutcome>;
25
+ //# sourceMappingURL=witness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"witness.d.ts","sourceRoot":"","sources":["../src/witness.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EAGpB,YAAY,EACZ,aAAa,EACd,MAAM,YAAY,CAAC;AAWpB;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,oBAAoB,GACnC,OAAO,CAAC,qBAAqB,CAAC,CAoDhC;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,iBAAiB,EAC9B,WAAW,EAAE,aAAa,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAa/B"}
@@ -0,0 +1,308 @@
1
+ // Copyright (c) 2024-2026 Mike Argento. Licensed under the MIT License. See LICENSE.
2
+ /**
3
+ * bitgraph-audit anchor witness verification
4
+ *
5
+ * Implements the mandatory procedure of docs/BUNDLE-FORMAT.md section
6
+ * 10.3, exactly and fully offline:
7
+ *
8
+ * 1. Hex-decode headerRlpHex and require a single well-formed RLP list.
9
+ * 2. Recompute the block hash locally with Keccak-256 (Ethereum's
10
+ * original Keccak padding, explicitly NOT FIPS-202 SHA3-256).
11
+ * 3. Compare against the anchor's SIGNED attribution.message
12
+ * (lowercased, full 0x string).
13
+ * 4. Bind the signed message to the committed artifact: SHA-256 over
14
+ * the UTF-8 bytes of the exact signed message string must equal the
15
+ * strictly decoded artifact.digestB64.
16
+ * 5. Cross-check the claimed fields: header RLP index 8 (number)
17
+ * against the witness's blockNumber and, when the signed
18
+ * attribution.title parses as an Etherscan block URL, against the
19
+ * URL; and the witness's claimed blockHash against the recomputed
20
+ * hash.
21
+ * 6. Only then read the timestamp from RLP index 11 as external
22
+ * wall-clock evidence.
23
+ *
24
+ * Preconditions per the spec: the candidate anchor is identified by its
25
+ * signed attribution and its own cryptographic verification has
26
+ * succeeded. A witness cannot rescue an invalid proof. Intrinsic
27
+ * validity (validity.ts) is used for the precondition, so a run-order
28
+ * epoch-link artifact never disqualifies a sound anchor, and the run
29
+ * verification record is never modified.
30
+ *
31
+ * Any failure means the witness confers nothing: no timestamp is
32
+ * reported, and the anchor proof's own standing is unchanged in both
33
+ * directions. Failure codes are stable AnomalyCode literals.
34
+ *
35
+ * Zero network access: witnesses are inbound files, trust in them is
36
+ * established purely by local recomputation.
37
+ */
38
+ import { sha256 } from "@noble/hashes/sha256";
39
+ import { keccak_256 } from "@noble/hashes/sha3";
40
+ import { bytesToHex0x, decodeRlpList, hexToBytes, rlpBytesToBigInt } from "./rlp.js";
41
+ import { isIntrinsicallyValid } from "./validity.js";
42
+ const HEADER_NUMBER_INDEX = 8;
43
+ const HEADER_TIMESTAMP_INDEX = 11;
44
+ const BLOCK_HASH_SHAPE = /^0x[0-9a-fA-F]{64}$/;
45
+ const ETHERSCAN_BLOCK_URL = /^https:\/\/etherscan\.io\/block\/([0-9]+)$/;
46
+ // ---------------------------------------------------------------------------
47
+ // Public API
48
+ // ---------------------------------------------------------------------------
49
+ /**
50
+ * Verify every witness file in the bundle against the identified anchors.
51
+ *
52
+ * Matching is by block hash: a witness is a candidate for every anchor
53
+ * whose signed attribution.message equals (case-insensitively) either the
54
+ * locally recomputed header hash or the witness's claimed blockHash. The
55
+ * second route exists so a witness with a tampered header still fails
56
+ * loudly against its intended anchor (witness-hash-mismatch) instead of
57
+ * disappearing as unmatched. A witness matching no anchor is reported
58
+ * witness-unmatched.
59
+ *
60
+ * Deterministic: witnesses in observation order, candidate anchors in
61
+ * identification (observation) order. Run after verifyObservedProofs and
62
+ * identifyAnchors.
63
+ */
64
+ export async function verifyAnchorWitnesses(ingest, identification) {
65
+ const outcomes = [];
66
+ const findings = [];
67
+ const byHash = new Map(ingest.proofs.map((p) => [p.proofHash, p]));
68
+ for (const witnessFile of ingest.witnesses) {
69
+ const decoded = decodeWitness(witnessFile);
70
+ if (decoded.failure !== undefined) {
71
+ const outcome = {
72
+ witnessPath: witnessFile.path,
73
+ verified: false,
74
+ reason: decoded.failure.reason,
75
+ detail: decoded.failure.detail,
76
+ };
77
+ outcomes.push(outcome);
78
+ findings.push(toFinding(outcome));
79
+ continue;
80
+ }
81
+ // Candidate anchors by recomputed hash or claimed hash.
82
+ const computed = decoded.computedHash;
83
+ const claimed = decoded.claimedHash.toLowerCase();
84
+ const candidates = identification.anchors.filter((anchor) => {
85
+ const message = anchor.blockHash?.toLowerCase();
86
+ return message !== undefined && (message === computed || message === claimed);
87
+ });
88
+ if (candidates.length === 0) {
89
+ const outcome = {
90
+ witnessPath: witnessFile.path,
91
+ verified: false,
92
+ reason: "witness-unmatched",
93
+ detail: "neither the locally recomputed block hash nor the claimed blockHash matches any " +
94
+ "observed anchor's signed attribution.message",
95
+ computedBlockHash: computed,
96
+ };
97
+ outcomes.push(outcome);
98
+ findings.push(toFinding(outcome));
99
+ continue;
100
+ }
101
+ for (const candidate of candidates) {
102
+ const anchorProof = byHash.get(candidate.proofHash);
103
+ const anchorValid = anchorProof !== undefined && (await isIntrinsicallyValid(anchorProof));
104
+ const outcome = runProcedure(decoded, witnessFile.path, candidate.proofHash, anchorProof, anchorValid);
105
+ outcomes.push(outcome);
106
+ if (!outcome.verified)
107
+ findings.push(toFinding(outcome));
108
+ }
109
+ }
110
+ return { outcomes, findings };
111
+ }
112
+ /**
113
+ * Verify one witness file against one specific anchor proof, running the
114
+ * full spec 10.3 procedure. Exposed for targeted use; the pipeline
115
+ * (verifyAnchorWitnesses) applies the same procedure with hash-based
116
+ * matching.
117
+ */
118
+ export async function verifyAnchorWitness(witnessFile, anchorProof) {
119
+ const decoded = decodeWitness(witnessFile);
120
+ if (decoded.failure !== undefined) {
121
+ return {
122
+ witnessPath: witnessFile.path,
123
+ anchorProofHash: anchorProof.proofHash,
124
+ verified: false,
125
+ reason: decoded.failure.reason,
126
+ detail: decoded.failure.detail,
127
+ };
128
+ }
129
+ const anchorValid = await isIntrinsicallyValid(anchorProof);
130
+ return runProcedure(decoded, witnessFile.path, anchorProof.proofHash, anchorProof, anchorValid);
131
+ }
132
+ function decodeWitness(witnessFile) {
133
+ const w = witnessFile.witness;
134
+ // Field rules of spec 10.2.
135
+ const headerRlpHex = w["headerRlpHex"];
136
+ if (typeof headerRlpHex !== "string") {
137
+ return malformed("headerRlpHex is missing or not a string");
138
+ }
139
+ const blockNumber = w["blockNumber"];
140
+ if (typeof blockNumber !== "number" || !Number.isInteger(blockNumber) || blockNumber < 0) {
141
+ return malformed("blockNumber is missing or not a non-negative integer");
142
+ }
143
+ const blockHash = w["blockHash"];
144
+ if (typeof blockHash !== "string" || !BLOCK_HASH_SHAPE.test(blockHash)) {
145
+ return malformed("blockHash is missing or not 0x followed by 64 hex characters");
146
+ }
147
+ // Step 1: hex-decode, then require a single well-formed RLP list.
148
+ const headerBytes = hexToBytes(headerRlpHex);
149
+ if (headerBytes === null) {
150
+ return malformed("headerRlpHex is not 0x-prefixed even-length hex");
151
+ }
152
+ let items;
153
+ try {
154
+ items = decodeRlpList(headerBytes);
155
+ }
156
+ catch (error) {
157
+ return {
158
+ failure: {
159
+ reason: "witness-rlp-invalid",
160
+ detail: error instanceof Error ? error.message : String(error),
161
+ },
162
+ };
163
+ }
164
+ // Step 2: Keccak-256 over the exact decoded header bytes.
165
+ const computedHash = bytesToHex0x(keccak_256(headerBytes));
166
+ return {
167
+ computedHash,
168
+ items,
169
+ claimedHash: blockHash,
170
+ claimedNumber: BigInt(blockNumber),
171
+ };
172
+ }
173
+ function malformed(detail) {
174
+ return { failure: { reason: "witness-malformed", detail } };
175
+ }
176
+ // ---------------------------------------------------------------------------
177
+ // Steps 3 through 6 against one candidate anchor
178
+ // ---------------------------------------------------------------------------
179
+ function runProcedure(decoded, witnessPath, anchorProofHash, anchorProof, anchorValid) {
180
+ const computedHash = decoded.computedHash;
181
+ const base = {
182
+ witnessPath,
183
+ anchorProofHash,
184
+ computedBlockHash: computedHash,
185
+ };
186
+ const fail = (reason, detail, extra) => ({
187
+ ...base,
188
+ verified: false,
189
+ reason,
190
+ detail,
191
+ ...(extra?.blockNumber !== undefined ? { blockNumber: extra.blockNumber } : {}),
192
+ });
193
+ // Preconditions: the anchor proof's own cryptographic verification must
194
+ // have succeeded. A witness cannot rescue an invalid proof.
195
+ if (anchorProof === undefined || !anchorValid) {
196
+ return fail("witness-anchor-invalid", "the candidate anchor proof is not cryptographically valid; the witness confers nothing");
197
+ }
198
+ // Step 3: recomputed hash against the SIGNED attribution.message.
199
+ const message = readSignedMessage(anchorProof);
200
+ if (message === undefined || message.toLowerCase() !== computedHash) {
201
+ return fail("witness-hash-mismatch", message === undefined
202
+ ? "the anchor carries no signed attribution.message to compare against"
203
+ : "the locally recomputed block hash does not equal the anchor's signed attribution.message");
204
+ }
205
+ // Step 4: bind the signed message string to the committed artifact.
206
+ // SHA-256 over the exact signed string, no case normalization: the
207
+ // digest covers the string as signed (bitcoin-anchor.ts hashes the
208
+ // block-hash STRING).
209
+ const digest = strictBase64Decode32(readDigestB64(anchorProof));
210
+ if (digest === null) {
211
+ return fail("witness-digest-mismatch", "the anchor's artifact.digestB64 does not strictly decode as base64 of 32 bytes");
212
+ }
213
+ const messageHash = sha256(new TextEncoder().encode(message));
214
+ if (!bytesEqual(messageHash, digest)) {
215
+ return fail("witness-digest-mismatch", "SHA-256 of the exact signed attribution.message string does not equal the anchor's artifact digest");
216
+ }
217
+ // Step 5: cross-check the claimed fields.
218
+ const items = decoded.items;
219
+ const numberItem = items[HEADER_NUMBER_INDEX];
220
+ if (numberItem === undefined || !(numberItem instanceof Uint8Array)) {
221
+ return fail("witness-header-shape", `header RLP item ${HEADER_NUMBER_INDEX} (block number) is missing or not a byte string`);
222
+ }
223
+ const headerNumber = rlpBytesToBigInt(numberItem);
224
+ if (headerNumber !== decoded.claimedNumber) {
225
+ return fail("witness-block-number-mismatch", `the witness claims blockNumber ${decoded.claimedNumber}, but the header's number field is ${headerNumber}`, { blockNumber: String(headerNumber) });
226
+ }
227
+ const title = readSignedTitle(anchorProof);
228
+ if (title !== undefined) {
229
+ const urlNumber = ETHERSCAN_BLOCK_URL.exec(title)?.[1];
230
+ if (urlNumber !== undefined && BigInt(urlNumber) !== headerNumber) {
231
+ return fail("witness-block-number-mismatch", `the anchor's signed Etherscan URL names block ${urlNumber}, but the header's number field is ${headerNumber}`, { blockNumber: String(headerNumber) });
232
+ }
233
+ }
234
+ if (decoded.claimedHash.toLowerCase() !== computedHash) {
235
+ return fail("witness-claimed-hash-mismatch", "the witness's claimed blockHash does not equal the locally recomputed block hash", { blockNumber: String(headerNumber) });
236
+ }
237
+ // Step 6: only now, read the timestamp.
238
+ const timestampItem = items[HEADER_TIMESTAMP_INDEX];
239
+ if (timestampItem === undefined || !(timestampItem instanceof Uint8Array)) {
240
+ return fail("witness-header-shape", `header RLP item ${HEADER_TIMESTAMP_INDEX} (timestamp) is missing or not a byte string`, { blockNumber: String(headerNumber) });
241
+ }
242
+ const timestamp = rlpBytesToBigInt(timestampItem);
243
+ if (timestamp > BigInt(Number.MAX_SAFE_INTEGER)) {
244
+ return fail("witness-header-shape", "header timestamp does not fit a safe integer", { blockNumber: String(headerNumber) });
245
+ }
246
+ return {
247
+ ...base,
248
+ verified: true,
249
+ blockNumber: String(headerNumber),
250
+ timestamp: Number(timestamp),
251
+ };
252
+ }
253
+ // ---------------------------------------------------------------------------
254
+ // Helpers
255
+ // ---------------------------------------------------------------------------
256
+ function readSignedMessage(proof) {
257
+ return readAttribution(proof, "message");
258
+ }
259
+ function readSignedTitle(proof) {
260
+ return readAttribution(proof, "title");
261
+ }
262
+ function readAttribution(proof, field) {
263
+ const attribution = proof.proof["attribution"];
264
+ if (attribution === null || typeof attribution !== "object" || Array.isArray(attribution)) {
265
+ return undefined;
266
+ }
267
+ const value = attribution[field];
268
+ return typeof value === "string" ? value : undefined;
269
+ }
270
+ function readDigestB64(proof) {
271
+ const artifact = proof.proof["artifact"];
272
+ if (artifact === null || typeof artifact !== "object" || Array.isArray(artifact)) {
273
+ return undefined;
274
+ }
275
+ const value = artifact["digestB64"];
276
+ return typeof value === "string" ? value : undefined;
277
+ }
278
+ /** Strict standard base64 of exactly 32 bytes (spec 6.3 rules), or null. */
279
+ function strictBase64Decode32(value) {
280
+ if (value === undefined || value.length === 0)
281
+ return null;
282
+ const decoded = Buffer.from(value, "base64");
283
+ if (decoded.length !== 32 || decoded.toString("base64") !== value)
284
+ return null;
285
+ return new Uint8Array(decoded);
286
+ }
287
+ function bytesEqual(a, b) {
288
+ if (a.length !== b.length)
289
+ return false;
290
+ let diff = 0;
291
+ for (let i = 0; i < a.length; i++)
292
+ diff |= a[i] ^ b[i];
293
+ return diff === 0;
294
+ }
295
+ function toFinding(outcome) {
296
+ return {
297
+ code: outcome.reason,
298
+ path: outcome.witnessPath,
299
+ message: `anchor witness rejected: ${outcome.detail ?? "verification failed"}. The witness confers nothing; the anchor proof's own standing is unchanged.`,
300
+ details: {
301
+ ...(outcome.anchorProofHash !== undefined ? { anchorProofHash: outcome.anchorProofHash } : {}),
302
+ ...(outcome.computedBlockHash !== undefined
303
+ ? { computedBlockHash: outcome.computedBlockHash }
304
+ : {}),
305
+ },
306
+ };
307
+ }
308
+ //# sourceMappingURL=witness.js.map