@aztec/foundation 4.0.0-nightly.20250907 → 4.0.0-nightly.20260107

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 (476) hide show
  1. package/dest/array/array.d.ts +1 -9
  2. package/dest/array/array.d.ts.map +1 -1
  3. package/dest/array/array.js +0 -11
  4. package/dest/array/index.d.ts +2 -1
  5. package/dest/array/index.d.ts.map +1 -1
  6. package/dest/array/index.js +1 -0
  7. package/dest/array/sorted_array.d.ts +10 -0
  8. package/dest/array/sorted_array.d.ts.map +1 -0
  9. package/dest/array/sorted_array.js +106 -0
  10. package/dest/async-map/index.d.ts +1 -1
  11. package/dest/async-pool/index.d.ts +1 -1
  12. package/dest/bigint/index.d.ts +1 -1
  13. package/dest/bigint-buffer/index.d.ts +1 -1
  14. package/dest/branded-types/block_number.d.ts +53 -0
  15. package/dest/branded-types/block_number.d.ts.map +1 -0
  16. package/dest/branded-types/block_number.js +75 -0
  17. package/dest/branded-types/checkpoint_number.d.ts +46 -0
  18. package/dest/branded-types/checkpoint_number.d.ts.map +1 -0
  19. package/dest/branded-types/checkpoint_number.js +68 -0
  20. package/dest/branded-types/epoch.d.ts +42 -0
  21. package/dest/branded-types/epoch.d.ts.map +1 -0
  22. package/dest/branded-types/epoch.js +59 -0
  23. package/dest/branded-types/index.d.ts +6 -0
  24. package/dest/branded-types/index.d.ts.map +1 -0
  25. package/dest/branded-types/index.js +4 -0
  26. package/dest/branded-types/slot.d.ts +42 -0
  27. package/dest/branded-types/slot.d.ts.map +1 -0
  28. package/dest/branded-types/slot.js +59 -0
  29. package/dest/branded-types/types.d.ts +5 -0
  30. package/dest/branded-types/types.d.ts.map +1 -0
  31. package/dest/branded-types/types.js +1 -0
  32. package/dest/buffer/buffer16.d.ts +2 -5
  33. package/dest/buffer/buffer16.d.ts.map +1 -1
  34. package/dest/buffer/buffer16.js +4 -2
  35. package/dest/buffer/buffer32.d.ts +2 -5
  36. package/dest/buffer/buffer32.d.ts.map +1 -1
  37. package/dest/buffer/buffer32.js +4 -2
  38. package/dest/buffer/index.d.ts +1 -1
  39. package/dest/collection/array.d.ts +3 -1
  40. package/dest/collection/array.d.ts.map +1 -1
  41. package/dest/collection/array.js +12 -3
  42. package/dest/collection/index.d.ts +1 -1
  43. package/dest/collection/object.d.ts +5 -1
  44. package/dest/collection/object.d.ts.map +1 -1
  45. package/dest/collection/object.js +6 -0
  46. package/dest/committable/committable.d.ts +1 -1
  47. package/dest/committable/committable.d.ts.map +1 -1
  48. package/dest/committable/index.d.ts +1 -1
  49. package/dest/config/env_var.d.ts +2 -2
  50. package/dest/config/env_var.d.ts.map +1 -1
  51. package/dest/config/index.d.ts +12 -2
  52. package/dest/config/index.d.ts.map +1 -1
  53. package/dest/config/index.js +17 -2
  54. package/dest/config/network_config.d.ts +54 -0
  55. package/dest/config/network_config.d.ts.map +1 -0
  56. package/dest/config/network_config.js +11 -0
  57. package/dest/config/network_name.d.ts +2 -2
  58. package/dest/config/network_name.d.ts.map +1 -1
  59. package/dest/config/network_name.js +10 -2
  60. package/dest/config/secret_value.d.ts +1 -1
  61. package/dest/config/secret_value.d.ts.map +1 -1
  62. package/dest/config/secret_value.js +3 -1
  63. package/dest/crypto/aes128/index.d.ts +1 -1
  64. package/dest/crypto/aes128/index.d.ts.map +1 -1
  65. package/dest/crypto/aes128/index.js +19 -6
  66. package/dest/crypto/bls/bn254_keystore.d.ts +296 -0
  67. package/dest/crypto/bls/bn254_keystore.d.ts.map +1 -0
  68. package/dest/crypto/bls/bn254_keystore.js +218 -0
  69. package/dest/crypto/bls/index.d.ts +13 -0
  70. package/dest/crypto/bls/index.d.ts.map +1 -0
  71. package/dest/crypto/bls/index.js +87 -0
  72. package/dest/crypto/bn254/index.d.ts +39 -0
  73. package/dest/crypto/bn254/index.d.ts.map +1 -0
  74. package/dest/crypto/bn254/index.js +56 -0
  75. package/dest/crypto/ecdsa/index.d.ts +1 -1
  76. package/dest/crypto/ecdsa/index.d.ts.map +1 -1
  77. package/dest/crypto/ecdsa/index.js +58 -48
  78. package/dest/crypto/ecdsa/signature.d.ts +2 -11
  79. package/dest/crypto/ecdsa/signature.d.ts.map +1 -1
  80. package/dest/crypto/ecdsa/signature.js +2 -2
  81. package/dest/crypto/grumpkin/index.d.ts +10 -13
  82. package/dest/crypto/grumpkin/index.d.ts.map +1 -1
  83. package/dest/crypto/grumpkin/index.js +61 -55
  84. package/dest/crypto/keccak/index.d.ts +1 -1
  85. package/dest/crypto/keys/index.d.ts +2 -2
  86. package/dest/crypto/keys/index.d.ts.map +1 -1
  87. package/dest/crypto/keys/index.js +8 -5
  88. package/dest/crypto/pedersen/index.d.ts +1 -1
  89. package/dest/crypto/pedersen/pedersen.noble.d.ts +1 -1
  90. package/dest/crypto/pedersen/pedersen.wasm.d.ts +2 -2
  91. package/dest/crypto/pedersen/pedersen.wasm.d.ts.map +1 -1
  92. package/dest/crypto/pedersen/pedersen.wasm.js +24 -14
  93. package/dest/crypto/poseidon/index.d.ts +2 -2
  94. package/dest/crypto/poseidon/index.d.ts.map +1 -1
  95. package/dest/crypto/poseidon/index.js +33 -18
  96. package/dest/crypto/random/index.d.ts +1 -1
  97. package/dest/crypto/random/index.d.ts.map +1 -1
  98. package/dest/crypto/random/randomness_singleton.d.ts +1 -1
  99. package/dest/crypto/random/randomness_singleton.d.ts.map +1 -1
  100. package/dest/crypto/schnorr/index.d.ts +3 -2
  101. package/dest/crypto/schnorr/index.d.ts.map +1 -1
  102. package/dest/crypto/schnorr/index.js +30 -38
  103. package/dest/crypto/schnorr/signature.d.ts +2 -2
  104. package/dest/crypto/schnorr/signature.d.ts.map +1 -1
  105. package/dest/crypto/schnorr/signature.js +2 -2
  106. package/dest/crypto/secp256k1/index.d.ts +1 -1
  107. package/dest/crypto/secp256k1/index.d.ts.map +1 -1
  108. package/dest/crypto/secp256k1/index.js +23 -18
  109. package/dest/crypto/secp256k1-signer/index.d.ts +1 -1
  110. package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts +1 -1
  111. package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts.map +1 -1
  112. package/dest/crypto/secp256k1-signer/utils.d.ts +49 -3
  113. package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -1
  114. package/dest/crypto/secp256k1-signer/utils.js +87 -5
  115. package/dest/crypto/serialize.d.ts +1 -1
  116. package/dest/crypto/sha256/index.d.ts +2 -2
  117. package/dest/crypto/sha256/index.d.ts.map +1 -1
  118. package/dest/crypto/sha256/index.js +1 -1
  119. package/dest/crypto/sha512/index.d.ts +3 -3
  120. package/dest/crypto/sha512/index.d.ts.map +1 -1
  121. package/dest/crypto/sha512/index.js +1 -1
  122. package/dest/crypto/signature/index.d.ts +2 -2
  123. package/dest/crypto/signature/index.d.ts.map +1 -1
  124. package/dest/crypto/sync/index.d.ts +1 -1
  125. package/dest/crypto/sync/index.js +1 -1
  126. package/dest/crypto/sync/pedersen/index.d.ts +2 -2
  127. package/dest/crypto/sync/pedersen/index.d.ts.map +1 -1
  128. package/dest/crypto/sync/pedersen/index.js +18 -11
  129. package/dest/crypto/sync/poseidon/index.d.ts +2 -2
  130. package/dest/crypto/sync/poseidon/index.d.ts.map +1 -1
  131. package/dest/crypto/sync/poseidon/index.js +28 -13
  132. package/dest/{fields/bls12_fields.d.ts → curves/bls12/field.d.ts} +3 -3
  133. package/dest/curves/bls12/field.d.ts.map +1 -0
  134. package/dest/{fields/bls12_fields.js → curves/bls12/field.js} +12 -9
  135. package/dest/curves/bls12/index.d.ts +3 -0
  136. package/dest/curves/bls12/index.d.ts.map +1 -0
  137. package/dest/curves/bls12/index.js +2 -0
  138. package/dest/{fields/bls12_point.d.ts → curves/bls12/point.d.ts} +11 -20
  139. package/dest/curves/bls12/point.d.ts.map +1 -0
  140. package/dest/{fields/bls12_point.js → curves/bls12/point.js} +17 -15
  141. package/dest/curves/bn254/field.d.ts +180 -0
  142. package/dest/curves/bn254/field.d.ts.map +1 -0
  143. package/dest/{fields/fields.js → curves/bn254/field.js} +71 -59
  144. package/dest/curves/bn254/index.d.ts +3 -0
  145. package/dest/curves/bn254/index.d.ts.map +1 -0
  146. package/dest/curves/bn254/index.js +2 -0
  147. package/dest/curves/bn254/point.d.ts +54 -0
  148. package/dest/curves/bn254/point.d.ts.map +1 -0
  149. package/dest/curves/bn254/point.js +143 -0
  150. package/dest/curves/grumpkin/index.d.ts +10 -0
  151. package/dest/curves/grumpkin/index.d.ts.map +1 -0
  152. package/dest/curves/grumpkin/index.js +3 -0
  153. package/dest/{fields → curves/grumpkin}/point.d.ts +13 -13
  154. package/dest/curves/grumpkin/point.d.ts.map +1 -0
  155. package/dest/{fields → curves/grumpkin}/point.js +24 -7
  156. package/dest/decorators/index.d.ts +1 -1
  157. package/dest/decorators/memoize.d.ts +1 -1
  158. package/dest/decorators/memoize.d.ts.map +1 -1
  159. package/dest/error/index.d.ts +4 -4
  160. package/dest/error/index.d.ts.map +1 -1
  161. package/dest/eth-address/index.d.ts +14 -4
  162. package/dest/eth-address/index.d.ts.map +1 -1
  163. package/dest/eth-address/index.js +26 -2
  164. package/dest/eth-signature/eth_signature.d.ts +1 -4
  165. package/dest/eth-signature/eth_signature.d.ts.map +1 -1
  166. package/dest/eth-signature/eth_signature.js +2 -4
  167. package/dest/eth-signature/index.d.ts +1 -1
  168. package/dest/fs/index.d.ts +1 -1
  169. package/dest/fs/run_in_dir.d.ts +1 -1
  170. package/dest/fs/try_rm_dir.d.ts +1 -1
  171. package/dest/iterable/all.d.ts +1 -1
  172. package/dest/iterable/filter.d.ts +1 -1
  173. package/dest/iterable/index.d.ts +1 -1
  174. package/dest/iterable/isAsyncIt.d.ts +1 -1
  175. package/dest/iterable/map.d.ts +1 -1
  176. package/dest/iterable/peek.d.ts +1 -1
  177. package/dest/iterable/sort.d.ts +1 -1
  178. package/dest/iterable/take.d.ts +1 -1
  179. package/dest/iterable/toArray.d.ts +1 -1
  180. package/dest/iterator/filter.d.ts +3 -0
  181. package/dest/iterator/filter.d.ts.map +1 -0
  182. package/dest/iterator/filter.js +7 -0
  183. package/dest/iterator/index.d.ts +2 -0
  184. package/dest/iterator/index.d.ts.map +1 -0
  185. package/dest/iterator/index.js +1 -0
  186. package/dest/json-rpc/client/fetch.d.ts +1 -1
  187. package/dest/json-rpc/client/index.d.ts +1 -1
  188. package/dest/json-rpc/client/safe_json_rpc_client.d.ts +1 -1
  189. package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
  190. package/dest/json-rpc/client/safe_json_rpc_client.js +9 -0
  191. package/dest/json-rpc/client/undici.d.ts +1 -1
  192. package/dest/json-rpc/convert.d.ts +1 -1
  193. package/dest/json-rpc/errors.d.ts +1 -1
  194. package/dest/json-rpc/errors.d.ts.map +1 -1
  195. package/dest/json-rpc/fixtures/class_a.d.ts +3 -3
  196. package/dest/json-rpc/fixtures/class_a.d.ts.map +1 -1
  197. package/dest/json-rpc/fixtures/class_b.d.ts +3 -3
  198. package/dest/json-rpc/fixtures/class_b.d.ts.map +1 -1
  199. package/dest/json-rpc/fixtures/test_state.d.ts +1 -1
  200. package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -1
  201. package/dest/json-rpc/index.d.ts +1 -1
  202. package/dest/json-rpc/js_utils.d.ts +1 -1
  203. package/dest/json-rpc/js_utils.d.ts.map +1 -1
  204. package/dest/json-rpc/server/index.d.ts +1 -1
  205. package/dest/json-rpc/server/safe_json_rpc_server.d.ts +1 -1
  206. package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
  207. package/dest/json-rpc/test/index.d.ts +1 -1
  208. package/dest/json-rpc/test/integration.d.ts +1 -1
  209. package/dest/log/console.d.ts +1 -1
  210. package/dest/log/gcloud-logger-config.d.ts +1 -1
  211. package/dest/log/gcloud-logger-config.d.ts.map +1 -1
  212. package/dest/log/index.d.ts +1 -1
  213. package/dest/log/libp2p_logger.d.ts +1 -1
  214. package/dest/log/log-filters.d.ts +1 -1
  215. package/dest/log/log-levels.d.ts +1 -1
  216. package/dest/log/log_fn.d.ts +2 -2
  217. package/dest/log/log_fn.d.ts.map +1 -1
  218. package/dest/log/noir_debug_log_util.d.ts +1 -1
  219. package/dest/log/pino-logger.d.ts +2 -2
  220. package/dest/log/pino-logger.d.ts.map +1 -1
  221. package/dest/log/pino-logger.js +0 -1
  222. package/dest/message/index.d.ts +1 -1
  223. package/dest/message/index.d.ts.map +1 -1
  224. package/dest/mutex/index.d.ts +1 -1
  225. package/dest/mutex/index.d.ts.map +1 -1
  226. package/dest/mutex/mutex_database.d.ts +1 -1
  227. package/dest/noir/index.d.ts +1 -1
  228. package/dest/noir/noir_package_config.d.ts +9 -9
  229. package/dest/number/index.d.ts +1 -1
  230. package/dest/profiler/index.d.ts +2 -0
  231. package/dest/profiler/index.d.ts.map +1 -0
  232. package/dest/profiler/index.js +1 -0
  233. package/dest/profiler/profiler.d.ts +8 -0
  234. package/dest/profiler/profiler.d.ts.map +1 -0
  235. package/dest/profiler/profiler.js +97 -0
  236. package/dest/promise/index.d.ts +1 -1
  237. package/dest/promise/running-promise.d.ts +1 -1
  238. package/dest/promise/running-promise.d.ts.map +1 -1
  239. package/dest/promise/utils.d.ts +1 -1
  240. package/dest/queue/base_memory_queue.d.ts +1 -1
  241. package/dest/queue/base_memory_queue.d.ts.map +1 -1
  242. package/dest/queue/batch_queue.d.ts +1 -1
  243. package/dest/queue/batch_queue.d.ts.map +1 -1
  244. package/dest/queue/bounded_serial_queue.d.ts +1 -1
  245. package/dest/queue/bounded_serial_queue.d.ts.map +1 -1
  246. package/dest/queue/fifo_memory_queue.d.ts +1 -1
  247. package/dest/queue/fifo_memory_queue.d.ts.map +1 -1
  248. package/dest/queue/index.d.ts +1 -1
  249. package/dest/queue/priority_memory_queue.d.ts +1 -1
  250. package/dest/queue/priority_memory_queue.d.ts.map +1 -1
  251. package/dest/queue/priority_queue.d.ts +1 -1
  252. package/dest/queue/priority_queue.d.ts.map +1 -1
  253. package/dest/queue/semaphore.d.ts +1 -1
  254. package/dest/queue/semaphore.d.ts.map +1 -1
  255. package/dest/queue/serial_queue.d.ts +1 -1
  256. package/dest/queue/serial_queue.d.ts.map +1 -1
  257. package/dest/retry/index.d.ts +1 -1
  258. package/dest/running-promise/index.d.ts +1 -1
  259. package/dest/schemas/api.d.ts +1 -1
  260. package/dest/schemas/index.d.ts +1 -1
  261. package/dest/schemas/parse.d.ts +1 -1
  262. package/dest/schemas/schemas.d.ts +15 -17
  263. package/dest/schemas/schemas.d.ts.map +1 -1
  264. package/dest/schemas/schemas.js +14 -10
  265. package/dest/schemas/types.d.ts +31 -1
  266. package/dest/schemas/types.d.ts.map +1 -1
  267. package/dest/schemas/types.js +25 -1
  268. package/dest/schemas/utils.d.ts +4 -4
  269. package/dest/schemas/utils.d.ts.map +1 -1
  270. package/dest/schemas/utils.js +15 -5
  271. package/dest/serialize/buffer_reader.d.ts +3 -1
  272. package/dest/serialize/buffer_reader.d.ts.map +1 -1
  273. package/dest/serialize/buffer_reader.js +3 -0
  274. package/dest/serialize/field_reader.d.ts +2 -2
  275. package/dest/serialize/field_reader.d.ts.map +1 -1
  276. package/dest/serialize/field_reader.js +1 -1
  277. package/dest/serialize/free_funcs.d.ts +2 -2
  278. package/dest/serialize/free_funcs.d.ts.map +1 -1
  279. package/dest/serialize/free_funcs.js +1 -1
  280. package/dest/serialize/index.d.ts +1 -1
  281. package/dest/serialize/serialize.d.ts +2 -2
  282. package/dest/serialize/serialize.d.ts.map +1 -1
  283. package/dest/serialize/serialize.js +1 -1
  284. package/dest/serialize/type_registry.d.ts +1 -1
  285. package/dest/serialize/type_registry.d.ts.map +1 -1
  286. package/dest/serialize/types.d.ts +1 -1
  287. package/dest/sleep/index.d.ts +3 -1
  288. package/dest/sleep/index.d.ts.map +1 -1
  289. package/dest/sleep/index.js +4 -0
  290. package/dest/string/index.d.ts +5 -1
  291. package/dest/string/index.d.ts.map +1 -1
  292. package/dest/string/index.js +19 -2
  293. package/dest/testing/files/index.d.ts +2 -1
  294. package/dest/testing/files/index.d.ts.map +1 -1
  295. package/dest/testing/files/index.js +1 -1
  296. package/dest/testing/formatting.d.ts +4 -0
  297. package/dest/testing/formatting.d.ts.map +1 -0
  298. package/dest/testing/formatting.js +3 -0
  299. package/dest/testing/index.d.ts +2 -1
  300. package/dest/testing/index.d.ts.map +1 -1
  301. package/dest/testing/index.js +1 -0
  302. package/dest/testing/port_allocator.d.ts +1 -1
  303. package/dest/testing/snapshot_serializer.d.ts +1 -1
  304. package/dest/testing/test_data.d.ts +1 -1
  305. package/dest/timer/date.d.ts +2 -1
  306. package/dest/timer/date.d.ts.map +1 -1
  307. package/dest/timer/date.js +3 -0
  308. package/dest/timer/elapsed.d.ts +1 -1
  309. package/dest/timer/index.d.ts +1 -1
  310. package/dest/timer/timeout.d.ts +1 -1
  311. package/dest/timer/timeout.d.ts.map +1 -1
  312. package/dest/timer/timer.d.ts +1 -1
  313. package/dest/timer/timer.d.ts.map +1 -1
  314. package/dest/transport/dispatch/create_dispatch_fn.d.ts +1 -1
  315. package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -1
  316. package/dest/transport/dispatch/create_dispatch_proxy.d.ts +1 -1
  317. package/dest/transport/dispatch/messages.d.ts +1 -1
  318. package/dest/transport/index.d.ts +1 -1
  319. package/dest/transport/interface/connector.d.ts +1 -1
  320. package/dest/transport/interface/listener.d.ts +1 -1
  321. package/dest/transport/interface/socket.d.ts +1 -1
  322. package/dest/transport/interface/transferable.d.ts +1 -1
  323. package/dest/transport/node/index.d.ts +1 -1
  324. package/dest/transport/node/node_connector.d.ts +1 -1
  325. package/dest/transport/node/node_connector.d.ts.map +1 -1
  326. package/dest/transport/node/node_connector_socket.d.ts +1 -1
  327. package/dest/transport/node/node_connector_socket.d.ts.map +1 -1
  328. package/dest/transport/node/node_listener.d.ts +1 -1
  329. package/dest/transport/node/node_listener.d.ts.map +1 -1
  330. package/dest/transport/node/node_listener_socket.d.ts +1 -1
  331. package/dest/transport/node/node_listener_socket.d.ts.map +1 -1
  332. package/dest/transport/transport_client.d.ts +1 -1
  333. package/dest/transport/transport_client.d.ts.map +1 -1
  334. package/dest/transport/transport_server.d.ts +1 -10
  335. package/dest/transport/transport_server.d.ts.map +1 -1
  336. package/dest/trees/balanced_merkle_tree.d.ts +22 -0
  337. package/dest/trees/balanced_merkle_tree.d.ts.map +1 -0
  338. package/dest/trees/balanced_merkle_tree.js +66 -0
  339. package/dest/trees/hasher.d.ts +1 -1
  340. package/dest/trees/index.d.ts +2 -1
  341. package/dest/trees/index.d.ts.map +1 -1
  342. package/dest/trees/index.js +1 -0
  343. package/dest/trees/indexed_merkle_tree.d.ts +1 -1
  344. package/dest/trees/indexed_merkle_tree.d.ts.map +1 -1
  345. package/dest/trees/indexed_merkle_tree.js +1 -1
  346. package/dest/trees/indexed_merkle_tree_calculator.d.ts +1 -1
  347. package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -1
  348. package/dest/trees/indexed_tree_leaf.d.ts +1 -1
  349. package/dest/trees/membership_witness.d.ts +3 -24
  350. package/dest/trees/membership_witness.d.ts.map +1 -1
  351. package/dest/trees/membership_witness.js +1 -1
  352. package/dest/trees/merkle_tree.d.ts +1 -1
  353. package/dest/trees/merkle_tree.d.ts.map +1 -1
  354. package/dest/trees/merkle_tree_calculator.d.ts +2 -12
  355. package/dest/trees/merkle_tree_calculator.d.ts.map +1 -1
  356. package/dest/trees/merkle_tree_calculator.js +1 -31
  357. package/dest/trees/sibling_path.d.ts +5 -39
  358. package/dest/trees/sibling_path.d.ts.map +1 -1
  359. package/dest/trees/sibling_path.js +2 -2
  360. package/dest/trees/unbalanced_merkle_tree.d.ts +5 -4
  361. package/dest/trees/unbalanced_merkle_tree.d.ts.map +1 -1
  362. package/dest/trees/unbalanced_merkle_tree.js +33 -10
  363. package/dest/trees/unbalanced_merkle_tree_calculator.d.ts +27 -23
  364. package/dest/trees/unbalanced_merkle_tree_calculator.d.ts.map +1 -1
  365. package/dest/trees/unbalanced_merkle_tree_calculator.js +123 -97
  366. package/dest/trees/unbalanced_tree_store.d.ts +2 -1
  367. package/dest/trees/unbalanced_tree_store.d.ts.map +1 -1
  368. package/dest/trees/unbalanced_tree_store.js +6 -0
  369. package/dest/types/index.d.ts +3 -1
  370. package/dest/types/index.d.ts.map +1 -1
  371. package/dest/types/index.js +3 -0
  372. package/dest/url/index.d.ts +1 -1
  373. package/dest/validation/index.d.ts +1 -1
  374. package/package.json +32 -8
  375. package/src/array/array.ts +0 -16
  376. package/src/array/index.ts +1 -0
  377. package/src/array/sorted_array.ts +133 -0
  378. package/src/branded-types/block_number.ts +112 -0
  379. package/src/branded-types/checkpoint_number.ts +100 -0
  380. package/src/branded-types/epoch.ts +88 -0
  381. package/src/branded-types/index.ts +6 -0
  382. package/src/branded-types/slot.ts +88 -0
  383. package/src/branded-types/types.ts +2 -0
  384. package/src/buffer/buffer16.ts +2 -2
  385. package/src/buffer/buffer32.ts +2 -2
  386. package/src/collection/array.ts +15 -3
  387. package/src/collection/object.ts +8 -0
  388. package/src/config/env_var.ts +44 -10
  389. package/src/config/index.ts +22 -2
  390. package/src/config/network_config.ts +18 -0
  391. package/src/config/network_name.ts +18 -3
  392. package/src/crypto/aes128/index.ts +19 -10
  393. package/src/crypto/bls/bn254_keystore.ts +287 -0
  394. package/src/crypto/bls/index.ts +77 -0
  395. package/src/crypto/bn254/index.ts +64 -0
  396. package/src/crypto/ecdsa/index.ts +40 -37
  397. package/src/crypto/ecdsa/signature.ts +2 -2
  398. package/src/crypto/grumpkin/index.ts +38 -46
  399. package/src/crypto/keys/index.ts +6 -6
  400. package/src/crypto/pedersen/pedersen.wasm.ts +23 -19
  401. package/src/crypto/poseidon/index.ts +33 -25
  402. package/src/crypto/schnorr/index.ts +22 -18
  403. package/src/crypto/schnorr/signature.ts +2 -2
  404. package/src/crypto/secp256k1/index.ts +15 -11
  405. package/src/crypto/secp256k1-signer/utils.ts +115 -7
  406. package/src/crypto/sha256/index.ts +1 -1
  407. package/src/crypto/sha512/index.ts +1 -1
  408. package/src/crypto/signature/index.ts +1 -1
  409. package/src/crypto/sync/index.ts +1 -1
  410. package/src/crypto/sync/pedersen/index.ts +17 -16
  411. package/src/crypto/sync/poseidon/index.ts +28 -23
  412. package/src/{fields/bls12_fields.ts → curves/bls12/field.ts} +6 -6
  413. package/src/curves/bls12/index.ts +2 -0
  414. package/src/{fields/bls12_point.ts → curves/bls12/point.ts} +14 -14
  415. package/src/{fields/fields.ts → curves/bn254/field.ts} +69 -62
  416. package/src/curves/bn254/index.ts +2 -0
  417. package/src/curves/bn254/point.ts +170 -0
  418. package/src/curves/grumpkin/index.ts +11 -0
  419. package/src/{fields → curves/grumpkin}/point.ts +26 -7
  420. package/src/eth-address/index.ts +28 -3
  421. package/src/eth-signature/eth_signature.ts +2 -4
  422. package/src/iterator/filter.ts +11 -0
  423. package/src/iterator/index.ts +1 -0
  424. package/src/json-rpc/client/safe_json_rpc_client.ts +9 -0
  425. package/src/log/log_fn.ts +1 -1
  426. package/src/log/pino-logger.ts +0 -1
  427. package/src/profiler/index.ts +1 -0
  428. package/src/profiler/profiler.ts +125 -0
  429. package/src/schemas/schemas.ts +24 -13
  430. package/src/schemas/types.ts +33 -0
  431. package/src/schemas/utils.ts +21 -8
  432. package/src/serialize/buffer_reader.ts +5 -0
  433. package/src/serialize/field_reader.ts +1 -1
  434. package/src/serialize/free_funcs.ts +1 -1
  435. package/src/serialize/serialize.ts +1 -1
  436. package/src/sleep/index.ts +6 -0
  437. package/src/string/index.ts +24 -1
  438. package/src/testing/files/index.ts +1 -1
  439. package/src/testing/formatting.ts +3 -0
  440. package/src/testing/index.ts +1 -0
  441. package/src/timer/date.ts +4 -0
  442. package/src/trees/balanced_merkle_tree.ts +84 -0
  443. package/src/trees/index.ts +1 -0
  444. package/src/trees/indexed_merkle_tree.ts +1 -1
  445. package/src/trees/membership_witness.ts +1 -1
  446. package/src/trees/merkle_tree_calculator.ts +1 -34
  447. package/src/trees/sibling_path.ts +2 -2
  448. package/src/trees/unbalanced_merkle_tree.ts +55 -7
  449. package/src/trees/unbalanced_merkle_tree_calculator.ts +134 -93
  450. package/src/trees/unbalanced_tree_store.ts +5 -1
  451. package/src/types/index.ts +5 -0
  452. package/dest/crypto/index.d.ts +0 -15
  453. package/dest/crypto/index.d.ts.map +0 -1
  454. package/dest/crypto/index.js +0 -14
  455. package/dest/fields/bls12_fields.d.ts.map +0 -1
  456. package/dest/fields/bls12_point.d.ts.map +0 -1
  457. package/dest/fields/coordinate.d.ts +0 -66
  458. package/dest/fields/coordinate.d.ts.map +0 -1
  459. package/dest/fields/coordinate.js +0 -96
  460. package/dest/fields/fields.d.ts +0 -174
  461. package/dest/fields/fields.d.ts.map +0 -1
  462. package/dest/fields/index.d.ts +0 -6
  463. package/dest/fields/index.d.ts.map +0 -1
  464. package/dest/fields/index.js +0 -5
  465. package/dest/fields/point.d.ts.map +0 -1
  466. package/dest/index.d.ts +0 -29
  467. package/dest/index.d.ts.map +0 -1
  468. package/dest/index.js +0 -29
  469. package/dest/json-rpc/server/telemetry.d.ts +0 -2
  470. package/dest/json-rpc/server/telemetry.d.ts.map +0 -1
  471. package/dest/json-rpc/server/telemetry.js +0 -0
  472. package/src/crypto/index.ts +0 -14
  473. package/src/fields/coordinate.ts +0 -104
  474. package/src/fields/index.ts +0 -5
  475. package/src/index.ts +0 -29
  476. package/src/json-rpc/server/telemetry.ts +0 -0
