ox 1.1.2 → 1.3.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 (296) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/dist/core/AbiFunction.d.ts +1 -1
  3. package/dist/core/AbiFunction.d.ts.map +1 -1
  4. package/dist/core/AbiFunction.js +6 -2
  5. package/dist/core/AbiFunction.js.map +1 -1
  6. package/dist/core/AbiParameters.d.ts +1 -1
  7. package/dist/core/AbiParameters.d.ts.map +1 -1
  8. package/dist/core/AbiParameters.js +1 -13
  9. package/dist/core/AbiParameters.js.map +1 -1
  10. package/dist/core/AesGcm.d.ts +36 -1
  11. package/dist/core/AesGcm.d.ts.map +1 -1
  12. package/dist/core/AesGcm.js +44 -0
  13. package/dist/core/AesGcm.js.map +1 -1
  14. package/dist/core/Ed25519.d.ts +46 -1
  15. package/dist/core/Ed25519.d.ts.map +1 -1
  16. package/dist/core/Ed25519.js +43 -0
  17. package/dist/core/Ed25519.js.map +1 -1
  18. package/dist/core/Engine.d.ts +1 -1
  19. package/dist/core/Engine.d.ts.map +1 -1
  20. package/dist/core/Engine.js.map +1 -1
  21. package/dist/core/Hash.d.ts +200 -1
  22. package/dist/core/Hash.d.ts.map +1 -1
  23. package/dist/core/Hash.js +207 -0
  24. package/dist/core/Hash.js.map +1 -1
  25. package/dist/core/Hex.d.ts.map +1 -1
  26. package/dist/core/Hex.js +1 -4
  27. package/dist/core/Hex.js.map +1 -1
  28. package/dist/core/Rlp.d.ts +32 -0
  29. package/dist/core/Rlp.d.ts.map +1 -1
  30. package/dist/core/Rlp.js +146 -0
  31. package/dist/core/Rlp.js.map +1 -1
  32. package/dist/core/Secp256k1.d.ts +46 -1
  33. package/dist/core/Secp256k1.d.ts.map +1 -1
  34. package/dist/core/Secp256k1.js +48 -0
  35. package/dist/core/Secp256k1.js.map +1 -1
  36. package/dist/core/WebAuthn.d.ts +224 -0
  37. package/dist/core/WebAuthn.d.ts.map +1 -0
  38. package/dist/core/WebAuthn.js +343 -0
  39. package/dist/core/WebAuthn.js.map +1 -0
  40. package/dist/core/WebAuthnP256.d.ts +46 -50
  41. package/dist/core/WebAuthnP256.d.ts.map +1 -1
  42. package/dist/core/WebAuthnP256.js +44 -50
  43. package/dist/core/WebAuthnP256.js.map +1 -1
  44. package/dist/core/internal/abiParameters.d.ts +7 -87
  45. package/dist/core/internal/abiParameters.d.ts.map +1 -1
  46. package/dist/core/internal/abiParameters.js +339 -194
  47. package/dist/core/internal/abiParameters.js.map +1 -1
  48. package/dist/core/internal/engine.d.ts +35 -2
  49. package/dist/core/internal/engine.d.ts.map +1 -1
  50. package/dist/core/internal/engine.js +12 -1
  51. package/dist/core/internal/engine.js.map +1 -1
  52. package/dist/core/internal/hash.d.ts +10 -0
  53. package/dist/core/internal/hash.d.ts.map +1 -1
  54. package/dist/core/internal/hash.js +26 -1
  55. package/dist/core/internal/hash.js.map +1 -1
  56. package/dist/index.d.ts +23 -14
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +23 -14
  59. package/dist/index.js.map +1 -1
  60. package/dist/node/Engine.d.ts +1 -1
  61. package/dist/node/Engine.d.ts.map +1 -1
  62. package/dist/node/Engine.js.map +1 -1
  63. package/dist/node/Hash.d.ts +6 -4
  64. package/dist/node/Hash.d.ts.map +1 -1
  65. package/dist/node/Hash.js +35 -3
  66. package/dist/node/Hash.js.map +1 -1
  67. package/dist/tempo/AuthorizationTempo.d.ts +6 -6
  68. package/dist/tempo/AuthorizationTempo.js +6 -6
  69. package/dist/tempo/KeyAuthorization.d.ts +3 -8
  70. package/dist/tempo/KeyAuthorization.d.ts.map +1 -1
  71. package/dist/tempo/KeyAuthorization.js +3 -8
  72. package/dist/tempo/KeyAuthorization.js.map +1 -1
  73. package/dist/tempo/SignatureEnvelope.d.ts +8 -8
  74. package/dist/tempo/SignatureEnvelope.js +8 -8
  75. package/dist/trusted-setups/Paths.d.ts +1 -0
  76. package/dist/trusted-setups/Paths.d.ts.map +1 -1
  77. package/dist/trusted-setups/Paths.js +1 -0
  78. package/dist/trusted-setups/Paths.js.map +1 -1
  79. package/dist/trusted-setups/Setups.d.ts +35 -0
  80. package/dist/trusted-setups/Setups.d.ts.map +1 -0
  81. package/dist/trusted-setups/Setups.js +29 -0
  82. package/dist/trusted-setups/Setups.js.map +1 -0
  83. package/dist/trusted-setups/index.d.ts +20 -0
  84. package/dist/trusted-setups/index.d.ts.map +1 -1
  85. package/dist/trusted-setups/index.js +20 -0
  86. package/dist/trusted-setups/index.js.map +1 -1
  87. package/dist/trusted-setups/internal/paths.d.ts.map +1 -1
  88. package/dist/trusted-setups/internal/paths.js +1 -1
  89. package/dist/trusted-setups/internal/paths.js.map +1 -1
  90. package/dist/trusted-setups/internal/setups/mainnet.d.ts +7 -0
  91. package/dist/trusted-setups/internal/setups/mainnet.d.ts.map +1 -0
  92. package/dist/trusted-setups/internal/setups/mainnet.js +11 -0
  93. package/dist/trusted-setups/internal/setups/mainnet.js.map +1 -0
  94. package/dist/wasm/Engine.d.ts +4 -3
  95. package/dist/wasm/Engine.d.ts.map +1 -1
  96. package/dist/wasm/Engine.js +5 -5
  97. package/dist/wasm/Engine.js.map +1 -1
  98. package/dist/wasm/Hash.d.ts +1 -1
  99. package/dist/wasm/Hash.d.ts.map +1 -1
  100. package/dist/wasm/Hash.js +5 -0
  101. package/dist/wasm/Hash.js.map +1 -1
  102. package/dist/wasm/Keystore.d.ts +23 -9
  103. package/dist/wasm/Keystore.d.ts.map +1 -1
  104. package/dist/wasm/Keystore.js +30 -13
  105. package/dist/wasm/Keystore.js.map +1 -1
  106. package/dist/wasm/Kzg.d.ts +112 -0
  107. package/dist/wasm/Kzg.d.ts.map +1 -0
  108. package/dist/wasm/Kzg.js +333 -0
  109. package/dist/wasm/Kzg.js.map +1 -0
  110. package/dist/wasm/Secp256k1.d.ts +55 -0
  111. package/dist/wasm/Secp256k1.d.ts.map +1 -0
  112. package/dist/wasm/Secp256k1.js +181 -0
  113. package/dist/wasm/Secp256k1.js.map +1 -0
  114. package/dist/wasm/index.d.ts +44 -1
  115. package/dist/wasm/index.d.ts.map +1 -1
  116. package/dist/wasm/index.js +44 -1
  117. package/dist/wasm/index.js.map +1 -1
  118. package/dist/wasm/internal/blake3.d.ts +10 -1
  119. package/dist/wasm/internal/blake3.d.ts.map +1 -1
  120. package/dist/wasm/internal/blake3.js +12 -1
  121. package/dist/wasm/internal/blake3.js.map +1 -1
  122. package/dist/wasm/internal/blake3.wasm.d.ts +3 -1
  123. package/dist/wasm/internal/blake3.wasm.d.ts.map +1 -1
  124. package/dist/wasm/internal/blake3.wasm.js +3 -1
  125. package/dist/wasm/internal/blake3.wasm.js.map +1 -1
  126. package/dist/wasm/internal/hash.d.ts +9 -0
  127. package/dist/wasm/internal/hash.d.ts.map +1 -1
  128. package/dist/wasm/internal/hash.js +13 -1
  129. package/dist/wasm/internal/hash.js.map +1 -1
  130. package/dist/wasm/internal/hashState.d.ts +25 -0
  131. package/dist/wasm/internal/hashState.d.ts.map +1 -0
  132. package/dist/wasm/internal/hashState.js +105 -0
  133. package/dist/wasm/internal/hashState.js.map +1 -0
  134. package/dist/wasm/internal/hashes.d.ts +12 -1
  135. package/dist/wasm/internal/hashes.d.ts.map +1 -1
  136. package/dist/wasm/internal/hashes.js +18 -1
  137. package/dist/wasm/internal/hashes.js.map +1 -1
  138. package/dist/wasm/internal/hashes.wasm.d.ts +11 -3
  139. package/dist/wasm/internal/hashes.wasm.d.ts.map +1 -1
  140. package/dist/wasm/internal/hashes.wasm.js +11 -3
  141. package/dist/wasm/internal/hashes.wasm.js.map +1 -1
  142. package/dist/wasm/internal/instantiate.d.ts +12 -0
  143. package/dist/wasm/internal/instantiate.d.ts.map +1 -1
  144. package/dist/wasm/internal/instantiate.js +23 -7
  145. package/dist/wasm/internal/instantiate.js.map +1 -1
  146. package/dist/wasm/internal/keystore.d.ts +10 -0
  147. package/dist/wasm/internal/keystore.d.ts.map +1 -0
  148. package/dist/wasm/internal/keystore.js +10 -0
  149. package/dist/wasm/internal/keystore.js.map +1 -0
  150. package/dist/wasm/internal/kzg.d.ts +17 -0
  151. package/dist/wasm/internal/kzg.d.ts.map +1 -0
  152. package/dist/wasm/internal/kzg.js +8 -0
  153. package/dist/wasm/internal/kzg.js.map +1 -0
  154. package/dist/wasm/internal/kzg.wasm.d.ts +3 -0
  155. package/dist/wasm/internal/kzg.wasm.d.ts.map +1 -0
  156. package/dist/wasm/internal/kzg.wasm.js +10 -0
  157. package/dist/wasm/internal/kzg.wasm.js.map +1 -0
  158. package/dist/wasm/internal/scrypt.d.ts +16 -0
  159. package/dist/wasm/internal/scrypt.d.ts.map +1 -0
  160. package/dist/wasm/internal/scrypt.js +78 -0
  161. package/dist/wasm/internal/scrypt.js.map +1 -0
  162. package/dist/wasm/internal/scrypt.wasm.d.ts +7 -0
  163. package/dist/wasm/internal/scrypt.wasm.d.ts.map +1 -0
  164. package/dist/wasm/internal/scrypt.wasm.js +14 -0
  165. package/dist/wasm/internal/scrypt.wasm.js.map +1 -0
  166. package/dist/wasm/internal/secp256k1.d.ts +16 -0
  167. package/dist/wasm/internal/secp256k1.d.ts.map +1 -0
  168. package/dist/wasm/internal/secp256k1.js +20 -0
  169. package/dist/wasm/internal/secp256k1.js.map +1 -0
  170. package/dist/wasm/internal/secp256k1.wasm.d.ts +3 -0
  171. package/dist/wasm/internal/secp256k1.wasm.d.ts.map +1 -0
  172. package/dist/wasm/internal/secp256k1.wasm.js +10 -0
  173. package/dist/wasm/internal/secp256k1.wasm.js.map +1 -0
  174. package/dist/webauthn/Authentication.d.ts +2 -0
  175. package/dist/webauthn/Authentication.d.ts.map +1 -1
  176. package/dist/webauthn/Authentication.js +2 -1
  177. package/dist/webauthn/Authentication.js.map +1 -1
  178. package/dist/webauthn/Registration.d.ts.map +1 -1
  179. package/dist/webauthn/Registration.js +2 -1
  180. package/dist/webauthn/Registration.js.map +1 -1
  181. package/dist/webauthn/Types.d.ts +27 -6
  182. package/dist/webauthn/Types.d.ts.map +1 -1
  183. package/dist/webauthn/internal/utils.d.ts.map +1 -1
  184. package/dist/webauthn/internal/utils.js +35 -9
  185. package/dist/webauthn/internal/utils.js.map +1 -1
  186. package/dist/zod/TypedData.d.ts +2 -2
  187. package/package.json +27 -2
  188. package/src/benchmarks/Ox.bench.ts +6 -0
  189. package/src/benchmarks/OxNode.bench.ts +8 -0
  190. package/src/benchmarks/OxV0.bench.ts +4 -0
  191. package/src/benchmarks/OxWasm.bench.ts +22 -0
  192. package/src/core/AbiFunction.ts +5 -5
  193. package/src/core/AbiParameters.ts +8 -20
  194. package/src/core/AesGcm.ts +86 -1
  195. package/src/core/Ed25519.ts +87 -1
  196. package/src/core/Engine.ts +1 -0
  197. package/src/core/Hash.ts +321 -1
  198. package/src/core/Hex.ts +1 -4
  199. package/src/core/Rlp.ts +172 -5
  200. package/src/core/Secp256k1.ts +92 -1
  201. package/src/core/WebAuthn.ts +579 -0
  202. package/src/core/WebAuthnP256.ts +47 -50
  203. package/src/core/_test/AbiFunction.test.ts +9 -0
  204. package/src/core/_test/AbiParameters.differential.fuzz.ts +156 -0
  205. package/src/core/_test/AbiParameters.encode.test.ts +22 -0
  206. package/src/core/_test/AbiParameters.fuzz.ts +4 -0
  207. package/src/core/_test/AesGcm.test.ts +76 -0
  208. package/src/core/_test/Block.test.ts +9 -2
  209. package/src/core/_test/Ed25519.test-d.ts +13 -1
  210. package/src/core/_test/Ed25519.test.ts +120 -1
  211. package/src/core/_test/Engine.test-d.ts +9 -0
  212. package/src/core/_test/Engine.test.ts +1 -1
  213. package/src/core/_test/Hash.test-d.ts +41 -0
  214. package/src/core/_test/Hash.test.ts +278 -1
  215. package/src/core/_test/Hash.vectors.test.ts +1 -2
  216. package/src/core/_test/Hex.test.ts +2 -0
  217. package/src/core/_test/Rlp.test-d.ts +18 -0
  218. package/src/core/_test/Rlp.test.ts +109 -0
  219. package/src/core/_test/Secp256k1.test-d.ts +14 -0
  220. package/src/core/_test/Secp256k1.test.ts +91 -1
  221. package/src/core/_test/Transaction.test.ts +11 -2
  222. package/src/core/_test/WebAuthn.test-d.ts +142 -0
  223. package/src/core/_test/WebAuthn.test.ts +766 -0
  224. package/src/core/_test/index.test.ts +1 -0
  225. package/src/core/internal/abiParameters.ts +466 -326
  226. package/src/core/internal/engine.ts +47 -2
  227. package/src/core/internal/hash.ts +53 -1
  228. package/src/index.ts +24 -14
  229. package/src/node/Engine.ts +1 -0
  230. package/src/node/Hash.ts +43 -6
  231. package/src/node/_test/Engine.test-d.ts +1 -0
  232. package/src/node/_test/Engine.test.ts +2 -0
  233. package/src/node/_test/Hash.test-d.ts +11 -0
  234. package/src/node/_test/Hash.test.ts +46 -0
  235. package/src/tempo/AuthorizationTempo.ts +6 -6
  236. package/src/tempo/KeyAuthorization.ts +3 -8
  237. package/src/tempo/SignatureEnvelope.ts +8 -8
  238. package/src/trusted-setups/Paths.ts +1 -0
  239. package/src/trusted-setups/README.md +39 -0
  240. package/src/trusted-setups/Setups.ts +46 -0
  241. package/src/trusted-setups/_test/Paths.test.ts +16 -0
  242. package/src/trusted-setups/_test/Setups.test-d.ts +7 -0
  243. package/src/trusted-setups/_test/Setups.test.ts +43 -0
  244. package/src/trusted-setups/_test/index.test.ts +1 -0
  245. package/src/trusted-setups/index.ts +21 -0
  246. package/src/trusted-setups/internal/paths.ts +4 -1
  247. package/src/trusted-setups/internal/setups/mainnet.source.json +7 -0
  248. package/src/trusted-setups/internal/setups/mainnet.ts +16 -0
  249. package/src/version.ts +1 -1
  250. package/src/wasm/Engine.ts +9 -6
  251. package/src/wasm/Hash.ts +10 -0
  252. package/src/wasm/Keystore.bench.ts +26 -0
  253. package/src/wasm/Keystore.ts +32 -14
  254. package/src/wasm/Kzg.bench.ts +63 -0
  255. package/src/wasm/Kzg.ts +518 -0
  256. package/src/wasm/Secp256k1.bench.ts +79 -0
  257. package/src/wasm/Secp256k1.ts +248 -0
  258. package/src/wasm/_test/Engine.test-d.ts +2 -0
  259. package/src/wasm/_test/Engine.test.ts +5 -0
  260. package/src/wasm/_test/Hash.browser.test.ts +31 -0
  261. package/src/wasm/_test/Hash.test-d.ts +17 -0
  262. package/src/wasm/_test/Hash.test.ts +252 -3
  263. package/src/wasm/_test/Keystore.browser.test.ts +31 -0
  264. package/src/wasm/_test/Keystore.fuzz.ts +50 -0
  265. package/src/wasm/_test/Keystore.test-d.ts +10 -1
  266. package/src/wasm/_test/Keystore.test.ts +289 -4
  267. package/src/wasm/_test/Kzg.test-d.ts +19 -0
  268. package/src/wasm/_test/Kzg.test.ts +220 -0
  269. package/src/wasm/_test/Runtime.test.ts +9 -0
  270. package/src/wasm/_test/Secp256k1.test-d.ts +35 -0
  271. package/src/wasm/_test/Secp256k1.test.ts +354 -0
  272. package/src/wasm/index.ts +46 -1
  273. package/src/wasm/internal/blake3.ts +23 -2
  274. package/src/wasm/internal/blake3.wasm.ts +4 -1
  275. package/src/wasm/internal/hash.ts +27 -1
  276. package/src/wasm/internal/hashState.ts +154 -0
  277. package/src/wasm/internal/hashes.ts +56 -15
  278. package/src/wasm/internal/hashes.wasm.ts +15 -3
  279. package/src/wasm/internal/instantiate.ts +29 -9
  280. package/src/wasm/internal/keystore.ts +19 -0
  281. package/src/wasm/internal/kzg.ts +50 -0
  282. package/src/wasm/internal/kzg.wasm.ts +11 -0
  283. package/src/wasm/internal/scrypt.ts +131 -0
  284. package/src/wasm/internal/scrypt.wasm.ts +17 -0
  285. package/src/wasm/internal/secp256k1.ts +62 -0
  286. package/src/wasm/internal/secp256k1.wasm.ts +11 -0
  287. package/src/webauthn/Authentication.ts +4 -0
  288. package/src/webauthn/Registration.ts +2 -0
  289. package/src/webauthn/Types.ts +32 -2
  290. package/src/webauthn/_test/Authentication.test.ts +123 -1
  291. package/src/webauthn/_test/Registration.test.ts +26 -6
  292. package/src/webauthn/_test/WebAuthn.browser.test.ts +28 -0
  293. package/src/webauthn/internal/utils.ts +41 -8
  294. package/wasm/vendor/c-kzg-4844/LICENSE +201 -0
  295. package/wasm/vendor/c-kzg-4844/blst/LICENSE +201 -0
  296. package/src/trusted-setups/internal/setups/mainnet.txt +0 -4163
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  /** @internal */
2
- export const version = '1.1.2'
2
+ export const version = '1.3.0'
@@ -2,7 +2,7 @@ import * as CoreEngine from '../core/Engine.js'
2
2
  import type * as Errors from '../core/Errors.js'
