@blamejs/blamejs-shop 0.5.12 → 0.5.13

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 (521) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/lib/asset-manifest.json +1 -1
  3. package/lib/vendor/MANIFEST.json +632 -416
  4. package/lib/vendor/blamejs/.clusterfuzzlite/Dockerfile +21 -10
  5. package/lib/vendor/blamejs/.clusterfuzzlite/build.sh +30 -9
  6. package/lib/vendor/blamejs/.github/dependabot.yml +8 -0
  7. package/lib/vendor/blamejs/.github/workflows/actions-lint.yml +3 -3
  8. package/lib/vendor/blamejs/.github/workflows/cflite_batch.yml +7 -2
  9. package/lib/vendor/blamejs/.github/workflows/cflite_pr.yml +7 -2
  10. package/lib/vendor/blamejs/.github/workflows/ci.yml +21 -21
  11. package/lib/vendor/blamejs/.github/workflows/codeql.yml +3 -3
  12. package/lib/vendor/blamejs/.github/workflows/npm-publish.yml +4 -4
  13. package/lib/vendor/blamejs/.github/workflows/release-container.yml +7 -7
  14. package/lib/vendor/blamejs/.github/workflows/scorecard.yml +3 -3
  15. package/lib/vendor/blamejs/.github/workflows/sha-to-tag-verify.yml +1 -1
  16. package/lib/vendor/blamejs/.gitignore +2 -0
  17. package/lib/vendor/blamejs/CHANGELOG.md +122 -0
  18. package/lib/vendor/blamejs/NOTICE +26 -1
  19. package/lib/vendor/blamejs/SECURITY.md +1 -1
  20. package/lib/vendor/blamejs/api-snapshot.json +207 -5
  21. package/lib/vendor/blamejs/docker/keycloak/realm-blamejs-test.json +29 -0
  22. package/lib/vendor/blamejs/examples/wiki/DEPLOY.md +1 -0
  23. package/lib/vendor/blamejs/examples/wiki/lib/build-app.js +31 -0
  24. package/lib/vendor/blamejs/examples/wiki/lib/source-comment-block-validator.js +109 -0
  25. package/lib/vendor/blamejs/examples/wiki/nginx.conf +106 -0
  26. package/lib/vendor/blamejs/examples/wiki/package-lock.json +1 -1
  27. package/lib/vendor/blamejs/examples/wiki/test/e2e.js +92 -0
  28. package/lib/vendor/blamejs/fuzz/asn1-der.fuzz.js +28 -0
  29. package/lib/vendor/blamejs/fuzz/cms-codec.fuzz.js +17 -0
  30. package/lib/vendor/blamejs/fuzz/link-header.fuzz.js +18 -0
  31. package/lib/vendor/blamejs/index.js +6 -0
  32. package/lib/vendor/blamejs/lib/a2a.js +4 -4
  33. package/lib/vendor/blamejs/lib/agent-idempotency.js +18 -2
  34. package/lib/vendor/blamejs/lib/agent-saga.js +36 -8
  35. package/lib/vendor/blamejs/lib/agent-snapshot.js +63 -6
  36. package/lib/vendor/blamejs/lib/app-shutdown.js +23 -20
  37. package/lib/vendor/blamejs/lib/archive-read.js +8 -0
  38. package/lib/vendor/blamejs/lib/archive-tar.js +12 -2
  39. package/lib/vendor/blamejs/lib/arg-parser.js +49 -5
  40. package/lib/vendor/blamejs/lib/asn1-der.js +12 -0
  41. package/lib/vendor/blamejs/lib/audit-sign.js +47 -1
  42. package/lib/vendor/blamejs/lib/audit.js +71 -8
  43. package/lib/vendor/blamejs/lib/auth/ciba.js +14 -2
  44. package/lib/vendor/blamejs/lib/auth/fido-mds3.js +58 -47
  45. package/lib/vendor/blamejs/lib/auth/jwt.js +34 -0
  46. package/lib/vendor/blamejs/lib/auth/oauth.js +90 -13
  47. package/lib/vendor/blamejs/lib/auth/oid4vci.js +20 -17
  48. package/lib/vendor/blamejs/lib/auth/openid-federation.js +214 -23
  49. package/lib/vendor/blamejs/lib/auth/saml.js +38 -20
  50. package/lib/vendor/blamejs/lib/auth/sd-jwt-vc.js +10 -4
  51. package/lib/vendor/blamejs/lib/backup/bundle.js +13 -3
  52. package/lib/vendor/blamejs/lib/backup/index.js +16 -5
  53. package/lib/vendor/blamejs/lib/backup/manifest.js +18 -5
  54. package/lib/vendor/blamejs/lib/base32.js +21 -0
  55. package/lib/vendor/blamejs/lib/break-glass.js +19 -10
  56. package/lib/vendor/blamejs/lib/bundler.js +5 -1
  57. package/lib/vendor/blamejs/lib/cache-status.js +3 -7
  58. package/lib/vendor/blamejs/lib/calendar.js +21 -1
  59. package/lib/vendor/blamejs/lib/cbor.js +12 -1
  60. package/lib/vendor/blamejs/lib/cert.js +29 -11
  61. package/lib/vendor/blamejs/lib/cli.js +94 -24
  62. package/lib/vendor/blamejs/lib/cloud-events.js +2 -2
  63. package/lib/vendor/blamejs/lib/cluster-provider-db.js +13 -3
  64. package/lib/vendor/blamejs/lib/codepoint-class.js +85 -0
  65. package/lib/vendor/blamejs/lib/compliance-ai-act-prohibited.js +8 -4
  66. package/lib/vendor/blamejs/lib/compliance-ai-act-transparency.js +19 -4
  67. package/lib/vendor/blamejs/lib/compliance-ai-act.js +6 -8
  68. package/lib/vendor/blamejs/lib/content-credentials.js +1 -1
  69. package/lib/vendor/blamejs/lib/content-digest.js +2 -1
  70. package/lib/vendor/blamejs/lib/cookies.js +13 -3
  71. package/lib/vendor/blamejs/lib/cose.js +31 -16
  72. package/lib/vendor/blamejs/lib/crypto-field.js +32 -0
  73. package/lib/vendor/blamejs/lib/crypto-oprf.js +11 -2
  74. package/lib/vendor/blamejs/lib/crypto-xwing.js +22 -4
  75. package/lib/vendor/blamejs/lib/crypto.js +314 -19
  76. package/lib/vendor/blamejs/lib/csp.js +11 -3
  77. package/lib/vendor/blamejs/lib/daemon.js +270 -24
  78. package/lib/vendor/blamejs/lib/dark-patterns.js +5 -2
  79. package/lib/vendor/blamejs/lib/db-declare-view.js +2 -2
  80. package/lib/vendor/blamejs/lib/db-query.js +34 -7
  81. package/lib/vendor/blamejs/lib/db.js +18 -6
  82. package/lib/vendor/blamejs/lib/dbsc.js +17 -0
  83. package/lib/vendor/blamejs/lib/dev.js +21 -2
  84. package/lib/vendor/blamejs/lib/dsr.js +157 -102
  85. package/lib/vendor/blamejs/lib/external-db.js +41 -2
  86. package/lib/vendor/blamejs/lib/file-upload.js +25 -7
  87. package/lib/vendor/blamejs/lib/flag-providers.js +27 -15
  88. package/lib/vendor/blamejs/lib/forms.js +113 -27
  89. package/lib/vendor/blamejs/lib/gate-contract.js +23 -10
  90. package/lib/vendor/blamejs/lib/gdpr-ropa.js +8 -1
  91. package/lib/vendor/blamejs/lib/guard-agent-registry.js +1 -1
  92. package/lib/vendor/blamejs/lib/guard-archive.js +2 -2
  93. package/lib/vendor/blamejs/lib/guard-cidr.js +27 -1
  94. package/lib/vendor/blamejs/lib/guard-graphql.js +30 -11
  95. package/lib/vendor/blamejs/lib/guard-html.js +26 -53
  96. package/lib/vendor/blamejs/lib/guard-image.js +24 -5
  97. package/lib/vendor/blamejs/lib/guard-imap-command.js +10 -2
  98. package/lib/vendor/blamejs/lib/guard-jmap.js +19 -3
  99. package/lib/vendor/blamejs/lib/guard-jwt.js +18 -2
  100. package/lib/vendor/blamejs/lib/guard-list-unsubscribe.js +2 -2
  101. package/lib/vendor/blamejs/lib/guard-managesieve-command.js +10 -2
  102. package/lib/vendor/blamejs/lib/guard-markdown.js +11 -24
  103. package/lib/vendor/blamejs/lib/guard-pdf.js +18 -2
  104. package/lib/vendor/blamejs/lib/guard-pop3-command.js +10 -2
  105. package/lib/vendor/blamejs/lib/guard-regex.js +8 -5
  106. package/lib/vendor/blamejs/lib/guard-svg.js +31 -32
  107. package/lib/vendor/blamejs/lib/guard-time.js +1 -1
  108. package/lib/vendor/blamejs/lib/guard-uuid.js +2 -2
  109. package/lib/vendor/blamejs/lib/html-balance.js +3 -3
  110. package/lib/vendor/blamejs/lib/http-client-cache.js +82 -4
  111. package/lib/vendor/blamejs/lib/http-client-cookie-jar.js +16 -1
  112. package/lib/vendor/blamejs/lib/http-client.js +39 -7
  113. package/lib/vendor/blamejs/lib/http-message-signature.js +35 -1
  114. package/lib/vendor/blamejs/lib/i18n-messageformat.js +31 -6
  115. package/lib/vendor/blamejs/lib/i18n.js +35 -21
  116. package/lib/vendor/blamejs/lib/incident-report.js +8 -1
  117. package/lib/vendor/blamejs/lib/ip-utils.js +11 -1
  118. package/lib/vendor/blamejs/lib/json-path.js +23 -1
  119. package/lib/vendor/blamejs/lib/jwk.js +20 -3
  120. package/lib/vendor/blamejs/lib/link-header.js +2 -1
  121. package/lib/vendor/blamejs/lib/log-stream-otlp-grpc.js +5 -1
  122. package/lib/vendor/blamejs/lib/log-stream-otlp.js +5 -1
  123. package/lib/vendor/blamejs/lib/log-stream.js +8 -3
  124. package/lib/vendor/blamejs/lib/mail-auth.js +123 -22
  125. package/lib/vendor/blamejs/lib/mail-bimi.js +1 -1
  126. package/lib/vendor/blamejs/lib/mail-bounce.js +8 -0
  127. package/lib/vendor/blamejs/lib/mail-crypto-pgp.js +46 -10
  128. package/lib/vendor/blamejs/lib/mail-dav.js +22 -3
  129. package/lib/vendor/blamejs/lib/mail-dkim.js +96 -30
  130. package/lib/vendor/blamejs/lib/mail-helo.js +6 -1
  131. package/lib/vendor/blamejs/lib/mail-scan.js +23 -16
  132. package/lib/vendor/blamejs/lib/mail-send-deliver.js +34 -8
  133. package/lib/vendor/blamejs/lib/mail-server-imap.js +3 -4
  134. package/lib/vendor/blamejs/lib/mail-server-managesieve.js +7 -11
  135. package/lib/vendor/blamejs/lib/mail-server-mx.js +93 -7
  136. package/lib/vendor/blamejs/lib/mail-server-registry.js +8 -2
  137. package/lib/vendor/blamejs/lib/mail.js +15 -5
  138. package/lib/vendor/blamejs/lib/metrics.js +268 -63
  139. package/lib/vendor/blamejs/lib/middleware/age-gate.js +7 -1
  140. package/lib/vendor/blamejs/lib/middleware/asyncapi-serve.js +1 -1
  141. package/lib/vendor/blamejs/lib/middleware/body-parser.js +19 -4
  142. package/lib/vendor/blamejs/lib/middleware/bot-guard.js +5 -9
  143. package/lib/vendor/blamejs/lib/middleware/csp-report.js +40 -8
  144. package/lib/vendor/blamejs/lib/middleware/csrf-protect.js +24 -10
  145. package/lib/vendor/blamejs/lib/middleware/dpop.js +10 -5
  146. package/lib/vendor/blamejs/lib/middleware/index.js +6 -1
  147. package/lib/vendor/blamejs/lib/middleware/nel.js +1 -1
  148. package/lib/vendor/blamejs/lib/middleware/openapi-serve.js +1 -1
  149. package/lib/vendor/blamejs/lib/middleware/rate-limit.js +12 -1
  150. package/lib/vendor/blamejs/lib/middleware/require-bound-key.js +1 -1
  151. package/lib/vendor/blamejs/lib/middleware/scim-server.js +1 -1
  152. package/lib/vendor/blamejs/lib/middleware/tus-upload.js +6 -2
  153. package/lib/vendor/blamejs/lib/mtls-ca.js +18 -2
  154. package/lib/vendor/blamejs/lib/network-dns-resolver.js +11 -1
  155. package/lib/vendor/blamejs/lib/network-dns.js +21 -2
  156. package/lib/vendor/blamejs/lib/network-tls.js +69 -7
  157. package/lib/vendor/blamejs/lib/nonce-store.js +9 -1
  158. package/lib/vendor/blamejs/lib/object-store/gcs.js +7 -0
  159. package/lib/vendor/blamejs/lib/object-store/sigv4.js +31 -0
  160. package/lib/vendor/blamejs/lib/observability-otlp-exporter.js +1 -1
  161. package/lib/vendor/blamejs/lib/outbox.js +1 -1
  162. package/lib/vendor/blamejs/lib/parsers/safe-ini.js +9 -1
  163. package/lib/vendor/blamejs/lib/parsers/safe-toml.js +10 -1
  164. package/lib/vendor/blamejs/lib/permissions.js +6 -3
  165. package/lib/vendor/blamejs/lib/pid-probe.js +55 -0
  166. package/lib/vendor/blamejs/lib/pqc-agent.js +8 -1
  167. package/lib/vendor/blamejs/lib/pqc-software.js +3 -3
  168. package/lib/vendor/blamejs/lib/pubsub.js +20 -9
  169. package/lib/vendor/blamejs/lib/queue-local.js +8 -1
  170. package/lib/vendor/blamejs/lib/queue-redis.js +5 -0
  171. package/lib/vendor/blamejs/lib/redact.js +54 -0
  172. package/lib/vendor/blamejs/lib/restore-bundle.js +10 -2
  173. package/lib/vendor/blamejs/lib/restore.js +19 -0
  174. package/lib/vendor/blamejs/lib/retention.js +12 -4
  175. package/lib/vendor/blamejs/lib/router.js +60 -6
  176. package/lib/vendor/blamejs/lib/safe-buffer.js +69 -0
  177. package/lib/vendor/blamejs/lib/safe-decompress.js +8 -2
  178. package/lib/vendor/blamejs/lib/safe-dns.js +25 -20
  179. package/lib/vendor/blamejs/lib/safe-ical.js +7 -3
  180. package/lib/vendor/blamejs/lib/safe-mime.js +12 -1
  181. package/lib/vendor/blamejs/lib/safe-object.js +80 -0
  182. package/lib/vendor/blamejs/lib/safe-path.js +52 -4
  183. package/lib/vendor/blamejs/lib/safe-redirect.js +10 -2
  184. package/lib/vendor/blamejs/lib/safe-schema.js +4 -1
  185. package/lib/vendor/blamejs/lib/safe-sieve.js +33 -1
  186. package/lib/vendor/blamejs/lib/safe-sql.js +88 -0
  187. package/lib/vendor/blamejs/lib/safe-vcard.js +7 -3
  188. package/lib/vendor/blamejs/lib/scheduler.js +8 -1
  189. package/lib/vendor/blamejs/lib/security-assert.js +6 -6
  190. package/lib/vendor/blamejs/lib/self-update-standalone-verifier.js +74 -27
  191. package/lib/vendor/blamejs/lib/self-update.js +517 -87
  192. package/lib/vendor/blamejs/lib/server-timing.js +2 -4
  193. package/lib/vendor/blamejs/lib/session.js +34 -12
  194. package/lib/vendor/blamejs/lib/sql.js +15 -1
  195. package/lib/vendor/blamejs/lib/ssrf-guard.js +52 -0
  196. package/lib/vendor/blamejs/lib/static.js +55 -13
  197. package/lib/vendor/blamejs/lib/storage.js +8 -2
  198. package/lib/vendor/blamejs/lib/subject.js +6 -1
  199. package/lib/vendor/blamejs/lib/tenant-quota.js +52 -13
  200. package/lib/vendor/blamejs/lib/tls-exporter.js +3 -3
  201. package/lib/vendor/blamejs/lib/tsa.js +34 -13
  202. package/lib/vendor/blamejs/lib/uri-template.js +8 -1
  203. package/lib/vendor/blamejs/lib/vault/index.js +13 -0
  204. package/lib/vendor/blamejs/lib/vc.js +44 -5
  205. package/lib/vendor/blamejs/lib/vendor/MANIFEST.json +26 -26
  206. package/lib/vendor/blamejs/lib/vendor/noble-ciphers.cjs +792 -1
  207. package/lib/vendor/blamejs/lib/vendor/noble-curves.cjs +3443 -1
  208. package/lib/vendor/blamejs/lib/vendor/noble-post-quantum.cjs +2737 -1
  209. package/lib/vendor/blamejs/lib/vendor/pki.cjs +39550 -13
  210. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.dat +55 -53
  211. package/lib/vendor/blamejs/lib/vendor/public-suffix-list.data.js +5551 -5554
  212. package/lib/vendor/blamejs/lib/vendor/simplewebauthn-server.cjs +22459 -32
  213. package/lib/vendor/blamejs/lib/watcher.js +89 -17
  214. package/lib/vendor/blamejs/lib/webhook-dispatcher.js +25 -3
  215. package/lib/vendor/blamejs/lib/webhook.js +12 -2
  216. package/lib/vendor/blamejs/lib/ws-client.js +32 -1
  217. package/lib/vendor/blamejs/lib/xml-c14n.js +29 -1
  218. package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/Dockerfile +1 -1
  219. package/lib/vendor/blamejs/package-lock.json +2 -2
  220. package/lib/vendor/blamejs/package.json +1 -1
  221. package/lib/vendor/blamejs/release-notes/v0.16.x.json +1462 -0
  222. package/lib/vendor/blamejs/release-notes/v0.17.0.json +31 -0
  223. package/lib/vendor/blamejs/release-notes/v0.17.1.json +31 -0
  224. package/lib/vendor/blamejs/release-notes/v0.17.10.json +30 -0
  225. package/lib/vendor/blamejs/release-notes/v0.17.11.json +22 -0
  226. package/lib/vendor/blamejs/release-notes/v0.17.12.json +18 -0
  227. package/lib/vendor/blamejs/release-notes/v0.17.13.json +77 -0
  228. package/lib/vendor/blamejs/release-notes/v0.17.14.json +40 -0
  229. package/lib/vendor/blamejs/release-notes/v0.17.15.json +18 -0
  230. package/lib/vendor/blamejs/release-notes/v0.17.16.json +27 -0
  231. package/lib/vendor/blamejs/release-notes/v0.17.17.json +31 -0
  232. package/lib/vendor/blamejs/release-notes/v0.17.18.json +18 -0
  233. package/lib/vendor/blamejs/release-notes/v0.17.19.json +18 -0
  234. package/lib/vendor/blamejs/release-notes/v0.17.2.json +26 -0
  235. package/lib/vendor/blamejs/release-notes/v0.17.20.json +43 -0
  236. package/lib/vendor/blamejs/release-notes/v0.17.21.json +26 -0
  237. package/lib/vendor/blamejs/release-notes/v0.17.22.json +18 -0
  238. package/lib/vendor/blamejs/release-notes/v0.17.3.json +43 -0
  239. package/lib/vendor/blamejs/release-notes/v0.17.4.json +35 -0
  240. package/lib/vendor/blamejs/release-notes/v0.17.5.json +26 -0
  241. package/lib/vendor/blamejs/release-notes/v0.17.6.json +26 -0
  242. package/lib/vendor/blamejs/release-notes/v0.17.7.json +35 -0
  243. package/lib/vendor/blamejs/release-notes/v0.17.8.json +22 -0
  244. package/lib/vendor/blamejs/release-notes/v0.17.9.json +26 -0
  245. package/lib/vendor/blamejs/scripts/validate-source-comment-blocks.js +4 -0
  246. package/lib/vendor/blamejs/scripts/vendor-update.sh +293 -9
  247. package/lib/vendor/blamejs/socket.yml +94 -0
  248. package/lib/vendor/blamejs/test/00-primitives.js +605 -0
  249. package/lib/vendor/blamejs/test/helpers/drivers.js +12 -9
  250. package/lib/vendor/blamejs/test/integration/audit-stack-mysql.test.js +90 -1
  251. package/lib/vendor/blamejs/test/integration/audit-stack-postgres.test.js +122 -1
  252. package/lib/vendor/blamejs/test/integration/data-layer-mysql.test.js +30 -0
  253. package/lib/vendor/blamejs/test/integration/data-layer-pg.test.js +29 -0
  254. package/lib/vendor/blamejs/test/integration/dsr-cluster-mysql.test.js +479 -0
  255. package/lib/vendor/blamejs/test/integration/dsr-cluster-pg.test.js +487 -0
  256. package/lib/vendor/blamejs/test/integration/federation-auth.test.js +313 -5
  257. package/lib/vendor/blamejs/test/integration/mail-dkim.test.js +80 -0
  258. package/lib/vendor/blamejs/test/integration/openid-federation-chain.test.js +275 -0
  259. package/lib/vendor/blamejs/test/integration/webhook-dispatcher-pg.test.js +96 -0
  260. package/lib/vendor/blamejs/test/layer-0-primitives/a2a-tasks.test.js +401 -0
  261. package/lib/vendor/blamejs/test/layer-0-primitives/acme.test.js +1649 -2
  262. package/lib/vendor/blamejs/test/layer-0-primitives/age-gate.test.js +33 -0
  263. package/lib/vendor/blamejs/test/layer-0-primitives/agent-idempotency.test.js +0 -0
  264. package/lib/vendor/blamejs/test/layer-0-primitives/agent-saga.test.js +60 -0
  265. package/lib/vendor/blamejs/test/layer-0-primitives/agent-snapshot.test.js +524 -0
  266. package/lib/vendor/blamejs/test/layer-0-primitives/api-encrypt.test.js +891 -0
  267. package/lib/vendor/blamejs/test/layer-0-primitives/app-shutdown.test.js +128 -1
  268. package/lib/vendor/blamejs/test/layer-0-primitives/archive-adapters.test.js +271 -0
  269. package/lib/vendor/blamejs/test/layer-0-primitives/archive-read.test.js +628 -1
  270. package/lib/vendor/blamejs/test/layer-0-primitives/archive-tar-read.test.js +0 -0
  271. package/lib/vendor/blamejs/test/layer-0-primitives/archive-wrap.test.js +227 -0
  272. package/lib/vendor/blamejs/test/layer-0-primitives/arg-parser.test.js +15 -0
  273. package/lib/vendor/blamejs/test/layer-0-primitives/asn1-der.test.js +73 -0
  274. package/lib/vendor/blamejs/test/layer-0-primitives/atomic-file.test.js +114 -0
  275. package/lib/vendor/blamejs/test/layer-0-primitives/audit-sign-anchor.test.js +141 -0
  276. package/lib/vendor/blamejs/test/layer-0-primitives/audit-tools.test.js +624 -0
  277. package/lib/vendor/blamejs/test/layer-0-primitives/audit.test.js +769 -0
  278. package/lib/vendor/blamejs/test/layer-0-primitives/auth-jwt-defenses.test.js +436 -0
  279. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth.test.js +1697 -0
  280. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oid4vp.test.js +495 -0
  281. package/lib/vendor/blamejs/test/layer-0-primitives/auth-password.test.js +500 -0
  282. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml.test.js +1809 -0
  283. package/lib/vendor/blamejs/test/layer-0-primitives/auth-status-list.test.js +243 -1
  284. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index.test.js +2226 -0
  285. package/lib/vendor/blamejs/test/layer-0-primitives/backup-manifest-signature.test.js +183 -0
  286. package/lib/vendor/blamejs/test/layer-0-primitives/base32.test.js +105 -0
  287. package/lib/vendor/blamejs/test/layer-0-primitives/break-glass.test.js +693 -0
  288. package/lib/vendor/blamejs/test/layer-0-primitives/cache.test.js +603 -0
  289. package/lib/vendor/blamejs/test/layer-0-primitives/calendar.test.js +557 -0
  290. package/lib/vendor/blamejs/test/layer-0-primitives/case-insensitive-security-token-guard.test.js +214 -0
  291. package/lib/vendor/blamejs/test/layer-0-primitives/cbor.test.js +25 -0
  292. package/lib/vendor/blamejs/test/layer-0-primitives/cert.test.js +843 -6
  293. package/lib/vendor/blamejs/test/layer-0-primitives/ciba-authreqid-binding.test.js +77 -2
  294. package/lib/vendor/blamejs/test/layer-0-primitives/ciba.test.js +866 -0
  295. package/lib/vendor/blamejs/test/layer-0-primitives/clear-site-data.test.js +18 -0
  296. package/lib/vendor/blamejs/test/layer-0-primitives/cli-erase.test.js +19 -0
  297. package/lib/vendor/blamejs/test/layer-0-primitives/cli.test.js +2790 -0
  298. package/lib/vendor/blamejs/test/layer-0-primitives/cluster-lease-renewal-ttl.test.js +114 -0
  299. package/lib/vendor/blamejs/test/layer-0-primitives/cluster.test.js +1032 -0
  300. package/lib/vendor/blamejs/test/layer-0-primitives/cms-codec.test.js +575 -0
  301. package/lib/vendor/blamejs/test/layer-0-primitives/codebase-patterns.test.js +739 -1
  302. package/lib/vendor/blamejs/test/layer-0-primitives/codepoint-class.test.js +8 -0
  303. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-ai-act.test.js +194 -0
  304. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-lifecycle-proto-key.test.js +104 -0
  305. package/lib/vendor/blamejs/test/layer-0-primitives/compliance-sanctions.test.js +254 -0
  306. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials.test.js +613 -3
  307. package/lib/vendor/blamejs/test/layer-0-primitives/cookies.test.js +140 -0
  308. package/lib/vendor/blamejs/test/layer-0-primitives/cose.test.js +407 -0
  309. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-adversarial.test.js +352 -0
  310. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-derived-hash.test.js +32 -0
  311. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field.test.js +575 -0
  312. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-files-parallel.test.js +10 -0
  313. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-stream.test.js +24 -0
  314. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-oprf.test.js +17 -0
  315. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-spki-pin.test.js +183 -0
  316. package/lib/vendor/blamejs/test/layer-0-primitives/crypto-xwing.test.js +48 -0
  317. package/lib/vendor/blamejs/test/layer-0-primitives/crypto.test.js +345 -0
  318. package/lib/vendor/blamejs/test/layer-0-primitives/csp-report.test.js +58 -0
  319. package/lib/vendor/blamejs/test/layer-0-primitives/csv.test.js +48 -0
  320. package/lib/vendor/blamejs/test/layer-0-primitives/daemon.test.js +459 -1
  321. package/lib/vendor/blamejs/test/layer-0-primitives/dark-patterns.test.js +19 -0
  322. package/lib/vendor/blamejs/test/layer-0-primitives/db-query.test.js +1019 -0
  323. package/lib/vendor/blamejs/test/layer-0-primitives/db-raw-residency-gate.test.js +77 -0
  324. package/lib/vendor/blamejs/test/layer-0-primitives/db.test.js +1621 -0
  325. package/lib/vendor/blamejs/test/layer-0-primitives/ddl-change-control.test.js +462 -3
  326. package/lib/vendor/blamejs/test/layer-0-primitives/dnssec.test.js +323 -0
  327. package/lib/vendor/blamejs/test/layer-0-primitives/dpop-middleware-verify.test.js +562 -0
  328. package/lib/vendor/blamejs/test/layer-0-primitives/dsr.test.js +901 -1
  329. package/lib/vendor/blamejs/test/layer-0-primitives/dual-control.test.js +249 -0
  330. package/lib/vendor/blamejs/test/layer-0-primitives/external-db-migrate.test.js +561 -0
  331. package/lib/vendor/blamejs/test/layer-0-primitives/external-db.test.js +1214 -0
  332. package/lib/vendor/blamejs/test/layer-0-primitives/fal.test.js +21 -0
  333. package/lib/vendor/blamejs/test/layer-0-primitives/fedcm-dbsc.test.js +46 -20
  334. package/lib/vendor/blamejs/test/layer-0-primitives/federation-vc-suite.test.js +147 -3
  335. package/lib/vendor/blamejs/test/layer-0-primitives/fido-mds3.test.js +907 -38
  336. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload-content-safety-skip-audit.test.js +29 -0
  337. package/lib/vendor/blamejs/test/layer-0-primitives/file-upload.test.js +1135 -0
  338. package/lib/vendor/blamejs/test/layer-0-primitives/flag.test.js +30 -0
  339. package/lib/vendor/blamejs/test/layer-0-primitives/forms.test.js +747 -0
  340. package/lib/vendor/blamejs/test/layer-0-primitives/gate-contract.test.js +1855 -0
  341. package/lib/vendor/blamejs/test/layer-0-primitives/gdpr-ropa.test.js +30 -0
  342. package/lib/vendor/blamejs/test/layer-0-primitives/guard-archive.test.js +86 -0
  343. package/lib/vendor/blamejs/test/layer-0-primitives/guard-auth.test.js +117 -0
  344. package/lib/vendor/blamejs/test/layer-0-primitives/guard-cidr.test.js +151 -0
  345. package/lib/vendor/blamejs/test/layer-0-primitives/guard-domain.test.js +422 -0
  346. package/lib/vendor/blamejs/test/layer-0-primitives/guard-filename.test.js +424 -0
  347. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-gate-disposition-coverage.test.js → guard-gate-disposition.test.js} +1 -1
  348. package/lib/vendor/blamejs/test/layer-0-primitives/guard-graphql.test.js +340 -0
  349. package/lib/vendor/blamejs/test/layer-0-primitives/guard-html.test.js +29 -0
  350. package/lib/vendor/blamejs/test/layer-0-primitives/guard-idempotency-key.test.js +28 -0
  351. package/lib/vendor/blamejs/test/layer-0-primitives/guard-image.test.js +519 -45
  352. package/lib/vendor/blamejs/test/layer-0-primitives/guard-imap-command.test.js +0 -0
  353. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jmap.test.js +51 -0
  354. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jsonpath.test.js +66 -0
  355. package/lib/vendor/blamejs/test/layer-0-primitives/guard-jwt.test.js +436 -0
  356. package/lib/vendor/blamejs/test/layer-0-primitives/guard-managesieve-command.test.js +25 -0
  357. package/lib/vendor/blamejs/test/layer-0-primitives/guard-markdown.test.js +16 -0
  358. package/lib/vendor/blamejs/test/layer-0-primitives/guard-mime.test.js +86 -0
  359. package/lib/vendor/blamejs/test/layer-0-primitives/guard-oauth.test.js +140 -0
  360. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pdf.test.js +80 -0
  361. package/lib/vendor/blamejs/test/layer-0-primitives/guard-pop3-command.test.js +27 -0
  362. package/lib/vendor/blamejs/test/layer-0-primitives/guard-regex.test.js +99 -0
  363. package/lib/vendor/blamejs/test/layer-0-primitives/guard-shell.test.js +76 -0
  364. package/lib/vendor/blamejs/test/layer-0-primitives/{guard-sql-coverage.test.js → guard-sql.test.js} +3 -3
  365. package/lib/vendor/blamejs/test/layer-0-primitives/guard-svg.test.js +524 -0
  366. package/lib/vendor/blamejs/test/layer-0-primitives/guard-template.test.js +71 -0
  367. package/lib/vendor/blamejs/test/layer-0-primitives/guard-time.test.js +92 -0
  368. package/lib/vendor/blamejs/test/layer-0-primitives/guard-uuid.test.js +86 -0
  369. package/lib/vendor/blamejs/test/layer-0-primitives/html-balance.test.js +38 -0
  370. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache-authorization.test.js +347 -0
  371. package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache.test.js +908 -0
  372. package/lib/vendor/blamejs/test/layer-0-primitives/http-client.test.js +2874 -0
  373. package/lib/vendor/blamejs/test/layer-0-primitives/http-message-signature.test.js +643 -0
  374. package/lib/vendor/blamejs/test/layer-0-primitives/i18n-messageformat.test.js +38 -0
  375. package/lib/vendor/blamejs/test/layer-0-primitives/i18n.test.js +1153 -1
  376. package/lib/vendor/blamejs/test/layer-0-primitives/idempotency-key.test.js +494 -0
  377. package/lib/vendor/blamejs/test/layer-0-primitives/ip-utils.test.js +30 -0
  378. package/lib/vendor/blamejs/test/layer-0-primitives/jsdoc-example-execution.test.js +177 -0
  379. package/lib/vendor/blamejs/test/layer-0-primitives/json-path.test.js +103 -0
  380. package/lib/vendor/blamejs/test/layer-0-primitives/json-schema.test.js +214 -0
  381. package/lib/vendor/blamejs/test/layer-0-primitives/jwk.test.js +41 -0
  382. package/lib/vendor/blamejs/test/layer-0-primitives/jwt-external.test.js +276 -0
  383. package/lib/vendor/blamejs/test/layer-0-primitives/keychain.test.js +0 -0
  384. package/lib/vendor/blamejs/test/layer-0-primitives/log-stream.test.js +241 -0
  385. package/lib/vendor/blamejs/test/layer-0-primitives/log.test.js +106 -0
  386. package/lib/vendor/blamejs/test/layer-0-primitives/mail-agent.test.js +441 -0
  387. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth.test.js +2136 -4
  388. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bimi.test.js +759 -12
  389. package/lib/vendor/blamejs/test/layer-0-primitives/mail-bounce.test.js +811 -1
  390. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp-experimental.test.js +401 -3
  391. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp.test.js +751 -8
  392. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-smime.test.js +864 -0
  393. package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto.test.js +110 -0
  394. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dav.test.js +830 -1
  395. package/lib/vendor/blamejs/test/layer-0-primitives/mail-deploy.test.js +635 -86
  396. package/lib/vendor/blamejs/test/layer-0-primitives/mail-dkim.test.js +818 -0
  397. package/lib/vendor/blamejs/test/layer-0-primitives/mail-helo.test.js +27 -0
  398. package/lib/vendor/blamejs/test/layer-0-primitives/mail-scan.test.js +199 -0
  399. package/lib/vendor/blamejs/test/layer-0-primitives/mail-send-deliver.test.js +686 -2
  400. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-imap.test.js +778 -0
  401. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-jmap.test.js +1438 -0
  402. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-managesieve.test.js +449 -6
  403. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-mx.test.js +773 -2
  404. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-pop3.test.js +623 -3
  405. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-rate-limit.test.js +55 -0
  406. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-registry.test.js +13 -0
  407. package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-submission.test.js +877 -1
  408. package/lib/vendor/blamejs/test/layer-0-primitives/mail-sieve.test.js +326 -0
  409. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store-fts.test.js +55 -0
  410. package/lib/vendor/blamejs/test/layer-0-primitives/mail-store.test.js +242 -0
  411. package/lib/vendor/blamejs/test/layer-0-primitives/mail.test.js +1596 -2
  412. package/lib/vendor/blamejs/test/layer-0-primitives/mcp.test.js +440 -4
  413. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-snapshot.test.js +89 -0
  414. package/lib/vendor/blamejs/test/layer-0-primitives/metrics.test.js +1230 -0
  415. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-assetlinks.test.js +113 -0
  416. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-body-parser.test.js +1169 -0
  417. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-bot-disclose.test.js +123 -0
  418. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-cookies.test.js +108 -0
  419. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-gpc.test.js +121 -0
  420. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-headers.test.js +163 -0
  421. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-host-allowlist.test.js +154 -0
  422. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-require-content-type.test.js +127 -0
  423. package/lib/vendor/blamejs/test/layer-0-primitives/{middleware-tus-upload-coverage.test.js → middleware-tus-upload.test.js} +45 -0
  424. package/lib/vendor/blamejs/test/layer-0-primitives/middleware-web-app-manifest.test.js +132 -0
  425. package/lib/vendor/blamejs/test/layer-0-primitives/mtls-ca-crl-fingerprint-only.test.js +92 -0
  426. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns-resolver.test.js +65 -0
  427. package/lib/vendor/blamejs/test/layer-0-primitives/network-dns.test.js +1727 -1
  428. package/lib/vendor/blamejs/test/layer-0-primitives/network-nts.test.js +699 -0
  429. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy.test.js +1181 -0
  430. package/lib/vendor/blamejs/test/layer-0-primitives/network-tls.test.js +1876 -3
  431. package/lib/vendor/blamejs/test/layer-0-primitives/network.test.js +32 -0
  432. package/lib/vendor/blamejs/test/layer-0-primitives/nonce-store-enforce-replay-nonboolean.test.js +81 -0
  433. package/lib/vendor/blamejs/test/layer-0-primitives/ntp-check.test.js +122 -0
  434. package/lib/vendor/blamejs/test/layer-0-primitives/observability-tracing.test.js +378 -0
  435. package/lib/vendor/blamejs/test/layer-0-primitives/observability.test.js +77 -0
  436. package/lib/vendor/blamejs/test/layer-0-primitives/oid4vci.test.js +1016 -0
  437. package/lib/vendor/blamejs/test/layer-0-primitives/openid-federation.test.js +946 -0
  438. package/lib/vendor/blamejs/test/layer-0-primitives/outbox.test.js +818 -0
  439. package/lib/vendor/blamejs/test/layer-0-primitives/own-property-membership-guards.test.js +109 -0
  440. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-safe-toml.test.js +543 -0
  441. package/lib/vendor/blamejs/test/layer-0-primitives/{parsers-safe-yaml-coverage.test.js → parsers-safe-yaml.test.js} +2 -2
  442. package/lib/vendor/blamejs/test/layer-0-primitives/parsers-standalone.test.js +73 -0
  443. package/lib/vendor/blamejs/test/layer-0-primitives/passkey.test.js +649 -0
  444. package/lib/vendor/blamejs/test/layer-0-primitives/permissions.test.js +524 -0
  445. package/lib/vendor/blamejs/test/layer-0-primitives/pqc-agent-curve.test.js +22 -0
  446. package/lib/vendor/blamejs/test/layer-0-primitives/pubsub.test.js +295 -0
  447. package/lib/vendor/blamejs/test/layer-0-primitives/queue-flow-repeat.test.js +36 -0
  448. package/lib/vendor/blamejs/test/layer-0-primitives/queue.test.js +83 -0
  449. package/lib/vendor/blamejs/test/layer-0-primitives/rate-limit-xff-spoofing.test.js +34 -0
  450. package/lib/vendor/blamejs/test/layer-0-primitives/redact.test.js +1031 -0
  451. package/lib/vendor/blamejs/test/layer-0-primitives/request-helpers.test.js +94 -0
  452. package/lib/vendor/blamejs/test/layer-0-primitives/require-bound-key.test.js +401 -0
  453. package/lib/vendor/blamejs/test/layer-0-primitives/restore-empty-manifest-wipe.test.js +154 -0
  454. package/lib/vendor/blamejs/test/layer-0-primitives/retention.test.js +600 -0
  455. package/lib/vendor/blamejs/test/layer-0-primitives/router-host-path-injection.test.js +231 -0
  456. package/lib/vendor/blamejs/test/layer-0-primitives/router-tls0rtt.test.js +21 -0
  457. package/lib/vendor/blamejs/test/layer-0-primitives/router.test.js +1277 -0
  458. package/lib/vendor/blamejs/test/layer-0-primitives/safe-async.test.js +133 -0
  459. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer-linear-scans.test.js +14 -0
  460. package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer.test.js +80 -0
  461. package/lib/vendor/blamejs/test/layer-0-primitives/safe-decompress.test.js +28 -0
  462. package/lib/vendor/blamejs/test/layer-0-primitives/safe-dns.test.js +245 -0
  463. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ical.test.js +32 -0
  464. package/lib/vendor/blamejs/test/layer-0-primitives/safe-ini.test.js +376 -0
  465. package/lib/vendor/blamejs/test/layer-0-primitives/safe-json.test.js +175 -0
  466. package/lib/vendor/blamejs/test/layer-0-primitives/safe-mime.test.js +518 -0
  467. package/lib/vendor/blamejs/test/layer-0-primitives/safe-object.test.js +62 -0
  468. package/lib/vendor/blamejs/test/layer-0-primitives/safe-path.test.js +30 -0
  469. package/lib/vendor/blamejs/test/layer-0-primitives/safe-schema.test.js +104 -0
  470. package/lib/vendor/blamejs/test/layer-0-primitives/safe-sql.test.js +142 -0
  471. package/lib/vendor/blamejs/test/layer-0-primitives/safe-url.test.js +112 -0
  472. package/lib/vendor/blamejs/test/layer-0-primitives/safe-vcard.test.js +26 -0
  473. package/lib/vendor/blamejs/test/layer-0-primitives/scheduler.test.js +157 -0
  474. package/lib/vendor/blamejs/test/layer-0-primitives/scim-server.test.js +396 -0
  475. package/lib/vendor/blamejs/test/layer-0-primitives/sd-jwt-vc.test.js +930 -0
  476. package/lib/vendor/blamejs/test/layer-0-primitives/security-assert.test.js +755 -82
  477. package/lib/vendor/blamejs/test/layer-0-primitives/self-update.test.js +1053 -0
  478. package/lib/vendor/blamejs/test/layer-0-primitives/session-device-binding.test.js +200 -0
  479. package/lib/vendor/blamejs/test/layer-0-primitives/session-strict-binding-missing-failclosed.test.js +110 -0
  480. package/lib/vendor/blamejs/test/layer-0-primitives/sigv4-bucket-ops.test.js +636 -0
  481. package/lib/vendor/blamejs/test/layer-0-primitives/sql-offset-without-limit.test.js +94 -0
  482. package/lib/vendor/blamejs/test/layer-0-primitives/sql.test.js +1190 -0
  483. package/lib/vendor/blamejs/test/layer-0-primitives/ssrf-guard.test.js +21 -0
  484. package/lib/vendor/blamejs/test/layer-0-primitives/static.test.js +850 -0
  485. package/lib/vendor/blamejs/test/layer-0-primitives/storage-presigned-url.test.js +146 -0
  486. package/lib/vendor/blamejs/test/layer-0-primitives/storage.test.js +621 -0
  487. package/lib/vendor/blamejs/test/layer-0-primitives/subject.test.js +47 -0
  488. package/lib/vendor/blamejs/test/layer-0-primitives/template.test.js +582 -0
  489. package/lib/vendor/blamejs/test/layer-0-primitives/tenant-quota.test.js +587 -25
  490. package/lib/vendor/blamejs/test/layer-0-primitives/time.test.js +11 -0
  491. package/lib/vendor/blamejs/test/layer-0-primitives/tsa.test.js +524 -63
  492. package/lib/vendor/blamejs/test/layer-0-primitives/uri-template.test.js +27 -0
  493. package/lib/vendor/blamejs/test/layer-0-primitives/vault-rotate.test.js +866 -0
  494. package/lib/vendor/blamejs/test/layer-0-primitives/vault.test.js +74 -0
  495. package/lib/vendor/blamejs/test/layer-0-primitives/vc.test.js +215 -0
  496. package/lib/vendor/blamejs/test/layer-0-primitives/watcher.test.js +550 -0
  497. package/lib/vendor/blamejs/test/layer-0-primitives/webhook-dispatcher.test.js +388 -0
  498. package/lib/vendor/blamejs/test/layer-0-primitives/webhook.test.js +262 -0
  499. package/lib/vendor/blamejs/test/layer-0-primitives/websocket.test.js +1294 -0
  500. package/lib/vendor/blamejs/test/layer-0-primitives/ws-client.test.js +629 -0
  501. package/lib/vendor/blamejs/test/layer-0-primitives/xml-c14n-attr-normalization.test.js +164 -0
  502. package/lib/vendor/blamejs/test/smoke.js +2 -0
  503. package/package.json +1 -1
  504. package/lib/vendor/blamejs/release-notes/v0.16.0.json +0 -44
  505. package/lib/vendor/blamejs/release-notes/v0.16.1.json +0 -36
  506. package/lib/vendor/blamejs/release-notes/v0.16.2.json +0 -71
  507. package/lib/vendor/blamejs/release-notes/v0.16.3.json +0 -71
  508. package/lib/vendor/blamejs/test/layer-0-primitives/acme-coverage.test.js +0 -441
  509. package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth-coverage.test.js +0 -482
  510. package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml-coverage.test.js +0 -671
  511. package/lib/vendor/blamejs/test/layer-0-primitives/backup-index-coverage.test.js +0 -690
  512. package/lib/vendor/blamejs/test/layer-0-primitives/cli-coverage.test.js +0 -238
  513. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials-coverage.test.js +0 -319
  514. package/lib/vendor/blamejs/test/layer-0-primitives/keychain-coverage.test.js +0 -0
  515. package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth-coverage.test.js +0 -437
  516. package/lib/vendor/blamejs/test/layer-0-primitives/mcp-coverage.test.js +0 -443
  517. package/lib/vendor/blamejs/test/layer-0-primitives/metrics-coverage.test.js +0 -395
  518. package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy-coverage.test.js +0 -565
  519. package/lib/vendor/blamejs/test/layer-0-primitives/router-coverage.test.js +0 -592
  520. package/lib/vendor/blamejs/test/layer-0-primitives/sql-coverage.test.js +0 -422
  521. package/lib/vendor/blamejs/test/layer-0-primitives/test-coverage.test.js +0 -573
