ox 1.0.5 → 1.1.2

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 (337) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/dist/core/Base64.d.ts +10 -21
  3. package/dist/core/Base64.d.ts.map +1 -1
  4. package/dist/core/Base64.js +8 -127
  5. package/dist/core/Base64.js.map +1 -1
  6. package/dist/core/BinaryStateTree.d.ts.map +1 -1
  7. package/dist/core/BinaryStateTree.js +2 -2
  8. package/dist/core/BinaryStateTree.js.map +1 -1
  9. package/dist/core/Bls.d.ts.map +1 -1
  10. package/dist/core/Bls.js +19 -44
  11. package/dist/core/Bls.js.map +1 -1
  12. package/dist/core/Ed25519.d.ts.map +1 -1
  13. package/dist/core/Ed25519.js +7 -6
  14. package/dist/core/Ed25519.js.map +1 -1
  15. package/dist/core/Engine.d.ts +156 -0
  16. package/dist/core/Engine.d.ts.map +1 -0
  17. package/dist/core/Engine.js +210 -0
  18. package/dist/core/Engine.js.map +1 -0
  19. package/dist/core/Hash.d.ts +4 -4
  20. package/dist/core/Hash.d.ts.map +1 -1
  21. package/dist/core/Hash.js +9 -12
  22. package/dist/core/Hash.js.map +1 -1
  23. package/dist/core/Keystore.d.ts.map +1 -1
  24. package/dist/core/Keystore.js +15 -10
  25. package/dist/core/Keystore.js.map +1 -1
  26. package/dist/core/Mnemonic.d.ts.map +1 -1
  27. package/dist/core/Mnemonic.js +3 -2
  28. package/dist/core/Mnemonic.js.map +1 -1
  29. package/dist/core/P256.d.ts.map +1 -1
  30. package/dist/core/P256.js +8 -9
  31. package/dist/core/P256.js.map +1 -1
  32. package/dist/core/Secp256k1.d.ts.map +1 -1
  33. package/dist/core/Secp256k1.js +8 -9
  34. package/dist/core/Secp256k1.js.map +1 -1
  35. package/dist/core/WebCryptoP256.d.ts.map +1 -1
  36. package/dist/core/WebCryptoP256.js +2 -2
  37. package/dist/core/WebCryptoP256.js.map +1 -1
  38. package/dist/core/X25519.d.ts.map +1 -1
  39. package/dist/core/X25519.js +4 -3
  40. package/dist/core/X25519.js.map +1 -1
  41. package/dist/core/internal/bls.d.ts +12 -0
  42. package/dist/core/internal/bls.d.ts.map +1 -0
  43. package/dist/core/internal/bls.js +79 -0
  44. package/dist/core/internal/bls.js.map +1 -0
  45. package/dist/core/internal/codec/base64.d.ts +84 -0
  46. package/dist/core/internal/codec/base64.d.ts.map +1 -0
  47. package/dist/core/internal/codec/base64.js +177 -0
  48. package/dist/core/internal/codec/base64.js.map +1 -0
  49. package/dist/core/internal/codec/hex.d.ts +49 -4
  50. package/dist/core/internal/codec/hex.d.ts.map +1 -1
  51. package/dist/core/internal/codec/hex.js +109 -35
  52. package/dist/core/internal/codec/hex.js.map +1 -1
  53. package/dist/core/internal/curves.d.ts +17 -0
  54. package/dist/core/internal/curves.d.ts.map +1 -0
  55. package/dist/core/internal/curves.js +17 -0
  56. package/dist/core/internal/curves.js.map +1 -0
  57. package/dist/core/internal/ed25519.d.ts +14 -0
  58. package/dist/core/internal/ed25519.d.ts.map +1 -0
  59. package/dist/core/internal/ed25519.js +29 -0
  60. package/dist/core/internal/ed25519.js.map +1 -0
  61. package/dist/core/internal/engine.d.ts +278 -0
  62. package/dist/core/internal/engine.d.ts.map +1 -0
  63. package/dist/core/internal/engine.js +131 -0
  64. package/dist/core/internal/engine.js.map +1 -0
  65. package/dist/core/internal/hash.d.ts +12 -0
  66. package/dist/core/internal/hash.d.ts.map +1 -0
  67. package/dist/core/internal/hash.js +30 -0
  68. package/dist/core/internal/hash.js.map +1 -0
  69. package/dist/core/internal/keystore.d.ts +14 -0
  70. package/dist/core/internal/keystore.d.ts.map +1 -0
  71. package/dist/core/internal/keystore.js +32 -0
  72. package/dist/core/internal/keystore.js.map +1 -0
  73. package/dist/core/internal/mnemonic.d.ts +4 -0
  74. package/dist/core/internal/mnemonic.d.ts.map +1 -0
  75. package/dist/core/internal/mnemonic.js +14 -0
  76. package/dist/core/internal/mnemonic.js.map +1 -0
  77. package/dist/core/internal/p256.d.ts +14 -0
  78. package/dist/core/internal/p256.d.ts.map +1 -0
  79. package/dist/core/internal/p256.js +36 -0
  80. package/dist/core/internal/p256.js.map +1 -0
  81. package/dist/core/internal/secp256k1.d.ts +14 -0
  82. package/dist/core/internal/secp256k1.d.ts.map +1 -0
  83. package/dist/core/internal/secp256k1.js +36 -0
  84. package/dist/core/internal/secp256k1.js.map +1 -0
  85. package/dist/core/internal/x25519.d.ts +8 -0
  86. package/dist/core/internal/x25519.d.ts.map +1 -0
  87. package/dist/core/internal/x25519.js +20 -0
  88. package/dist/core/internal/x25519.js.map +1 -0
  89. package/dist/index.d.ts +38 -0
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.docs.d.ts +2 -0
  92. package/dist/index.docs.d.ts.map +1 -1
  93. package/dist/index.docs.js +2 -0
  94. package/dist/index.docs.js.map +1 -1
  95. package/dist/index.js +38 -0
  96. package/dist/index.js.map +1 -1
  97. package/dist/node/Ed25519.d.ts +33 -0
  98. package/dist/node/Ed25519.d.ts.map +1 -0
  99. package/dist/node/Ed25519.js +67 -0
  100. package/dist/node/Ed25519.js.map +1 -0
  101. package/dist/node/Engine.d.ts +68 -0
  102. package/dist/node/Engine.d.ts.map +1 -0
  103. package/dist/node/Engine.js +75 -0
  104. package/dist/node/Engine.js.map +1 -0
  105. package/dist/node/Hash.d.ts +37 -0
  106. package/dist/node/Hash.d.ts.map +1 -0
  107. package/dist/node/Hash.js +35 -0
  108. package/dist/node/Hash.js.map +1 -0
  109. package/dist/node/Keystore.d.ts +36 -0
  110. package/dist/node/Keystore.d.ts.map +1 -0
  111. package/dist/node/Keystore.js +72 -0
  112. package/dist/node/Keystore.js.map +1 -0
  113. package/dist/node/Mnemonic.d.ts +35 -0
  114. package/dist/node/Mnemonic.d.ts.map +1 -0
  115. package/dist/node/Mnemonic.js +46 -0
  116. package/dist/node/Mnemonic.js.map +1 -0
  117. package/dist/node/P256.d.ts +32 -0
  118. package/dist/node/P256.d.ts.map +1 -0
  119. package/dist/node/P256.js +34 -0
  120. package/dist/node/P256.js.map +1 -0
  121. package/dist/node/X25519.d.ts +31 -0
  122. package/dist/node/X25519.d.ts.map +1 -0
  123. package/dist/node/X25519.js +71 -0
  124. package/dist/node/X25519.js.map +1 -0
  125. package/dist/node/index.d.ts +126 -0
  126. package/dist/node/index.d.ts.map +1 -0
  127. package/dist/node/index.js +126 -0
  128. package/dist/node/index.js.map +1 -0
  129. package/dist/tempo/VirtualMaster.d.ts +2 -0
  130. package/dist/tempo/VirtualMaster.d.ts.map +1 -1
  131. package/dist/tempo/VirtualMaster.js +19 -5
  132. package/dist/tempo/VirtualMaster.js.map +1 -1
  133. package/dist/tempo/internal/mine.wasm.d.ts +2 -4
  134. package/dist/tempo/internal/mine.wasm.d.ts.map +1 -1
  135. package/dist/tempo/internal/mine.wasm.js +7 -12
  136. package/dist/tempo/internal/mine.wasm.js.map +1 -1
  137. package/dist/tempo/internal/virtualMasterPool.js +4 -1
  138. package/dist/tempo/internal/virtualMasterPool.js.map +1 -1
  139. package/dist/wasm/Ed25519.d.ts +35 -0
  140. package/dist/wasm/Ed25519.d.ts.map +1 -0
  141. package/dist/wasm/Ed25519.js +88 -0
  142. package/dist/wasm/Ed25519.js.map +1 -0
  143. package/dist/wasm/Engine.d.ts +71 -0
  144. package/dist/wasm/Engine.d.ts.map +1 -0
  145. package/dist/wasm/Engine.js +76 -0
  146. package/dist/wasm/Engine.js.map +1 -0
  147. package/dist/wasm/Hash.d.ts +43 -0
  148. package/dist/wasm/Hash.d.ts.map +1 -0
  149. package/dist/wasm/Hash.js +64 -0
  150. package/dist/wasm/Hash.js.map +1 -0
  151. package/dist/wasm/Keystore.d.ts +37 -0
  152. package/dist/wasm/Keystore.d.ts.map +1 -0
  153. package/dist/wasm/Keystore.js +34 -0
  154. package/dist/wasm/Keystore.js.map +1 -0
  155. package/dist/wasm/Mnemonic.d.ts +33 -0
  156. package/dist/wasm/Mnemonic.d.ts.map +1 -0
  157. package/dist/wasm/Mnemonic.js +30 -0
  158. package/dist/wasm/Mnemonic.js.map +1 -0
  159. package/dist/wasm/X25519.d.ts +33 -0
  160. package/dist/wasm/X25519.d.ts.map +1 -0
  161. package/dist/wasm/X25519.js +53 -0
  162. package/dist/wasm/X25519.js.map +1 -0
  163. package/dist/wasm/index.d.ts +115 -0
  164. package/dist/wasm/index.d.ts.map +1 -0
  165. package/dist/wasm/index.js +115 -0
  166. package/dist/wasm/index.js.map +1 -0
  167. package/dist/wasm/internal/blake3.d.ts +11 -0
  168. package/dist/wasm/internal/blake3.d.ts.map +1 -0
  169. package/dist/wasm/internal/blake3.js +31 -0
  170. package/dist/wasm/internal/blake3.js.map +1 -0
  171. package/dist/wasm/internal/blake3.wasm.d.ts +3 -0
  172. package/dist/wasm/internal/blake3.wasm.d.ts.map +1 -0
  173. package/dist/wasm/internal/blake3.wasm.js +10 -0
  174. package/dist/wasm/internal/blake3.wasm.js.map +1 -0
  175. package/dist/wasm/internal/crypto25519.d.ts +16 -0
  176. package/dist/wasm/internal/crypto25519.d.ts.map +1 -0
  177. package/dist/wasm/internal/crypto25519.js +5 -0
  178. package/dist/wasm/internal/crypto25519.js.map +1 -0
  179. package/dist/wasm/internal/crypto25519.wasm.d.ts +3 -0
  180. package/dist/wasm/internal/crypto25519.wasm.d.ts.map +1 -0
  181. package/dist/wasm/internal/crypto25519.wasm.js +10 -0
  182. package/dist/wasm/internal/crypto25519.wasm.js.map +1 -0
  183. package/dist/wasm/internal/ed25519.d.ts +4 -0
  184. package/dist/wasm/internal/ed25519.d.ts.map +1 -0
  185. package/dist/wasm/internal/ed25519.js +21 -0
  186. package/dist/wasm/internal/ed25519.js.map +1 -0
  187. package/dist/wasm/internal/hash.d.ts +9 -0
  188. package/dist/wasm/internal/hash.d.ts.map +1 -0
  189. package/dist/wasm/internal/hash.js +26 -0
  190. package/dist/wasm/internal/hash.js.map +1 -0
  191. package/dist/wasm/internal/hashes.d.ts +12 -0
  192. package/dist/wasm/internal/hashes.d.ts.map +1 -0
  193. package/dist/wasm/internal/hashes.js +8 -0
  194. package/dist/wasm/internal/hashes.js.map +1 -0
  195. package/dist/wasm/internal/hashes.wasm.d.ts +7 -0
  196. package/dist/wasm/internal/hashes.wasm.d.ts.map +1 -0
  197. package/dist/wasm/internal/hashes.wasm.js +14 -0
  198. package/dist/wasm/internal/hashes.wasm.js.map +1 -0
  199. package/dist/wasm/internal/instantiate.d.ts +56 -0
  200. package/dist/wasm/internal/instantiate.d.ts.map +1 -0
  201. package/dist/wasm/internal/instantiate.js +92 -0
  202. package/dist/wasm/internal/instantiate.js.map +1 -0
  203. package/dist/wasm/internal/mnemonic.d.ts +4 -0
  204. package/dist/wasm/internal/mnemonic.d.ts.map +1 -0
  205. package/dist/wasm/internal/mnemonic.js +45 -0
  206. package/dist/wasm/internal/mnemonic.js.map +1 -0
  207. package/dist/wasm/internal/pbkdf2.d.ts +12 -0
  208. package/dist/wasm/internal/pbkdf2.d.ts.map +1 -0
  209. package/dist/wasm/internal/pbkdf2.js +51 -0
  210. package/dist/wasm/internal/pbkdf2.js.map +1 -0
  211. package/dist/wasm/internal/x25519.d.ts +4 -0
  212. package/dist/wasm/internal/x25519.d.ts.map +1 -0
  213. package/dist/wasm/internal/x25519.js +21 -0
  214. package/dist/wasm/internal/x25519.js.map +1 -0
  215. package/dist/zod/TypedData.d.ts +12 -12
  216. package/package.json +81 -1
  217. package/src/core/Base64.ts +19 -166
  218. package/src/core/BinaryStateTree.ts +2 -3
  219. package/src/core/Bls.ts +27 -77
  220. package/src/core/Ed25519.ts +7 -7
  221. package/src/core/Engine.ts +308 -0
  222. package/src/core/Hash.ts +9 -12
  223. package/src/core/Keystore.ts +17 -17
  224. package/src/core/Mnemonic.ts +3 -6
  225. package/src/core/P256.ts +15 -24
  226. package/src/core/Rlp_tx.bench.ts +2 -4
  227. package/src/core/Secp256k1.ts +9 -14
  228. package/src/core/TxEnvelopeEip1559.bench.ts +0 -5
  229. package/src/core/WebCryptoP256.ts +2 -2
  230. package/src/core/X25519.ts +4 -3
  231. package/src/core/_test/AbiParameters.adversarial.fuzz.ts +1 -2
  232. package/src/core/_test/AbiParameters.fuzz.ts +1 -2
  233. package/src/core/_test/Base.fuzz.ts +1 -2
  234. package/src/core/_test/Cbor.fuzz.ts +1 -2
  235. package/src/core/_test/Engine.fuzz.ts +293 -0
  236. package/src/core/_test/Engine.test-d.ts +140 -0
  237. package/src/core/_test/Engine.test.ts +618 -0
  238. package/src/core/_test/Hash.vectors.test.ts +64 -0
  239. package/src/core/_test/Hex.fuzz.ts +1 -2
  240. package/src/core/_test/Rlp.fuzz.ts +1 -2
  241. package/src/core/_test/Signature.fuzz.ts +1 -2
  242. package/src/core/_test/curves.test.ts +7 -0
  243. package/src/core/_test/index.test.ts +1 -0
  244. package/src/core/internal/bls.ts +121 -0
  245. package/src/core/internal/codec/_test/base64.conformance.ts +156 -0
  246. package/src/core/internal/codec/_test/hex.conformance.ts +204 -0
  247. package/src/core/internal/codec/_test/hex.fuzz.ts +234 -0
  248. package/src/core/internal/codec/_test/hex.test.ts +124 -0
  249. package/src/core/internal/codec/base64.ts +222 -0
  250. package/src/core/internal/codec/hex.ts +115 -34
  251. package/src/core/internal/curves.ts +18 -0
  252. package/src/core/internal/ed25519.ts +64 -0
  253. package/src/core/internal/engine.ts +410 -0
  254. package/src/core/internal/hash.ts +48 -0
  255. package/src/core/internal/keystore.ts +107 -0
  256. package/src/core/internal/mnemonic.ts +18 -0
  257. package/src/core/internal/p256.ts +91 -0
  258. package/src/core/internal/secp256k1.ts +91 -0
  259. package/src/core/internal/x25519.ts +40 -0
  260. package/src/index.docs.ts +2 -0
  261. package/src/index.ts +39 -0
  262. package/src/node/Ed25519.ts +87 -0
  263. package/src/node/Engine.ts +125 -0
  264. package/src/node/Hash.ts +51 -0
  265. package/src/node/Keystore.ts +103 -0
  266. package/src/node/Mnemonic.ts +68 -0
  267. package/src/node/P256.ts +48 -0
  268. package/src/node/X25519.ts +93 -0
  269. package/src/node/_test/Curves.fuzz.ts +76 -0
  270. package/src/node/_test/Ed25519.test-d.ts +35 -0
  271. package/src/node/_test/Ed25519.test.ts +220 -0
  272. package/src/node/_test/Engine.test-d.ts +28 -0
  273. package/src/node/_test/Engine.test.ts +102 -0
  274. package/src/node/_test/Hash.test-d.ts +32 -0
  275. package/src/node/_test/Hash.test.ts +101 -0
  276. package/src/node/_test/Keystore.fuzz.ts +58 -0
  277. package/src/node/_test/Keystore.test-d.ts +43 -0
  278. package/src/node/_test/Keystore.test.ts +198 -0
  279. package/src/node/_test/Mnemonic.fuzz.ts +31 -0
  280. package/src/node/_test/Mnemonic.test-d.ts +21 -0
  281. package/src/node/_test/Mnemonic.test.ts +98 -0
  282. package/src/node/_test/P256.test-d.ts +29 -0
  283. package/src/node/_test/P256.test.ts +102 -0
  284. package/src/node/_test/X25519.test-d.ts +28 -0
  285. package/src/node/_test/X25519.test.ts +239 -0
  286. package/src/node/index.ts +132 -0
  287. package/src/tempo/VirtualMaster.test.ts +75 -0
  288. package/src/tempo/VirtualMaster.ts +28 -6
  289. package/src/tempo/internal/mine.wasm.ts +7 -13
  290. package/src/tempo/internal/virtualMasterPool.ts +4 -1
  291. package/src/tsconfig.json +2 -1
  292. package/src/version.ts +1 -1
  293. package/src/wasm/Ed25519.ts +114 -0
  294. package/src/wasm/Engine.ts +121 -0
  295. package/src/wasm/Hash.bench.ts +60 -0
  296. package/src/wasm/Hash.ts +88 -0
  297. package/src/wasm/Keystore.ts +48 -0
  298. package/src/wasm/Mnemonic.ts +44 -0
  299. package/src/wasm/X25519.ts +70 -0
  300. package/src/wasm/_test/Crypto25519.conformance.ts +57 -0
  301. package/src/wasm/_test/Crypto25519.fuzz.ts +187 -0
  302. package/src/wasm/_test/Ed25519.test-d.ts +28 -0
  303. package/src/wasm/_test/Ed25519.test.ts +168 -0
  304. package/src/wasm/_test/Ed25519.vectors.test.ts +73 -0
  305. package/src/wasm/_test/Engine.test-d.ts +28 -0
  306. package/src/wasm/_test/Engine.test.ts +96 -0
  307. package/src/wasm/_test/Hash.browser.test.ts +54 -0
  308. package/src/wasm/_test/Hash.fuzz.ts +223 -0
  309. package/src/wasm/_test/Hash.test-d.ts +33 -0
  310. package/src/wasm/_test/Hash.test.ts +311 -0
  311. package/src/wasm/_test/Hash.vectors.test.ts +124 -0
  312. package/src/wasm/_test/Keystore.browser.test.ts +42 -0
  313. package/src/wasm/_test/Keystore.fuzz.ts +113 -0
  314. package/src/wasm/_test/Keystore.test-d.ts +33 -0
  315. package/src/wasm/_test/Keystore.test.ts +192 -0
  316. package/src/wasm/_test/Keystore.vectors.test.ts +21 -0
  317. package/src/wasm/_test/Mnemonic.test-d.ts +17 -0
  318. package/src/wasm/_test/Mnemonic.test.ts +110 -0
  319. package/src/wasm/_test/Runtime.test.ts +21 -0
  320. package/src/wasm/_test/X25519.test-d.ts +21 -0
  321. package/src/wasm/_test/X25519.test.ts +194 -0
  322. package/src/wasm/_test/fixtures.ts +4 -0
  323. package/src/wasm/_test/runtime.wasm.ts +11 -0
  324. package/src/wasm/index.ts +120 -0
  325. package/src/wasm/internal/blake3.ts +45 -0
  326. package/src/wasm/internal/blake3.wasm.ts +11 -0
  327. package/src/wasm/internal/crypto25519.ts +43 -0
  328. package/src/wasm/internal/crypto25519.wasm.ts +11 -0
  329. package/src/wasm/internal/ed25519.ts +31 -0
  330. package/src/wasm/internal/hash.ts +50 -0
  331. package/src/wasm/internal/hashes.ts +29 -0
  332. package/src/wasm/internal/hashes.wasm.ts +17 -0
  333. package/src/wasm/internal/instantiate.ts +135 -0
  334. package/src/wasm/internal/mnemonic.ts +56 -0
  335. package/src/wasm/internal/pbkdf2.ts +86 -0
  336. package/src/wasm/internal/x25519.ts +29 -0
  337. package/src/tempo/internal/mine.c +0 -182