@@ -1,10 +1,13 @@
1
- import { Fq, Fr } from '../fields/fields.js';
1
+ import { Fq, Fr } from '../curves/bn254/field.js';
2
+ import { createConsoleLogger } from '../log/console.js';
2
3
  import type { EnvVar } from './env_var.js';
3
4
  import { type NetworkNames, getActiveNetworkName } from './network_name.js';
4
5
  import { SecretValue } from './secret_value.js';
5
6
 
6
7
  export { SecretValue, getActiveNetworkName };
7
8
  export type { EnvVar, NetworkNames };
9
+ export type { NetworkConfig, NetworkConfigMap } from './network_config.js';
10
+ export { NetworkConfigMapSchema, NetworkConfigSchema } from './network_config.js';
8
11
 
9
12
  export interface ConfigMapping {
10
13
  env?: EnvVar;
@@ -15,6 +18,11 @@ export interface ConfigMapping {
15
18
  isBoolean?: boolean;
16
19
  nested?: Record<string, ConfigMapping>;
17
20
  fallback?: EnvVar[];
21
+ /**
22
+ * List of deprecated env vars that are still supported but will log a warning.
23
+ * These should also be included in the fallback array for parsing.
24
+ */
25
+ deprecatedFallback?: { env: EnvVar; message?: string }[];
18
26
  }
19
27
 
20
28
  export function isBooleanConfigValue<T>(obj: T, key: keyof T): boolean {
@@ -70,12 +78,24 @@ export function getConfigFromMappings<T>(configMappings: ConfigMappingsType<T>):
70
78
  const config = {} as T;
71
79
 
72
80
  for (const key in configMappings) {
73
- const { env, parseEnv, defaultValue, nested, fallback } = configMappings[key];
81
+ const { env, parseEnv, defaultValue, nested, fallback, deprecatedFallback } = configMappings[key];
74
82
  if (nested) {
75
83
  (config as any)[key] = getConfigFromMappings(nested);
76
84
  } else {
77
85
  // Use the shared utility function
78
86
  (config as any)[key] = getValueFromEnvWithFallback(env, parseEnv, defaultValue, fallback);
87
+
88
+ // Check for deprecated env vars and warn if logger is set
89
+ if (deprecatedFallback?.length) {
90
+ const userLog = createConsoleLogger('[DEPRECATED]');
91
+ for (const { env: deprecatedEnv, message } of deprecatedFallback) {
92
+ if (process.env[deprecatedEnv]) {
93
+ const warningMessage =
94
+ message ?? `Environment variable ${deprecatedEnv} is deprecated. Please use ${env} instead.`;
95
+ userLog(warningMessage, { deprecatedEnvVar: deprecatedEnv, newEnvVar: env });
96
+ }
97
+ }
98
+ }
79
99
  }
80
100
  }
81
101
 
@@ -0,0 +1,18 @@
1
+ import { z } from 'zod';
2
+
3
+ export const NetworkConfigSchema = z
4
+ .object({
5
+ bootnodes: z.array(z.string()),
6
+ snapshots: z.array(z.string()),
7
+ blobFileStoreUrls: z.array(z.string()).optional(),
8
+ registryAddress: z.string(),
9
+ feeAssetHandlerAddress: z.string().optional(),
10
+ l1ChainId: z.number(),
11
+ blockDurationMs: z.number().positive().optional(),
12
+ })
13
+ .passthrough(); // Allow additional unknown fields to pass through
14
+
15
+ export const NetworkConfigMapSchema = z.record(z.string(), NetworkConfigSchema);
16
+
17
+ export type NetworkConfig = z.infer<typeof NetworkConfigSchema>;
18
+ export type NetworkConfigMap = z.infer<typeof NetworkConfigMapSchema>;
@@ -1,13 +1,28 @@
1
- export type NetworkNames = 'local' | 'testnet-ignition' | 'alpha-testnet' | 'testnet';
1
+ export type NetworkNames =
2
+ | 'local'
3
+ | 'staging-ignition'
4
+ | 'staging-public'
5
+ | 'testnet'
6
+ | 'mainnet'
7
+ | 'next-net'
8
+ | 'devnet';
2
9
 
3
10
  export function getActiveNetworkName(name?: string): NetworkNames {
4
11
  const network = name || process.env.NETWORK;
5
12
  if (!network || network === '' || network === 'local') {
6
13
  return 'local';
7
- } else if (network === 'testnet-ignition') {
14
+ } else if (network === 'staging-ignition') {
8
15
  return network;
9
- } else if (network === 'alpha-testnet' || network === 'testnet') {
16
+ } else if (network === 'staging-public') {
10
17
  return network;
18
+ } else if (network === 'testnet' || network === 'alpha-testnet') {
19
+ return 'testnet';
20
+ } else if (network === 'mainnet') {
21
+ return 'mainnet';
22
+ } else if (network === 'next-net') {
23
+ return 'next-net';
24
+ } else if (network === 'devnet') {
25
+ return 'devnet';
11
26
  }
12
27
  throw new Error(`Unknown network: ${network}`);
13
28
  }
@@ -1,4 +1,4 @@
1
- import { BarretenbergSync, RawBuffer } from '@aztec/bb.js';
1
+ import { BarretenbergSync } from '@aztec/bb.js';
2
2
 
3
3
  import { Buffer } from 'buffer';
4
4
 
@@ -22,10 +22,15 @@ export class Aes128 {
22
22
  paddingBuffer.fill(numPaddingBytes);
23
23
  const input = Buffer.concat([data, paddingBuffer]);
24
24
 
25
- const api = await BarretenbergSync.initSingleton(process.env.BB_WASM_PATH);
26
- return Buffer.from(
27
- api.aesEncryptBufferCbc(new RawBuffer(input), new RawBuffer(iv), new RawBuffer(key), input.length),
28
- );
25
+ await BarretenbergSync.initSingleton();
26
+ const api = BarretenbergSync.getSingleton();
27
+ const response = api.aesEncrypt({
28
+ plaintext: input,
29
+ iv,
30
+ key,
31
+ length: input.length,
32
+ });
33
+ return Buffer.from(response.ciphertext);
29
34
  }
30
35
 
31
36
  /**
@@ -37,11 +42,15 @@ export class Aes128 {
37
42
  * @returns Decrypted data.
38
43
  */
39
44
  public async decryptBufferCBCKeepPadding(data: Uint8Array, iv: Uint8Array, key: Uint8Array): Promise<Buffer> {
40
- const api = await BarretenbergSync.initSingleton(process.env.BB_WASM_PATH);
41
- const paddedBuffer = Buffer.from(
42
- api.aesDecryptBufferCbc(new RawBuffer(data), new RawBuffer(iv), new RawBuffer(key), data.length),
43
- );
44
- return paddedBuffer;
45
+ await BarretenbergSync.initSingleton();
46
+ const api = BarretenbergSync.getSingleton();
47
+ const response = api.aesDecrypt({
48
+ ciphertext: data,
49
+ iv,
50
+ key,
51
+ length: data.length,
52
+ });
53
+ return Buffer.from(response.plaintext);
45
54
  }
46
55
 
47
56
  /**
@@ -0,0 +1,287 @@
1
+ import { randomBytes } from '@aztec/foundation/crypto/random';
2
+
3
+ import { createCipheriv, createDecipheriv, createHash, pbkdf2Sync, randomUUID } from 'crypto';
4
+ import { readFileSync } from 'fs';
5
+ import { z } from 'zod';
6
+
7
+ /**
8
+ * BN254 Keystore Format
9
+ *
10
+ * Implements encryption and decryption of keystores for BN254 BLS private keys
11
+ * using PBKDF2 and AES-128-CTR. This format is inspired by EIP-2335 but adapted
12
+ * for BN254 keys rather than BLS12-381.
13
+ *
14
+ * @see https://eips.ethereum.org/EIPS/eip-2335
15
+ */
16
+
17
+ /**
18
+ * Zod schema for validating BN254 keystore structure
19
+ */
20
+ const bn254KeystoreSchema = z.object({
21
+ crypto: z.object({
22
+ kdf: z.object({
23
+ function: z.literal('pbkdf2'),
24
+ params: z.object({
25
+ dklen: z.number(),
26
+ c: z.number(),
27
+ prf: z.string(),
28
+ salt: z.string(),
29
+ }),
30
+ message: z.string(),
31
+ }),
32
+ checksum: z.object({
33
+ function: z.literal('sha256'),
34
+ params: z.object({}),
35
+ message: z.string(),
36
+ }),
37
+ cipher: z.object({
38
+ function: z.literal('aes-128-ctr'),
39
+ params: z.object({
40
+ iv: z.string(),
41
+ }),
42
+ message: z.string(),
43
+ }),
44
+ }),
45
+ description: z.string().optional(),
46
+ pubkey: z.string(),
47
+ path: z.string(),
48
+ uuid: z.string(),
49
+ version: z.number(),
50
+ });
51
+
52
+ /**
53
+ * Error thrown when BN254 keystore operations fail
54
+ */
55
+ export class Bn254KeystoreError extends Error {
56
+ constructor(
57
+ message: string,
58
+ public override cause?: Error,
59
+ ) {
60
+ super(message);
61
+ this.name = 'Bn254KeystoreError';
62
+ }
63
+ }
64
+
65
+ export type Bn254Keystore = z.infer<typeof bn254KeystoreSchema>;
66
+
67
+ /**
68
+ * The JSON structure of a BN254 keystore file.
69
+ * @deprecated Use the inferred type from bn254KeystoreSchema instead
70
+ */
71
+ export interface Bn254KeystoreInterface {
72
+ crypto: {
73
+ kdf: {
74
+ function: 'pbkdf2';
75
+ params: {
76
+ dklen: number;
77
+ c: number;
78
+ prf: string;
79
+ salt: string;
80
+ };
81
+ message: string;
82
+ };
83
+ checksum: {
84
+ function: 'sha256';
85
+ params: Record<string, never>;
86
+ message: string;
87
+ };
88
+ cipher: {
89
+ function: 'aes-128-ctr';
90
+ params: {
91
+ iv: string;
92
+ };
93
+ message: string;
94
+ };
95
+ };
96
+ description: string;
97
+ pubkey: string;
98
+ path: string;
99
+ uuid: string;
100
+ version: number;
101
+ }
102
+
103
+ /**
104
+ * Creates a BN254 keystore object for a BN254 BLS private key.
105
+ *
106
+ * Uses PBKDF2 with SHA-256 for key derivation and AES-128-CTR for encryption,
107
+ * following the EIP-2335 specification format.
108
+ *
109
+ * @param password - Password for encrypting the private key
110
+ * @param privateKeyHex - Private key as 0x-prefixed hex string (32 bytes)
111
+ * @param pubkeyHex - Public key as hex string (compressed or uncompressed)
112
+ * @param derivationPath - BIP-44 style derivation path (e.g., "m/12381/3600/0/0/0")
113
+ * @returns BN254 keystore object ready to be serialized to JSON
114
+ * @throws Error if private key is not 32-byte hex
115
+ */
116
+ export function createBn254Keystore(
117
+ password: string,
118
+ privateKeyHex: string,
119
+ pubkeyHex: string,
120
+ derivationPath: string,
121
+ ): Bn254Keystore {
122
+ const ensureHex = (hex: string) => hex.replace(/^0x/i, '');
123
+ const privHex = ensureHex(privateKeyHex);
124
+ if (!/^[0-9a-fA-F]{64}$/.test(privHex)) {
125
+ throw new Error('BLS private key must be 32-byte hex');
126
+ }
127
+
128
+ const salt = randomBytes(32);
129
+ const iv = randomBytes(16);
130
+ const dk = pbkdf2Sync(Buffer.from(password.normalize('NFKD'), 'utf8'), salt, 262144, 32, 'sha256');
131
+ const cipherKey = dk.subarray(0, 16);
132
+
133
+ const cipher = createCipheriv('aes-128-ctr', cipherKey, iv);
134
+ const plaintext = Buffer.from(privHex, 'hex');
135
+ const ciphertext = Buffer.concat([cipher.update(plaintext), cipher.final()]);
136
+
137
+ const checksum = createHash('sha256')
138
+ .update(Buffer.concat([dk.subarray(16, 32), ciphertext]))
139
+ .digest();
140
+
141
+ const uuid = randomUUID();
142
+
143
+ return {
144
+ crypto: {
145
+ kdf: {
146
+ function: 'pbkdf2',
147
+ params: { dklen: 32, c: 262144, prf: 'hmac-sha256', salt: salt.toString('hex') },
148
+ message: '',
149
+ },
150
+ checksum: {
151
+ function: 'sha256',
152
+ params: {},
153
+ message: checksum.toString('hex'),
154
+ },
155
+ cipher: {
156
+ function: 'aes-128-ctr',
157
+ params: { iv: iv.toString('hex') },
158
+ message: ciphertext.toString('hex'),
159
+ },
160
+ },
161
+ description: ensureHex(pubkeyHex),
162
+ pubkey: pubkeyHex,
163
+ path: derivationPath ?? '',
164
+ uuid,
165
+ version: 4,
166
+ };
167
+ }
168
+
169
+ /**
170
+ * Loads and validates a BN254 keystore file.
171
+ *
172
+ * @param filePath - Path to the BN254 keystore JSON file
173
+ * @returns Validated keystore object
174
+ * @throws Bn254KeystoreError if file cannot be read or validated
175
+ */
176
+ export function loadBn254Keystore(filePath: string): Bn254Keystore {
177
+ try {
178
+ const content = readFileSync(filePath, 'utf-8');
179
+ const json = JSON.parse(content);
180
+ return bn254KeystoreSchema.parse(json);
181
+ } catch (error) {
182
+ if (error instanceof SyntaxError) {
183
+ throw new Bn254KeystoreError(`Invalid JSON in keystore file: ${filePath}`, error);
184
+ }
185
+ if (error && typeof error === 'object' && 'issues' in error) {
186
+ const issues = (error as any).issues ?? [];
187
+ const message = issues.map((e: any) => `${e.message} at ${e.path?.join('.') ?? 'root'}`).join('; ');
188
+ throw new Bn254KeystoreError(`Invalid BN254 keystore format: ${message}`);
189
+ }
190
+ throw new Bn254KeystoreError(`Failed to load keystore from ${filePath}: ${String(error)}`, error as Error);
191
+ }
192
+ }
193
+
194
+ /**
195
+ * Decrypts a BN254 BLS private key from a keystore file.
196
+ *
197
+ * @param filePath - Path to the BN254 keystore JSON file
198
+ * @param password - Password to decrypt the keystore
199
+ * @returns Decrypted private key as 0x-prefixed hex string (32 bytes)
200
+ * @throws Bn254KeystoreError if decryption fails or checksum is invalid
201
+ */
202
+ export function decryptBn254Keystore(filePath: string, password: string): string {
203
+ const keystore = loadBn254Keystore(filePath);
204
+ return decryptBn254KeystoreFromObject(keystore, password);
205
+ }
206
+
207
+ /**
208
+ * Decrypts a BN254 BLS private key from a keystore object.
209
+ *
210
+ * @param keystore - BN254 keystore object
211
+ * @param password - Password to decrypt the keystore
212
+ * @returns Decrypted private key as 0x-prefixed hex string (32 bytes)
213
+ * @throws Bn254KeystoreError if decryption fails or checksum is invalid
214
+ */
215
+ export function decryptBn254KeystoreFromObject(keystore: Bn254Keystore, password: string): string {
216
+ try {
217
+ const { crypto } = keystore;
218
+
219
+ // Only support PBKDF2 + AES-128-CTR (as per our implementation)
220
+ if (crypto.kdf.function !== 'pbkdf2') {
221
+ throw new Bn254KeystoreError(`Unsupported KDF function: ${crypto.kdf.function}`);
222
+ }
223
+ if (crypto.cipher.function !== 'aes-128-ctr') {
224
+ throw new Bn254KeystoreError(`Unsupported cipher function: ${crypto.cipher.function}`);
225
+ }
226
+
227
+ // Derive decryption key using PBKDF2
228
+ const salt = Buffer.from(crypto.kdf.params.salt, 'hex');
229
+ const dk = pbkdf2Sync(
230
+ Buffer.from(password.normalize('NFKD'), 'utf8'),
231
+ salt,
232
+ crypto.kdf.params.c,
233
+ crypto.kdf.params.dklen,
234
+ 'sha256',
235
+ );
236
+
237
+ const cipherKey = dk.subarray(0, 16);
238
+ const checksumKey = dk.subarray(16, 32);
239
+
240
+ // Decrypt the ciphertext
241
+ const iv = Buffer.from(crypto.cipher.params.iv, 'hex');
242
+ const ciphertext = Buffer.from(crypto.cipher.message, 'hex');
243
+ const decipher = createDecipheriv('aes-128-ctr', cipherKey, iv);
244
+ const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
245
+
246
+ // Verify checksum
247
+ const computedChecksum = createHash('sha256')
248
+ .update(Buffer.concat([checksumKey, ciphertext]))
249
+ .digest();
250
+ const expectedChecksum = Buffer.from(crypto.checksum.message, 'hex');
251
+
252
+ if (!computedChecksum.equals(expectedChecksum)) {
253
+ throw new Bn254KeystoreError('Checksum verification failed - incorrect password or corrupted keystore');
254
+ }
255
+
256
+ // Return as 0x-prefixed hex
257
+ return '0x' + decrypted.toString('hex');
258
+ } catch (error) {
259
+ if (error instanceof Bn254KeystoreError) {
260
+ throw error;
261
+ }
262
+ throw new Bn254KeystoreError(`Failed to decrypt keystore: ${String(error)}`, error as Error);
263
+ }
264
+ }
265
+
266
+ /**
267
+ * Validates that a decrypted private key matches the public key in the keystore.
268
+ *
269
+ * @param privateKeyHex - Decrypted private key (0x-prefixed)
270
+ * @param expectedPubkey - Expected public key from keystore
271
+ * @param computePublicKey - Function to compute public key from private key
272
+ * @returns true if keys match, false otherwise
273
+ */
274
+ export function verifyBn254Keypair(
275
+ privateKeyHex: string,
276
+ expectedPubkey: string,
277
+ computePublicKey: (privateKey: string) => string,
278
+ ): boolean {
279
+ try {
280
+ const computedPubkey = computePublicKey(privateKeyHex);
281
+ const normalizedExpected = expectedPubkey.toLowerCase().replace(/^0x/i, '');
282
+ const normalizedComputed = computedPubkey.toLowerCase().replace(/^0x/i, '');
283
+ return normalizedExpected === normalizedComputed;
284
+ } catch {
285
+ return false;
286
+ }
287
+ }
@@ -0,0 +1,77 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+ import type { Hex } from '@aztec/foundation/string';
3
+
4
+ import { mod } from '@noble/curves/abstract/modular';
5
+ import { bytesToNumberBE } from '@noble/curves/abstract/utils';
6
+ import { hmac } from '@noble/hashes/hmac';
7
+ import { sha512 } from '@noble/hashes/sha2';
8
+ import { mnemonicToSeedSync } from '@scure/bip39';
9
+
10
+ export function deriveBlsPrivateKey(mnemonic: string | undefined, ikm: string | undefined, path: string): Hex<32> {
11
+ if (ikm) {
12
+ return deriveBlsKeyFromEntropy(ikm, path) as Hex<32>;
13
+ }
14
+ if (!mnemonic) {
15
+ throw new Error('Either mnemonic or ikm must be provided for BLS derivation');
16
+ }
17
+ return deriveBlsKeyFromMnemonic(mnemonic, path) as Hex<32>;
18
+ }
19
+
20
+ /**
21
+ * Deterministically derive a BN254 BLS private key from mnemonic and derivation path.
22
+ * Returns a 0x-prefixed 32-byte hex string representing an Fr in [1, r-1].
23
+ */
24
+ export function deriveBlsKeyFromMnemonic(mnemonic: string, derivationPath: string, passphrase = ''): string {
25
+ const seed = Buffer.from(mnemonicToSeedSync(mnemonic, passphrase)); // 64 bytes
26
+ const data = Buffer.concat([Buffer.from([0x00]), seed, Buffer.from(derivationPath, 'utf8')]);
27
+ const sk = deriveBn254ScalarFromData(data);
28
+ return `0x${toFixed32(sk).toString('hex')}`;
29
+ }
30
+
31
+ /**
32
+ * Deterministically derive a BN254 BLS private key from input keying material (IKM) and derivation path.
33
+ * Returns a 0x-prefixed 32-byte hex string representing an Fr in [1, r-1].
34
+ */
35
+ export function deriveBlsKeyFromEntropy(ikm: string, derivationPath: string): string {
36
+ const ikmBytes = parseIkm(ikm);
37
+ const data = Buffer.concat([Buffer.from([0x01]), ikmBytes, Buffer.from(derivationPath, 'utf8')]);
38
+ const sk = deriveBn254ScalarFromData(data);
39
+ return `0x${toFixed32(sk).toString('hex')}`;
40
+ }
41
+
42
+ function deriveBn254ScalarFromData(data: Buffer): bigint {
43
+ // Domain-separated HMAC-SHA512, then map to BN254 Fr using noble modular math. Retry on zero.
44
+ const domainKey = Buffer.from('Aztec bn254 key', 'utf8');
45
+ for (let counter = 0; ; counter = (counter + 1) & 0xff) {
46
+ const msg = counter === 0 ? data : Buffer.concat([data, Buffer.from([counter])]);
47
+ const digest = hmac(sha512, domainKey, msg); // 64 bytes
48
+ const x = bytesToNumberBE(digest);
49
+ const sk = mod(x, Fr.MODULUS);
50
+ if (sk !== 0n) {
51
+ return sk;
52
+ }
53
+ }
54
+ }
55
+
56
+ function parseIkm(ikm: string): Buffer {
57
+ const hexMatch = ikm.replace(/^0x/i, '');
58
+ if (/^[0-9a-fA-F]+$/.test(hexMatch) && hexMatch.length >= 2) {
59
+ const normalized = hexMatch.length % 2 === 1 ? `0${hexMatch}` : hexMatch;
60
+ return Buffer.from(normalized, 'hex');
61
+ }
62
+ return Buffer.from(ikm, 'utf8');
63
+ }
64
+
65
+ function toFixed32(x: bigint): Buffer {
66
+ const hex = x.toString(16);
67
+ const padded = hex.length % 2 === 1 ? `0${hex}` : hex;
68
+ const buf = Buffer.from(padded, 'hex');
69
+ if (buf.length === 32) {
70
+ return buf;
71
+ }
72
+ if (buf.length < 32) {
73
+ return Buffer.concat([Buffer.alloc(32 - buf.length, 0), buf]);
74
+ }
75
+ // Should never happen since x < bn254.Fr.ORDER < 2^256, but guard anyway
76
+ return buf.subarray(buf.length - 32);
77
+ }
@@ -0,0 +1,64 @@
1
+ import { Fr } from '../../curves/bn254/field.js';
2
+ import { Bn254G1Point, Bn254G2Point } from '../../curves/bn254/point.js';
3
+
4
+ /**
5
+ * BN254 utility functions for point operations.
6
+ * Provides compression, decompression, and public key generation for the BN254 curve.
7
+ * Uses the bb.js Barretenberg backend for point operations.
8
+ */
9
+
10
+ /**
11
+ * Generate a compressed BN254 G1 public key from a private key.
12
+ *
13
+ * @param privateKeyHex - Private key as 0x-prefixed hex string
14
+ * @returns Compressed G1 point (32 bytes with sign bit in MSB)
15
+ */
16
+ export async function computeBn254G1PublicKeyCompressed(privateKeyHex: string): Promise<string> {
17
+ const sk = BigInt(privateKeyHex);
18
+ const skReduced = sk % Fr.MODULUS;
19
+
20
+ // Generate G1 point on BN254 curve using bb.js
21
+ const scalar = Fr.fromString(skReduced.toString());
22
+ const pk1 = await Bn254G1Point.generator(scalar);
23
+
24
+ // Compress the point using the primitive method
25
+ return '0x' + pk1.compress().toString('hex');
26
+ }
27
+
28
+ /**
29
+ * Generate uncompressed BN254 G1 public key from a private key.
30
+ *
31
+ * @param privateKeyHex - Private key as 0x-prefixed hex string
32
+ * @returns G1 point in affine coordinates
33
+ */
34
+ export async function computeBn254G1PublicKey(privateKeyHex: string): Promise<{ x: bigint; y: bigint }> {
35
+ const sk = BigInt(privateKeyHex);
36
+ const skReduced = sk % Fr.MODULUS;
37
+
38
+ const scalar = Fr.fromString(skReduced.toString());
39
+ const pk1 = await Bn254G1Point.generator(scalar);
40
+
41
+ return { x: pk1.x.toBigInt(), y: pk1.y.toBigInt() };
42
+ }
43
+
44
+ /**
45
+ * Generate BN254 G2 public key from a private key.
46
+ *
47
+ * @param privateKeyHex - Private key as 0x-prefixed hex string
48
+ * @returns G2 point in affine coordinates
49
+ */
50
+ export async function computeBn254G2PublicKey(privateKeyHex: string): Promise<{
51
+ x: { c0: bigint; c1: bigint };
52
+ y: { c0: bigint; c1: bigint };
53
+ }> {
54
+ const sk = BigInt(privateKeyHex);
55
+ const skReduced = sk % Fr.MODULUS;
56
+
57
+ const scalar = Fr.fromString(skReduced.toString());
58
+ const pk2 = await Bn254G2Point.generator(scalar);
59
+
60
+ return {
61
+ x: { c0: pk2.x[0].toBigInt(), c1: pk2.x[1].toBigInt() },
62
+ y: { c0: pk2.y[0].toBigInt(), c1: pk2.y[1].toBigInt() },
63
+ };
64
+ }
@@ -1,7 +1,5 @@
1
1
  import { BarretenbergSync } from '@aztec/bb.js';
2
- import { numToInt32BE } from '@aztec/foundation/serialize';
3
2
 
4
- import { concatenateUint8Arrays } from '../serialize.js';
5
3
  import { EcdsaSignature } from './signature.js';
6
4
 
7
5
  export * from './signature.js';
@@ -18,11 +16,13 @@ export class Ecdsa {
18
16
  * @returns A secp256k1 public key.
19
17
  */
20
18
  public async computePublicKey(privateKey: Buffer): Promise<Buffer> {
21
- const api = await BarretenbergSync.initSingleton(process.env.BB_WASM_PATH);
22
- const [result] = api
23
- .getWasm()
24
- .callWasmExport(`ecdsa_${this.curve === 'secp256r1' ? 'r' : ''}_compute_public_key`, [privateKey], [64]);
25
- return Buffer.from(result);
19
+ await BarretenbergSync.initSingleton();
20
+ const api = BarretenbergSync.getSingleton();
21
+ const response =
22
+ this.curve === 'secp256r1'
23
+ ? api.ecdsaSecp256r1ComputePublicKey({ privateKey })
24
+ : api.ecdsaSecp256k1ComputePublicKey({ privateKey });
25
+ return Buffer.concat([Buffer.from(response.publicKey.x), Buffer.from(response.publicKey.y)]);
26
26
  }
27
27
 
28
28
  /**
@@ -32,16 +32,13 @@ export class Ecdsa {
32
32
  * @returns An ECDSA signature of the form (r, s, v).
33
33
  */
34
34
  public async constructSignature(msg: Uint8Array, privateKey: Buffer) {
35
- const api = await BarretenbergSync.initSingleton(process.env.BB_WASM_PATH);
36
- const messageArray = concatenateUint8Arrays([numToInt32BE(msg.length), msg]);
37
- const [r, s, v] = api
38
- .getWasm()
39
- .callWasmExport(
40
- `ecdsa_${this.curve === 'secp256r1' ? 'r' : ''}_construct_signature_`,
41
- [messageArray, privateKey],
42
- [32, 32, 1],
43
- );
44
- return new EcdsaSignature(Buffer.from(r), Buffer.from(s), Buffer.from(v));
35
+ await BarretenbergSync.initSingleton();
36
+ const api = BarretenbergSync.getSingleton();
37
+ const response =
38
+ this.curve === 'secp256r1'
39
+ ? api.ecdsaSecp256r1ConstructSignature({ message: msg, privateKey })
40
+ : api.ecdsaSecp256k1ConstructSignature({ message: msg, privateKey });
41
+ return new EcdsaSignature(Buffer.from(response.r), Buffer.from(response.s), Buffer.from([response.v]));
45
42
  }
46
43
 
47
44
  /**
@@ -51,16 +48,13 @@ export class Ecdsa {
51
48
  * @returns The secp256k1 public key of the signer.
52
49
  */
53
50
  public async recoverPublicKey(msg: Uint8Array, sig: EcdsaSignature): Promise<Buffer> {
54
- const api = await BarretenbergSync.initSingleton(process.env.BB_WASM_PATH);
55
- const messageArray = concatenateUint8Arrays([numToInt32BE(msg.length), msg]);
56
- const [result] = api
57
- .getWasm()
58
- .callWasmExport(
59
- `ecdsa_${this.curve === 'secp256r1' ? 'r' : ''}_recover_public_key_from_signature_`,
60
- [messageArray, sig.r, sig.s, sig.v],
61
- [64],
62
- );
63
- return Buffer.from(result);
51
+ await BarretenbergSync.initSingleton();
52
+ const api = BarretenbergSync.getSingleton();
53
+ const response =
54
+ this.curve === 'secp256r1'
55
+ ? api.ecdsaSecp256r1RecoverPublicKey({ message: msg, r: sig.r, s: sig.s, v: sig.v[0] })
56
+ : api.ecdsaSecp256k1RecoverPublicKey({ message: msg, r: sig.r, s: sig.s, v: sig.v[0] });
57
+ return Buffer.concat([Buffer.from(response.publicKey.x), Buffer.from(response.publicKey.y)]);
64
58
  }
65
59
 
66
60
  /**
@@ -71,15 +65,24 @@ export class Ecdsa {
71
65
  * @returns True or false.
72
66
  */
73
67
  public async verifySignature(msg: Uint8Array, pubKey: Buffer, sig: EcdsaSignature) {
74
- const api = await BarretenbergSync.initSingleton(process.env.BB_WASM_PATH);
75
- const messageArray = concatenateUint8Arrays([numToInt32BE(msg.length), msg]);
76
- const [result] = api
77
- .getWasm()
78
- .callWasmExport(
79
- `ecdsa_${this.curve === 'secp256r1' ? 'r' : ''}_verify_signature_`,
80
- [messageArray, pubKey, sig.r, sig.s, sig.v],
81
- [1],
82
- );
83
- return result[0] === 1;
68
+ await BarretenbergSync.initSingleton();
69
+ const api = BarretenbergSync.getSingleton();
70
+ const response =
71
+ this.curve === 'secp256r1'
72
+ ? api.ecdsaSecp256r1VerifySignature({
73
+ message: msg,
74
+ publicKey: { x: pubKey.subarray(0, 32), y: pubKey.subarray(32, 64) },
75
+ r: sig.r,
76
+ s: sig.s,
77
+ v: sig.v[0],
78
+ })
79
+ : api.ecdsaSecp256k1VerifySignature({
80
+ message: msg,
81
+ publicKey: { x: pubKey.subarray(0, 32), y: pubKey.subarray(32, 64) },
82
+ r: sig.r,
83
+ s: sig.s,
84
+ v: sig.v[0],
85
+ });
86
+ return response.verified;
84
87
  }
85
88
  }