@@ -0,0 +1,352 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) blamejs contributors
3
+ "use strict";
4
+ /**
5
+ * b.crypto adversarial + malformed-input hardening across the public
6
+ * surface — the error/rejection half of the primitives whose happy path
7
+ * lives in crypto.test.js / crypto-envelope.test.js / crypto-base64url.test.js.
8
+ *
9
+ * Every decrypt / verify assertion here drives the exported consumer path
10
+ * (b.crypto.decrypt / b.crypto.verify / b.crypto.decryptPacked) with a
11
+ * tampered, truncated, wrong-key, wrong-suite, or otherwise hostile input
12
+ * built from real ML-KEM / ML-DSA / SLH-DSA / XChaCha20 fixtures — so the
13
+ * signature-PASSING adversarial shapes (implicit-rejection KEM, bit-flipped
14
+ * AEAD, downgraded suite header) are exercised, not merely parse failures.
15
+ * The security contract under test is fail-CLOSED: a decrypt / verify of a
16
+ * tampered input must reject (throw a typed envelope error, or return false)
17
+ * — never accept, never return a value, never leak a raw runtime error past
18
+ * the module's documented "Invalid envelope: ..." contract.
19
+ *
20
+ * Run standalone: `node test/layer-0-primitives/crypto-adversarial.test.js`
21
+ * Or via smoke: `node test/smoke.js`
22
+ */
23
+
24
+ var helpers = require("../helpers");
25
+ var b = helpers.b;
26
+ var check = helpers.check;
27
+
28
+ // ---- Signature verify: an attacker-controlled signature must NEVER verify
29
+ // true and must NEVER throw (the documented contract: false, not an
30
+ // exception, on a malformed signature). Driven for both PQC signature
31
+ // families the framework auto-detects.
32
+ function testVerifyAdversarial() {
33
+ var pair = b.crypto.generateSigningKeyPair(); // ml-dsa-87 default
34
+ var msg = "audit:row=42|action=delete";
35
+ var sig = b.crypto.sign(msg, pair.privateKey);
36
+ check("sign→verify round-trips (ml-dsa-87)", b.crypto.verify(msg, sig, pair.publicKey) === true);
37
+
38
+ // Every tampered / malformed signature shape → false, no throw.
39
+ var bitflip = Buffer.from(sig); bitflip[0] ^= 0xff;
40
+ check("verify rejects a bit-flipped signature", b.crypto.verify(msg, bitflip, pair.publicKey) === false);
41
+ check("verify rejects a truncated signature", b.crypto.verify(msg, sig.subarray(0, 100), pair.publicKey) === false);
42
+ check("verify rejects an oversized signature", b.crypto.verify(msg, Buffer.concat([sig, Buffer.from([1, 2, 3])]), pair.publicKey) === false);
43
+ check("verify rejects an empty signature", b.crypto.verify(msg, Buffer.alloc(0), pair.publicKey) === false);
44
+ check("verify rejects a garbage signature", b.crypto.verify(msg, Buffer.from("not-a-signature-at-all"), pair.publicKey) === false);
45
+ check("verify rejects a hex-string signature", b.crypto.verify(msg, sig.toString("hex"), pair.publicKey) === false);
46
+ check("verify rejects the right sig over tampered data", b.crypto.verify("audit:row=43|action=delete", sig, pair.publicKey) === false);
47
+
48
+ // A signature that is valid under a DIFFERENT key must not verify under this one.
49
+ var other = b.crypto.generateSigningKeyPair();
50
+ check("verify rejects a signature from a different keypair", b.crypto.verify(msg, sig, other.publicKey) === false);
51
+
52
+ // SLH-DSA-SHAKE-256f — the hash-based family. Round-trip + tamper.
53
+ var slh = b.crypto.generateSigningKeyPair("slh-dsa-shake-256f");
54
+ var slhSig = b.crypto.sign(msg, slh.privateKey);
55
+ check("sign→verify round-trips (slh-dsa-shake-256f)", b.crypto.verify(msg, slhSig, slh.publicKey) === true);
56
+ var slhBad = Buffer.from(slhSig); slhBad[5] ^= 0xff;
57
+ check("verify rejects a tampered slh-dsa signature", b.crypto.verify(msg, slhBad, slh.publicKey) === false);
58
+ // The two families produce distinctly-sized signatures (auto-detect works
59
+ // off the key PEM, not a caller-passed algorithm id).
60
+ check("ml-dsa and slh-dsa signatures differ in length", sig.length !== slhSig.length);
61
+
62
+ // sign() with a public key PEM (operator error) surfaces the failure.
63
+ var signThrew = false;
64
+ try { b.crypto.sign(msg, pair.publicKey); } catch (_e) { signThrew = true; }
65
+ check("sign refuses a public key as the signing key", signThrew);
66
+ }
67
+
68
+ // ---- Envelope decrypt error matrix. Each malformed / hostile envelope
69
+ // must reject with the module's typed "Invalid envelope: ..." contract (or
70
+ // a Poly1305 tag failure), driven through the public b.crypto.decrypt.
71
+ function testDecryptErrorMatrix() {
72
+ var keys = b.crypto.generateEncryptionKeyPair();
73
+ var full = Buffer.from(b.crypto.encrypt("hybrid envelope adversarial body", keys), "base64");
74
+
75
+ function decryptThrows(label, buf, keyMaterial, match) {
76
+ var threw = null;
77
+ try { b.crypto.decrypt(buf.toString("base64"), keyMaterial || keys); }
78
+ catch (e) { threw = e; }
79
+ check(label, threw && match.test(threw.message));
80
+ }
81
+
82
+ // Unsupported magic byte (neither 0xE1 legacy nor 0xE2 current).
83
+ decryptThrows("decrypt refuses an unsupported magic byte", Buffer.alloc(12), keys, /unsupported format/);
84
+ // Too short to hold the 4-byte suite header.
85
+ decryptThrows("decrypt refuses a header shorter than 4 bytes", Buffer.from([0xE2, 0x03, 0x02]), keys, /too short/);
86
+ // Valid header but truncated at the 2-byte KEM-ct length prefix.
87
+ decryptThrows("decrypt refuses truncation at the length prefix", full.subarray(0, 5), keys, /truncated/);
88
+ // Suite-substitution on the header: unsupported cipher / KDF / KEM id.
89
+ var badCipher = Buffer.from(full); badCipher[2] = 0x09;
90
+ decryptThrows("decrypt refuses an unsupported cipher id", badCipher, keys, /unsupported cipher/);
91
+ var badKdf = Buffer.from(full); badKdf[3] = 0x07;
92
+ decryptThrows("decrypt refuses an unsupported KDF id", badKdf, keys, /unsupported KDF/);
93
+ var badKem = Buffer.from(full); badKem[1] = 0x7A;
94
+ decryptThrows("decrypt refuses an unsupported KEM id", badKem, keys, /unsupported KEM ID/);
95
+
96
+ // Hybrid (ML-KEM-1024 + P-384) envelope opened without the EC private key.
97
+ decryptThrows("decrypt refuses a hybrid envelope missing the EC private key",
98
+ full, { privateKey: keys.privateKey }, /Hybrid KEM requires EC private key/);
99
+
100
+ // Implicit-rejection KEM: a bit-flip inside the ML-KEM ciphertext yields a
101
+ // DIFFERENT shared secret (FIPS 203 implicit rejection), so the derived key
102
+ // is wrong and the AEAD tag fails — the ciphertext is NOT accepted.
103
+ var tamperedKemCt = Buffer.from(full); tamperedKemCt[7] ^= 0xff;
104
+ decryptThrows("decrypt rejects a tampered KEM ciphertext (implicit rejection → tag failure)",
105
+ tamperedKemCt, keys, /tag|invalid|auth/i);
106
+ // Bit-flip in the trailing AEAD body → Poly1305 failure.
107
+ var tamperedBody = Buffer.from(full); tamperedBody[full.length - 1] ^= 0xff;
108
+ decryptThrows("decrypt rejects a tampered AEAD body", tamperedBody, keys, /tag|invalid|auth/i);
109
+
110
+ // Mismatched recipient — a fresh, unrelated keypair cannot open the envelope.
111
+ var wrong = b.crypto.generateEncryptionKeyPair();
112
+ decryptThrows("decrypt rejects a mismatched recipient keypair", full, wrong, /tag|invalid|auth|Decapsulation/i);
113
+
114
+ // ML-KEM-768 + X25519 envelope opened through the generic dispatcher
115
+ // without the required x25519 private key.
116
+ var p768 = b.crypto.generateMlkem768X25519KeyPair();
117
+ var env768 = Buffer.from(b.crypto.encryptMlkem768X25519("interop body", {
118
+ mlkemPublicKey: p768.mlkemPublicKey,
119
+ x25519PublicKey: p768.x25519PublicKey,
120
+ }), "base64");
121
+ decryptThrows("decrypt refuses an ML-KEM-768 envelope missing x25519PrivateKey",
122
+ env768, { privateKey: p768.mlkemPrivateKey }, /requires x25519PrivateKey/);
123
+ }
124
+
125
+ // ---- Truncated-envelope contract (root-fix regression). A truncated
126
+ // envelope (untrusted ciphertext) must fail with the typed
127
+ // "Invalid envelope: ..." error at EVERY truncation length — never a raw
128
+ // RangeError leaking noble-cipher internals past the documented contract,
129
+ // the same class the _envU16 bounds check already closes for the length
130
+ // prefixes. Before the fix, a truncation landing inside the 24-byte nonce
131
+ // or the 16-byte Poly1305 tag surfaced a raw RangeError.
132
+ function testTruncationNeverLeaksRangeError() {
133
+ var keys = b.crypto.generateEncryptionKeyPair();
134
+ var plaintext = "truncation probe payload — every offset must reject typed";
135
+
136
+ // Exercise all three KEM suites so the shared nonce/tag bounds check is
137
+ // proven across the hybrid, KEM-only, and ML-KEM-768 dispatch arms.
138
+ var p768 = b.crypto.generateMlkem768X25519KeyPair();
139
+ var suites = [
140
+ {
141
+ name: "hybrid ML-KEM-1024 + P-384",
142
+ full: Buffer.from(b.crypto.encrypt(plaintext, keys), "base64"),
143
+ key: keys,
144
+ },
145
+ {
146
+ name: "KEM-only ML-KEM-1024",
147
+ full: Buffer.from(b.crypto.encrypt(plaintext, keys.publicKey), "base64"),
148
+ key: { privateKey: keys.privateKey },
149
+ },
150
+ {
151
+ name: "ML-KEM-768 + X25519",
152
+ full: Buffer.from(b.crypto.encryptMlkem768X25519(plaintext, {
153
+ mlkemPublicKey: p768.mlkemPublicKey,
154
+ x25519PublicKey: p768.x25519PublicKey,
155
+ }), "base64"),
156
+ key: { privateKey: p768.mlkemPrivateKey, x25519PrivateKey: p768.x25519PrivateKey },
157
+ },
158
+ ];
159
+
160
+ for (var s = 0; s < suites.length; s += 1) {
161
+ var suite = suites[s];
162
+ var full = suite.full;
163
+ // Every truncation offset must reject either with the typed
164
+ // "Invalid envelope"/"Invalid packed" contract (a truncation in the header,
165
+ // a length-prefixed KEM ciphertext / ephemeral key, or the nonce/tag
166
+ // region) or with the genuine AEAD "invalid tag" authentication failure (a
167
+ // truncation inside the ciphertext body, where the structure is intact but
168
+ // Poly1305 fails) — NEVER a raw low-level crypto leak: a noble RangeError
169
+ // ("nonce" length) or a Node "Failed to perform decapsulation" / key-parse
170
+ // error from handing an under-length component to Node crypto. The agent's
171
+ // original test caught only RangeError, so the decapsulation leak (a
172
+ // truncation inside the length-prefixed KEM ciphertext, reaching
173
+ // nodeCrypto.decapsulate before the trailing bounds check) slipped through.
174
+ var leaked = null;
175
+ for (var n = full.length - 1; n >= 1 && leaked === null; n -= 1) {
176
+ try { b.crypto.decrypt(full.subarray(0, n).toString("base64"), suite.key); }
177
+ catch (e) {
178
+ var msg = (e && e.message) || String(e);
179
+ if (e instanceof RangeError || !/Invalid envelope|Invalid packed|invalid tag/i.test(msg)) {
180
+ leaked = { n: n, msg: msg };
181
+ }
182
+ }
183
+ }
184
+ check("decrypt rejects every truncation of a " + suite.name +
185
+ " envelope with the typed contract or a genuine AEAD tag failure " +
186
+ "(no raw RangeError / decapsulation error): " +
187
+ (leaked ? leaked.n + "→" + leaked.msg : "clean"),
188
+ leaked === null);
189
+
190
+ // A truncation landing inside the nonce/tag region rejects with the
191
+ // typed envelope error (positive lock on the contract, not just the
192
+ // absence of a RangeError). ctLen = plaintext bytes + 16-byte tag; land
193
+ // 4 bytes into the 24-byte nonce.
194
+ var ctLen = Buffer.byteLength(plaintext, "utf8") + 16;
195
+ var inNonce = full.length - ctLen - 4;
196
+ var nonceErr = null;
197
+ try { b.crypto.decrypt(full.subarray(0, inNonce).toString("base64"), suite.key); }
198
+ catch (e) { nonceErr = e; }
199
+ check("decrypt rejects a nonce-region truncation with the typed envelope error (" + suite.name + ")",
200
+ nonceErr && !(nonceErr instanceof RangeError) && /Invalid envelope/.test(nonceErr.message));
201
+ }
202
+ }
203
+
204
+ // ---- KEM-only fallback + raw mode round-trips (positive paths that reach
205
+ // the encryptMlkemOnly / ML_KEM_1024 decrypt arm and the raw:true return).
206
+ function testKemOnlyAndRawRoundTrips() {
207
+ var keys = b.crypto.generateEncryptionKeyPair();
208
+
209
+ // encrypt() with only an ML-KEM public key (string form) drops to KEM-only
210
+ // and still round-trips through the ML_KEM_1024 decrypt arm.
211
+ var sealedStr = b.crypto.encrypt("kem-only via string pubkey", keys.publicKey);
212
+ check("KEM-only (string pubkey) round-trips",
213
+ b.crypto.decrypt(sealedStr, { privateKey: keys.privateKey }) === "kem-only via string pubkey");
214
+
215
+ // encrypt() with an object carrying only publicKey (no ecPublicKey) takes
216
+ // the same fallback (and emits the one-shot hybrid_disabled audit).
217
+ var sealedObj = b.crypto.encrypt("kem-only via object", { publicKey: keys.publicKey });
218
+ check("KEM-only (object, no ecPublicKey) round-trips",
219
+ b.crypto.decrypt(sealedObj, { privateKey: keys.privateKey }) === "kem-only via object");
220
+
221
+ // decrypt accepts the private key as a bare PEM string too (the
222
+ // `typeof privateKeys === "string" ? privateKeys : privateKeys.privateKey`
223
+ // shape) for the KEM-only suite.
224
+ check("KEM-only decrypt accepts a bare PEM-string private key",
225
+ b.crypto.decrypt(sealedStr, keys.privateKey) === "kem-only via string pubkey");
226
+
227
+ // raw:true returns the decrypted Buffer rather than a utf8 string.
228
+ var sealedHybrid = b.crypto.encrypt("binary-carrier body", keys);
229
+ var rawOut = b.crypto.decrypt(sealedHybrid, keys, { raw: true });
230
+ check("decrypt raw:true returns a Buffer", Buffer.isBuffer(rawOut) && rawOut.toString("utf8") === "binary-carrier body");
231
+ }
232
+
233
+ // ---- Symmetric packed decrypt error matrix (b.crypto.decryptPacked).
234
+ function testDecryptPackedErrors() {
235
+ var key = b.crypto.generateBytes(32);
236
+ var packed = b.crypto.encryptPacked(Buffer.from("row-42 column-ssn", "utf8"), key);
237
+
238
+ // Round-trip sanity (the happy path lives elsewhere, but anchor the fixture).
239
+ check("encryptPacked→decryptPacked round-trips",
240
+ b.crypto.decryptPacked(packed, key).toString("utf8") === "row-42 column-ssn");
241
+
242
+ // Unsupported format byte.
243
+ var badFmt = Buffer.from(packed); badFmt[0] = 0x09;
244
+ var fmtThrew = null;
245
+ try { b.crypto.decryptPacked(badFmt, key); } catch (e) { fmtThrew = e; }
246
+ check("decryptPacked refuses an unsupported format byte",
247
+ fmtThrew && /unsupported version/.test(fmtThrew.message));
248
+
249
+ // AAD binding: a ciphertext sealed under one AAD cannot open under another.
250
+ var aadPacked = b.crypto.encryptPacked(Buffer.from("bound cell", "utf8"), key, Buffer.from("patients|42|ssn"));
251
+ var aadThrew = null;
252
+ try { b.crypto.decryptPacked(aadPacked, key, Buffer.from("patients|43|ssn")); } catch (e) { aadThrew = e; }
253
+ check("decryptPacked rejects a mismatched AAD (context binding holds)",
254
+ aadThrew && /tag|invalid|auth/i.test(aadThrew.message));
255
+
256
+ // Truncated packed blob (untrusted / corrupt storage cell) — must reject
257
+ // with the typed "Invalid packed format" contract, not a raw RangeError
258
+ // from the nonce/ciphertext subarray (same root as the envelope bounds
259
+ // check).
260
+ var leaked = null;
261
+ for (var n = packed.length - 1; n >= 1 && leaked === null; n -= 1) {
262
+ try { b.crypto.decryptPacked(packed.subarray(0, n), key); }
263
+ catch (e) { if (e instanceof RangeError) leaked = { n: n, msg: e.message }; }
264
+ }
265
+ check("decryptPacked never leaks a raw RangeError on a truncated blob", leaked === null);
266
+ var shortThrew = null;
267
+ try { b.crypto.decryptPacked(Buffer.from([0x02]), key); } catch (e) { shortThrew = e; }
268
+ check("decryptPacked rejects a too-short blob with the typed format error",
269
+ shortThrew && !(shortThrew instanceof RangeError) && /Invalid packed format/.test(shortThrew.message));
270
+ }
271
+
272
+ // ---- base64url strict canonicalization (CWE-347 / CWE-1286). The strict
273
+ // decoder is the signature-canonicalization boundary — a length-mod-4-of-1
274
+ // shape is impossible for any conforming encoder and must be refused, while
275
+ // {strict:false} lets a documented lossy legacy payload through.
276
+ function testBase64UrlCanonicalization() {
277
+ var lenOneThrew = null;
278
+ try { b.crypto.fromBase64Url("aGVsbG8AA"); } catch (e) { lenOneThrew = e; } // 9 chars → len % 4 === 1
279
+ check("fromBase64Url (strict) refuses a length-mod-4-of-1 encoding",
280
+ lenOneThrew instanceof TypeError && /length %% 4 === 1|% 4/.test(lenOneThrew.message));
281
+
282
+ // Strict mode still accepts the canonical PADDED form (RFC 4648 §5 allows
283
+ // optional `=` padding) — exercises the trailing-`=` strip before the
284
+ // length check. "AQIDBA==" decodes to the 4 bytes [1,2,3,4].
285
+ var padded = b.crypto.fromBase64Url("AQIDBA==");
286
+ check("fromBase64Url (strict) accepts canonical padded input",
287
+ Buffer.isBuffer(padded) && padded.equals(Buffer.from([1, 2, 3, 4])));
288
+
289
+ // {strict:false} tolerates non-canonical input (opt-out escape hatch).
290
+ check("fromBase64Url {strict:false} tolerates non-canonical garbage",
291
+ Buffer.isBuffer(b.crypto.fromBase64Url("!!!", { strict: false })));
292
+ check("fromBase64Url {strict:false} still decodes a canonical value",
293
+ b.crypto.fromBase64Url("aGVsbG8", { strict: false }).toString("utf8") === "hello");
294
+ }
295
+
296
+ // ---- Constant-time compare entry-tier validation (b.crypto.timingSafeEqual).
297
+ function testTimingSafeEqualEntryTier() {
298
+ // Length mismatch returns false immediately (length is not a secret).
299
+ check("timingSafeEqual returns false on length mismatch",
300
+ b.crypto.timingSafeEqual("abc", "abcd") === false);
301
+ // Non-string / non-Buffer arguments throw at the entry tier so a
302
+ // toString-poisoned caller cannot redirect the compare through arbitrary bytes.
303
+ var aThrew = null;
304
+ try { b.crypto.timingSafeEqual(42, "x"); } catch (e) { aThrew = e; }
305
+ check("timingSafeEqual refuses a non-Buffer/non-string first argument",
306
+ aThrew instanceof TypeError && /argument 'a'/.test(aThrew.message));
307
+ var bThrew = null;
308
+ try { b.crypto.timingSafeEqual("x", null); } catch (e) { bThrew = e; }
309
+ check("timingSafeEqual refuses a null second argument",
310
+ bThrew instanceof TypeError && /argument 'b'/.test(bThrew.message));
311
+ }
312
+
313
+ // ---- Remaining config-time throws on the hashing surface driven here for
314
+ // completeness (namespaceHash CRLF-in-value, hashCertFingerprint oversized
315
+ // PEM). Both are entry-tier rejections that keep hostile bytes out of
316
+ // derived-column inputs / the ReDoS-bounded PEM parser.
317
+ function testHashingSurfaceRejections() {
318
+ var crlfThrew = null;
319
+ try { b.crypto.namespaceHash("bj-email", "line1\r\nline2"); } catch (e) { crlfThrew = e; }
320
+ check("namespaceHash refuses a CR/LF string value (log-injection barrier)",
321
+ crlfThrew instanceof TypeError && /CR \/ LF/.test(crlfThrew.message));
322
+
323
+ var oversizedThrew = null;
324
+ try {
325
+ var big = "-----BEGIN CERTIFICATE-----\n" + new Array(70001).join("A") + "\n-----END CERTIFICATE-----";
326
+ b.crypto.hashCertFingerprint(big);
327
+ } catch (e) { oversizedThrew = e; }
328
+ check("hashCertFingerprint refuses an oversized PEM (ReDoS bound)",
329
+ oversizedThrew instanceof TypeError && /exceeds 64 KiB/.test(oversizedThrew.message));
330
+
331
+ // generateToken default length is 32 bytes → 64 hex chars.
332
+ var tok = b.crypto.generateToken();
333
+ check("generateToken default is 64 hex chars (32 bytes)", typeof tok === "string" && tok.length === 64 && /^[0-9a-f]+$/.test(tok));
334
+ }
335
+
336
+ function run() {
337
+ testVerifyAdversarial();
338
+ testDecryptErrorMatrix();
339
+ testTruncationNeverLeaksRangeError();
340
+ testKemOnlyAndRawRoundTrips();
341
+ testDecryptPackedErrors();
342
+ testBase64UrlCanonicalization();
343
+ testTimingSafeEqualEntryTier();
344
+ testHashingSurfaceRejections();
345
+ }
346
+
347
+ module.exports = { run: run };
348
+
349
+ if (require.main === module) {
350
+ try { run(); console.log("[crypto-adversarial] OK — " + helpers.getChecks() + " checks"); }
351
+ catch (e) { console.error(e && e.stack || e); process.exit(1); }
352
+ }
@@ -151,6 +151,38 @@ async function run() {
151
151
  catch (e) { cnhBadTruncFloat = /truncateBytes must be/.test(e.message); }
152
152
  check("computeNamespacedHash non-integer truncateBytes throws", cnhBadTruncFloat);
153
153
 
154
+ // ---- MAC-key sealed-file integrity: a plaintext (non-sealed) file
155
+ // planted on disk must be REFUSED, never accepted as the secret MAC
156
+ // key. vault.unseal() returns a value that lacks the "vault:" prefix
157
+ // VERBATIM (idempotent read passthrough), so without a load-bearing
158
+ // prefix check the reader would treat an attacker-planted plaintext
159
+ // base64 key as the MAC key — defeating the sealed-at-rest guarantee a
160
+ // disk-write-only attacker (no vault passphrase, so unable to forge a
161
+ // genuine seal) otherwise cannot bypass. db.js applies the same
162
+ // prefix check to db.key.enc; this is its sibling. ----
163
+ var macDir = fs.mkdtempSync(path.join(os.tmpdir(), "blamejs-cf-dh-mac-"));
164
+ b.vault._resetForTest();
165
+ await b.vault.init({ mode: "plaintext", dataDir: macDir });
166
+ var legitMac = b.vault.getDerivedHashMacKey();
167
+ check("MAC key round-trips from a genuine sealed file",
168
+ Buffer.isBuffer(legitMac) && legitMac.length === 32);
169
+ // Attacker overwrites the sealed file with a KNOWN plaintext base64 key
170
+ // (32 bytes → passes the length check) that carries no "vault:" prefix.
171
+ var macFile = path.join(macDir, "vault.derived-hash-mac.sealed");
172
+ var knownKey = Buffer.alloc(32, 0x41);
173
+ fs.writeFileSync(macFile, knownKey.toString("base64"));
174
+ // Drop the in-process cache + re-init so the tampered file is re-read.
175
+ b.vault._resetForTest();
176
+ await b.vault.init({ mode: "plaintext", dataDir: macDir });
177
+ var macRefused = false;
178
+ var forgedMac = null;
179
+ try { forgedMac = b.vault.getDerivedHashMacKey(); }
180
+ catch (e) { macRefused = /corrupt|sealed|prefix/i.test(e.message); }
181
+ check("getDerivedHashMacKey refuses a plaintext (non-sealed) MAC file — " +
182
+ "not the attacker's known key",
183
+ macRefused && forgedMac === null);
184
+ b.vault._resetForTest();
185
+
154
186
  console.log("OK — crypto-field derived-hash tests");
155
187
  }
156
188