@@ -0,0 +1,12 @@
1
+ import { type Module } from './instantiate.js';
2
+ /** WASM exports used by the PBKDF2-HMAC-SHA256 loader. @internal */
3
+ export type Exports = {
4
+ pbkdf2_sha256(password: number, passwordLength: number, salt: number, saltLength: number, iterations: number, out: number, outLength: number, scratch: number): void;
5
+ zero(ptr: number, length: number): void;
6
+ };
7
+ /** Calls PBKDF2-HMAC-SHA256 and clears its complete linear-memory region. */
8
+ export declare function pbkdf2Sha256(module: Module<Exports>, password: Uint8Array, salt: Uint8Array, options: {
9
+ c: number;
10
+ dkLen: number;
11
+ }): Uint8Array;
12
+ //# sourceMappingURL=pbkdf2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pbkdf2.d.ts","sourceRoot":"","sources":["../../../src/wasm/internal/pbkdf2.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAE3D,oEAAoE;AACpE,MAAM,MAAM,OAAO,GAAG;IACpB,aAAa,CACX,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,IAAI,CAAA;IACP,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACxC,CAAA;AAKD,6EAA6E;AAC7E,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EACvB,QAAQ,EAAE,UAAU,EACpB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpC,UAAU,CA4CZ"}
@@ -0,0 +1,51 @@
1
+ import { pbkdf2Sha256ScratchSize } from './hashes.wasm.js';
2
+ import { MemoryError } from './instantiate.js';
3
+ const maximumUint32 = 0xffff_ffff;
4
+ const wasm32Size = 0x1_0000_0000;
5
+ /** Calls PBKDF2-HMAC-SHA256 and clears its complete linear-memory region. */
6
+ export function pbkdf2Sha256(module, password, salt, options) {
7
+ const { c, dkLen } = options;
8
+ assertPositiveUint32(c, 'c');
9
+ assertPositiveUint32(dkLen, 'dkLen');
10
+ const passwordLength = password.length;
11
+ const saltLength = salt.length;
12
+ if (saltLength > maximumUint32 - 4)
13
+ throw new RangeError(`"salt" length must be <= ${maximumUint32 - 4}, got ${saltLength}`);
14
+ const passwordPtr = module.heapBase;
15
+ const saltPtr = passwordPtr + passwordLength;
16
+ const outPtr = saltPtr + saltLength + 4;
17
+ const scratchPtr = align4(outPtr + dkLen);
18
+ const end = scratchPtr + pbkdf2Sha256ScratchSize;
19
+ if (!Number.isSafeInteger(end) || end > wasm32Size)
20
+ throw new MemoryError({
21
+ bytes: end,
22
+ cause: new RangeError('PBKDF2 workspace exceeds wasm32 memory.'),
23
+ });
24
+ module.reserve(end - passwordPtr);
25
+ const view = module.view();
26
+ try {
27
+ view.set(password, passwordPtr);
28
+ view.set(salt, saltPtr);
29
+ module.exports.pbkdf2_sha256(passwordPtr, passwordLength, saltPtr, saltLength, c, outPtr, dkLen, scratchPtr);
30
+ return module.view().slice(outPtr, outPtr + dkLen);
31
+ }
32
+ finally {
33
+ // This includes the password, salt and counter, staged output, alignment
34
+ // padding, and every byte of PBKDF2/HMAC working state.
35
+ module.exports.zero(passwordPtr, end - passwordPtr);
36
+ }
37
+ }
38
+ function align4(value) {
39
+ return Math.ceil(value / 4) * 4;
40
+ }
41
+ function assertPositiveUint32(value, name) {
42
+ if (typeof value !== 'number')
43
+ throw new TypeError(`"${name}" expected number, got ${typeof value}`);
44
+ if (!Number.isSafeInteger(value) || value < 0)
45
+ throw new RangeError(`"${name}" expected integer >= 0, got ${value}`);
46
+ if (value < 1)
47
+ throw new Error(`"${name}" must be >= 1`);
48
+ if (value > maximumUint32)
49
+ throw new RangeError(`"${name}" must be <= ${maximumUint32}, got ${value}`);
50
+ }
51
+ //# sourceMappingURL=pbkdf2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pbkdf2.js","sourceRoot":"","sources":["../../../src/wasm/internal/pbkdf2.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Module } from './crypto25519.js';
2
+ /** Derives a shared secret and clears both keys and the staged result. */
3
+ export declare function getSharedSecret(module: Module, privateKey: Uint8Array, publicKey: Uint8Array): Uint8Array;
4
+ //# sourceMappingURL=x25519.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x25519.d.ts","sourceRoot":"","sources":["../../../src/wasm/internal/x25519.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAI9C,0EAA0E;AAC1E,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,UAAU,GACpB,UAAU,CAmBZ"}
@@ -0,0 +1,21 @@
1
+ const keySize = 32;
2
+ /** Derives a shared secret and clears both keys and the staged result. */
3
+ export function getSharedSecret(module, privateKey, publicKey) {
4
+ module.reserve(keySize * 3);
5
+ const privateKeyPtr = module.heapBase;
6
+ const publicKeyPtr = privateKeyPtr + keySize;
7
+ const sharedSecretPtr = publicKeyPtr + keySize;
8
+ try {
9
+ const memory = module.view();
10
+ memory.set(privateKey, privateKeyPtr);
11
+ memory.set(publicKey, publicKeyPtr);
12
+ const valid = module.exports.x25519_get_shared_secret(privateKeyPtr, publicKeyPtr, sharedSecretPtr);
13
+ if (valid !== 1)
14
+ throw new Error('invalid private or public key received');
15
+ return module.view().slice(sharedSecretPtr, sharedSecretPtr + keySize);
16
+ }
17
+ finally {
18
+ module.exports.zero(privateKeyPtr, keySize * 3);
19
+ }
20
+ }
21
+ //# sourceMappingURL=x25519.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x25519.js","sourceRoot":"","sources":["../../../src/wasm/internal/x25519.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAAG,EAAE,CAAA;AAElB,0EAA0E;AAC1E,MAAM,UAAU,eAAe,CAC7B,MAAc,EACd,UAAsB,EACtB,SAAqB;IAErB,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAA;IAC3B,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAA;IACrC,MAAM,YAAY,GAAG,aAAa,GAAG,OAAO,CAAA;IAC5C,MAAM,eAAe,GAAG,YAAY,GAAG,OAAO,CAAA;IAC9C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;QAC5B,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;QACrC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,wBAAwB,CACnD,aAAa,EACb,YAAY,EACZ,eAAe,CAChB,CAAA;QACD,IAAI,KAAK,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;QAC1E,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,CAAA;IACxE,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,CAAC,CAAC,CAAA;IACjD,CAAC;AACH,CAAC"}
@@ -26,14 +26,14 @@ export declare const TypedData: z.ZodMiniPipe<z.ZodMiniRecord<z.ZodMiniString<st
26
26
  [x: `bytes2[${string}]`]: undefined;
