leviathan-crypto 2.0.1 → 3.0.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 (312) hide show
  1. package/CLAUDE.md +88 -281
  2. package/LICENSE +4 -0
  3. package/README.md +275 -87
  4. package/dist/aes/aes-cbc.d.ts +40 -0
  5. package/dist/aes/aes-cbc.js +158 -0
  6. package/dist/aes/aes-ctr.d.ts +50 -0
  7. package/dist/aes/aes-ctr.js +141 -0
  8. package/dist/aes/aes-gcm-siv.d.ts +67 -0
  9. package/dist/aes/aes-gcm-siv.js +217 -0
  10. package/dist/aes/aes-gcm.d.ts +61 -0
  11. package/dist/aes/aes-gcm.js +226 -0
  12. package/dist/aes/cipher-suite.d.ts +21 -0
  13. package/dist/aes/cipher-suite.js +179 -0
  14. package/dist/aes/embedded.d.ts +1 -0
  15. package/dist/aes/embedded.js +26 -0
  16. package/dist/aes/generator.d.ts +14 -0
  17. package/dist/aes/generator.js +103 -0
  18. package/dist/aes/index.d.ts +58 -0
  19. package/dist/aes/index.js +125 -0
  20. package/dist/aes/ops.d.ts +60 -0
  21. package/dist/aes/ops.js +164 -0
  22. package/dist/aes/pool-worker.d.ts +1 -0
  23. package/dist/aes/pool-worker.js +92 -0
  24. package/dist/aes/types.d.ts +1 -0
  25. package/dist/aes/types.js +23 -0
  26. package/dist/aes.wasm +0 -0
  27. package/dist/blake3/embedded.d.ts +1 -0
  28. package/dist/blake3/embedded.js +26 -0
  29. package/dist/blake3/index.d.ts +143 -0
  30. package/dist/blake3/index.js +620 -0
  31. package/dist/blake3/types.d.ts +102 -0
  32. package/dist/blake3/types.js +31 -0
  33. package/dist/blake3/validate.d.ts +29 -0
  34. package/dist/blake3/validate.js +80 -0
  35. package/dist/blake3.wasm +0 -0
  36. package/dist/chacha20/cipher-suite.d.ts +10 -0
  37. package/dist/chacha20/cipher-suite.js +98 -13
  38. package/dist/chacha20/generator.d.ts +12 -0
  39. package/dist/chacha20/generator.js +91 -0
  40. package/dist/chacha20/index.d.ts +100 -3
  41. package/dist/chacha20/index.js +169 -35
  42. package/dist/chacha20/ops.d.ts +57 -6
  43. package/dist/chacha20/ops.js +107 -27
  44. package/dist/chacha20/pool-worker.js +14 -0
  45. package/dist/chacha20/types.d.ts +1 -32
  46. package/dist/cte-wasm.d.ts +1 -0
  47. package/dist/cte-wasm.js +3 -0
  48. package/dist/cte.wasm +0 -0
  49. package/dist/curve25519.wasm +0 -0
  50. package/dist/ecdsa/der.d.ts +23 -0
  51. package/dist/ecdsa/der.js +192 -0
  52. package/dist/ecdsa/ecprivatekey-der.d.ts +32 -0
  53. package/dist/ecdsa/ecprivatekey-der.js +230 -0
  54. package/dist/ecdsa/embedded.d.ts +1 -0
  55. package/dist/ecdsa/embedded.js +25 -0
  56. package/dist/ecdsa/index.d.ts +124 -0
  57. package/dist/ecdsa/index.js +366 -0
  58. package/dist/ecdsa/types.d.ts +31 -0
  59. package/dist/ecdsa/types.js +28 -0
  60. package/dist/ecdsa/validate.d.ts +18 -0
  61. package/dist/ecdsa/validate.js +92 -0
  62. package/dist/ed25519/embedded.d.ts +1 -0
  63. package/dist/ed25519/embedded.js +31 -0
  64. package/dist/ed25519/index.d.ts +70 -0
  65. package/dist/ed25519/index.js +308 -0
  66. package/dist/ed25519/types.d.ts +27 -0
  67. package/dist/ed25519/types.js +27 -0
  68. package/dist/ed25519/validate.d.ts +7 -0
  69. package/dist/ed25519/validate.js +77 -0
  70. package/dist/embedded/aes-pool-worker.d.ts +1 -0
  71. package/dist/embedded/aes-pool-worker.js +5 -0
  72. package/dist/embedded/aes.d.ts +1 -0
  73. package/dist/embedded/aes.js +3 -0
  74. package/dist/embedded/blake3.d.ts +1 -0
  75. package/dist/embedded/blake3.js +3 -0
  76. package/dist/embedded/chacha20-pool-worker.d.ts +1 -0
  77. package/dist/embedded/chacha20-pool-worker.js +5 -0
  78. package/dist/embedded/chacha20.d.ts +1 -1
  79. package/dist/embedded/chacha20.js +2 -2
  80. package/dist/embedded/curve25519.d.ts +1 -0
  81. package/dist/embedded/curve25519.js +3 -0
  82. package/dist/embedded/mldsa.d.ts +1 -0
  83. package/dist/embedded/mldsa.js +3 -0
  84. package/dist/embedded/mlkem.d.ts +1 -0
  85. package/dist/embedded/mlkem.js +3 -0
  86. package/dist/embedded/p256.d.ts +1 -0
  87. package/dist/embedded/p256.js +3 -0
  88. package/dist/embedded/serpent-pool-worker.d.ts +1 -0
  89. package/dist/embedded/serpent-pool-worker.js +5 -0
  90. package/dist/embedded/serpent.d.ts +1 -1
  91. package/dist/embedded/serpent.js +2 -2
  92. package/dist/embedded/sha2.d.ts +1 -1
  93. package/dist/embedded/sha2.js +2 -2
  94. package/dist/embedded/sha3.d.ts +1 -1
  95. package/dist/embedded/sha3.js +2 -2
  96. package/dist/embedded/slhdsa.d.ts +1 -0
  97. package/dist/embedded/slhdsa.js +3 -0
  98. package/dist/errors.d.ts +92 -1
  99. package/dist/errors.js +111 -1
  100. package/dist/fortuna.d.ts +18 -12
  101. package/dist/fortuna.js +166 -99
  102. package/dist/index.d.ts +42 -11
  103. package/dist/index.js +65 -20
  104. package/dist/init.d.ts +1 -3
  105. package/dist/init.js +73 -7
  106. package/dist/keccak/embedded.js +1 -1
  107. package/dist/keccak/index.d.ts +2 -0
  108. package/dist/keccak/index.js +4 -2
  109. package/dist/loader.d.ts +1 -19
  110. package/dist/loader.js +26 -32
  111. package/dist/merkle/blake3-tree.d.ts +35 -0
  112. package/dist/merkle/blake3-tree.js +187 -0
  113. package/dist/merkle/checkpoint.d.ts +58 -0
  114. package/dist/merkle/checkpoint.js +217 -0
  115. package/dist/merkle/index.d.ts +19 -0
  116. package/dist/merkle/index.js +37 -0
  117. package/dist/merkle/merkle-log.d.ts +130 -0
  118. package/dist/merkle/merkle-log.js +207 -0
  119. package/dist/merkle/merkle-verifier.d.ts +126 -0
  120. package/dist/merkle/merkle-verifier.js +296 -0
  121. package/dist/merkle/proof.d.ts +70 -0
  122. package/dist/merkle/proof.js +300 -0
  123. package/dist/merkle/sha256-tree.d.ts +33 -0
  124. package/dist/merkle/sha256-tree.js +145 -0
  125. package/dist/merkle/signed-log.d.ts +156 -0
  126. package/dist/merkle/signed-log.js +356 -0
  127. package/dist/merkle/signed-note.d.ts +309 -0
  128. package/dist/merkle/signed-note.js +648 -0
  129. package/dist/merkle/sth.d.ts +31 -0
  130. package/dist/merkle/sth.js +31 -0
  131. package/dist/merkle/storage.d.ts +40 -0
  132. package/dist/merkle/storage.js +71 -0
  133. package/dist/merkle/tree.d.ts +68 -0
  134. package/dist/merkle/tree.js +94 -0
  135. package/dist/mldsa/embedded.d.ts +1 -0
  136. package/dist/{kyber → mldsa}/embedded.js +5 -5
  137. package/dist/mldsa/expand.d.ts +53 -0
  138. package/dist/mldsa/expand.js +188 -0
  139. package/dist/mldsa/format.d.ts +16 -0
  140. package/dist/mldsa/format.js +68 -0
  141. package/dist/mldsa/hashvariant.d.ts +32 -0
  142. package/dist/mldsa/hashvariant.js +248 -0
  143. package/dist/mldsa/index.d.ts +142 -0
  144. package/dist/mldsa/index.js +463 -0
  145. package/dist/mldsa/keygen.d.ts +16 -0
  146. package/dist/mldsa/keygen.js +232 -0
  147. package/dist/mldsa/params.d.ts +21 -0
  148. package/dist/mldsa/params.js +55 -0
  149. package/dist/mldsa/sha3-helpers.d.ts +30 -0
  150. package/dist/mldsa/sha3-helpers.js +124 -0
  151. package/dist/mldsa/sign.d.ts +36 -0
  152. package/dist/mldsa/sign.js +380 -0
  153. package/dist/mldsa/types.d.ts +91 -0
  154. package/dist/mldsa/types.js +25 -0
  155. package/dist/mldsa/validate.d.ts +55 -0
  156. package/dist/mldsa/validate.js +125 -0
  157. package/dist/mldsa/verify.d.ts +29 -0
  158. package/dist/mldsa/verify.js +269 -0
  159. package/dist/mldsa.wasm +0 -0
  160. package/dist/mlkem/embedded.d.ts +1 -0
  161. package/dist/mlkem/embedded.js +27 -0
  162. package/dist/mlkem/indcpa.d.ts +49 -0
  163. package/dist/{kyber → mlkem}/indcpa.js +48 -48
  164. package/dist/mlkem/index.d.ts +37 -0
  165. package/dist/{kyber → mlkem}/index.js +41 -31
  166. package/dist/mlkem/kem.d.ts +21 -0
  167. package/dist/{kyber → mlkem}/kem.js +48 -13
  168. package/dist/{kyber → mlkem}/params.d.ts +4 -4
  169. package/dist/{kyber → mlkem}/params.js +2 -2
  170. package/dist/mlkem/suite.d.ts +12 -0
  171. package/dist/{kyber → mlkem}/suite.js +17 -12
  172. package/dist/{kyber → mlkem}/types.d.ts +4 -3
  173. package/dist/{kyber → mlkem}/types.js +1 -1
  174. package/dist/mlkem/validate.d.ts +23 -0
  175. package/dist/{kyber → mlkem}/validate.js +24 -20
  176. package/dist/{kyber.wasm → mlkem.wasm} +0 -0
  177. package/dist/p256.wasm +0 -0
  178. package/dist/ratchet/index.d.ts +8 -0
  179. package/dist/ratchet/index.js +38 -0
  180. package/dist/ratchet/kdf-chain.d.ts +13 -0
  181. package/dist/ratchet/kdf-chain.js +85 -0
  182. package/dist/ratchet/ratchet-keypair.d.ts +9 -0
  183. package/dist/ratchet/ratchet-keypair.js +61 -0
  184. package/dist/ratchet/root-kdf.d.ts +4 -0
  185. package/dist/ratchet/root-kdf.js +124 -0
  186. package/dist/ratchet/skipped-key-store.d.ts +14 -0
  187. package/dist/ratchet/skipped-key-store.js +154 -0
  188. package/dist/ratchet/types.d.ts +36 -0
  189. package/dist/ratchet/types.js +26 -0
  190. package/dist/serpent/cipher-suite.d.ts +10 -0
  191. package/dist/serpent/cipher-suite.js +144 -56
  192. package/dist/serpent/generator.d.ts +12 -0
  193. package/dist/serpent/generator.js +97 -0
  194. package/dist/serpent/index.d.ts +62 -1
  195. package/dist/serpent/index.js +97 -21
  196. package/dist/serpent/pool-worker.js +28 -102
  197. package/dist/serpent/serpent-cbc.d.ts +16 -6
  198. package/dist/serpent/serpent-cbc.js +58 -37
  199. package/dist/serpent/shared-ops.d.ts +63 -0
  200. package/dist/serpent/shared-ops.js +178 -0
  201. package/dist/serpent/types.d.ts +1 -5
  202. package/dist/serpent.wasm +0 -0
  203. package/dist/sha2/hash.d.ts +2 -0
  204. package/dist/sha2/hash.js +53 -0
  205. package/dist/sha2/hkdf.js +5 -5
  206. package/dist/sha2/index.d.ts +22 -1
  207. package/dist/sha2/index.js +80 -11
  208. package/dist/sha2/types.d.ts +41 -2
  209. package/dist/sha2.wasm +0 -0
  210. package/dist/sha3/hash.d.ts +2 -0
  211. package/dist/sha3/hash.js +53 -0
  212. package/dist/sha3/index.d.ts +87 -3
  213. package/dist/sha3/index.js +317 -19
  214. package/dist/sha3/kmac.d.ts +121 -0
  215. package/dist/sha3/kmac.js +800 -0
  216. package/dist/sha3.wasm +0 -0
  217. package/dist/shared/pkcs7.d.ts +22 -0
  218. package/dist/shared/pkcs7.js +84 -0
  219. package/dist/sign/ctx.d.ts +41 -0
  220. package/dist/sign/ctx.js +102 -0
  221. package/dist/sign/envelope.d.ts +45 -0
  222. package/dist/sign/envelope.js +152 -0
  223. package/dist/sign/hasher.d.ts +9 -0
  224. package/dist/sign/hasher.js +132 -0
  225. package/dist/sign/index.d.ts +11 -0
  226. package/dist/sign/index.js +34 -0
  227. package/dist/sign/sign-stream.d.ts +25 -0
  228. package/dist/sign/sign-stream.js +112 -0
  229. package/dist/sign/suites/ecdsa-p256.d.ts +2 -0
  230. package/dist/sign/suites/ecdsa-p256.js +120 -0
  231. package/dist/sign/suites/ed25519.d.ts +3 -0
  232. package/dist/sign/suites/ed25519.js +165 -0
  233. package/dist/sign/suites/hybrid-classical.d.ts +23 -0
  234. package/dist/sign/suites/hybrid-classical.js +526 -0
  235. package/dist/sign/suites/hybrid-pq.d.ts +4 -0
  236. package/dist/sign/suites/hybrid-pq.js +234 -0
  237. package/dist/sign/suites/mldsa.d.ts +7 -0
  238. package/dist/sign/suites/mldsa.js +161 -0
  239. package/dist/sign/suites/slhdsa.d.ts +7 -0
  240. package/dist/sign/suites/slhdsa.js +176 -0
  241. package/dist/sign/types.d.ts +106 -0
  242. package/dist/sign/types.js +28 -0
  243. package/dist/sign/verify-stream.d.ts +30 -0
  244. package/dist/sign/verify-stream.js +227 -0
  245. package/dist/slhdsa/embedded.d.ts +1 -0
  246. package/dist/slhdsa/embedded.js +26 -0
  247. package/dist/slhdsa/index.d.ts +149 -0
  248. package/dist/slhdsa/index.js +493 -0
  249. package/dist/slhdsa/params.d.ts +26 -0
  250. package/dist/slhdsa/params.js +70 -0
  251. package/dist/slhdsa/prehash.d.ts +68 -0
  252. package/dist/slhdsa/prehash.js +307 -0
  253. package/dist/slhdsa/sign.d.ts +39 -0
  254. package/dist/slhdsa/sign.js +116 -0
  255. package/dist/slhdsa/types.d.ts +129 -0
  256. package/dist/slhdsa/types.js +27 -0
  257. package/dist/slhdsa/validate.d.ts +60 -0
  258. package/dist/slhdsa/validate.js +127 -0
  259. package/dist/slhdsa/verify.d.ts +32 -0
  260. package/dist/slhdsa/verify.js +107 -0
  261. package/dist/slhdsa.wasm +0 -0
  262. package/dist/stream/header.js +8 -8
  263. package/dist/stream/index.d.ts +1 -0
  264. package/dist/stream/index.js +1 -0
  265. package/dist/stream/open-stream.js +65 -22
  266. package/dist/stream/seal-stream-pool.d.ts +2 -0
  267. package/dist/stream/seal-stream-pool.js +100 -33
  268. package/dist/stream/seal-stream.d.ts +1 -1
  269. package/dist/stream/seal-stream.js +48 -19
  270. package/dist/stream/seal.js +6 -6
  271. package/dist/stream/types.d.ts +3 -1
  272. package/dist/stream/types.js +1 -1
  273. package/dist/types.d.ts +22 -1
  274. package/dist/types.js +1 -1
  275. package/dist/utils.d.ts +9 -10
  276. package/dist/utils.js +84 -59
  277. package/dist/wasm-source.d.ts +9 -8
  278. package/dist/wasm-source.js +1 -1
  279. package/dist/x25519/embedded.d.ts +1 -0
  280. package/dist/x25519/embedded.js +31 -0
  281. package/dist/x25519/index.d.ts +43 -0
  282. package/dist/x25519/index.js +159 -0
  283. package/dist/x25519/types.d.ts +25 -0
  284. package/dist/x25519/types.js +27 -0
  285. package/dist/x25519/validate.d.ts +2 -0
  286. package/dist/x25519/validate.js +39 -0
  287. package/package.json +123 -64
  288. package/SECURITY.md +0 -276
  289. package/dist/ct-wasm.d.ts +0 -1
  290. package/dist/ct-wasm.js +0 -3
  291. package/dist/ct.wasm +0 -0
  292. package/dist/docs/aead.md +0 -323
  293. package/dist/docs/architecture.md +0 -932
  294. package/dist/docs/argon2id.md +0 -302
  295. package/dist/docs/chacha20.md +0 -674
  296. package/dist/docs/exports.md +0 -241
  297. package/dist/docs/fortuna.md +0 -313
  298. package/dist/docs/init.md +0 -302
  299. package/dist/docs/loader.md +0 -161
  300. package/dist/docs/serpent.md +0 -519
  301. package/dist/docs/sha2.md +0 -613
  302. package/dist/docs/sha3.md +0 -546
  303. package/dist/docs/types.md +0 -276
  304. package/dist/docs/utils.md +0 -367
  305. package/dist/embedded/kyber.d.ts +0 -1
  306. package/dist/embedded/kyber.js +0 -3
  307. package/dist/kyber/embedded.d.ts +0 -1
  308. package/dist/kyber/indcpa.d.ts +0 -49
  309. package/dist/kyber/index.d.ts +0 -38
  310. package/dist/kyber/kem.d.ts +0 -21
  311. package/dist/kyber/suite.d.ts +0 -13
  312. package/dist/kyber/validate.d.ts +0 -19
