@clear-capabilities/agentic-security-scanner 0.144.0 → 0.147.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 (209) hide show
  1. package/CHANGELOG.md +390 -0
  2. package/bin/agentic-security.js +3813 -83
  3. package/dist/1122.index.js +702 -0
  4. package/dist/{301.index.js → 1301.index.js} +2 -2
  5. package/dist/1379.index.js +591 -0
  6. package/dist/{444.index.js → 1444.index.js} +13 -4
  7. package/dist/{660.index.js → 1660.index.js} +2 -2
  8. package/dist/{700.index.js → 1700.index.js} +2 -2
  9. package/dist/{905.index.js → 1905.index.js} +3 -3
  10. package/dist/{920.index.js → 1920.index.js} +3 -3
  11. package/dist/{238.index.js → 2238.index.js} +3 -3
  12. package/dist/2271.index.js +165 -0
  13. package/dist/{985.index.js → 2376.index.js} +1260 -340
  14. package/dist/2432.index.js +793 -0
  15. package/dist/2659.index.js +93 -0
  16. package/dist/{826.index.js → 2826.index.js} +2 -2
  17. package/dist/{830.index.js → 2830.index.js} +2 -2
  18. package/dist/2923.index.js +298 -0
  19. package/dist/{1.index.js → 3001.index.js} +5 -5
  20. package/dist/{117.index.js → 3117.index.js} +3 -3
  21. package/dist/3180.index.js +307 -0
  22. package/dist/3276.index.js +117 -0
  23. package/dist/{415.index.js → 3415.index.js} +2 -2
  24. package/dist/{499.index.js → 3499.index.js} +2 -2
  25. package/dist/3518.index.js +450 -0
  26. package/dist/{526.index.js → 3526.index.js} +14 -6
  27. package/dist/{736.index.js → 3736.index.js} +4 -4
  28. package/dist/{839.index.js → 3839.index.js} +4 -4
  29. package/dist/{113.index.js → 4113.index.js} +14 -6
  30. package/dist/{265.index.js → 4265.index.js} +2 -2
  31. package/dist/{384.index.js → 4384.index.js} +3 -3
  32. package/dist/4547.index.js +268 -0
  33. package/dist/4863.index.js +422 -0
  34. package/dist/{970.index.js → 4970.index.js} +67 -3
  35. package/dist/5051.index.js +770 -0
  36. package/dist/{144.index.js → 5144.index.js} +5 -5
  37. package/dist/{333.index.js → 5333.index.js} +3 -3
  38. package/dist/5343.index.js +185 -0
  39. package/dist/5350.index.js +866 -0
  40. package/dist/5561.index.js +436 -0
  41. package/dist/{637.index.js → 5637.index.js} +29 -7
  42. package/dist/{449.index.js → 5830.index.js} +78 -14
  43. package/dist/6626.index.js +532 -0
  44. package/dist/6662.index.js +297 -0
  45. package/dist/{675.index.js → 6675.index.js} +5 -5
  46. package/dist/{730.index.js → 6730.index.js} +6 -6
  47. package/dist/6829.index.js +225 -0
  48. package/dist/6944.index.js +130 -0
  49. package/dist/{178.index.js → 7178.index.js} +26 -8
  50. package/dist/{227.index.js → 7227.index.js} +2 -2
  51. package/dist/7310.index.js +520 -0
  52. package/dist/{552.index.js → 7552.index.js} +4 -4
  53. package/dist/7709.index.js +78 -0
  54. package/dist/8218.index.js +160 -0
  55. package/dist/{476.index.js → 8476.index.js} +4 -4
  56. package/dist/{513.index.js → 8513.index.js} +5 -5
  57. package/dist/{520.index.js → 8520.index.js} +2 -2
  58. package/dist/{718.index.js → 8718.index.js} +2 -2
  59. package/dist/{752.index.js → 8752.index.js} +2 -2
  60. package/dist/8846.index.js +100 -0
  61. package/dist/{435.index.js → 9091.index.js} +580 -187
  62. package/dist/{207.index.js → 9207.index.js} +2 -2
  63. package/dist/{220.index.js → 9220.index.js} +2 -2
  64. package/dist/9390.index.js +163 -0
  65. package/dist/{503.index.js → 9503.index.js} +2 -2
  66. package/dist/{801.index.js → 9801.index.js} +2 -2
  67. package/dist/{824.index.js → 9824.index.js} +2 -2
  68. package/dist/agentic-security.mjs +16 -16
  69. package/dist/agentic-security.mjs.sha256 +1 -1
  70. package/dist/compliance-frameworks/hipaa-security-rule.json +3 -2
  71. package/package.json +23 -10
  72. package/src/compare.js +6 -1
  73. package/src/dataflow/CLAUDE.md +2 -2
  74. package/src/dataflow/catalog.js +42 -0
  75. package/src/dataflow/orm-write-catalog.js +175 -0
  76. package/src/engine.js +580 -30
  77. package/src/fix/apply-fix-service.js +1 -0
  78. package/src/history-scan.js +22 -5
  79. package/src/ir/CLAUDE.md +2 -1
  80. package/src/ir/chrome-probe.mjs +150 -0
  81. package/src/ir/parser-js.js +94 -7
  82. package/src/lineage/CLAUDE.md +1203 -0
  83. package/src/lineage/DESIGN_DESTINATION_RESOLVER.md +156 -0
  84. package/src/lineage/DESIGN_GRAPH_BUILDER.md +938 -0
  85. package/src/lineage/DESIGN_HANDLING_ANALYZER.md +355 -0
  86. package/src/lineage/DESIGN_INTRAPROCEDURAL.md +628 -0
  87. package/src/lineage/DESIGN_PATH_PROVENANCE.md +3451 -0
  88. package/src/lineage/DESIGN_QUEUE_DETAIL.md +120 -0
  89. package/src/lineage/DESIGN_REGISTRIES.md +880 -0
  90. package/src/lineage/DESIGN_STORE_DETAIL.md +143 -0
  91. package/src/lineage/DESIGN_TRANSIT_PROTECTION.md +245 -0
  92. package/src/lineage/classification.js +56 -0
  93. package/src/lineage/coverage.js +658 -0
  94. package/src/lineage/cross-repo-link.js +107 -0
  95. package/src/lineage/dataflow-graph.schema.json +184 -0
  96. package/src/lineage/decision-story.js +206 -0
  97. package/src/lineage/drift-policy.js +279 -0
  98. package/src/lineage/driver.js +135 -0
  99. package/src/lineage/engine.js +992 -0
  100. package/src/lineage/export-briefing.js +628 -0
  101. package/src/lineage/export-csv.js +62 -0
  102. package/src/lineage/export-json.js +238 -0
  103. package/src/lineage/export-privacy.js +258 -0
  104. package/src/lineage/federation-loader.js +111 -0
  105. package/src/lineage/field-identity.js +78 -0
  106. package/src/lineage/fixtures/build-flagship-fixture.mjs +272 -0
  107. package/src/lineage/fixtures/flagship-graph.json +1453 -0
  108. package/src/lineage/flow-grade.js +221 -0
  109. package/src/lineage/governance-edit.js +169 -0
  110. package/src/lineage/graph-builder.js +1114 -0
  111. package/src/lineage/graph-diff.js +431 -0
  112. package/src/lineage/graph-snapshot.js +180 -0
  113. package/src/lineage/handling-analyzer.js +168 -0
  114. package/src/lineage/ids.js +349 -0
  115. package/src/lineage/impact-assessment.js +76 -0
  116. package/src/lineage/impact-engine.js +268 -0
  117. package/src/lineage/index.js +281 -0
  118. package/src/lineage/language-coverage-tiers.js +58 -0
  119. package/src/lineage/obligation-mapping.js +126 -0
  120. package/src/lineage/obligation-predicates.js +235 -0
  121. package/src/lineage/observation-adapters.js +282 -0
  122. package/src/lineage/observation-correlation.js +622 -0
  123. package/src/lineage/observation-store.js +497 -0
  124. package/src/lineage/path-query.js +410 -0
  125. package/src/lineage/path-store.js +400 -0
  126. package/src/lineage/protection.js +53 -0
  127. package/src/lineage/recipient-profile.js +192 -0
  128. package/src/lineage/recipient-registry.js +394 -0
  129. package/src/lineage/redact-graph.js +224 -0
  130. package/src/lineage/remediation.js +417 -0
  131. package/src/lineage/resolve-destination.js +91 -0
  132. package/src/lineage/runtime-observation.js +464 -0
  133. package/src/lineage/scenario-diff.js +84 -0
  134. package/src/lineage/scenario-engine.js +251 -0
  135. package/src/lineage/scenario.js +101 -0
  136. package/src/lineage/schema.js +167 -0
  137. package/src/lineage/sink-registry.js +427 -0
  138. package/src/lineage/source-registry.js +357 -0
  139. package/src/lineage/source-seeding.js +212 -0
  140. package/src/lineage/summaries.js +590 -0
  141. package/src/lineage/transform-catalog.js +397 -0
  142. package/src/lineage/transit-protection.js +150 -0
  143. package/src/lineage/validate.js +285 -0
  144. package/src/lsp/server.js +49 -2
  145. package/src/mcp/CLAUDE.md +7 -1
  146. package/src/mcp/dataflow-tools.js +160 -0
  147. package/src/mcp/server.js +1 -1
  148. package/src/mcp/tools.js +22 -1
  149. package/src/pipeline/assurance-mode.js +64 -1
  150. package/src/pipeline/finding-schema.js +8 -1
  151. package/src/pipeline/scan-health.js +19 -1
  152. package/src/posture/CLAUDE.md +140 -0
  153. package/src/posture/accuracy-scorecard.js +60 -0
  154. package/src/posture/artifact-registry.js +76 -0
  155. package/src/posture/auditor-walkthrough.js +192 -13
  156. package/src/posture/compliance-frameworks/hipaa-security-rule.json +3 -2
  157. package/src/posture/compliance-policy.js +12 -2
  158. package/src/posture/cross-repo-memory.js +7 -2
  159. package/src/posture/fix-history.js +25 -2
  160. package/src/posture/fix-verify.js +9 -1
  161. package/src/posture/fleet.js +0 -0
  162. package/src/posture/git-history.js +13 -5
  163. package/src/posture/material-change.js +21 -2
  164. package/src/posture/mttr.js +75 -12
  165. package/src/posture/obligation-evidence-pack.js +202 -0
  166. package/src/posture/pre-incident-archaeology.js +39 -7
  167. package/src/posture/privacy-framework.js +14 -0
  168. package/src/posture/provenance/ai-authorship.js +68 -0
  169. package/src/posture/provenance/branch-entry.js +80 -0
  170. package/src/posture/provenance/cache.js +143 -0
  171. package/src/posture/provenance/confidence.js +36 -0
  172. package/src/posture/provenance/coordinator.js +786 -0
  173. package/src/posture/provenance/dag-walk.js +249 -0
  174. package/src/posture/provenance/evidence-attribution.js +59 -0
  175. package/src/posture/provenance/git-evidence.js +310 -0
  176. package/src/posture/provenance/lifecycle.js +208 -0
  177. package/src/posture/provenance/missing-control-resolver.js +137 -0
  178. package/src/posture/provenance/origin-resolver.js +342 -0
  179. package/src/posture/provenance/predicate-replay.js +133 -0
  180. package/src/posture/provenance/providers/config.js +39 -0
  181. package/src/posture/provenance/providers/github.js +62 -0
  182. package/src/posture/provenance/providers/gitlab.js +58 -0
  183. package/src/posture/provenance/repo-lineage.js +74 -0
  184. package/src/posture/provenance/sca-origin.js +139 -0
  185. package/src/posture/provenance/schema.js +255 -0
  186. package/src/posture/provenance/transitive-sca.js +147 -0
  187. package/src/posture/provenance/validate.js +30 -0
  188. package/src/posture/provenance-evidence-bundle.js +144 -0
  189. package/src/posture/remediation-ledger.js +337 -0
  190. package/src/posture/sbom-diff.js +15 -2
  191. package/src/posture/secret-history.js +10 -2
  192. package/src/posture/state-dir.js +38 -14
  193. package/src/posture/vuln-archaeology.js +8 -2
  194. package/src/pr-delta.js +25 -4
  195. package/src/report/index.js +197 -3
  196. package/src/runScan.js +34 -5
  197. package/src/sast/rate-limit.js +33 -3
  198. package/src/server/CLAUDE.md +47 -0
  199. package/src/server/graph-loader.js +141 -0
  200. package/src/server/http-server.js +325 -0
  201. package/src/server/routes.js +129 -0
  202. package/src/server/security.js +111 -0
  203. package/src/server/static-assets.js +139 -0
  204. package/src/util/git-hardening.js +128 -0
  205. package/dist/11.index.js +0 -353
  206. package/dist/259.index.js +0 -975
  207. package/dist/317.index.js +0 -300
  208. package/dist/609.index.js +0 -741
  209. package/dist/838.index.js +0 -152