27
27
  [x: `bytes1[${string}]`]: undefined;
28
28
  [x: `bytes16[${string}]`]: undefined;
29
+ [x: `bytes32[${string}]`]: undefined;
29
30
  [x: `bytes4[${string}]`]: undefined;
30
31
  [x: `bytes10[${string}]`]: undefined;
31
32
  [x: `bytes6[${string}]`]: undefined;
32
33
  [x: `bytes8[${string}]`]: undefined;
33
34
  [x: `bytes7[${string}]`]: undefined;
34
- [x: `bytes32[${string}]`]: undefined;
35
- [x: `bytes3[${string}]`]: undefined;
36
35
  [x: `bytes5[${string}]`]: undefined;
36
+ [x: `bytes3[${string}]`]: undefined;
37
37
  [x: `bytes9[${string}]`]: undefined;
38
38
  [x: `bytes11[${string}]`]: undefined;
39
39
  [x: `bytes12[${string}]`]: undefined;
@@ -57,10 +57,11 @@ export declare const TypedData: z.ZodMiniPipe<z.ZodMiniRecord<z.ZodMiniString<st
57
57
  [x: `bytes31[${string}]`]: undefined;
58
58
  [x: `int256[${string}]`]: undefined;
59
59
  [x: `int16[${string}]`]: undefined;