3
3
  import * as Ed25519 from './Ed25519.js'
4
4
  import * as Hash from './Hash.js'
5
- import * as Keystore from './Keystore.js'
5
+ import * as keystore from './internal/keystore.js'
6
6
  import * as Mnemonic from './Mnemonic.js'
7
7
  import * as X25519 from './X25519.js'
8
8
  import type * as internal from './internal/instantiate.js'
@@ -24,6 +24,7 @@ export type {
24
24
  Eddsa,
25
25
  Engine,
26
26
  Hash,
27
+ HashState,
27
28
  Keystore,
28
29
  Mnemonic,
29
30
  } from '../core/Engine.js'
@@ -54,7 +55,7 @@ export async function install(): Promise<install.ReturnType> {
54
55
  return CoreEngine.install({
55
56
  Ed25519: Ed25519.engine(),
56
57
  Hash: Hash.engine(),
57
- Keystore: Keystore.engine(),
58
+ Keystore: keystore.engine(),
58
59
  Mnemonic: Mnemonic.engine(),
59
60
  X25519: X25519.engine(),
60
61
  })
@@ -91,17 +92,17 @@ export declare namespace install {
91
92
  * @returns An engine, ready to install.
92
93
  */
93
94
  export async function engine(): Promise<engine.ReturnType> {
94
- const [ed25519, hash, keystore, mnemonic, x25519] = await Promise.all([
95
+ const [ed25519, hash, keystoreEngine, mnemonic, x25519] = await Promise.all([
95
96
  Ed25519.engine(),
96
97
  Hash.engine(),
97
- Keystore.engine(),
98
+ keystore.engine(),
98
99
  Mnemonic.engine(),
99
100
  X25519.engine(),
100
101
  ])
101
102
  return {
102
103
  Ed25519: ed25519,
103
104
  Hash: hash,
104
- Keystore: keystore,
105
+ Keystore: keystoreEngine,
105
106
  Mnemonic: mnemonic,
106
107
  X25519: x25519,
107
108
  }
@@ -112,7 +113,9 @@ export declare namespace engine {
112
113
  type ReturnType = {
113
114
  Ed25519: Ed25519.engine.ReturnType
114
115
  Hash: Hash.engine.ReturnType
115
- Keystore: Keystore.engine.ReturnType
116
+ Keystore: {
117
+ pbkdf2Sha256: NonNullable<CoreEngine.Keystore['pbkdf2Sha256']>
118
+ }
116
119
  Mnemonic: Mnemonic.engine.ReturnType
117
120
  X25519: X25519.engine.ReturnType
118
121
  }
package/src/wasm/Hash.ts CHANGED
@@ -65,6 +65,11 @@ export async function engine(): Promise<engine.ReturnType> {
65
65
 
66
66
  return {
67
67
  blake3: (input) => blake3.hash(blake3Module, input),
68
+ createBlake3: () => blake3.create(blake3Module),
69
+ createHmacSha256: (key) => hash.createHmacSha256(module, key),
70
+ createKeccak256: () => hashes.create(module, 'keccak256'),
71
+ createRipemd160: () => hashes.create(module, 'ripemd160'),
72
+ createSha256: () => hashes.create(module, 'sha256'),
68
73
  hmacSha256: (key, message) => hash.hmacSha256(module, key, message),
69
74
  keccak256: (input) => call('keccak256', input),
70
75
  ripemd160: (input) => call('ripemd160', input),
@@ -78,6 +83,11 @@ export declare namespace engine {
78
83
  type ReturnType = {
79
84
  [key in
80
85
  | 'blake3'
86
+ | 'createBlake3'
87
+ | 'createHmacSha256'
88
+ | 'createKeccak256'
89
+ | 'createRipemd160'
90
+ | 'createSha256'
81
91
  | 'hmacSha256'
82
92
  | 'keccak256'
83
93
  | 'ripemd160'
@@ -0,0 +1,26 @@
1
+ import { scrypt as scrypt_noble } from '@noble/hashes/scrypt.js'
2
+ import { bench, describe } from 'vp/test'
3
+ import { engine as wasmEngine } from './Keystore.js'
4
+
5
+ // Run `pnpm bench --project core src/wasm/Keystore.bench.ts`. These cases expose
6
+ // the effect of block size, parallelization, and the public defaults.
7
+ const cases = [
8
+ { N: 1024, dkLen: 32, p: 1, r: 1 },
9
+ { N: 16_384, dkLen: 32, p: 1, r: 8 },
10
+ { N: 262_144, dkLen: 32, p: 8, r: 1 },
11
+ ] as const
12
+
13
+ const wasm = await wasmEngine()
14
+ const password = new Uint8Array(16).fill(0x5a)
15
+ const salt = new Uint8Array(32).fill(0xa5)
16
+
17
+ for (const options of cases)
18
+ describe(`scrypt (N=${options.N}, r=${options.r}, p=${options.p})`, () => {
19
+ bench('ox', () => {
20
+ scrypt_noble(password, salt, options)
21
+ })
22
+
23
+ bench('ox/wasm', () => {
24
+ wasm.scrypt(password, salt, options)
25
+ })
26
+ })
@@ -1,21 +1,33 @@
1
1
  import type * as Engine from '../core/Engine.js'
2
2
  import type * as Errors from '../core/Errors.js'
3
- import * as hashes from './internal/hashes.js'
4
3
  import * as internal from './internal/instantiate.js'
5
- import * as pbkdf2 from './internal/pbkdf2.js'
4
+ import * as keystore from './internal/keystore.js'
5
+ import * as scrypt from './internal/scrypt.js'
6
6
 
7
7
  export * from '../core/Keystore.js'
8
8
  export { MemoryError } from './internal/instantiate.js'
9
9
 
10
10
  /**
11
- * Compiles the WASM implementation of the [`Keystore`](/api/Keystore) PBKDF2
12
- * primitive, without installing it.
11
+ * Compiles the WASM implementations of the [`Keystore`](/api/Keystore)
12
+ * synchronous key-derivation primitives, without installing them.
13
13
  *
14
- * Most callers want
15
- * [`Engine.install`](/wasm/crypto/Engine/install) instead, which compiles every
16
- * implementation this entrypoint provides and installs them in one call. This
17
- * provider deliberately stays synchronous and leaves AES, asynchronous PBKDF2,
18
- * and scrypt on Ox's default implementation.
14
+ * Most callers can use [`Engine.install`](/wasm/crypto/Engine/install).
15
+ * Install this factory explicitly when an application has benchmarked and
16
+ * selected WASM scrypt.
17
+ *
18
+ * This provider stays synchronous and leaves AES and asynchronous key
19
+ * derivation on Ox's default implementation.
20
+ *
21
+ * Scrypt uses a standalone artifact and grows memory only when called.
22
+ * WebAssembly cannot shrink that capacity. The provider clears its contents
23
+ * and enforces Noble's 1 GiB temporary-workspace limit.
24
+ *
25
+ * The aggregate [`Engine.install`](/wasm/crypto/Engine/install) installs only
26
+ * PBKDF2 from this provider. Install this factory explicitly to opt into
27
+ * scrypt, whose relative performance depends on its parameters and runtime.
28
+ *
29
+ * Copied inputs, derived output, and the complete workspace are cleared after
30
+ * every return or trap.
19
31
  *
20
32
  * @example
21
33
  * ```ts twoslash
@@ -25,16 +37,21 @@ export { MemoryError } from './internal/instantiate.js'
25
37
  *
26
38
  * await Engine.install({ Keystore: Keystore.engine() })
27
39
  *
28
- * Keystore.pbkdf2({ password: 'testpassword' })
40
+ * Keystore.scrypt({ password: 'testpassword' })
29
41
  * ```
30
42
  *
31
- * @returns The WASM implementation of synchronous PBKDF2-HMAC-SHA256.
43
+ * @returns The WASM implementations of synchronous PBKDF2-HMAC-SHA256 and
44
+ * scrypt.
32
45
  */
33
46
  export async function engine(): Promise<engine.ReturnType> {
34
- const module = await hashes.load()
47
+ const [keystoreEngine, scryptModule] = await Promise.all([
48
+ keystore.engine(),
49
+ scrypt.load(),
50
+ ])
35
51
  return {
36
- pbkdf2Sha256: (password, salt, options) =>
37
- pbkdf2.pbkdf2Sha256(module, password, salt, options),
52
+ ...keystoreEngine,
53
+ scrypt: (password, salt, options) =>
54
+ scrypt.derive(scryptModule, password, salt, options),
38
55
  }
39
56
  }
40
57
 
@@ -42,6 +59,7 @@ export declare namespace engine {
42
59
  /** The WASM `Keystore` primitives this module implements. */
43
60
  type ReturnType = {
44
61
  pbkdf2Sha256: NonNullable<Engine.Keystore['pbkdf2Sha256']>
62
+ scrypt: NonNullable<Engine.Keystore['scrypt']>
45
63
  }
46
64
 
47
65
  type ErrorType = internal.MemoryError | Errors.GlobalErrorType
@@ -0,0 +1,63 @@
1
+ import { afterAll, bench, describe } from 'vp/test'
2
+ import { mainnet as trustedSetup } from '../trusted-setups/Setups.js'
3
+ import { create } from './Kzg.js'
4
+
5
+ const once = {
6
+ iterations: 1,
7
+ time: 0,
8
+ warmupIterations: 0,
9
+ warmupTime: 0,
10
+ } as const
11
+
12
+ describe('create', () => {
13
+ bench(
14
+ 'precompute 0',
15
+ async () => {
16
+ const kzg = await create({ trustedSetup })
17
+ kzg.dispose()
18
+ },
19
+ once,
20
+ )
21
+
22
+ bench(
23
+ 'precompute 8',
24
+ async () => {
25
+ const kzg = await create({ precompute: 8, trustedSetup })
26
+ kzg.dispose()
27
+ },
28
+ once,
29
+ )
30
+ })
31
+
32
+ const kzg = await create({ trustedSetup })
33
+ const blob = new Uint8Array(131_072)
34
+ const commitment = kzg.blobToKzgCommitment(blob)
35
+ const { cells, proofs } = kzg.computeCellsAndKzgProofs(blob)
36
+ const indices = cells.map((_, index) => index)
37
+ const commitments = cells.map(() => commitment)
38
+ const partialIndices = indices.filter((index) => index % 2 === 0)
39
+ const partialCells = cells.filter((_, index) => index % 2 === 0)
40
+
41
+ afterAll(() => kzg.dispose())
42
+
43
+ describe('operations', () => {
44
+ bench('blobToKzgCommitment', () => {
45
+ kzg.blobToKzgCommitment(blob)
46
+ })
47
+
48
+ bench('computeCells', () => {
49
+ kzg.computeCells(blob)
50
+ })
51
+
52
+ bench('computeCellsAndKzgProofs', () => {
53
+ kzg.computeCellsAndKzgProofs(blob)
54
+ })
55
+
56
+ bench('recoverCellsAndKzgProofs', () => {
57
+ kzg.recoverCellsAndKzgProofs(partialIndices, partialCells)
58
+ })
59
+
60
+ bench('verifyCellKzgProofBatch', () => {
61
+ kzg.verifyCellKzgProofBatch(commitments, indices, cells, proofs)
62
+ })
63
+ })