@@ -1,5 +1,5 @@
1
- export const id = 905;
2
- export const ids = [905,499];
1
+ export const id = 1905;
2
+ export const ids = [1905,3499];
3
3
  export const modules = {
4
4
 
5
5
  /***/ 4286:
@@ -866,7 +866,7 @@ function makeTaintProbe(perFileIR, callGraph) {
866
866
 
867
867
  async function runDeepAnalysisSafe(perFileIR, callGraph) {
868
868
  try {
869
- const { runDeepAnalysis } = await Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 7165));
869
+ const { runDeepAnalysis } = await Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 2555));
870
870
  return runDeepAnalysis(perFileIR, callGraph, {});
871
871
  } catch {
872
872
  return null;
@@ -1,5 +1,5 @@
1
- export const id = 920;
2
- export const ids = [920,238];
1
+ export const id = 1920;
2
+ export const ids = [1920,2238];
3
3
  export const modules = {
4
4
 
5
5
  /***/ 2238:
@@ -65,7 +65,7 @@ const RELIABLE_N = 10;
65
65
  const FIX_STAGES = Object.freeze(['rescan', 'lint', 'tests', 'honesty', 'poc']);
66
66
 
67
67
  function _logPath(scanRoot) {
68
- return (0,_state_dir_js__WEBPACK_IMPORTED_MODULE_2__/* .statePath */ .BQ)(scanRoot, LOG_FILE);
68
+ return (0,_state_dir_js__WEBPACK_IMPORTED_MODULE_2__.statePath)(scanRoot, LOG_FILE);
69
69
  }
70
70
 
71
71
  /**
@@ -1,5 +1,5 @@
1
- export const id = 238;
2
- export const ids = [238];
1
+ export const id = 2238;
2
+ export const ids = [2238];
3
3
  export const modules = {
4
4
 
5
5
  /***/ 2238:
@@ -65,7 +65,7 @@ const RELIABLE_N = 10;
65
65
  const FIX_STAGES = Object.freeze(['rescan', 'lint', 'tests', 'honesty', 'poc']);
66
66
 
67
67
  function _logPath(scanRoot) {
68
- return (0,_state_dir_js__WEBPACK_IMPORTED_MODULE_2__/* .statePath */ .BQ)(scanRoot, LOG_FILE);
68
+ return (0,_state_dir_js__WEBPACK_IMPORTED_MODULE_2__.statePath)(scanRoot, LOG_FILE);
69
69
  }
70
70
 
71
71
  /**
@@ -0,0 +1,165 @@
1
+ export const id = 2271;
2
+ export const ids = [2271];
3
+ export const modules = {
4
+
5
+ /***/ 2271:
6
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
+
8
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9
+ /* harmony export */ PROVENANCE_BUNDLE_SCHEMA: () => (/* binding */ PROVENANCE_BUNDLE_SCHEMA),
10
+ /* harmony export */ buildProvenanceEvidenceBundle: () => (/* binding */ buildProvenanceEvidenceBundle),
11
+ /* harmony export */ ensureKeyPair: () => (/* reexport safe */ _evidence_bundle_js__WEBPACK_IMPORTED_MODULE_1__.ensureKeyPair),
12
+ /* harmony export */ signProvenanceEvidenceBundle: () => (/* binding */ signProvenanceEvidenceBundle),
13
+ /* harmony export */ verifyProvenanceEvidenceBundle: () => (/* binding */ verifyProvenanceEvidenceBundle)
14
+ /* harmony export */ });
15
+ /* harmony import */ var node_crypto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7598);
16
+ /* harmony import */ var _evidence_bundle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8317);
17
+ // Signed provenance evidence bundles (Finding Provenance PRD, M4 §4.1).
18
+ //
19
+ // Sibling to posture/evidence-bundle.js, not a generalization of it — that
20
+ // module's bundle shape (proofTier, taintPath, exploitability...) answers
21
+ // "is this finding real"; this one answers "who/when introduced it, how
22
+ // sure are we." Forcing one shape to cover both would leave half of every
23
+ // bundle null. Same four-function pattern (build/sign/verify + a schema
24
+ // string + a top-level-key allowlist), same Ed25519 key material — reused,
25
+ // not reimplemented.
26
+ //
27
+ // The allowlisted fields mirror provenance/coordinator.js's own
28
+ // computeDigest() material EXACTLY (stableId, findingOrigin.commit,
29
+ // branchIntroduction.commit, evidenceAttribution role:path:line:commit
30
+ // strings, method, confidence.reasons, limitations) plus repo/HEAD identity
31
+ // (not in computeDigest's material, since that digest never leaves the repo
32
+ // it was computed in, but a bundle does). Everything here is copied from
33
+ // what findingProvenance already computed. Nothing is inferred.
34
+ //
35
+ // canonicalJson vs canonicalBytes — resolved before writing this file
36
+ // -------------------------------------------------------------------
37
+ // evidence-bundle.js exports TWO canonicalisation helpers, not one, and they
38
+ // are not interchangeable. `canonicalJson(value)` is a pure, shape-agnostic
39
+ // deterministic serialiser (sorted keys at every level, order-preserving
40
+ // arrays) — safe to reuse for any bundle shape. `canonicalBytes(bundle)`
41
+ // is NOT generic: it hardcodes evidence-bundle.js's own six top-level keys
42
+ // (`schema, finding, evidence, engine, proves, doesNotProve`) when building
43
+ // the object it signs. Reusing `canonicalBytes` here would silently sign a
44
+ // filtered object missing this module's `repo` and `provenance` fields
45
+ // (and would read `bundle.evidence`, which a provenance bundle never has) —
46
+ // exactly the EA-03 failure mode the allowlist check below exists to catch,
47
+ // just introduced from the signing side instead of the verifying side. So
48
+ // this module imports the generic `canonicalJson` (as the brief's Step 1
49
+ // sketch already did) and signs `canonicalJson(bundle)` directly, since
50
+ // `buildProvenanceEvidenceBundle` never puts anything on the unsigned
51
+ // object beyond this module's own allowlisted fields.
52
+
53
+
54
+
55
+
56
+ const PROVENANCE_BUNDLE_SCHEMA = 'agentic-security/provenance-evidence@1';
57
+
58
+ const PROVES = 'This bundle\'s contents are exactly what was signed at attestation time.';
59
+ const DOES_NOT_PROVE = 'This bundle does NOT prove the origin commit is correctly identified — read confidence.level and limitations for that. It proves the RECORD is unmodified, not that the record is right.';
60
+
61
+ /**
62
+ * Build an unsigned provenance bundle from one finding's findingProvenance.
63
+ * Returns null for a finding with no findingProvenance at all (nothing to
64
+ * attest) — this is a caller error (attest a scan before its provenance
65
+ * pass ran), not a case to paper over with an empty bundle.
66
+ */
67
+ function buildProvenanceEvidenceBundle(finding, { engineVersion, repoIdentity, head } = {}) {
68
+ if (!finding || typeof finding !== 'object') return null;
69
+ const fp = finding.findingProvenance;
70
+ if (!fp || typeof fp !== 'object') return null;
71
+ return {
72
+ schema: PROVENANCE_BUNDLE_SCHEMA,
73
+ finding: {
74
+ id: finding.id ?? null,
75
+ stableId: finding.stableId ?? null,
76
+ },
77
+ repo: {
78
+ identity: repoIdentity ?? null,
79
+ head: head ?? fp.analysisBasis?.head ?? null,
80
+ },
81
+ provenance: {
82
+ status: fp.status ?? null,
83
+ findingOrigin: fp.findingOrigin
84
+ ? {
85
+ commit: fp.findingOrigin.commit ?? null,
86
+ authorName: fp.findingOrigin.authorName ?? null,
87
+ authorDate: fp.findingOrigin.authorDate ?? null,
88
+ summary: fp.findingOrigin.summary ?? null,
89
+ }
90
+ : null,
91
+ branchIntroduction: fp.branchIntroduction
92
+ ? { commit: fp.branchIntroduction.commit ?? null, branch: fp.branchIntroduction.branch ?? null }
93
+ : null,
94
+ evidenceAttribution: (fp.evidenceAttribution || []).map((n) => ({
95
+ role: n.role ?? null, path: n.path ?? null, line: n.line ?? null, commit: n.commit ?? null,
96
+ })),
97
+ method: fp.method ?? null,
98
+ confidence: fp.confidence
99
+ ? { level: fp.confidence.level ?? null, score: fp.confidence.score ?? null, reasons: fp.confidence.reasons || [] }
100
+ : null,
101
+ limitations: fp.limitations || [],
102
+ // M4 §4.2 final-review fix: this module was written (Task 1) before
103
+ // the cross-repo lineage feature existed (Task 5), so a
104
+ // cross-repo-resolved origin's boundary-crossing marker was dropped
105
+ // from the signed bundle — a foreign repository's commit SHA and a
106
+ // real author name, with no MACHINE-READABLE signal that the origin
107
+ // crossed a repository boundary (only the prose in `limitations`
108
+ // said so, and a programmatic verifier does not read prose). Nested
109
+ // under `provenance` alongside the fields above, so it is part of
110
+ // what gets signed — never a new top-level key.
111
+ historyCoverage: { crossRepoLineage: fp.historyCoverage?.crossRepoLineage ?? false },
112
+ },
113
+ engine: { engineVersion: engineVersion ?? null },
114
+ proves: PROVES,
115
+ doesNotProve: DOES_NOT_PROVE,
116
+ };
117
+ }
118
+
119
+ function signProvenanceEvidenceBundle(bundle, privateKeyPem) {
120
+ const sig = node_crypto__WEBPACK_IMPORTED_MODULE_0__.sign(null, Buffer.from((0,_evidence_bundle_js__WEBPACK_IMPORTED_MODULE_1__/* .canonicalJson */ .dj)(bundle), 'utf8'), privateKeyPem);
121
+ return {
122
+ ...bundle,
123
+ signature: { algorithm: 'ed25519', canonicalisation: PROVENANCE_BUNDLE_SCHEMA, value: sig.toString('base64') },
124
+ };
125
+ }
126
+
127
+ const PROVENANCE_BUNDLE_TOP_LEVEL_KEYS = new Set([
128
+ 'schema', 'finding', 'repo', 'provenance', 'engine', 'proves', 'doesNotProve', 'signature',
129
+ ]);
130
+
131
+ /**
132
+ * Verify with a PUBLIC key only. Rejects any top-level key outside the
133
+ * allowlist BEFORE checking the signature — same EA-03 fix evidence-bundle.js
134
+ * carries: a signature only covers the bytes it was computed over, so an
135
+ * unknown key stapled on after signing would otherwise verify as authentic.
136
+ */
137
+ function verifyProvenanceEvidenceBundle(bundle, publicKeyPem) {
138
+ if (!bundle || typeof bundle !== 'object') return { ok: false, reason: 'bundle is not an object' };
139
+ if (bundle.schema !== PROVENANCE_BUNDLE_SCHEMA) return { ok: false, reason: `unrecognised schema: ${bundle.schema}` };
140
+ const unknownKeys = Object.keys(bundle).filter((k) => !PROVENANCE_BUNDLE_TOP_LEVEL_KEYS.has(k));
141
+ if (unknownKeys.length) {
142
+ return { ok: false, reason: `unrecognised top-level key(s) not covered by the signature: ${unknownKeys.join(', ')}` };
143
+ }
144
+ const sig = bundle.signature;
145
+ if (!sig?.value) return { ok: false, reason: 'bundle is unsigned' };
146
+ if (sig.algorithm !== 'ed25519') return { ok: false, reason: `unsupported algorithm: ${sig.algorithm}` };
147
+ if (!publicKeyPem) return { ok: false, reason: 'no public key supplied' };
148
+ const { signature, ...unsigned } = bundle;
149
+ let ok = false;
150
+ try {
151
+ ok = node_crypto__WEBPACK_IMPORTED_MODULE_0__.verify(null, Buffer.from((0,_evidence_bundle_js__WEBPACK_IMPORTED_MODULE_1__/* .canonicalJson */ .dj)(unsigned), 'utf8'), publicKeyPem, Buffer.from(sig.value, 'base64'));
152
+ } catch (e) {
153
+ return { ok: false, reason: `verification error: ${e.message}` };
154
+ }
155
+ return ok
156
+ ? { ok: true, reason: null }
157
+ : { ok: false, reason: 'signature does not match the bundle contents — it was modified after signing' };
158
+ }
159
+
160
+
161
+
162
+
163
+ /***/ })
164
+
165
+ };