@@ -0,0 +1,308 @@
1
+ // ▄▄▄▄▄▄▄▄▄▄
2
+ // ▄████████████████████▄▄ ▒ ▄▀▀ ▒ ▒ █ ▄▀▄ ▀█▀ █ ▒ ▄▀▄ █▀▄
3
+ // ▄██████████████████████ ▀████▄ ▓ ▓▀ ▓ ▓ ▓ ▓▄▓ ▓ ▓▀▓ ▓▄▓ ▓ ▓
4
+ // ▄█████████▀▀▀ ▀███████▄▄███████▌ ▀▄ ▀▄▄ ▀▄▀ ▒ ▒ ▒ ▒ ▒ █ ▒ ▒ ▒ █
5
+ // ▐████████▀ ▄▄▄▄ ▀████████▀██▀█▌
6
+ // ████████ ███▀▀ ████▀ █▀ █▀ Leviathan Crypto Library
7
+ // ███████▌ ▀██▀ ███
8
+ // ███████ ▀███ ▀██ ▀█▄ Repository & Mirror:
9
+ // ▀██████ ▄▄██ ▀▀ ██▄ github.com/xero/leviathan-crypto
10
+ // ▀█████▄ ▄██▄ ▄▀▄▀ unpkg.com/leviathan-crypto
11
+ // ▀████▄ ▄██▄
12
+ // ▐████ ▐███ Author: xero (https://x-e.ro)
13
+ // ▄▄██████████ ▐███ ▄▄ License: MIT
14
+ // ▄██▀▀▀▀▀▀▀▀▀▀ ▄████ ▄██▀
15
+ // ▄▀ ▄▄█████████▄▄ ▀▀▀▀▀ ▄███ This file is provided completely
16
+ // ▄██████▀▀▀▀▀▀██████▄ ▀▄▄▄▄████▀ free, "as is", and without
17
+ // ████▀ ▄▄▄▄▄▄▄ ▀████▄ ▀█████▀ ▄▄▄▄ warranty of any kind. The author
18
+ // █████▄▄█████▀▀▀▀▀▀▄ ▀███▄ ▄████ assumes absolutely no liability
19
+ // ▀██████▀ ▀████▄▄▄████▀ for its {ab,mis,}use.
20
+ // ▀█████▀▀
21
+ //
22
+ // src/ts/ed25519/index.ts
23
+ //
24
+ // Ed25519 public API. RFC 8032 §5.1 pure + §5.1.7 prehash. Strict
25
+ // verification per FIPS 186-5 §7.6.4. Ed25519 and X25519 share the
26
+ // curve25519 WASM module; `ed25519Init` and `x25519Init` both target it
27
+ // and de-dupe at the init() layer.
28
+ import { getInstance, initModule, isInitialized, _assertNotOwned } from '../init.js';
29
+ import { randomBytes, wipe } from '../utils.js';
30
+ import { SigningError } from '../errors.js';
31
+ import { validateSeed, validateSecretKey, validatePublicKey, validateMessage, validateSignature, validateContext, validateDigest, } from './validate.js';
32
+ /**
33
+ * Initialise the curve25519 WASM module under the `ed25519` alias.
34
+ * Equivalent to `x25519Init(source)`; both target the same WASM module
35
+ * and the init layer de-dupes when given identical sources.
36
+ */
37
+ export async function ed25519Init(source) {
38
+ return initModule('curve25519', source);
39
+ }
40
+ export { isInitialized };
41
+ // ── I/O staging layout ─────────────────────────────────────────────────────
42
+ //
43
+ // The curve25519 module's own mutable buffer region ends at BUFFER_END
44
+ // = 7836 (see src/asm/curve25519/buffers.ts). The TS layer stages
45
+ // caller-supplied inputs and reads outputs from a fixed region above
46
+ // that. The module is allocated 2 pages (131072 bytes); the I/O region
47
+ // stretches from 8192 to the end of linear memory.
48
+ //
49
+ // The WASM functions read every input once at the start of execution
50
+ // before touching any of these slots, so co-locating sign's caller pk
51
+ // with the WASM's internal ED25519_PK_CHECK scratch slot is safe even
52
+ // though they are different addresses (pkOff is read before the WASM
53
+ // writes its own derived pk).
54
+ const IO_BASE = 8192;
55
+ const SEED_STAGE = IO_BASE; // 32 bytes
56
+ const PK_STAGE = IO_BASE + 32; // 32 bytes
57
+ const SIG_STAGE = IO_BASE + 64; // 64 bytes
58
+ const DIGEST_STAGE = IO_BASE + 128; // 64 bytes
59
+ const CTX_STAGE = IO_BASE + 192; // up to 255 bytes (round up to 256)
60
+ const MSG_STAGE = IO_BASE + 448; // remainder
61
+ function maxMsgLen(memory) {
62
+ return memory.buffer.byteLength - MSG_STAGE;
63
+ }
64
+ function ioWipe(mx) {
65
+ // Zero the entire TS-managed staging region. wipeBuffers covers
66
+ // MUTABLE_START..BUFFER_END only, the I/O region above lives outside
67
+ // that range and must be scrubbed by the wrapper.
68
+ new Uint8Array(mx.memory.buffer).fill(0, IO_BASE, mx.memory.buffer.byteLength);
69
+ }
70
+ function rethrowTrap(err, discriminator, message) {
71
+ // The WASM module's fault-injection check (sign's pk-mismatch path)
72
+ // terminates with `unreachable`, which surfaces as
73
+ // WebAssembly.RuntimeError. Re-throw any such trap as a typed
74
+ // SigningError so callers can branch on it.
75
+ if (err instanceof WebAssembly.RuntimeError)
76
+ throw new SigningError(discriminator, message);
77
+ throw err;
78
+ }
79
+ export class Ed25519 {
80
+ constructor() {
81
+ if (!isInitialized('curve25519'))
82
+ throw new Error('leviathan-crypto: call init({ ed25519: ... }) before using Ed25519');
83
+ }
84
+ get mx() {
85
+ return getInstance('curve25519').exports;
86
+ }
87
+ /**
88
+ * Deterministic Ed25519 key generation, RFC 8032 §5.1.5.
89
+ * @param seed 32-byte secret seed
90
+ * @returns 32-byte verifying key and a fresh 32-byte secret-key copy
91
+ * of the supplied seed (the spec defines sk = seed).
92
+ */
93
+ keygenDerand(seed) {
94
+ _assertNotOwned('curve25519');
95
+ validateSeed(seed);
96
+ const mx = this.mx;
97
+ const mem = new Uint8Array(mx.memory.buffer);
98
+ mem.set(seed, SEED_STAGE);
99
+ try {
100
+ mx.ed25519Keygen(SEED_STAGE, PK_STAGE);
101
+ const publicKey = mem.slice(PK_STAGE, PK_STAGE + 32);
102
+ const secretKey = new Uint8Array(32);
103
+ secretKey.set(seed);
104
+ return { publicKey, secretKey };
105
+ }
106
+ finally {
107
+ ioWipe(mx);
108
+ mx.wipeBuffers();
109
+ }
110
+ }
111
+ /** Random Ed25519 key generation, wraps `keygenDerand` with `randomBytes(32)`. */
112
+ keygen() {
113
+ const seed = randomBytes(32);
114
+ try {
115
+ return this.keygenDerand(seed);
116
+ }
117
+ finally {
118
+ wipe(seed);
119
+ }
120
+ }
121
+ /**
122
+ * Pure Ed25519 sign, RFC 8032 §5.1.6.
123
+ *
124
+ * The WASM re-derives pk from `sk` internally and compares it against
125
+ * the caller-supplied `pk`; a mismatch traps via `unreachable` and is
126
+ * rethrown as `SigningError('sig-ed25519-pk-mismatch')`. This defends
127
+ * against fault injection that bias the per-signature randomness
128
+ * derivation by forcing the caller to also know pk.
129
+ */
130
+ sign(sk, pk, M) {
131
+ _assertNotOwned('curve25519');
132
+ validateSecretKey(sk);
133
+ validatePublicKey(pk);
134
+ validateMessage(M);
135
+ const mx = this.mx;
136
+ const cap = maxMsgLen(mx.memory);
137
+ if (M.length > cap)
138
+ throw new RangeError(`leviathan-crypto: ed25519 pure-mode message length ${M.length} exceeds the per-call `
139
+ + `WASM input scratch (${cap} bytes); use Ed25519PreHashSuite or SignStream for larger payloads`);
140
+ const mem = new Uint8Array(mx.memory.buffer);
141
+ mem.set(sk, SEED_STAGE);
142
+ mem.set(pk, PK_STAGE);
143
+ mem.set(M, MSG_STAGE);
144
+ try {
145
+ try {
146
+ mx.ed25519Sign(SEED_STAGE, PK_STAGE, MSG_STAGE, M.length, SIG_STAGE);
147
+ }
148
+ catch (err) {
149
+ rethrowTrap(err, 'sig-malformed-input', 'leviathan-crypto: ed25519 sign aborted, pk does not match the pk derived from sk '
150
+ + '(likely fault injection or caller misuse)');
151
+ }
152
+ return mem.slice(SIG_STAGE, SIG_STAGE + 64);
153
+ }
154
+ finally {
155
+ ioWipe(mx);
156
+ mx.wipeBuffers();
157
+ }
158
+ }
159
+ /**
160
+ * Ed25519ph sign, RFC 8032 §5.1.7 (prehash, dom2 phflag=1).
161
+ *
162
+ * Caller supplies the 64-byte SHA-512(M) digest; the library does not
163
+ * compute it. Same pk-mismatch fault-injection trap as `sign`.
164
+ */
165
+ signPrehashed(sk, pk, digest, ctx) {
166
+ _assertNotOwned('curve25519');
167
+ validateSecretKey(sk);
168
+ validatePublicKey(pk);
169
+ validateDigest(digest);
170
+ validateContext(ctx);
171
+ const mx = this.mx;
172
+ const mem = new Uint8Array(mx.memory.buffer);
173
+ mem.set(sk, SEED_STAGE);
174
+ mem.set(pk, PK_STAGE);
175
+ mem.set(digest, DIGEST_STAGE);
176
+ if (ctx.length > 0)
177
+ mem.set(ctx, CTX_STAGE);
178
+ try {
179
+ try {
180
+ mx.ed25519SignPrehashed(SEED_STAGE, PK_STAGE, DIGEST_STAGE, CTX_STAGE, ctx.length, SIG_STAGE);
181
+ }
182
+ catch (err) {
183
+ rethrowTrap(err, 'sig-malformed-input', 'leviathan-crypto: ed25519ph sign aborted, pk does not match the pk derived from sk '
184
+ + '(likely fault injection or caller misuse)');
185
+ }
186
+ return mem.slice(SIG_STAGE, SIG_STAGE + 64);
187
+ }
188
+ finally {
189
+ ioWipe(mx);
190
+ mx.wipeBuffers();
191
+ }
192
+ }
193
+ /**
194
+ * Suite-only: pure Ed25519 sign that derives pk internally and
195
+ * skips the fault-injection cross-check. See AGENTS.md
196
+ * "SignatureSuite lifecycle". Underscore-prefixed, not part of
197
+ * the public API.
198
+ */
199
+ _signInternalPk(sk, M) {
200
+ _assertNotOwned('curve25519');
201
+ validateSecretKey(sk);
202
+ validateMessage(M);
203
+ const mx = this.mx;
204
+ const cap = maxMsgLen(mx.memory);
205
+ if (M.length > cap)
206
+ throw new RangeError(`leviathan-crypto: ed25519 message length ${M.length} exceeds the per-call `
207
+ + `WASM input scratch (${cap} bytes); use Ed25519PreHashSuite or SignStream for larger payloads`);
208
+ const mem = new Uint8Array(mx.memory.buffer);
209
+ mem.set(sk, SEED_STAGE);
210
+ mem.set(M, MSG_STAGE);
211
+ try {
212
+ mx.ed25519SignInternalPk(SEED_STAGE, MSG_STAGE, M.length, SIG_STAGE);
213
+ return mem.slice(SIG_STAGE, SIG_STAGE + 64);
214
+ }
215
+ finally {
216
+ ioWipe(mx);
217
+ mx.wipeBuffers();
218
+ }
219
+ }
220
+ /**
221
+ * Suite-only: Ed25519ph mirror of `_signInternalPk`. See
222
+ * AGENTS.md "SignatureSuite lifecycle".
223
+ */
224
+ _signPrehashedInternalPk(sk, digest, ctx) {
225
+ _assertNotOwned('curve25519');
226
+ validateSecretKey(sk);
227
+ validateDigest(digest);
228
+ validateContext(ctx);
229
+ const mx = this.mx;
230
+ const mem = new Uint8Array(mx.memory.buffer);
231
+ mem.set(sk, SEED_STAGE);
232
+ mem.set(digest, DIGEST_STAGE);
233
+ if (ctx.length > 0)
234
+ mem.set(ctx, CTX_STAGE);
235
+ try {
236
+ mx.ed25519SignPrehashedInternalPk(SEED_STAGE, DIGEST_STAGE, CTX_STAGE, ctx.length, SIG_STAGE);
237
+ return mem.slice(SIG_STAGE, SIG_STAGE + 64);
238
+ }
239
+ finally {
240
+ ioWipe(mx);
241
+ mx.wipeBuffers();
242
+ }
243
+ }
244
+ /**
245
+ * Strict pure Ed25519 verify, RFC 8032 §5.1.7 / FIPS 186-5 §7.6.4.
246
+ *
247
+ * Returns `true` on success, `false` on every signature failure mode:
248
+ * off-curve pk, non-canonical R, non-canonical S (>= L), small-order
249
+ * pk, or signature equation inequality. Throws only on caller-side
250
+ * contract violations (wrong-length pk / M / sig).
251
+ */
252
+ verify(pk, M, sig) {
253
+ _assertNotOwned('curve25519');
254
+ validatePublicKey(pk);
255
+ validateMessage(M);
256
+ validateSignature(sig);
257
+ const mx = this.mx;
258
+ const cap = maxMsgLen(mx.memory);
259
+ if (M.length > cap)
260
+ throw new RangeError(`leviathan-crypto: ed25519 pure-mode message length ${M.length} exceeds the per-call `
261
+ + `WASM input scratch (${cap} bytes); use Ed25519PreHashSuite or SignStream for larger payloads`);
262
+ const mem = new Uint8Array(mx.memory.buffer);
263
+ mem.set(pk, PK_STAGE);
264
+ mem.set(sig, SIG_STAGE);
265
+ mem.set(M, MSG_STAGE);
266
+ try {
267
+ return mx.ed25519Verify(PK_STAGE, MSG_STAGE, M.length, SIG_STAGE) === 1;
268
+ }
269
+ finally {
270
+ ioWipe(mx);
271
+ mx.wipeBuffers();
272
+ }
273
+ }
274
+ /**
275
+ * Strict Ed25519ph verify, RFC 8032 §5.1.7 prehash. Same rejection
276
+ * conditions as {@link verify} plus the dom2(F=1, ctx) prefix on the
277
+ * per-spec SHA-512 inputs (handled inside the WASM).
278
+ */
279
+ verifyPrehashed(pk, digest, ctx, sig) {
280
+ _assertNotOwned('curve25519');
281
+ validatePublicKey(pk);
282
+ validateDigest(digest);
283
+ validateContext(ctx);
284
+ validateSignature(sig);
285
+ const mx = this.mx;
286
+ const mem = new Uint8Array(mx.memory.buffer);
287
+ mem.set(pk, PK_STAGE);
288
+ mem.set(digest, DIGEST_STAGE);
289
+ mem.set(sig, SIG_STAGE);
290
+ if (ctx.length > 0)
291
+ mem.set(ctx, CTX_STAGE);
292
+ try {
293
+ return mx.ed25519VerifyPrehashed(PK_STAGE, DIGEST_STAGE, CTX_STAGE, ctx.length, SIG_STAGE) === 1;
294
+ }
295
+ finally {
296
+ ioWipe(mx);
297
+ mx.wipeBuffers();
298
+ }
299
+ }
300
+ dispose() {
301
+ // Idempotent; per-method wipe runs anyway.
302
+ try {
303
+ this.mx.wipeBuffers();
304
+ ioWipe(this.mx);
305
+ }
306
+ catch { /* idempotent */ }
307
+ }
308
+ }
@@ -0,0 +1,27 @@
1
+ export interface Ed25519KeyPair {
2
+ /** 32-byte verifying key, encoded per RFC 8032 §5.1.2 (compressed y || x sign). */
3
+ publicKey: Uint8Array;
4
+ /** 32-byte secret seed, the RFC 8032 §5.1.5 input. */
5
+ secretKey: Uint8Array;
6
+ }
7
+ /**
8
+ * The Ed25519-relevant subset of the curve25519 WASM exports.
9
+ *
10
+ * The curve25519 module is shared between Ed25519 and X25519; this
11
+ * interface deliberately surfaces only the Ed25519 high-level entry
12
+ * points plus the layout / wipe primitives. The X25519 wrapper consumes
13
+ * a separate `X25519Exports` view over the same instance.
14
+ */
15
+ export interface Ed25519Exports {
16
+ memory: WebAssembly.Memory;
17
+ getModuleId: () => number;
18
+ getMemoryPages: () => number;
19
+ ed25519Keygen: (seedOff: number, pkOff: number) => void;
20
+ ed25519Sign: (seedOff: number, pkOff: number, msgOff: number, msgLen: number, sigOff: number) => void;
21
+ ed25519Verify: (pkOff: number, msgOff: number, msgLen: number, sigOff: number) => number;
22
+ ed25519SignPrehashed: (seedOff: number, pkOff: number, digestOff: number, ctxOff: number, ctxLen: number, sigOff: number) => void;
23
+ ed25519VerifyPrehashed: (pkOff: number, digestOff: number, ctxOff: number, ctxLen: number, sigOff: number) => number;
24
+ ed25519SignInternalPk: (seedOff: number, msgOff: number, msgLen: number, sigOff: number) => void;
25
+ ed25519SignPrehashedInternalPk: (seedOff: number, digestOff: number, ctxOff: number, ctxLen: number, sigOff: number) => void;
26
+ wipeBuffers: () => void;
27
+ }
@@ -0,0 +1,27 @@
1
+ // ▄▄▄▄▄▄▄▄▄▄
2
+ // ▄████████████████████▄▄ ▒ ▄▀▀ ▒ ▒ █ ▄▀▄ ▀█▀ █ ▒ ▄▀▄ █▀▄
3
+ // ▄██████████████████████ ▀████▄ ▓ ▓▀ ▓ ▓ ▓ ▓▄▓ ▓ ▓▀▓ ▓▄▓ ▓ ▓
4
+ // ▄█████████▀▀▀ ▀███████▄▄███████▌ ▀▄ ▀▄▄ ▀▄▀ ▒ ▒ ▒ ▒ ▒ █ ▒ ▒ ▒ █
5
+ // ▐████████▀ ▄▄▄▄ ▀████████▀██▀█▌
6
+ // ████████ ███▀▀ ████▀ █▀ █▀ Leviathan Crypto Library
7
+ // ███████▌ ▀██▀ ███
8
+ // ███████ ▀███ ▀██ ▀█▄ Repository & Mirror:
9
+ // ▀██████ ▄▄██ ▀▀ ██▄ github.com/xero/leviathan-crypto
10
+ // ▀█████▄ ▄██▄ ▄▀▄▀ unpkg.com/leviathan-crypto
11
+ // ▀████▄ ▄██▄
12
+ // ▐████ ▐███ Author: xero (https://x-e.ro)
13
+ // ▄▄██████████ ▐███ ▄▄ License: MIT
14
+ // ▄██▀▀▀▀▀▀▀▀▀▀ ▄████ ▄██▀
15
+ // ▄▀ ▄▄█████████▄▄ ▀▀▀▀▀ ▄███ This file is provided completely
16
+ // ▄██████▀▀▀▀▀▀██████▄ ▀▄▄▄▄████▀ free, "as is", and without
17
+ // ████▀ ▄▄▄▄▄▄▄ ▀████▄ ▀█████▀ ▄▄▄▄ warranty of any kind. The author
18
+ // █████▄▄█████▀▀▀▀▀▀▄ ▀███▄ ▄████ assumes absolutely no liability
19
+ // ▀██████▀ ▀████▄▄▄████▀ for its {ab,mis,}use.
20
+ // ▀█████▀▀
21
+ //
22
+ // src/ts/ed25519/types.ts
23
+ //
24
+ // Ed25519 type surface: the WASM export interface for the curve25519
25
+ // module (Ed25519-relevant subset) and the public key-pair shape returned
26
+ // by keygen / keygenDerand. RFC 8032 §5.1.
27
+ export {};
@@ -0,0 +1,7 @@
1
+ export declare function validateSeed(seed: Uint8Array): void;
2
+ export declare function validateSecretKey(sk: Uint8Array): void;
3
+ export declare function validatePublicKey(pk: Uint8Array): void;
4
+ export declare function validateMessage(M: Uint8Array): void;
5
+ export declare function validateSignature(sig: Uint8Array): void;
6
+ export declare function validateContext(ctx: Uint8Array): void;
7
+ export declare function validateDigest(digest: Uint8Array): void;
@@ -0,0 +1,77 @@
1
+ // ▄▄▄▄▄▄▄▄▄▄
2
+ // ▄████████████████████▄▄ ▒ ▄▀▀ ▒ ▒ █ ▄▀▄ ▀█▀ █ ▒ ▄▀▄ █▀▄
3
+ // ▄██████████████████████ ▀████▄ ▓ ▓▀ ▓ ▓ ▓ ▓▄▓ ▓ ▓▀▓ ▓▄▓ ▓ ▓
4
+ // ▄█████████▀▀▀ ▀███████▄▄███████▌ ▀▄ ▀▄▄ ▀▄▀ ▒ ▒ ▒ ▒ ▒ █ ▒ ▒ ▒ █
5
+ // ▐████████▀ ▄▄▄▄ ▀████████▀██▀█▌
6
+ // ████████ ███▀▀ ████▀ █▀ █▀ Leviathan Crypto Library
7
+ // ███████▌ ▀██▀ ███
8
+ // ███████ ▀███ ▀██ ▀█▄ Repository & Mirror:
9
+ // ▀██████ ▄▄██ ▀▀ ██▄ github.com/xero/leviathan-crypto
10
+ // ▀█████▄ ▄██▄ ▄▀▄▀ unpkg.com/leviathan-crypto
11
+ // ▀████▄ ▄██▄
12
+ // ▐████ ▐███ Author: xero (https://x-e.ro)
13
+ // ▄▄██████████ ▐███ ▄▄ License: MIT
14
+ // ▄██▀▀▀▀▀▀▀▀▀▀ ▄████ ▄██▀
15
+ // ▄▀ ▄▄█████████▄▄ ▀▀▀▀▀ ▄███ This file is provided completely
16
+ // ▄██████▀▀▀▀▀▀██████▄ ▀▄▄▄▄████▀ free, "as is", and without
17
+ // ████▀ ▄▄▄▄▄▄▄ ▀████▄ ▀█████▀ ▄▄▄▄ warranty of any kind. The author
18
+ // █████▄▄█████▀▀▀▀▀▀▄ ▀███▄ ▄████ assumes absolutely no liability
19
+ // ▀██████▀ ▀████▄▄▄████▀ for its {ab,mis,}use.
20
+ // ▀█████▀▀
21
+ //
22
+ // src/ts/ed25519/validate.ts
23
+ //
24
+ // Ed25519 caller-side input validation. Pure length / type checks; curve
25
+ // membership, canonical-encoding rejection, and the fault-injection
26
+ // pk-mismatch trap all live inside the WASM layer.
27
+ //
28
+ // TypeError for non-Uint8Array, RangeError for wrong-length. Matches
29
+ // the mldsa / mlkem validation conventions.
30
+ export function validateSeed(seed) {
31
+ if (!(seed instanceof Uint8Array))
32
+ throw new TypeError('leviathan-crypto: ed25519 seed must be a Uint8Array');
33
+ if (seed.length !== 32)
34
+ throw new RangeError(`leviathan-crypto: ed25519 seed must be 32 bytes (got ${seed.length})`);
35
+ }
36
+ export function validateSecretKey(sk) {
37
+ // Ed25519 sk IS the seed per RFC 8032 §5.1.5.
38
+ if (!(sk instanceof Uint8Array))
39
+ throw new TypeError('leviathan-crypto: ed25519 secret key must be a Uint8Array');
40
+ if (sk.length !== 32)
41
+ throw new RangeError(`leviathan-crypto: ed25519 secret key must be 32 bytes (got ${sk.length})`);
42
+ }
43
+ export function validatePublicKey(pk) {
44
+ // Length-only at this layer; on-curve / canonical-y checks happen in
45
+ // edPointDecompress (verify) or via the fault-injection pk-mismatch
46
+ // trap (sign).
47
+ if (!(pk instanceof Uint8Array))
48
+ throw new TypeError('leviathan-crypto: ed25519 public key must be a Uint8Array');
49
+ if (pk.length !== 32)
50
+ throw new RangeError(`leviathan-crypto: ed25519 public key must be 32 bytes (got ${pk.length})`);
51
+ }
52
+ export function validateMessage(M) {
53
+ if (!(M instanceof Uint8Array))
54
+ throw new TypeError('leviathan-crypto: ed25519 message must be a Uint8Array');
55
+ // RFC 8032 places no upper bound on the message length; the WASM
56
+ // staging region imposes its own per-call ceiling enforced in the
57
+ // caller (Ed25519.sign / verify).
58
+ }
59
+ export function validateSignature(sig) {
60
+ if (!(sig instanceof Uint8Array))
61
+ throw new TypeError('leviathan-crypto: ed25519 signature must be a Uint8Array');
62
+ if (sig.length !== 64)
63
+ throw new RangeError(`leviathan-crypto: ed25519 signature must be 64 bytes (got ${sig.length})`);
64
+ }
65
+ export function validateContext(ctx) {
66
+ if (!(ctx instanceof Uint8Array))
67
+ throw new TypeError('leviathan-crypto: ed25519 context must be a Uint8Array');
68
+ // RFC 8032 §5.1 encodes |C| in a single octet, so 255 is the spec ceiling.
69
+ if (ctx.length > 255)
70
+ throw new RangeError(`leviathan-crypto: ed25519 context must be <= 255 bytes (got ${ctx.length})`);
71
+ }
72
+ export function validateDigest(digest) {
73
+ if (!(digest instanceof Uint8Array))
74
+ throw new TypeError('leviathan-crypto: ed25519 prehash digest must be a Uint8Array');
75
+ if (digest.length !== 64)
76
+ throw new RangeError(`leviathan-crypto: ed25519 prehash digest must be 64 bytes (got ${digest.length})`);
77
+ }
@@ -0,0 +1 @@
1
+ export declare const WORKER_SOURCE = "\"use strict\";(()=>{var w=new Uint8Array([0,97,115,109,1,0,0,0,1,8,1,96,3,127,127,127,1,127,3,2,1,0,5,4,1,1,1,1,7,20,2,7,99,111,109,112,97,114,101,0,0,6,109,101,109,111,114,121,2,0,10,133,1,1,130,1,3,2,127,1,126,1,123,3,64,32,3,65,16,106,34,4,32,2,76,4,64,32,6,32,0,32,3,106,253,0,4,0,32,1,32,3,106,253,0,4,0,253,81,253,80,33,6,32,4,33,3,12,1,11,11,3,64,32,2,32,3,74,4,64,32,5,32,0,32,3,106,49,0,0,32,1,32,3,106,49,0,0,133,132,33,5,32,3,65,1,106,33,3,12,1,11,11,66,0,32,5,32,6,253,29,0,32,6,253,29,1,132,132,34,5,125,32,5,132,66,63,135,66,127,133,167,65,1,113,11]);var S=null,M=null,T=null,O=!1,A=null,v=32768;function I(){if(O){if(A)throw A;return}if(O=!0,!R())throw A=new Error(\"leviathan-crypto: constantTimeEqual requires WebAssembly SIMD, this runtime does not support it\"),A;try{let e=w.buffer.slice(w.byteOffset,w.byteOffset+w.byteLength),t=new WebAssembly.Module(e),n=new WebAssembly.Instance(t).exports;M=n.memory,T=new Uint8Array(M.buffer),S=n.compare}catch(e){throw A=new Error(`leviathan-crypto: cte WASM module failed to instantiate: ${e.message}`),A}}var x=(e,t)=>{if(e.length!==t.length)return!1;if(e.length>v)throw new RangeError(`constantTimeEqual: max ${v} bytes (got ${e.length})`);I();let r=T,n=S;if(!r||!n)throw new Error(\"leviathan-crypto: cte init invariant violated\");r.set(e,0),r.set(t,e.length);try{return n(0,e.length,e.length)===1}finally{r.fill(0,0,v*2)}};var C=e=>{e.fill(0)};var h=null;function R(){if(h!==null)return h;if(typeof WebAssembly>\"u\"||typeof WebAssembly.validate!=\"function\")return h=!1,h;try{h=WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]))}catch{h=!1}return h}var m=class e extends Error{constructor(t){super(`${t}: authentication failed`),this.name=\"AuthenticationError\",Object.setPrototypeOf(this,e.prototype)}};var d=32,b=12,E=16,U=65536;function $(e,t,r,n,s){if(t.length!==d)throw new RangeError(`AES-GCM-SIV: key must be ${d} bytes (got ${t.length})`);if(r.length!==b)throw new RangeError(`AES-GCM-SIV: nonce must be ${b} bytes (got ${r.length})`);let o=e.getChunkSize();if(n.length>o)throw new RangeError(`AES-GCM-SIV: plaintext exceeds ${o} bytes, split into smaller chunks`);if(s.length>U)throw new RangeError(`AES-GCM-SIV: AAD must be \\u2264 ${U} bytes (got ${s.length})`);let f=new Uint8Array(e.memory.buffer);if(f.set(t,e.getKeyOffset()),e.loadKey(d)!==0)throw e.wipeBuffers(),new Error(\"AES-GCM-SIV: loadKey failed\");f.set(r,e.getNonceOffset()),s.length>0&&f.set(s,e.getAadOffset()),f.set(n,e.getChunkPtOffset()),e.sivDeriveKeys(e.getNonceOffset()),e.sivSeal(s.length,n.length);let y=e.getChunkPtOffset(),a=e.getTagOffset(),i=new Uint8Array(e.memory.buffer),u=i.slice(y,y+n.length),l=i.slice(a,a+E);return{ciphertext:u,tag:l}}function B(e,t,r,n,s,o,f=\"aes-gcm-siv\"){if(t.length!==d)throw new RangeError(`AES-GCM-SIV: key must be ${d} bytes (got ${t.length})`);if(r.length!==b)throw new RangeError(`AES-GCM-SIV: nonce must be ${b} bytes (got ${r.length})`);if(s.length!==E)throw new RangeError(`AES-GCM-SIV: tag must be ${E} bytes (got ${s.length})`);let y=e.getChunkSize();if(n.length>y)throw new RangeError(`AES-GCM-SIV: ciphertext exceeds ${y} bytes, split into smaller chunks`);if(o.length>U)throw new RangeError(`AES-GCM-SIV: AAD must be \\u2264 ${U} bytes (got ${o.length})`);let a=new Uint8Array(e.memory.buffer);if(a.set(t,e.getKeyOffset()),e.loadKey(d)!==0)throw e.wipeBuffers(),new Error(\"AES-GCM-SIV: loadKey failed\");a.set(r,e.getNonceOffset()),o.length>0&&a.set(o,e.getAadOffset()),a.set(n,e.getChunkCtOffset()),a.set(s,e.getSivIcOffset()),e.sivDeriveKeys(e.getNonceOffset()),e.sivOpen(o.length,n.length);let i=new Uint8Array(e.memory.buffer),u=i.slice(e.getTagOffset(),e.getTagOffset()+E),l=new Uint8Array(s);if(!x(u,l))throw e.sivWipeOnFail(),C(u),C(l),new m(f);let p=e.getChunkPtOffset();return i.slice(p,p+n.length)}var c,g;self.onmessage=async e=>{let t=e.data;if(t.type===\"init\"){try{let r=new WebAssembly.Memory({initial:4,maximum:4}),n=t.modules.aes;if(c=(await WebAssembly.instantiate(n,{env:{memory:r}})).exports,g=new Uint8Array(t.derivedKeyBytes),g.length!==32)throw new Error(`expected 32 derived key bytes (got ${g.length})`);t.derivedKeyBytes.fill(0),self.postMessage({type:\"ready\"})}catch(r){t.derivedKeyBytes&&t.derivedKeyBytes.fill(0),self.postMessage({type:\"error\",id:-1,message:r.message,isAuthError:!1})}return}if(t.type===\"wipe\"){g&&g.fill(0),g=void 0,c&&c.wipeBuffers(),c=void 0,self.postMessage({type:\"wiped\"});return}if(!c||!g){self.postMessage({type:\"error\",id:t.id,message:\"worker not initialized\",isAuthError:!1});return}try{let{id:r,op:n,counterNonce:s,data:o,aad:f}=t,y=f??new Uint8Array(0),a=t.derivedKeyBytes??g,i;if(n===\"seal\"){let{ciphertext:l,tag:p}=$(c,a,s,o,y);i=new Uint8Array(l.length+16),i.set(l),i.set(p,l.length)}else{let l=o.subarray(0,o.length-16),p=o.subarray(o.length-16);i=B(c,a,s,l,p,y,\"aes-gcm-siv\")}let u=i.buffer instanceof ArrayBuffer?[i.buffer]:[];self.postMessage({type:\"result\",id:r,data:i},{transfer:u})}catch(r){let n=r instanceof m;self.postMessage({type:\"error\",id:t.id,message:r.message,cipher:n?\"aes-gcm-siv\":void 0,isAuthError:n})}finally{t.derivedKeyBytes&&t.derivedKeyBytes.fill(0),c&&c.wipeBuffers()}};})();\n";
@@ -0,0 +1,5 @@
1
+ // Generated by scripts/embed-workers.ts, do not edit
2
+ // IIFE-bundled pool worker source. Spawned via blob URL by
3
+ // the cipher-suite.ts createPoolWorker; consumers do not
4
+ // import this directly.
5
+ export const WORKER_SOURCE = "\"use strict\";(()=>{var w=new Uint8Array([0,97,115,109,1,0,0,0,1,8,1,96,3,127,127,127,1,127,3,2,1,0,5,4,1,1,1,1,7,20,2,7,99,111,109,112,97,114,101,0,0,6,109,101,109,111,114,121,2,0,10,133,1,1,130,1,3,2,127,1,126,1,123,3,64,32,3,65,16,106,34,4,32,2,76,4,64,32,6,32,0,32,3,106,253,0,4,0,32,1,32,3,106,253,0,4,0,253,81,253,80,33,6,32,4,33,3,12,1,11,11,3,64,32,2,32,3,74,4,64,32,5,32,0,32,3,106,49,0,0,32,1,32,3,106,49,0,0,133,132,33,5,32,3,65,1,106,33,3,12,1,11,11,66,0,32,5,32,6,253,29,0,32,6,253,29,1,132,132,34,5,125,32,5,132,66,63,135,66,127,133,167,65,1,113,11]);var S=null,M=null,T=null,O=!1,A=null,v=32768;function I(){if(O){if(A)throw A;return}if(O=!0,!R())throw A=new Error(\"leviathan-crypto: constantTimeEqual requires WebAssembly SIMD, this runtime does not support it\"),A;try{let e=w.buffer.slice(w.byteOffset,w.byteOffset+w.byteLength),t=new WebAssembly.Module(e),n=new WebAssembly.Instance(t).exports;M=n.memory,T=new Uint8Array(M.buffer),S=n.compare}catch(e){throw A=new Error(`leviathan-crypto: cte WASM module failed to instantiate: ${e.message}`),A}}var x=(e,t)=>{if(e.length!==t.length)return!1;if(e.length>v)throw new RangeError(`constantTimeEqual: max ${v} bytes (got ${e.length})`);I();let r=T,n=S;if(!r||!n)throw new Error(\"leviathan-crypto: cte init invariant violated\");r.set(e,0),r.set(t,e.length);try{return n(0,e.length,e.length)===1}finally{r.fill(0,0,v*2)}};var C=e=>{e.fill(0)};var h=null;function R(){if(h!==null)return h;if(typeof WebAssembly>\"u\"||typeof WebAssembly.validate!=\"function\")return h=!1,h;try{h=WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]))}catch{h=!1}return h}var m=class e extends Error{constructor(t){super(`${t}: authentication failed`),this.name=\"AuthenticationError\",Object.setPrototypeOf(this,e.prototype)}};var d=32,b=12,E=16,U=65536;function $(e,t,r,n,s){if(t.length!==d)throw new RangeError(`AES-GCM-SIV: key must be ${d} bytes (got ${t.length})`);if(r.length!==b)throw new RangeError(`AES-GCM-SIV: nonce must be ${b} bytes (got ${r.length})`);let o=e.getChunkSize();if(n.length>o)throw new RangeError(`AES-GCM-SIV: plaintext exceeds ${o} bytes, split into smaller chunks`);if(s.length>U)throw new RangeError(`AES-GCM-SIV: AAD must be \\u2264 ${U} bytes (got ${s.length})`);let f=new Uint8Array(e.memory.buffer);if(f.set(t,e.getKeyOffset()),e.loadKey(d)!==0)throw e.wipeBuffers(),new Error(\"AES-GCM-SIV: loadKey failed\");f.set(r,e.getNonceOffset()),s.length>0&&f.set(s,e.getAadOffset()),f.set(n,e.getChunkPtOffset()),e.sivDeriveKeys(e.getNonceOffset()),e.sivSeal(s.length,n.length);let y=e.getChunkPtOffset(),a=e.getTagOffset(),i=new Uint8Array(e.memory.buffer),u=i.slice(y,y+n.length),l=i.slice(a,a+E);return{ciphertext:u,tag:l}}function B(e,t,r,n,s,o,f=\"aes-gcm-siv\"){if(t.length!==d)throw new RangeError(`AES-GCM-SIV: key must be ${d} bytes (got ${t.length})`);if(r.length!==b)throw new RangeError(`AES-GCM-SIV: nonce must be ${b} bytes (got ${r.length})`);if(s.length!==E)throw new RangeError(`AES-GCM-SIV: tag must be ${E} bytes (got ${s.length})`);let y=e.getChunkSize();if(n.length>y)throw new RangeError(`AES-GCM-SIV: ciphertext exceeds ${y} bytes, split into smaller chunks`);if(o.length>U)throw new RangeError(`AES-GCM-SIV: AAD must be \\u2264 ${U} bytes (got ${o.length})`);let a=new Uint8Array(e.memory.buffer);if(a.set(t,e.getKeyOffset()),e.loadKey(d)!==0)throw e.wipeBuffers(),new Error(\"AES-GCM-SIV: loadKey failed\");a.set(r,e.getNonceOffset()),o.length>0&&a.set(o,e.getAadOffset()),a.set(n,e.getChunkCtOffset()),a.set(s,e.getSivIcOffset()),e.sivDeriveKeys(e.getNonceOffset()),e.sivOpen(o.length,n.length);let i=new Uint8Array(e.memory.buffer),u=i.slice(e.getTagOffset(),e.getTagOffset()+E),l=new Uint8Array(s);if(!x(u,l))throw e.sivWipeOnFail(),C(u),C(l),new m(f);let p=e.getChunkPtOffset();return i.slice(p,p+n.length)}var c,g;self.onmessage=async e=>{let t=e.data;if(t.type===\"init\"){try{let r=new WebAssembly.Memory({initial:4,maximum:4}),n=t.modules.aes;if(c=(await WebAssembly.instantiate(n,{env:{memory:r}})).exports,g=new Uint8Array(t.derivedKeyBytes),g.length!==32)throw new Error(`expected 32 derived key bytes (got ${g.length})`);t.derivedKeyBytes.fill(0),self.postMessage({type:\"ready\"})}catch(r){t.derivedKeyBytes&&t.derivedKeyBytes.fill(0),self.postMessage({type:\"error\",id:-1,message:r.message,isAuthError:!1})}return}if(t.type===\"wipe\"){g&&g.fill(0),g=void 0,c&&c.wipeBuffers(),c=void 0,self.postMessage({type:\"wiped\"});return}if(!c||!g){self.postMessage({type:\"error\",id:t.id,message:\"worker not initialized\",isAuthError:!1});return}try{let{id:r,op:n,counterNonce:s,data:o,aad:f}=t,y=f??new Uint8Array(0),a=t.derivedKeyBytes??g,i;if(n===\"seal\"){let{ciphertext:l,tag:p}=$(c,a,s,o,y);i=new Uint8Array(l.length+16),i.set(l),i.set(p,l.length)}else{let l=o.subarray(0,o.length-16),p=o.subarray(o.length-16);i=B(c,a,s,l,p,y,\"aes-gcm-siv\")}let u=i.buffer instanceof ArrayBuffer?[i.buffer]:[];self.postMessage({type:\"result\",id:r,data:i},{transfer:u})}catch(r){let n=r instanceof m;self.postMessage({type:\"error\",id:t.id,message:r.message,cipher:n?\"aes-gcm-siv\":void 0,isAuthError:n})}finally{t.derivedKeyBytes&&t.derivedKeyBytes.fill(0),c&&c.wipeBuffers()}};})();\n";
@@ -0,0 +1 @@
1
+ export declare const WASM_GZ_BASE64 = "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";
@@ -0,0 +1,3 @@
1
+ // Generated by scripts/embed-wasm.ts, do not edit
2
+ // gzip-compressed WASM binary, base64-encoded. Decoded and decompressed by loadEmbedded().
3
+ export const WASM_GZ_BASE64 = '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';
@@ -0,0 +1 @@
1
+ export declare const WASM_GZ_BASE64 = "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";
@@ -0,0 +1,3 @@
1
+ // Generated by scripts/embed-wasm.ts, do not edit
2
+ // gzip-compressed WASM binary, base64-encoded. Decoded and decompressed by loadEmbedded().
3
+ export const WASM_GZ_BASE64 = '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';
@@ -0,0 +1 @@
1
+ export declare const WORKER_SOURCE = "\"use strict\";(()=>{var U=new Uint8Array([0,97,115,109,1,0,0,0,1,8,1,96,3,127,127,127,1,127,3,2,1,0,5,4,1,1,1,1,7,20,2,7,99,111,109,112,97,114,101,0,0,6,109,101,109,111,114,121,2,0,10,133,1,1,130,1,3,2,127,1,126,1,123,3,64,32,3,65,16,106,34,4,32,2,76,4,64,32,6,32,0,32,3,106,253,0,4,0,32,1,32,3,106,253,0,4,0,253,81,253,80,33,6,32,4,33,3,12,1,11,11,3,64,32,2,32,3,74,4,64,32,5,32,0,32,3,106,49,0,0,32,1,32,3,106,49,0,0,133,132,33,5,32,3,65,1,106,33,3,12,1,11,11,66,0,32,5,32,6,253,29,0,32,6,253,29,1,132,132,34,5,125,32,5,132,66,63,135,66,127,133,167,65,1,113,11]);var k=null,v=null,M=null,T=!1,A=null,w=32768;function S(){if(T){if(A)throw A;return}if(T=!0,!x())throw A=new Error(\"leviathan-crypto: constantTimeEqual requires WebAssembly SIMD, this runtime does not support it\"),A;try{let t=U.buffer.slice(U.byteOffset,U.byteOffset+U.byteLength),r=new WebAssembly.Module(t),e=new WebAssembly.Instance(r).exports;v=e.memory,M=new Uint8Array(v.buffer),k=e.compare}catch(t){throw A=new Error(`leviathan-crypto: cte WASM module failed to instantiate: ${t.message}`),A}}var B=(t,r)=>{if(t.length!==r.length)return!1;if(t.length>w)throw new RangeError(`constantTimeEqual: max ${w} bytes (got ${t.length})`);S();let n=M,e=k;if(!n||!e)throw new Error(\"leviathan-crypto: cte init invariant violated\");n.set(t,0),n.set(r,t.length);try{return e(0,t.length,t.length)===1}finally{n.fill(0,0,w*2)}};var m=null;function x(){if(m!==null)return m;if(typeof WebAssembly>\"u\"||typeof WebAssembly.validate!=\"function\")return m=!1,m;try{m=WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]))}catch{m=!1}return m}var d=class t extends Error{constructor(r){super(`${r}: authentication failed`),this.name=\"AuthenticationError\",Object.setPrototypeOf(this,t.prototype)}};function l(t,r){if(r.length===0)return;let n=new Uint8Array(t.memory.buffer),e=t.getPolyMsgOffset(),s=0;for(;s<r.length;){let o=Math.min(64,r.length-s);n.set(r.subarray(s,s+o),e),t.polyUpdate(o),s+=o}}function K(t,r){let n=new Uint8Array(16),e=new DataView(n.buffer);return e.setUint32(0,t>>>0,!0),e.setUint32(4,Math.floor(t/4294967296)>>>0,!0),e.setUint32(8,r>>>0,!0),e.setUint32(12,Math.floor(r/4294967296)>>>0,!0),n}function P(t,r,n,e,s){let o=t.getChunkSize();if(e.length>o)throw new RangeError(`plaintext exceeds ${o} bytes, split into smaller chunks`);let u=new Uint8Array(t.memory.buffer);u.set(r,t.getKeyOffset()),u.set(n,t.getChachaNonceOffset()),t.chachaLoadKey(),t.chachaGenPolyKey(),t.polyInit(),l(t,s);let y=(16-s.length%16)%16;y>0&&l(t,new Uint8Array(y)),t.chachaSetCounter(1),u.set(e,t.getChunkPtOffset()),t.chachaEncryptChunk_simd(e.length);let i=t.getChunkCtOffset(),a=new Uint8Array(t.memory.buffer).slice(i,i+e.length);l(t,a);let p=(16-e.length%16)%16;p>0&&l(t,new Uint8Array(p)),l(t,K(s.length,e.length)),t.polyFinal();let c=t.getPolyTagOffset(),g=new Uint8Array(t.memory.buffer).slice(c,c+16);return{ciphertext:a,tag:g}}function W(t,r,n,e,s,o,u=\"chacha20-poly1305\"){let y=t.getChunkSize();if(e.length>y)throw new RangeError(`ciphertext exceeds ${y} bytes, split into smaller chunks`);let i=new Uint8Array(t.memory.buffer);i.set(r,t.getKeyOffset()),i.set(n,t.getChachaNonceOffset()),t.chachaLoadKey(),t.chachaGenPolyKey(),t.polyInit(),l(t,o);let a=(16-o.length%16)%16;a>0&&l(t,new Uint8Array(a)),l(t,e);let p=(16-e.length%16)%16;p>0&&l(t,new Uint8Array(p)),l(t,K(o.length,e.length)),t.polyFinal();let c=t.getPolyTagOffset(),g=new Uint8Array(t.memory.buffer).slice(c,c+16);if(!B(g,s)){let C=t.getChunkCtOffset();i.fill(0,C,C+y);let E=t.getChachaBlockOffset();i.fill(0,E,E+64);let O=t.getPolyKeyOffset();throw i.fill(0,O,O+32),new d(u)}t.chachaSetCounter(1),t.chachaLoadKey(),new Uint8Array(t.memory.buffer).set(e,t.getChunkPtOffset()),t.chachaEncryptChunk_simd(e.length);let b=t.getChunkCtOffset();return new Uint8Array(t.memory.buffer).slice(b,b+e.length)}var f,h;self.onmessage=async t=>{let r=t.data;if(r.type===\"init\"){try{let n=new WebAssembly.Memory({initial:3,maximum:3}),e=r.modules.chacha20;if(f=(await WebAssembly.instantiate(e,{env:{memory:n}})).exports,h=new Uint8Array(r.derivedKeyBytes),h.length!==32)throw new Error(`expected 32 derived key bytes (got ${h.length})`);r.derivedKeyBytes.fill(0),self.postMessage({type:\"ready\"})}catch(n){r.derivedKeyBytes&&r.derivedKeyBytes.fill(0),self.postMessage({type:\"error\",id:-1,message:n.message,isAuthError:!1})}return}if(r.type===\"wipe\"){h&&h.fill(0),h=void 0,f&&f.wipeBuffers(),f=void 0,self.postMessage({type:\"wiped\"});return}if(!f||!h){self.postMessage({type:\"error\",id:r.id,message:\"worker not initialized\",isAuthError:!1});return}try{let{id:n,op:e,counterNonce:s,data:o,aad:u}=r,y=u??new Uint8Array(0),i=r.derivedKeyBytes??h,a;if(e===\"seal\"){let{ciphertext:c,tag:g}=P(f,i,s,o,y);a=new Uint8Array(c.length+16),a.set(c),a.set(g,c.length)}else{let c=o.subarray(0,o.length-16),g=o.subarray(o.length-16);a=W(f,i,s,c,g,y,\"xchacha20-poly1305\")}let p=a.buffer instanceof ArrayBuffer?[a.buffer]:[];self.postMessage({type:\"result\",id:n,data:a},{transfer:p})}catch(n){let e=n instanceof d;self.postMessage({type:\"error\",id:r.id,message:n.message,cipher:e?\"xchacha20-poly1305\":void 0,isAuthError:e})}finally{r.derivedKeyBytes&&r.derivedKeyBytes.fill(0),f&&f.wipeBuffers()}};})();\n";
@@ -0,0 +1,5 @@
1
+ // Generated by scripts/embed-workers.ts, do not edit
2
+ // IIFE-bundled pool worker source. Spawned via blob URL by
3
+ // the cipher-suite.ts createPoolWorker; consumers do not
4
+ // import this directly.
5
+ export const WORKER_SOURCE = "\"use strict\";(()=>{var U=new Uint8Array([0,97,115,109,1,0,0,0,1,8,1,96,3,127,127,127,1,127,3,2,1,0,5,4,1,1,1,1,7,20,2,7,99,111,109,112,97,114,101,0,0,6,109,101,109,111,114,121,2,0,10,133,1,1,130,1,3,2,127,1,126,1,123,3,64,32,3,65,16,106,34,4,32,2,76,4,64,32,6,32,0,32,3,106,253,0,4,0,32,1,32,3,106,253,0,4,0,253,81,253,80,33,6,32,4,33,3,12,1,11,11,3,64,32,2,32,3,74,4,64,32,5,32,0,32,3,106,49,0,0,32,1,32,3,106,49,0,0,133,132,33,5,32,3,65,1,106,33,3,12,1,11,11,66,0,32,5,32,6,253,29,0,32,6,253,29,1,132,132,34,5,125,32,5,132,66,63,135,66,127,133,167,65,1,113,11]);var k=null,v=null,M=null,T=!1,A=null,w=32768;function S(){if(T){if(A)throw A;return}if(T=!0,!x())throw A=new Error(\"leviathan-crypto: constantTimeEqual requires WebAssembly SIMD, this runtime does not support it\"),A;try{let t=U.buffer.slice(U.byteOffset,U.byteOffset+U.byteLength),r=new WebAssembly.Module(t),e=new WebAssembly.Instance(r).exports;v=e.memory,M=new Uint8Array(v.buffer),k=e.compare}catch(t){throw A=new Error(`leviathan-crypto: cte WASM module failed to instantiate: ${t.message}`),A}}var B=(t,r)=>{if(t.length!==r.length)return!1;if(t.length>w)throw new RangeError(`constantTimeEqual: max ${w} bytes (got ${t.length})`);S();let n=M,e=k;if(!n||!e)throw new Error(\"leviathan-crypto: cte init invariant violated\");n.set(t,0),n.set(r,t.length);try{return e(0,t.length,t.length)===1}finally{n.fill(0,0,w*2)}};var m=null;function x(){if(m!==null)return m;if(typeof WebAssembly>\"u\"||typeof WebAssembly.validate!=\"function\")return m=!1,m;try{m=WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]))}catch{m=!1}return m}var d=class t extends Error{constructor(r){super(`${r}: authentication failed`),this.name=\"AuthenticationError\",Object.setPrototypeOf(this,t.prototype)}};function l(t,r){if(r.length===0)return;let n=new Uint8Array(t.memory.buffer),e=t.getPolyMsgOffset(),s=0;for(;s<r.length;){let o=Math.min(64,r.length-s);n.set(r.subarray(s,s+o),e),t.polyUpdate(o),s+=o}}function K(t,r){let n=new Uint8Array(16),e=new DataView(n.buffer);return e.setUint32(0,t>>>0,!0),e.setUint32(4,Math.floor(t/4294967296)>>>0,!0),e.setUint32(8,r>>>0,!0),e.setUint32(12,Math.floor(r/4294967296)>>>0,!0),n}function P(t,r,n,e,s){let o=t.getChunkSize();if(e.length>o)throw new RangeError(`plaintext exceeds ${o} bytes, split into smaller chunks`);let u=new Uint8Array(t.memory.buffer);u.set(r,t.getKeyOffset()),u.set(n,t.getChachaNonceOffset()),t.chachaLoadKey(),t.chachaGenPolyKey(),t.polyInit(),l(t,s);let y=(16-s.length%16)%16;y>0&&l(t,new Uint8Array(y)),t.chachaSetCounter(1),u.set(e,t.getChunkPtOffset()),t.chachaEncryptChunk_simd(e.length);let i=t.getChunkCtOffset(),a=new Uint8Array(t.memory.buffer).slice(i,i+e.length);l(t,a);let p=(16-e.length%16)%16;p>0&&l(t,new Uint8Array(p)),l(t,K(s.length,e.length)),t.polyFinal();let c=t.getPolyTagOffset(),g=new Uint8Array(t.memory.buffer).slice(c,c+16);return{ciphertext:a,tag:g}}function W(t,r,n,e,s,o,u=\"chacha20-poly1305\"){let y=t.getChunkSize();if(e.length>y)throw new RangeError(`ciphertext exceeds ${y} bytes, split into smaller chunks`);let i=new Uint8Array(t.memory.buffer);i.set(r,t.getKeyOffset()),i.set(n,t.getChachaNonceOffset()),t.chachaLoadKey(),t.chachaGenPolyKey(),t.polyInit(),l(t,o);let a=(16-o.length%16)%16;a>0&&l(t,new Uint8Array(a)),l(t,e);let p=(16-e.length%16)%16;p>0&&l(t,new Uint8Array(p)),l(t,K(o.length,e.length)),t.polyFinal();let c=t.getPolyTagOffset(),g=new Uint8Array(t.memory.buffer).slice(c,c+16);if(!B(g,s)){let C=t.getChunkCtOffset();i.fill(0,C,C+y);let E=t.getChachaBlockOffset();i.fill(0,E,E+64);let O=t.getPolyKeyOffset();throw i.fill(0,O,O+32),new d(u)}t.chachaSetCounter(1),t.chachaLoadKey(),new Uint8Array(t.memory.buffer).set(e,t.getChunkPtOffset()),t.chachaEncryptChunk_simd(e.length);let b=t.getChunkCtOffset();return new Uint8Array(t.memory.buffer).slice(b,b+e.length)}var f,h;self.onmessage=async t=>{let r=t.data;if(r.type===\"init\"){try{let n=new WebAssembly.Memory({initial:3,maximum:3}),e=r.modules.chacha20;if(f=(await WebAssembly.instantiate(e,{env:{memory:n}})).exports,h=new Uint8Array(r.derivedKeyBytes),h.length!==32)throw new Error(`expected 32 derived key bytes (got ${h.length})`);r.derivedKeyBytes.fill(0),self.postMessage({type:\"ready\"})}catch(n){r.derivedKeyBytes&&r.derivedKeyBytes.fill(0),self.postMessage({type:\"error\",id:-1,message:n.message,isAuthError:!1})}return}if(r.type===\"wipe\"){h&&h.fill(0),h=void 0,f&&f.wipeBuffers(),f=void 0,self.postMessage({type:\"wiped\"});return}if(!f||!h){self.postMessage({type:\"error\",id:r.id,message:\"worker not initialized\",isAuthError:!1});return}try{let{id:n,op:e,counterNonce:s,data:o,aad:u}=r,y=u??new Uint8Array(0),i=r.derivedKeyBytes??h,a;if(e===\"seal\"){let{ciphertext:c,tag:g}=P(f,i,s,o,y);a=new Uint8Array(c.length+16),a.set(c),a.set(g,c.length)}else{let c=o.subarray(0,o.length-16),g=o.subarray(o.length-16);a=W(f,i,s,c,g,y,\"xchacha20-poly1305\")}let p=a.buffer instanceof ArrayBuffer?[a.buffer]:[];self.postMessage({type:\"result\",id:n,data:a},{transfer:p})}catch(n){let e=n instanceof d;self.postMessage({type:\"error\",id:r.id,message:n.message,cipher:e?\"xchacha20-poly1305\":void 0,isAuthError:e})}finally{r.derivedKeyBytes&&r.derivedKeyBytes.fill(0),f&&f.wipeBuffers()}};})();\n";
@@ -1 +1 @@
1
- export declare const WASM_GZ_BASE64 = "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";
1
+ export declare const WASM_GZ_BASE64 = "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";