60
+ [x: `int32[${string}]`]: undefined;
60
61
  [x: `int48[${string}]`]: undefined;
61
62
  [x: `int120[${string}]`]: undefined;
63
+ [x: `int128[${string}]`]: undefined;
62
64
  [x: `int8[${string}]`]: undefined;
63
- [x: `int32[${string}]`]: undefined;
64
65
  [x: `int24[${string}]`]: undefined;
65
66
  [x: `int40[${string}]`]: undefined;
66
67
  [x: `int56[${string}]`]: undefined;
@@ -71,7 +72,6 @@ export declare const TypedData: z.ZodMiniPipe<z.ZodMiniRecord<z.ZodMiniString<st
71
72
  [x: `int96[${string}]`]: undefined;
72
73
  [x: `int104[${string}]`]: undefined;
73
74
  [x: `int112[${string}]`]: undefined;
74
- [x: `int128[${string}]`]: undefined;
75
75
  [x: `int136[${string}]`]: undefined;
76
76
  [x: `int144[${string}]`]: undefined;
77
77
  [x: `int152[${string}]`]: undefined;
@@ -89,10 +89,11 @@ export declare const TypedData: z.ZodMiniPipe<z.ZodMiniRecord<z.ZodMiniString<st
89
89
  [x: `int248[${string}]`]: undefined;
90
90
  [x: `uint256[${string}]`]: undefined;
91
91
  [x: `uint16[${string}]`]: undefined;
92
+ [x: `uint32[${string}]`]: undefined;
92
93
  [x: `uint48[${string}]`]: undefined;
93
94
  [x: `uint120[${string}]`]: undefined;
95
+ [x: `uint128[${string}]`]: undefined;
94
96
  [x: `uint8[${string}]`]: undefined;
95
- [x: `uint32[${string}]`]: undefined;
96
97
  [x: `uint24[${string}]`]: undefined;
97
98
  [x: `uint40[${string}]`]: undefined;
98
99
  [x: `uint56[${string}]`]: undefined;
@@ -103,7 +104,6 @@ export declare const TypedData: z.ZodMiniPipe<z.ZodMiniRecord<z.ZodMiniString<st
103
104
  [x: `uint96[${string}]`]: undefined;
104
105
  [x: `uint104[${string}]`]: undefined;
105
106
  [x: `uint112[${string}]`]: undefined;
106
- [x: `uint128[${string}]`]: undefined;
107
107
  [x: `uint136[${string}]`]: undefined;
108
108
  [x: `uint144[${string}]`]: undefined;
109
109
  [x: `uint152[${string}]`]: undefined;
@@ -126,14 +126,14 @@ export declare const TypedData: z.ZodMiniPipe<z.ZodMiniRecord<z.ZodMiniString<st
126
126
  bytes2?: undefined;
127
127
  bytes1?: undefined;
128
128
  bytes16?: undefined;
129
+ bytes32?: undefined;
129
130
  bytes4?: undefined;
130
131
  bytes10?: undefined;
131
132
  bytes6?: undefined;
132
133
  bytes8?: undefined;
133
134
  bytes7?: undefined;
134
- bytes32?: undefined;
135
- bytes3?: undefined;
136
135
  bytes5?: undefined;
136
+ bytes3?: undefined;
137
137
  bytes9?: undefined;
138
138
  bytes11?: undefined;
139
139
  bytes12?: undefined;
@@ -157,10 +157,11 @@ export declare const TypedData: z.ZodMiniPipe<z.ZodMiniRecord<z.ZodMiniString<st
157
157
  bytes31?: undefined;
158
158
  int256?: undefined;
159
159
  int16?: undefined;
160
+ int32?: undefined;
160
161
  int48?: undefined;
161
162
  int120?: undefined;
163
+ int128?: undefined;
162
164
  int8?: undefined;
163
- int32?: undefined;
164
165
  int24?: undefined;
165
166
  int40?: undefined;
166
167
  int56?: undefined;
@@ -171,7 +172,6 @@ export declare const TypedData: z.ZodMiniPipe<z.ZodMiniRecord<z.ZodMiniString<st
171
172
  int96?: undefined;
172
173
  int104?: undefined;
173
174
  int112?: undefined;
174
- int128?: undefined;
175
175
  int136?: undefined;
176
176
  int144?: undefined;
177
177
  int152?: undefined;
@@ -189,10 +189,11 @@ export declare const TypedData: z.ZodMiniPipe<z.ZodMiniRecord<z.ZodMiniString<st
189
189
  int248?: undefined;
190
190
  uint256?: undefined;
191
191
  uint16?: undefined;
192
+ uint32?: undefined;
192
193
  uint48?: undefined;
193
194
  uint120?: undefined;
195
+ uint128?: undefined;
194
196
  uint8?: undefined;
195
- uint32?: undefined;
196
197
  uint24?: undefined;
197
198
  uint40?: undefined;
198
199
  uint56?: undefined;
@@ -203,7 +204,6 @@ export declare const TypedData: z.ZodMiniPipe<z.ZodMiniRecord<z.ZodMiniString<st
203
204
  uint96?: undefined;
204
205
  uint104?: undefined;
205
206
  uint112?: undefined;
206
- uint128?: undefined;
207
207
  uint136?: undefined;
208
208
  uint144?: undefined;
209
209
  uint152?: undefined;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "ox",
3
3
  "description": "Ethereum Standard Library",
4
4
  "type": "module",
5
- "version": "1.0.5",
5
+ "version": "1.1.2",
6
6
  "main": "./dist/index.js",
7
7
  "sideEffects": false,
8
8
  "license": "MIT",
@@ -220,6 +220,11 @@
220
220
  "types": "./dist/core/Ed25519.d.ts",
221
221
  "default": "./dist/core/Ed25519.js"
222
222
  },
223
+ "./Engine": {
224
+ "src": "./src/core/Engine.ts",
225
+ "types": "./dist/core/Engine.d.ts",
226
+ "default": "./dist/core/Engine.js"
227
+ },
223
228
  "./Ens": {
224
229
  "src": "./src/core/Ens.ts",
225
230
  "types": "./dist/core/Ens.d.ts",
@@ -505,6 +510,46 @@
505
510
  "types": "./dist/erc8021/Attribution.d.ts",
506
511
  "default": "./dist/erc8021/Attribution.js"
507
512
  },
513
+ "./node": {
514
+ "src": "./src/node/index.ts",
515
+ "types": "./dist/node/index.d.ts",
516
+ "default": "./dist/node/index.js"
517
+ },
518
+ "./node/Ed25519": {
519
+ "src": "./src/node/Ed25519.ts",
520
+ "types": "./dist/node/Ed25519.d.ts",
521
+ "default": "./dist/node/Ed25519.js"
522
+ },
523
+ "./node/Engine": {
524
+ "src": "./src/node/Engine.ts",
525
+ "types": "./dist/node/Engine.d.ts",
526
+ "default": "./dist/node/Engine.js"
527
+ },
528
+ "./node/Hash": {
529
+ "src": "./src/node/Hash.ts",
530
+ "types": "./dist/node/Hash.d.ts",
531
+ "default": "./dist/node/Hash.js"
532
+ },
533
+ "./node/Keystore": {
534
+ "src": "./src/node/Keystore.ts",
535
+ "types": "./dist/node/Keystore.d.ts",
536
+ "default": "./dist/node/Keystore.js"
537
+ },
538
+ "./node/Mnemonic": {
539
+ "src": "./src/node/Mnemonic.ts",
540
+ "types": "./dist/node/Mnemonic.d.ts",
541
+ "default": "./dist/node/Mnemonic.js"
542
+ },
543
+ "./node/P256": {
544
+ "src": "./src/node/P256.ts",
545
+ "types": "./dist/node/P256.d.ts",
546
+ "default": "./dist/node/P256.js"
547
+ },
548
+ "./node/X25519": {
549
+ "src": "./src/node/X25519.ts",
550
+ "types": "./dist/node/X25519.d.ts",
551
+ "default": "./dist/node/X25519.js"
552
+ },
508
553
  "./tempo": {
509
554
  "src": "./src/tempo/index.ts",
510
555
  "types": "./dist/tempo/index.d.ts",
@@ -620,6 +665,41 @@
620
665
  "types": "./dist/trusted-setups/Paths.d.ts",
621
666
  "default": "./dist/trusted-setups/Paths.js"
622
667
  },
668
+ "./wasm": {
669
+ "src": "./src/wasm/index.ts",
670
+ "types": "./dist/wasm/index.d.ts",
671
+ "default": "./dist/wasm/index.js"
672
+ },
673
+ "./wasm/Ed25519": {
674
+ "src": "./src/wasm/Ed25519.ts",
675
+ "types": "./dist/wasm/Ed25519.d.ts",
676
+ "default": "./dist/wasm/Ed25519.js"
677
+ },
678
+ "./wasm/Engine": {
679
+ "src": "./src/wasm/Engine.ts",
680
+ "types": "./dist/wasm/Engine.d.ts",
681
+ "default": "./dist/wasm/Engine.js"
682
+ },
683
+ "./wasm/Hash": {
684
+ "src": "./src/wasm/Hash.ts",
685
+ "types": "./dist/wasm/Hash.d.ts",
686
+ "default": "./dist/wasm/Hash.js"
687
+ },
688
+ "./wasm/Keystore": {
689
+ "src": "./src/wasm/Keystore.ts",
690
+ "types": "./dist/wasm/Keystore.d.ts",
691
+ "default": "./dist/wasm/Keystore.js"
692
+ },
693
+ "./wasm/Mnemonic": {
694
+ "src": "./src/wasm/Mnemonic.ts",
695
+ "types": "./dist/wasm/Mnemonic.d.ts",
696
+ "default": "./dist/wasm/Mnemonic.js"
697
+ },
698
+ "./wasm/X25519": {
699
+ "src": "./src/wasm/X25519.ts",
700
+ "types": "./dist/wasm/X25519.d.ts",
701
+ "default": "./dist/wasm/X25519.js"
702
+ },
623
703
  "./webauthn": {
624
704
  "src": "./src/webauthn/index.ts",
625
705
  "types": "./dist/webauthn/index.d.ts",
@@ -1,66 +1,7 @@
1
1
  import * as Bytes from './Bytes.js'
2
- import * as Errors from './Errors.js'
2
+ import type * as Errors from './Errors.js'
3
3
  import * as Hex from './Hex.js'
4
- import { decoder } from './internal/codec/utf8.js'
5
-
6
- // Standard Base64 alphabet (RFC 4648 section 4) and URL-safe alphabet (section 5).
7
- const stdAlphabet =
8
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
9
-
10
- // Char-code -> 6-bit integer lookup. Sentinel `0xff` = invalid character.
11
- // Standard alphabet plus URL-safe `-`/`_` (decoders are alphabet-agnostic).
12
- const characterToInteger = /*#__PURE__*/ (() => {
13
- const table = new Uint8Array(256).fill(0xff)
14
- for (let i = 0; i < stdAlphabet.length; i++)
15
- table[stdAlphabet.charCodeAt(i)] = i
16
- // URL-safe alternates: `-` for `+` (62), `_` for `/` (63).
17
- table[45 /* '-' */] = 62
18
- table[95 /* '_' */] = 63
19
- return table
20
- })()
21
-
22
- // Integer -> char-code table for the standard alphabet, indexed by 6-bit value.
23
- const integerToCharacter = /*#__PURE__*/ (() => {
24
- const table = new Uint8Array(64)
25
- for (let i = 0; i < stdAlphabet.length; i++)
26
- table[i] = stdAlphabet.charCodeAt(i)
27
- return table
28
- })()
29
-
30
- // Phase 2 native fast-path detection: `Uint8Array.prototype.toBase64` /
31
- // `Uint8Array.fromBase64` ship in Node 22+, Safari 18+, Firefox 133+.
32
- const nativeToBase64:
33
- | ((
34
- this: Uint8Array,
35
- options?: { alphabet?: 'base64' | 'base64url'; omitPadding?: boolean },
36
- ) => string)
37
- | undefined = (
38
- Uint8Array.prototype as Uint8Array & {
39
- toBase64?: (options?: {
40
- alphabet?: 'base64' | 'base64url'
41
- omitPadding?: boolean
42
- }) => string
43
- }
44
- ).toBase64
45
- const nativeFromBase64:
46
- | ((
47
- value: string,
48
- options?: {
49
- alphabet?: 'base64' | 'base64url-or-base64'
50
- lastChunkHandling?: 'loose' | 'strict' | 'stop-before-partial'
51
- },
52
- ) => Uint8Array)
53
- | undefined = (
54
- Uint8Array as typeof Uint8Array & {
55
- fromBase64?: (
56
- value: string,
57
- options?: {
58
- alphabet?: 'base64' | 'base64url-or-base64'
59
- lastChunkHandling?: 'loose' | 'strict' | 'stop-before-partial'
60
- },
61
- ) => Uint8Array
62
- }
63
- ).fromBase64
4
+ import * as internal from './internal/codec/base64.js'
64
5
 
65
6
  /**
66
7
  * Encodes a {@link ox#Bytes.Bytes} to a Base64-encoded string (with optional padding and/or URL-safe characters).
@@ -109,39 +50,7 @@ const nativeFromBase64:
109
50
  * @returns The Base64 encoded string.
110
51
  */
111
52
  export function fromBytes(value: Bytes.Bytes, options: fromBytes.Options = {}) {
112
- const { pad = true, url = false } = options
113
-
114
- if (nativeToBase64) {
115
- const out = nativeToBase64.call(value, {
116
- alphabet: url ? 'base64url' : 'base64',
117
- omitPadding: !pad,
118
- })
119
- // Native `base64url` already omits padding; if pad was requested, restore it.
120
- if (url && pad) {
121
- const k = value.length % 3
122
- if (k === 1) return `${out}==`
123
- if (k === 2) return `${out}=`
124
- }
125
- return out
126
- }
127
-
128
- const encoded = new Uint8Array(Math.ceil(value.length / 3) * 4)
129
-
130
- for (let i = 0, j = 0; j < value.length; i += 4, j += 3) {
131
- const y = (value[j]! << 16) + (value[j + 1]! << 8) + (value[j + 2]! | 0)
132
- encoded[i] = integerToCharacter[y >> 18]!
133
- encoded[i + 1] = integerToCharacter[(y >> 12) & 0x3f]!
134
- encoded[i + 2] = integerToCharacter[(y >> 6) & 0x3f]!
135
- encoded[i + 3] = integerToCharacter[y & 0x3f]!
136
- }
137
-
138
- const k = value.length % 3
139
- const end = Math.floor(value.length / 3) * 4 + (k && k + 1)
140
- let base64 = decoder.decode(new Uint8Array(encoded.buffer, 0, end))
141
- if (pad && k === 1) base64 += '=='
142
- if (pad && k === 2) base64 += '='
143
- if (url) base64 = base64.replaceAll('+', '-').replaceAll('/', '_')
144
- return base64
53
+ return internal.fromBytes(value, options)
145
54
  }
146
55
 
147
56
  export declare namespace fromBytes {
@@ -307,54 +216,7 @@ export declare namespace fromString {
307
216
  * @returns The Base64 decoded {@link ox#Bytes.Bytes}.
308
217
  */
309
218
  export function toBytes(value: string): Bytes.Bytes {
310
- // Strip trailing '=' padding (only at the very end).
311
- let bodyEnd = value.length
312
- let pad = 0
313
- while (bodyEnd > 0 && value.charCodeAt(bodyEnd - 1) === 61 /* '=' */) {
314
- bodyEnd--
315
- pad++
316
- }
317
-
318
- const size = bodyEnd
319
- // Reject impossible lengths and excessive padding.
320
- if (size % 4 === 1) throw new InvalidLengthError({ length: value.length })
321
- if (pad > 2) throw new InvalidPaddingError({ padding: pad })
322
-
323
- if (nativeFromBase64) {
324
- try {
325
- // `base64url-or-base64` accepts both alphabets transparently.
326
- return nativeFromBase64(value.slice(0, bodyEnd), {
327
- alphabet: 'base64url-or-base64',
328
- lastChunkHandling: 'loose',
329
- })
330
- } catch {
331
- // Fall through to the JS path so we throw the typed error class.
332
- }
333
- }
334
-
335
- // Validate characters: every char must be in the standard or URL-safe
336
- // alphabet, and '=' may not appear in the body (only stripped trailing
337
- // padding).
338
- const decoded = new Uint8Array(
339
- (size >> 2) * 3 + (size % 4 ? (size % 4) - 1 : 0),
340
- )
341
- let acc = 0
342
- let bits = 0
343
- let n = 0
344
- for (let i = 0; i < size; i++) {
345
- const code = value.charCodeAt(i)
346
- if (code === 61 /* '=' */)
347
- throw new InvalidCharacterError({ character: '=' })
348
- const v = characterToInteger[code]!
349
- if (v === 0xff) throw new InvalidCharacterError({ character: value[i]! })
350
- acc = (acc << 6) | v
351
- bits += 6
352
- if (bits >= 8) {
353
- bits -= 8
354
- decoded[n++] = (acc >>> bits) & 0xff
355
- }
356
- }
357
- return decoded
219
+ return internal.toBytes(value)
358
220
  }
359
221
 
360
222
  export declare namespace toBytes {
@@ -409,29 +271,20 @@ export declare namespace toString {
409
271
  type ErrorType = toBytes.ErrorType | Errors.GlobalErrorType
410
272
  }
411
273
 
412
- /** Thrown when a Base64 string contains an invalid character. */
413
- export class InvalidCharacterError extends Errors.BaseError {
414
- override readonly name = 'Base64.InvalidCharacterError'
415
-
416
- constructor({ character }: { character: string }) {
417
- super(`Invalid Base64 character: "${character}".`)
418
- }
419
- }
274
+ /** Thrown when a Base64 string contains a character outside its alphabet. */
275
+ export const InvalidCharacterError = internal.InvalidCharacterError
276
+ export type InvalidCharacterError = InstanceType<
277
+ typeof internal.InvalidCharacterError
278
+ >
420
279
 
421
280
  /** Thrown when a Base64 string has an impossible length. */
422
- export class InvalidLengthError extends Errors.BaseError {
423
- override readonly name = 'Base64.InvalidLengthError'
424
-
425
- constructor({ length }: { length: number }) {
426
- super(`Invalid Base64 input length \`${length}\`.`)
427
- }
428
- }
429
-
430
- /** Thrown when a Base64 string contains too many trailing `=` padding characters. */
431
- export class InvalidPaddingError extends Errors.BaseError {
432
- override readonly name = 'Base64.InvalidPaddingError'
433
-
434
- constructor({ padding }: { padding: number }) {
435
- super(`Invalid Base64 padding length \`${padding}\` (must be 0, 1, or 2).`)
436
- }
437
- }
281
+ export const InvalidLengthError = internal.InvalidLengthError
282
+ export type InvalidLengthError = InstanceType<
283
+ typeof internal.InvalidLengthError
284
+ >
285
+
286
+ /** Thrown when a Base64 string carries more than two padding characters. */
287
+ export const InvalidPaddingError = internal.InvalidPaddingError
288
+ export type InvalidPaddingError = InstanceType<
289
+ typeof internal.InvalidPaddingError
290
+ >
@@ -1,6 +1,5 @@
1
- import { blake3 } from '@noble/hashes/blake3.js'
2
-
3
1
  import * as Bytes from './Bytes.js'
2
+ import * as engine from './internal/hash.js'
4
3
  import type { OneOf } from './internal/types.js'
5
4
 
6
5
  /** Type that defines a Binary State Tree instance. */
@@ -276,5 +275,5 @@ function bitsToBytes(bits: number[]): Bytes.Bytes {
276
275
  function hash(bytes: Bytes.Bytes | undefined): Bytes.Bytes {
277
276
  if (!bytes) return new Uint8Array(32).fill(0)
278
277
  if (!bytes.some((byte) => byte !== 0)) return new Uint8Array(32).fill(0)
279
- return blake3(bytes)
278
+ return engine.blake3(bytes)
280
279
  }