@aztec/foundation 0.0.1-commit.9b94fc1 → 0.0.1-commit.a072138

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/dest/array/index.d.ts +2 -1
  2. package/dest/array/index.d.ts.map +1 -1
  3. package/dest/array/index.js +1 -0
  4. package/dest/array/sorted_array.d.ts +10 -0
  5. package/dest/array/sorted_array.d.ts.map +1 -0
  6. package/dest/array/sorted_array.js +106 -0
  7. package/dest/branded-types/block_number.d.ts +56 -0
  8. package/dest/branded-types/block_number.d.ts.map +1 -0
  9. package/dest/branded-types/block_number.js +78 -0
  10. package/dest/branded-types/checkpoint_number.d.ts +54 -0
  11. package/dest/branded-types/checkpoint_number.d.ts.map +1 -0
  12. package/dest/branded-types/checkpoint_number.js +77 -0
  13. package/dest/branded-types/index.d.ts +4 -1
  14. package/dest/branded-types/index.d.ts.map +1 -1
  15. package/dest/branded-types/index.js +3 -0
  16. package/dest/branded-types/index_within_checkpoint.d.ts +42 -0
  17. package/dest/branded-types/index_within_checkpoint.d.ts.map +1 -0
  18. package/dest/branded-types/index_within_checkpoint.js +59 -0
  19. package/dest/buffer/buffer16.d.ts +5 -2
  20. package/dest/buffer/buffer16.d.ts.map +1 -1
  21. package/dest/buffer/buffer16.js +4 -2
  22. package/dest/buffer/buffer32.d.ts +5 -2
  23. package/dest/buffer/buffer32.d.ts.map +1 -1
  24. package/dest/buffer/buffer32.js +4 -2
  25. package/dest/collection/array.d.ts +12 -1
  26. package/dest/collection/array.d.ts.map +1 -1
  27. package/dest/collection/array.js +51 -0
  28. package/dest/config/env_var.d.ts +2 -2
  29. package/dest/config/env_var.d.ts.map +1 -1
  30. package/dest/config/index.d.ts +15 -4
  31. package/dest/config/index.d.ts.map +1 -1
  32. package/dest/config/index.js +32 -9
  33. package/dest/config/network_config.d.ts +13 -1
  34. package/dest/config/network_config.d.ts.map +1 -1
  35. package/dest/config/network_config.js +3 -1
  36. package/dest/config/parse-env.d.ts +3 -0
  37. package/dest/config/parse-env.d.ts.map +1 -0
  38. package/dest/config/parse-env.js +7 -0
  39. package/dest/config/secret_value.js +3 -1
  40. package/dest/crypto/bls/bn254_keystore.js +1 -1
  41. package/dest/crypto/bls/index.js +1 -1
  42. package/dest/crypto/bn254/index.d.ts +35 -51
  43. package/dest/crypto/bn254/index.d.ts.map +1 -1
  44. package/dest/crypto/bn254/index.js +51 -140
  45. package/dest/crypto/ecdsa/signature.d.ts +11 -2
  46. package/dest/crypto/ecdsa/signature.d.ts.map +1 -1
  47. package/dest/crypto/ecdsa/signature.js +2 -2
  48. package/dest/crypto/grumpkin/index.d.ts +4 -2
  49. package/dest/crypto/grumpkin/index.d.ts.map +1 -1
  50. package/dest/crypto/grumpkin/index.js +2 -1
  51. package/dest/crypto/keys/index.d.ts +2 -2
  52. package/dest/crypto/keys/index.d.ts.map +1 -1
  53. package/dest/crypto/keys/index.js +1 -1
  54. package/dest/crypto/pedersen/pedersen.wasm.d.ts +2 -2
  55. package/dest/crypto/pedersen/pedersen.wasm.d.ts.map +1 -1
  56. package/dest/crypto/pedersen/pedersen.wasm.js +1 -1
  57. package/dest/crypto/poseidon/index.d.ts +2 -3
  58. package/dest/crypto/poseidon/index.d.ts.map +1 -1
  59. package/dest/crypto/poseidon/index.js +1 -10
  60. package/dest/crypto/random/randomness_singleton.d.ts +4 -3
  61. package/dest/crypto/random/randomness_singleton.d.ts.map +1 -1
  62. package/dest/crypto/random/randomness_singleton.js +5 -5
  63. package/dest/crypto/schnorr/index.d.ts +3 -2
  64. package/dest/crypto/schnorr/index.d.ts.map +1 -1
  65. package/dest/crypto/schnorr/index.js +1 -1
  66. package/dest/crypto/schnorr/signature.d.ts +2 -2
  67. package/dest/crypto/schnorr/signature.d.ts.map +1 -1
  68. package/dest/crypto/schnorr/signature.js +2 -2
  69. package/dest/crypto/sha256/index.d.ts +2 -2
  70. package/dest/crypto/sha256/index.d.ts.map +1 -1
  71. package/dest/crypto/sha256/index.js +1 -1
  72. package/dest/crypto/sha512/index.d.ts +2 -2
  73. package/dest/crypto/sha512/index.d.ts.map +1 -1
  74. package/dest/crypto/sha512/index.js +1 -1
  75. package/dest/crypto/signature/index.d.ts +2 -2
  76. package/dest/crypto/signature/index.d.ts.map +1 -1
  77. package/dest/crypto/sync/pedersen/index.d.ts +2 -2
  78. package/dest/crypto/sync/pedersen/index.d.ts.map +1 -1
  79. package/dest/crypto/sync/pedersen/index.js +1 -1
  80. package/dest/crypto/sync/poseidon/index.d.ts +2 -3
  81. package/dest/crypto/sync/poseidon/index.d.ts.map +1 -1
  82. package/dest/crypto/sync/poseidon/index.js +1 -9
  83. package/dest/{fields/bls12_fields.d.ts → curves/bls12/field.d.ts} +3 -3
  84. package/dest/curves/bls12/field.d.ts.map +1 -0
  85. package/dest/{fields/bls12_fields.js → curves/bls12/field.js} +12 -9
  86. package/dest/curves/bls12/index.d.ts +3 -0
  87. package/dest/curves/bls12/index.d.ts.map +1 -0
  88. package/dest/curves/bls12/index.js +2 -0
  89. package/dest/{fields/bls12_point.d.ts → curves/bls12/point.d.ts} +13 -4
  90. package/dest/curves/bls12/point.d.ts.map +1 -0
  91. package/dest/{fields/bls12_point.js → curves/bls12/point.js} +10 -8
  92. package/dest/{fields/fields.d.ts → curves/bn254/field.d.ts} +7 -15
  93. package/dest/curves/bn254/field.d.ts.map +1 -0
  94. package/dest/{fields/fields.js → curves/bn254/field.js} +35 -49
  95. package/dest/curves/bn254/index.d.ts +3 -0
  96. package/dest/curves/bn254/index.d.ts.map +1 -0
  97. package/dest/curves/bn254/index.js +2 -0
  98. package/dest/curves/bn254/point.d.ts +54 -0
  99. package/dest/curves/bn254/point.d.ts.map +1 -0
  100. package/dest/curves/bn254/point.js +143 -0
  101. package/dest/curves/grumpkin/index.d.ts +10 -0
  102. package/dest/curves/grumpkin/index.d.ts.map +1 -0
  103. package/dest/curves/grumpkin/index.js +3 -0
  104. package/dest/{fields → curves/grumpkin}/point.d.ts +13 -4
  105. package/dest/curves/grumpkin/point.d.ts.map +1 -0
  106. package/dest/{fields → curves/grumpkin}/point.js +7 -7
  107. package/dest/error/index.d.ts +4 -4
  108. package/dest/error/index.d.ts.map +1 -1
  109. package/dest/eth-address/index.d.ts +3 -2
  110. package/dest/eth-address/index.d.ts.map +1 -1
  111. package/dest/eth-address/index.js +10 -3
  112. package/dest/eth-signature/eth_signature.d.ts +4 -1
  113. package/dest/eth-signature/eth_signature.d.ts.map +1 -1
  114. package/dest/iterator/filter.d.ts +3 -0
  115. package/dest/iterator/filter.d.ts.map +1 -0
  116. package/dest/iterator/filter.js +7 -0
  117. package/dest/iterator/index.d.ts +2 -0
  118. package/dest/iterator/index.d.ts.map +1 -0
  119. package/dest/iterator/index.js +1 -0
  120. package/dest/jest/setup.js +4 -1
  121. package/dest/json-rpc/client/undici.d.ts +1 -1
  122. package/dest/json-rpc/client/undici.d.ts.map +1 -1
  123. package/dest/json-rpc/client/undici.js +21 -4
  124. package/dest/json-rpc/fixtures/class_a.d.ts +3 -3
  125. package/dest/json-rpc/fixtures/class_a.d.ts.map +1 -1
  126. package/dest/json-rpc/fixtures/class_b.d.ts +3 -3
  127. package/dest/json-rpc/fixtures/class_b.d.ts.map +1 -1
  128. package/dest/json-rpc/server/safe_json_rpc_server.js +1 -1
  129. package/dest/log/libp2p_logger.d.ts +5 -2
  130. package/dest/log/libp2p_logger.d.ts.map +1 -1
  131. package/dest/log/libp2p_logger.js +14 -4
  132. package/dest/log/pino-logger-server.d.ts +9 -0
  133. package/dest/log/pino-logger-server.d.ts.map +1 -0
  134. package/dest/log/pino-logger-server.js +18 -0
  135. package/dest/log/pino-logger.d.ts +37 -8
  136. package/dest/log/pino-logger.d.ts.map +1 -1
  137. package/dest/log/pino-logger.js +116 -27
  138. package/dest/queue/semaphore.d.ts +5 -1
  139. package/dest/queue/semaphore.d.ts.map +1 -1
  140. package/dest/retry/index.d.ts +11 -1
  141. package/dest/retry/index.d.ts.map +1 -1
  142. package/dest/retry/index.js +11 -0
  143. package/dest/schemas/schemas.d.ts +7 -3
  144. package/dest/schemas/schemas.d.ts.map +1 -1
  145. package/dest/schemas/schemas.js +9 -3
  146. package/dest/schemas/types.d.ts +31 -1
  147. package/dest/schemas/types.d.ts.map +1 -1
  148. package/dest/schemas/types.js +25 -1
  149. package/dest/serialize/buffer_reader.d.ts +7 -4
  150. package/dest/serialize/buffer_reader.d.ts.map +1 -1
  151. package/dest/serialize/buffer_reader.js +13 -4
  152. package/dest/serialize/field_reader.d.ts +2 -2
  153. package/dest/serialize/field_reader.d.ts.map +1 -1
  154. package/dest/serialize/field_reader.js +1 -1
  155. package/dest/serialize/free_funcs.d.ts +2 -2
  156. package/dest/serialize/free_funcs.d.ts.map +1 -1
  157. package/dest/serialize/free_funcs.js +1 -1
  158. package/dest/serialize/serialize.d.ts +2 -2
  159. package/dest/serialize/serialize.d.ts.map +1 -1
  160. package/dest/serialize/serialize.js +1 -1
  161. package/dest/sleep/index.d.ts +3 -1
  162. package/dest/sleep/index.d.ts.map +1 -1
  163. package/dest/sleep/index.js +4 -0
  164. package/dest/timer/date.d.ts +2 -1
  165. package/dest/timer/date.d.ts.map +1 -1
  166. package/dest/timer/date.js +3 -0
  167. package/dest/trees/balanced_merkle_tree_root.d.ts +17 -0
  168. package/dest/trees/balanced_merkle_tree_root.d.ts.map +1 -0
  169. package/dest/trees/{balanced_merkle_tree.js → balanced_merkle_tree_root.js} +2 -15
  170. package/dest/trees/hasher.d.ts +3 -1
  171. package/dest/trees/hasher.d.ts.map +1 -1
  172. package/dest/trees/hasher.js +10 -5
  173. package/dest/trees/index.d.ts +4 -4
  174. package/dest/trees/index.d.ts.map +1 -1
  175. package/dest/trees/index.js +3 -3
  176. package/dest/trees/indexed_merkle_tree.js +1 -1
  177. package/dest/trees/membership_witness.d.ts +12 -2
  178. package/dest/trees/membership_witness.d.ts.map +1 -1
  179. package/dest/trees/membership_witness.js +10 -1
  180. package/dest/trees/merkle_tree_calculator.d.ts +1 -1
  181. package/dest/trees/merkle_tree_calculator.d.ts.map +1 -1
  182. package/dest/trees/merkle_tree_calculator.js +2 -2
  183. package/dest/trees/sibling_path.d.ts +3 -2
  184. package/dest/trees/sibling_path.d.ts.map +1 -1
  185. package/dest/trees/sibling_path.js +3 -3
  186. package/dest/trees/unbalanced_merkle_tree_calculator.d.ts +2 -3
  187. package/dest/trees/unbalanced_merkle_tree_calculator.d.ts.map +1 -1
  188. package/dest/trees/unbalanced_merkle_tree_calculator.js +1 -5
  189. package/dest/trees/{unbalanced_merkle_tree.d.ts → unbalanced_merkle_tree_root.d.ts} +3 -5
  190. package/dest/trees/unbalanced_merkle_tree_root.d.ts.map +1 -0
  191. package/dest/trees/{unbalanced_merkle_tree.js → unbalanced_merkle_tree_root.js} +11 -49
  192. package/dest/trees/unbalanced_tree_store.d.ts +5 -1
  193. package/dest/trees/unbalanced_tree_store.d.ts.map +1 -1
  194. package/dest/trees/unbalanced_tree_store.js +49 -1
  195. package/dest/types/index.d.ts +6 -2
  196. package/dest/types/index.d.ts.map +1 -1
  197. package/dest/types/index.js +6 -0
  198. package/package.json +28 -9
  199. package/src/array/index.ts +1 -0
  200. package/src/array/sorted_array.ts +133 -0
  201. package/src/branded-types/block_number.ts +117 -0
  202. package/src/branded-types/checkpoint_number.ts +115 -0
  203. package/src/branded-types/index.ts +3 -0
  204. package/src/branded-types/index_within_checkpoint.ts +88 -0
  205. package/src/buffer/buffer16.ts +2 -2
  206. package/src/buffer/buffer32.ts +2 -2
  207. package/src/collection/array.ts +52 -0
  208. package/src/config/env_var.ts +39 -12
  209. package/src/config/index.ts +39 -6
  210. package/src/config/network_config.ts +2 -0
  211. package/src/config/parse-env.ts +4 -0
  212. package/src/crypto/bls/bn254_keystore.ts +1 -1
  213. package/src/crypto/bls/index.ts +1 -1
  214. package/src/crypto/bn254/index.ts +50 -159
  215. package/src/crypto/ecdsa/signature.ts +2 -2
  216. package/src/crypto/grumpkin/index.ts +3 -1
  217. package/src/crypto/keys/index.ts +1 -1
  218. package/src/crypto/pedersen/pedersen.wasm.ts +1 -1
  219. package/src/crypto/poseidon/index.ts +1 -11
  220. package/src/crypto/random/randomness_singleton.ts +6 -4
  221. package/src/crypto/schnorr/index.ts +2 -1
  222. package/src/crypto/schnorr/signature.ts +2 -2
  223. package/src/crypto/sha256/index.ts +1 -1
  224. package/src/crypto/sha512/index.ts +1 -1
  225. package/src/crypto/signature/index.ts +1 -1
  226. package/src/crypto/sync/pedersen/index.ts +1 -1
  227. package/src/crypto/sync/poseidon/index.ts +1 -10
  228. package/src/{fields/bls12_fields.ts → curves/bls12/field.ts} +6 -6
  229. package/src/curves/bls12/index.ts +2 -0
  230. package/src/{fields/bls12_point.ts → curves/bls12/point.ts} +7 -7
  231. package/src/{fields/fields.ts → curves/bn254/field.ts} +33 -56
  232. package/src/curves/bn254/index.ts +2 -0
  233. package/src/curves/bn254/point.ts +170 -0
  234. package/src/curves/grumpkin/index.ts +11 -0
  235. package/src/{fields → curves/grumpkin}/point.ts +7 -7
  236. package/src/eth-address/index.ts +8 -2
  237. package/src/iterator/filter.ts +11 -0
  238. package/src/iterator/index.ts +1 -0
  239. package/src/jest/setup.mjs +4 -1
  240. package/src/json-rpc/client/undici.ts +21 -3
  241. package/src/json-rpc/server/safe_json_rpc_server.ts +1 -1
  242. package/src/log/libp2p_logger.ts +12 -5
  243. package/src/log/pino-logger-server.ts +25 -0
  244. package/src/log/pino-logger.ts +138 -37
  245. package/src/queue/semaphore.ts +5 -0
  246. package/src/retry/index.ts +18 -0
  247. package/src/schemas/schemas.ts +14 -3
  248. package/src/schemas/types.ts +33 -0
  249. package/src/serialize/buffer_reader.ts +21 -9
  250. package/src/serialize/field_reader.ts +1 -1
  251. package/src/serialize/free_funcs.ts +1 -1
  252. package/src/serialize/serialize.ts +1 -1
  253. package/src/sleep/index.ts +6 -0
  254. package/src/timer/date.ts +4 -0
  255. package/src/trees/{balanced_merkle_tree.ts → balanced_merkle_tree_root.ts} +2 -16
  256. package/src/trees/hasher.ts +9 -0
  257. package/src/trees/index.ts +3 -3
  258. package/src/trees/indexed_merkle_tree.ts +1 -1
  259. package/src/trees/membership_witness.ts +9 -1
  260. package/src/trees/merkle_tree_calculator.ts +2 -2
  261. package/src/trees/sibling_path.ts +3 -3
  262. package/src/trees/unbalanced_merkle_tree_calculator.ts +1 -12
  263. package/src/trees/{unbalanced_merkle_tree.ts → unbalanced_merkle_tree_root.ts} +17 -61
  264. package/src/trees/unbalanced_tree_store.ts +57 -2
  265. package/src/types/index.ts +11 -1
  266. package/dest/crypto/bn254/bn254_utils.d.ts +0 -39
  267. package/dest/crypto/bn254/bn254_utils.d.ts.map +0 -1
  268. package/dest/crypto/bn254/bn254_utils.js +0 -56
  269. package/dest/crypto/index.d.ts +0 -17
  270. package/dest/crypto/index.d.ts.map +0 -1
  271. package/dest/crypto/index.js +0 -16
  272. package/dest/fields/bls12_fields.d.ts.map +0 -1
  273. package/dest/fields/bls12_point.d.ts.map +0 -1
  274. package/dest/fields/coordinate.d.ts +0 -63
  275. package/dest/fields/coordinate.d.ts.map +0 -1
  276. package/dest/fields/coordinate.js +0 -96
  277. package/dest/fields/fields.d.ts.map +0 -1
  278. package/dest/fields/index.d.ts +0 -6
  279. package/dest/fields/index.d.ts.map +0 -1
  280. package/dest/fields/index.js +0 -5
  281. package/dest/fields/point.d.ts.map +0 -1
  282. package/dest/index.d.ts +0 -31
  283. package/dest/index.d.ts.map +0 -1
  284. package/dest/index.js +0 -31
  285. package/dest/json-rpc/server/telemetry.d.ts +0 -2
  286. package/dest/json-rpc/server/telemetry.d.ts.map +0 -1
  287. package/dest/json-rpc/server/telemetry.js +0 -0
  288. package/dest/trees/balanced_merkle_tree.d.ts +0 -22
  289. package/dest/trees/balanced_merkle_tree.d.ts.map +0 -1
  290. package/dest/trees/unbalanced_merkle_tree.d.ts.map +0 -1
  291. package/src/crypto/bn254/bn254_utils.ts +0 -64
  292. package/src/crypto/index.ts +0 -16
  293. package/src/fields/coordinate.ts +0 -104
  294. package/src/fields/index.ts +0 -5
  295. package/src/index.ts +0 -31
  296. package/src/json-rpc/server/telemetry.ts +0 -0
@@ -4,10 +4,10 @@ import { EpochNumber, EpochNumberSchema } from '../branded-types/epoch.js';
4
4
  import { SlotNumber, SlotNumberSchema } from '../branded-types/slot.js';
5
5
  import { Buffer32 } from '../buffer/buffer32.js';
6
6
  import { SecretValue } from '../config/secret_value.js';
7
+ import { Fq, Fr } from '../curves/bn254/field.js';
8
+ import { Point } from '../curves/grumpkin/point.js';
7
9
  import { EthAddress } from '../eth-address/index.js';
8
- import { Fq, Fr } from '../fields/fields.js';
9
- import { Point } from '../fields/point.js';
10
- import { isHex, withoutHexPrefix } from '../string/index.js';
10
+ import { isHex, withHexPrefix, withoutHexPrefix } from '../string/index.js';
11
11
  import { bufferSchema, hexSchema } from './utils.js';
12
12
 
13
13
  export const schemas = {
@@ -58,6 +58,14 @@ export const schemas = {
58
58
  .max(2 ** 32 - 1),
59
59
  ),
60
60
 
61
+ /** Coerces input to UInt64. */
62
+ UInt64: z.union([z.bigint(), z.number(), z.string()]).pipe(
63
+ z.coerce
64
+ .bigint()
65
+ .min(0n)
66
+ .max(2n ** 64n - 1n),
67
+ ),
68
+
61
69
  /** Accepts a hex string as a Buffer32 type. */
62
70
  Buffer32: z.string().refine(isHex, 'Not a valid hex string').transform(Buffer32.fromString),
63
71
 
@@ -74,6 +82,9 @@ export const schemas = {
74
82
  /** Hex string with an optional 0x prefix which gets removed as part of the parsing. */
75
83
  HexString: hexSchema,
76
84
 
85
+ /** Hex string with an optional 0x prefix which gets enforced as part of the parsing. */
86
+ HexStringWith0x: z.string().refine(isHex, 'Not a valid hex string').transform(withHexPrefix),
87
+
77
88
  /** A secret config value */
78
89
  SecretValue: SecretValue.schema,
79
90
  };
@@ -1,3 +1,36 @@
1
1
  import type { ZodType } from 'zod';
2
2
 
3
3
  export type ZodFor<T> = ZodType<T, any, any>;
4
+
5
+ /**
6
+ * Creates a schema validator that enforces all properties of type T are present in the schema.
7
+ * This provides compile-time safety to ensure schemas don't miss optional properties.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * interface MyConfig {
12
+ * foo: string;
13
+ * bar?: number;
14
+ * }
15
+ *
16
+ * // ✅ This will work - all keys present
17
+ * const schema1 = zodFor<MyConfig>()(z.object({
18
+ * foo: z.string(),
19
+ * bar: z.number().optional(),
20
+ * }));
21
+ *
22
+ * // ❌ This will error - 'bar' is missing
23
+ * const schema2 = zodFor<MyConfig>()(z.object({
24
+ * foo: z.string(),
25
+ * }));
26
+ * ```
27
+ */
28
+ export function zodFor<T>() {
29
+ return (schema => schema) as <S extends ZodType<any, any, any>>(
30
+ schema: keyof T extends keyof S['_output']
31
+ ? keyof S['_output'] extends keyof T
32
+ ? S
33
+ : S & { __error__: 'Schema has extra keys not in type'; __extra__: Exclude<keyof S['_output'], keyof T> }
34
+ : S & { __error__: 'Schema is missing keys from type'; __missing__: Exclude<keyof T, keyof S['_output']> },
35
+ ) => S;
36
+ }
@@ -224,15 +224,22 @@ export class BufferReader {
224
224
  * deserializing each one using the 'fromBuffer' method of 'itemDeserializer'.
225
225
  *
226
226
  * @param itemDeserializer - Object with 'fromBuffer' method to deserialize vector elements.
227
+ * @param maxSize - Optional maximum allowed size for the vector. If the size exceeds this, an error is thrown.
227
228
  * @returns An array of deserialized elements of type T.
228
229
  */
229
- public readVector<T>(itemDeserializer: {
230
- /**
231
- * A method to deserialize data from a buffer.
232
- */
233
- fromBuffer: (reader: BufferReader) => T;
234
- }): T[] {
230
+ public readVector<T>(
231
+ itemDeserializer: {
232
+ /**
233
+ * A method to deserialize data from a buffer.
234
+ */
235
+ fromBuffer: (reader: BufferReader) => T;
236
+ },
237
+ maxSize?: number,
238
+ ): T[] {
235
239
  const size = this.readNumber();
240
+ if (maxSize !== undefined && size > maxSize) {
241
+ throw new Error(`Vector size ${size} exceeds maximum allowed ${maxSize}`);
242
+ }
236
243
  const result = new Array<T>(size);
237
244
  for (let i = 0; i < size; i++) {
238
245
  result[i] = itemDeserializer.fromBuffer(this);
@@ -344,10 +351,11 @@ export class BufferReader {
344
351
  * The method first reads the size of the string, then reads the corresponding
345
352
  * number of bytes from the buffer and converts them to a string.
346
353
  *
354
+ * @param maxSize - Optional maximum allowed size for the string buffer. If the size exceeds this, an error is thrown.
347
355
  * @returns The read string from the buffer.
348
356
  */
349
- public readString(): string {
350
- return this.readBuffer().toString();
357
+ public readString(maxSize?: number): string {
358
+ return this.readBuffer(maxSize).toString();
351
359
  }
352
360
 
353
361
  /**
@@ -356,10 +364,14 @@ export class BufferReader {
356
364
  * a Buffer with that size containing the bytes. Useful for reading variable-length
357
365
  * binary data encoded as (size, data) format.
358
366
  *
367
+ * @param maxSize - Optional maximum allowed size for the buffer. If the size exceeds this, an error is thrown.
359
368
  * @returns A Buffer containing the read bytes.
360
369
  */
361
- public readBuffer(): Buffer {
370
+ public readBuffer(maxSize?: number): Buffer {
362
371
  const size = this.readNumber();
372
+ if (maxSize !== undefined && size > maxSize) {
373
+ throw new Error(`Buffer size ${size} exceeds maximum allowed ${maxSize}`);
374
+ }
363
375
  this.#rangeCheck(size);
364
376
  return this.readBytes(size);
365
377
  }
@@ -1,4 +1,4 @@
1
- import { Fq, type Fr } from '../fields/fields.js';
1
+ import { Fq, type Fr } from '../curves/bn254/field.js';
2
2
  import type { Tuple } from './types.js';
3
3
 
4
4
  /**
@@ -1,5 +1,5 @@
1
1
  import { toBufferBE } from '../bigint-buffer/index.js';
2
- import { Fr } from '../fields/fields.js';
2
+ import { Fr } from '../curves/bn254/field.js';
3
3
  import type { Tuple } from './types.js';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  import { toBigIntBE, toBufferBE } from '../bigint-buffer/index.js';
2
- import { Fr } from '../fields/fields.js';
2
+ import { Fr } from '../curves/bn254/field.js';
3
3
  import { numToUInt32BE } from './free_funcs.js';
4
4
 
5
5
  /**
@@ -73,3 +73,9 @@ export class InterruptibleSleep {
73
73
  export function sleep<T>(ms: number, returnValue?: T): Promise<T> {
74
74
  return new Promise(resolve => setTimeout(() => resolve(returnValue as T), ms));
75
75
  }
76
+
77
+ /** Sleeps until the target date */
78
+ export function sleepUntil<T>(target: Date, now: Date, returnValue?: T): Promise<T> {
79
+ const ms = target.getTime() - now.getTime();
80
+ return sleep(ms, returnValue);
81
+ }
package/src/timer/date.ts CHANGED
@@ -9,6 +9,10 @@ export class DateProvider {
9
9
  public nowInSeconds(): number {
10
10
  return Math.floor(this.now() / 1000);
11
11
  }
12
+
13
+ public nowAsDate(): Date {
14
+ return new Date(this.now());
15
+ }
12
16
  }
13
17
 
14
18
  /** Returns current datetime and allows to override it. */
@@ -1,21 +1,7 @@
1
- import { pedersenHash as pedersenHashArray, poseidon2Hash, sha256Trunc } from '@aztec/foundation/crypto';
2
-
3
- import type { AsyncHasher, Hasher } from './hasher.js';
4
-
5
- export const shaMerkleHash: Hasher['hash'] = (left: Buffer, right: Buffer) =>
6
- sha256Trunc(Buffer.concat([left, right])) as Buffer<ArrayBuffer>;
7
-
8
- export const pedersenMerkleHash: AsyncHasher['hash'] = async (left: Buffer, right: Buffer) =>
9
- (await pedersenHashArray([left, right])).toBuffer() as Buffer<ArrayBuffer>;
10
-
11
- export const poseidonMerkleHash: AsyncHasher['hash'] = async (left: Buffer, right: Buffer) =>
12
- (await poseidon2Hash([left, right])).toBuffer() as Buffer<ArrayBuffer>;
1
+ import { poseidonMerkleHash, shaMerkleHash } from './hasher.js';
13
2
 
14
3
  export const computeBalancedShaRoot = (leaves: Buffer[]) => computeBalancedMerkleTreeRoot(leaves);
15
4
 
16
- export const computeBalancedPedersenRoot = async (leaves: Buffer[]) =>
17
- await computeBalancedMerkleTreeRootAsync(leaves, pedersenMerkleHash);
18
-
19
5
  export const computeBalancedPoseidonRoot = async (leaves: Buffer[]) =>
20
6
  await computeBalancedMerkleTreeRootAsync(leaves, poseidonMerkleHash);
21
7
 
@@ -44,7 +30,7 @@ export function computeBalancedMerkleTreeRoot(leaves: Buffer[], hasher = shaMerk
44
30
 
45
31
  /**
46
32
  * Computes the Merkle root with the provided leaves **asynchronously**.
47
- * This method uses an asynchronous hash function (defaults to `pedersenHash`).
33
+ * This method uses an asynchronous hash function (defaults to `poseidon2Hash`).
48
34
  *
49
35
  * @throws If the number of leaves is not a power of two.
50
36
  */
@@ -1,3 +1,6 @@
1
+ import { poseidon2Hash } from '../crypto/poseidon/index.js';
2
+ import { sha256Trunc } from '../crypto/sha256/index.js';
3
+
1
4
  /**
2
5
  * Defines hasher interface used by Merkle trees.
3
6
  */
@@ -37,3 +40,9 @@ export interface AsyncHasher {
37
40
  */
38
41
  hashInputs(inputs: Buffer[]): Promise<Buffer<ArrayBuffer>>;
39
42
  }
43
+
44
+ export const shaMerkleHash: Hasher['hash'] = (left: Buffer, right: Buffer) =>
45
+ sha256Trunc(Buffer.concat([left, right])) as Buffer<ArrayBuffer>;
46
+
47
+ export const poseidonMerkleHash: AsyncHasher['hash'] = async (left: Buffer, right: Buffer) =>
48
+ (await poseidon2Hash([left, right])).toBuffer() as Buffer<ArrayBuffer>;
@@ -1,6 +1,4 @@
1
- export * from './balanced_merkle_tree.js';
2
- export * from './unbalanced_merkle_tree.js';
3
- export * from './unbalanced_tree_store.js';
1
+ export * from './balanced_merkle_tree_root.js';
4
2
  export * from './merkle_tree_calculator.js';
5
3
  export * from './merkle_tree.js';
6
4
  export * from './indexed_merkle_tree_calculator.js';
@@ -10,3 +8,5 @@ export * from './membership_witness.js';
10
8
  export * from './hasher.js';
11
9
  export * from './indexed_tree_leaf.js';
12
10
  export * from './unbalanced_merkle_tree_calculator.js';
11
+ export * from './unbalanced_merkle_tree_root.js';
12
+ export * from './unbalanced_tree_store.js';
@@ -1,4 +1,4 @@
1
- import { Fr } from '../fields/index.js';
1
+ import { Fr } from '../curves/bn254/index.js';
2
2
  import { assertLength } from '../serialize/index.js';
3
3
  import type { IndexedTreeLeafPreimage } from './indexed_tree_leaf.js';
4
4
  import { MembershipWitness } from './membership_witness.js';
@@ -1,6 +1,6 @@
1
1
  import { assertMemberLength } from '../array/array.js';
2
2
  import { toBigIntBE, toBufferBE } from '../bigint-buffer/index.js';
3
- import { Fr } from '../fields/fields.js';
3
+ import { Fr } from '../curves/bn254/field.js';
4
4
  import { schemas } from '../schemas/schemas.js';
5
5
  import { BufferReader, type Tuple, serializeToBuffer } from '../serialize/index.js';
6
6
  import type { SiblingPath } from './sibling_path.js';
@@ -38,6 +38,14 @@ export class MembershipWitness<N extends number> {
38
38
  return [new Fr(this.leafIndex), ...this.siblingPath];
39
39
  }
40
40
 
41
+ /**
42
+ * Returns a representation of the membership witness as expected by intrinsic Noir deserialization.
43
+ */
44
+ public toNoirRepresentation(): (string | string[])[] {
45
+ // TODO(#12874): remove the stupid as string conversion by modifying ForeignCallOutput type in acvm.js
46
+ return [new Fr(this.leafIndex).toString() as string, this.siblingPath.map(fr => fr.toString()) as string[]];
47
+ }
48
+
41
49
  static schemaFor<N extends number>(size: N) {
42
50
  return schemas.Buffer.transform(b => MembershipWitness.fromBuffer(b, size));
43
51
  }
@@ -1,4 +1,4 @@
1
- import { pedersenHash } from '@aztec/foundation/crypto';
1
+ import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
2
2
 
3
3
  import type { AsyncHasher } from './hasher.js';
4
4
  import { MerkleTree } from './merkle_tree.js';
@@ -19,7 +19,7 @@ export class MerkleTreeCalculator {
19
19
  height: number,
20
20
  zeroLeaf: Buffer = Buffer.alloc(32),
21
21
  hasher = async (left: Buffer, right: Buffer) =>
22
- (await pedersenHash([left, right])).toBuffer() as Buffer<ArrayBuffer>,
22
+ (await poseidon2Hash([left, right])).toBuffer() as Buffer<ArrayBuffer>,
23
23
  ) {
24
24
  const zeroHashes = [zeroLeaf];
25
25
  for (let i = 0; i < height; i++) {
@@ -1,6 +1,6 @@
1
1
  import { makeTuple } from '../array/array.js';
2
- import { pedersenHash } from '../crypto/index.js';
3
- import { Fr } from '../fields/index.js';
2
+ import { poseidon2Hash } from '../crypto/poseidon/index.js';
3
+ import { Fr } from '../curves/bn254/index.js';
4
4
  import { schemas } from '../schemas/index.js';
5
5
  import {
6
6
  type Tuple,
@@ -172,7 +172,7 @@ export async function computeRootFromSiblingPath(
172
172
  leaf: Buffer,
173
173
  siblingPath: Buffer[],
174
174
  index: number,
175
- hasher = async (left: Buffer, right: Buffer) => (await pedersenHash([left, right])).toBuffer(),
175
+ hasher = async (left: Buffer, right: Buffer) => (await poseidon2Hash([left, right])).toBuffer(),
176
176
  ) {
177
177
  let result = leaf;
178
178
  for (const sibling of siblingPath) {
@@ -1,18 +1,7 @@
1
- import { shaMerkleHash } from './balanced_merkle_tree.js';
2
- import type { Hasher } from './hasher.js';
1
+ import { type Hasher, shaMerkleHash } from './hasher.js';
3
2
  import { SiblingPath } from './sibling_path.js';
4
3
  import { type TreeNodeLocation, UnbalancedTreeStore } from './unbalanced_tree_store.js';
5
4
 
6
- export function computeCompressedUnbalancedMerkleTreeRoot(
7
- leaves: Buffer[],
8
- valueToCompress = Buffer.alloc(32),
9
- emptyRoot = Buffer.alloc(32),
10
- hasher?: Hasher['hash'],
11
- ): Buffer {
12
- const calculator = UnbalancedMerkleTreeCalculator.create(leaves, valueToCompress, emptyRoot, hasher);
13
- return calculator.getRoot();
14
- }
15
-
16
5
  interface TreeNode {
17
6
  value: Buffer;
18
7
  leafIndex?: number;
@@ -1,15 +1,14 @@
1
- import {
2
- computeBalancedMerkleTreeRoot,
3
- computeBalancedMerkleTreeRootAsync,
4
- poseidonMerkleHash,
5
- shaMerkleHash,
6
- } from './balanced_merkle_tree.js';
1
+ import { computeBalancedMerkleTreeRoot, computeBalancedMerkleTreeRootAsync } from './balanced_merkle_tree_root.js';
2
+ import { poseidonMerkleHash, shaMerkleHash } from './hasher.js';
3
+ import { UnbalancedMerkleTreeCalculator } from './unbalanced_merkle_tree_calculator.js';
7
4
 
8
5
  export const computeUnbalancedShaRoot = (leaves: Buffer[]) => computeUnbalancedMerkleTreeRoot(leaves, shaMerkleHash);
9
6
 
10
7
  export const computeUnbalancedPoseidonRoot = async (leaves: Buffer[]) =>
11
8
  await computeUnbalancedMerkleTreeRootAsync(leaves, poseidonMerkleHash);
12
9
 
10
+ export const computeWonkyShaRoot = (leaves: Buffer[]) => computeWonkyMerkleTreeRoot(leaves);
11
+
13
12
  /**
14
13
  * Computes the Merkle root of an unbalanced tree.
15
14
  *
@@ -101,59 +100,16 @@ export async function computeUnbalancedMerkleTreeRootAsync(
101
100
  return root!;
102
101
  }
103
102
 
104
- /// Get the depth of the maximum balanced tree that can be created with the given number of leaves. The subtree will be
105
- /// the left most subtree of the wonky tree with a total of `numLeaves` leaves.
106
- ///
107
- /// Note: All the leaves may not be used to form the tree. For example, if there are 5 leaves, the maximum depth is 2,
108
- /// only 4 leaves are used to form a balanced tree.
109
- function getMaxBalancedSubtreeDepth(numLeaves: number) {
110
- return Math.floor(Math.log2(numLeaves));
111
- }
112
-
113
- /// Get the maximum depth of an unbalanced tree that can be created with the given number of leaves.
114
- function getMaxUnbalancedTreeDepth(numLeaves: number) {
115
- return Math.ceil(Math.log2(numLeaves));
116
- }
117
-
118
- function findPosition(
119
- rootLevel: number,
120
- leafLevel: number,
121
- numLeaves: number,
122
- indexOffset: number,
123
- targetIndex: number,
124
- ): { level: number; indexAtLevel: number } {
125
- if (numLeaves <= 1) {
126
- // Single leaf.
127
- return { level: rootLevel, indexAtLevel: indexOffset };
128
- }
129
-
130
- // The largest balanced tree that can be created with the given number of leaves.
131
- const maxBalancedTreeDepth = getMaxBalancedSubtreeDepth(numLeaves);
132
- const numBalancedLeaves = 2 ** maxBalancedTreeDepth;
133
- const numRemainingLeaves = numLeaves - numBalancedLeaves;
134
-
135
- if (targetIndex < numBalancedLeaves) {
136
- // Target is in the balanced tree.
137
-
138
- // - If numRemainingLeaves is 0: this balanced tree is grown from the current root.
139
- // - If numRemainingLeaves is not 0: the remaining leaves will form another tree, which will become the right child of the root.
140
- // And the balanced tree will be the left child of the root.
141
- // There will be an extra level between the root of the balanced tree and the current root.
142
- const extraLevel = numRemainingLeaves ? 1 : 0;
143
-
144
- return { level: rootLevel + maxBalancedTreeDepth + extraLevel, indexAtLevel: indexOffset + targetIndex };
145
- } else {
146
- // Target is in the right branch.
147
- const rightBranchMaxLevel = getMaxUnbalancedTreeDepth(numRemainingLeaves);
148
- const shiftedUp = leafLevel - rootLevel - rightBranchMaxLevel - 1;
149
- const nextLeafLevel = leafLevel - shiftedUp;
150
- const newIndexOffset = (indexOffset + numBalancedLeaves) >> shiftedUp;
151
- const shiftedTargetIndex = targetIndex - numBalancedLeaves;
152
- return findPosition(rootLevel + 1, nextLeafLevel, numRemainingLeaves, newIndexOffset, shiftedTargetIndex);
153
- }
154
- }
155
-
156
- export function findLeafLevelAndIndex(numLeaves: number, leafIndex: number) {
157
- const maxLevel = getMaxUnbalancedTreeDepth(numLeaves);
158
- return findPosition(0, maxLevel, numLeaves, 0, leafIndex);
103
+ // A **wonky** tree is a "compressed" unbalanced Merkle tree.
104
+ // It is constructed in the same way as an unbalanced tree: by first creating the largest possible left subtree, with
105
+ // the remaining leaves forming a right subtree that follows the same process recursively.
106
+ // During construction, leaves equal to `valueToCompress` are skipped (compressed) and do not contribute to the tree.
107
+ export function computeWonkyMerkleTreeRoot(
108
+ leaves: Buffer[],
109
+ valueToCompress = Buffer.alloc(32),
110
+ emptyRoot = Buffer.alloc(32),
111
+ hasher = shaMerkleHash,
112
+ ): Buffer {
113
+ const calculator = UnbalancedMerkleTreeCalculator.create(leaves, valueToCompress, emptyRoot, hasher);
114
+ return calculator.getRoot();
159
115
  }
@@ -1,5 +1,3 @@
1
- import { findLeafLevelAndIndex } from './unbalanced_merkle_tree.js';
2
-
3
1
  export interface TreeNodeLocation {
4
2
  level: number;
5
3
  index: number;
@@ -104,3 +102,60 @@ export class UnbalancedTreeStore<T> {
104
102
  return `${location.level}-${location.index}`;
105
103
  }
106
104
  }
105
+
106
+ /// Get the depth of the maximum balanced tree that can be created with the given number of leaves. The subtree will be
107
+ /// the left most subtree of the unbalanced tree with a total of `numLeaves` leaves.
108
+ ///
109
+ /// Note: All the leaves may not be used to form the tree. For example, if there are 5 leaves, the maximum depth is 2,
110
+ /// only 4 leaves are used to form a balanced tree.
111
+ function getMaxBalancedSubtreeDepth(numLeaves: number) {
112
+ return Math.floor(Math.log2(numLeaves));
113
+ }
114
+
115
+ /// Get the maximum depth of an unbalanced tree that can be created with the given number of leaves.
116
+ function getMaxUnbalancedTreeDepth(numLeaves: number) {
117
+ return Math.ceil(Math.log2(numLeaves));
118
+ }
119
+
120
+ function findPosition(
121
+ rootLevel: number,
122
+ leafLevel: number,
123
+ numLeaves: number,
124
+ indexOffset: number,
125
+ targetIndex: number,
126
+ ): { level: number; indexAtLevel: number } {
127
+ if (numLeaves <= 1) {
128
+ // Single leaf.
129
+ return { level: rootLevel, indexAtLevel: indexOffset };
130
+ }
131
+
132
+ // The largest balanced tree that can be created with the given number of leaves.
133
+ const maxBalancedTreeDepth = getMaxBalancedSubtreeDepth(numLeaves);
134
+ const numBalancedLeaves = 2 ** maxBalancedTreeDepth;
135
+ const numRemainingLeaves = numLeaves - numBalancedLeaves;
136
+
137
+ if (targetIndex < numBalancedLeaves) {
138
+ // Target is in the balanced tree.
139
+
140
+ // - If numRemainingLeaves is 0: this balanced tree is grown from the current root.
141
+ // - If numRemainingLeaves is not 0: the remaining leaves will form another tree, which will become the right child of the root.
142
+ // And the balanced tree will be the left child of the root.
143
+ // There will be an extra level between the root of the balanced tree and the current root.
144
+ const extraLevel = numRemainingLeaves ? 1 : 0;
145
+
146
+ return { level: rootLevel + maxBalancedTreeDepth + extraLevel, indexAtLevel: indexOffset + targetIndex };
147
+ } else {
148
+ // Target is in the right branch.
149
+ const rightBranchMaxLevel = getMaxUnbalancedTreeDepth(numRemainingLeaves);
150
+ const shiftedUp = leafLevel - rootLevel - rightBranchMaxLevel - 1;
151
+ const nextLeafLevel = leafLevel - shiftedUp;
152
+ const newIndexOffset = (indexOffset + numBalancedLeaves) >> shiftedUp;
153
+ const shiftedTargetIndex = targetIndex - numBalancedLeaves;
154
+ return findPosition(rootLevel + 1, nextLeafLevel, numRemainingLeaves, newIndexOffset, shiftedTargetIndex);
155
+ }
156
+ }
157
+
158
+ export function findLeafLevelAndIndex(numLeaves: number, leafIndex: number) {
159
+ const maxLevel = getMaxUnbalancedTreeDepth(numLeaves);
160
+ return findPosition(0, maxLevel, numLeaves, 0, leafIndex);
161
+ }
@@ -19,6 +19,16 @@ export function unfreeze<T>(obj: T): Writeable<T> {
19
19
  return obj as Writeable<T>;
20
20
  }
21
21
 
22
+ /** Is defined type guard */
23
+ export function isDefined<T>(value: T | undefined): value is T {
24
+ return value !== undefined;
25
+ }
26
+
27
+ /** Type guard for error classes */
28
+ export function isErrorClass<T extends Error>(value: unknown, errorClass: new (...args: any[]) => T): value is T {
29
+ return value instanceof errorClass || (value instanceof Error && value.name === errorClass.name);
30
+ }
31
+
22
32
  /** Resolves a record-like type. Lifted from viem. */
23
33
  export type Prettify<T> = {
24
34
  [K in keyof T]: T[K];
@@ -28,7 +38,7 @@ export type Prettify<T> = {
28
38
  * Type-safe Event Emitter type
29
39
  * @example
30
40
  * export type ArchiverEmitter = TypedEventEmitter<{
31
- * [L2BlockSourceEvents.L2PruneDetected]: (args: L2BlockSourceEvent) => void;
41
+ * [L2BlockSourceEvents.L2PruneUnproven]: (args: L2BlockSourceEvent) => void;
32
42
  * [L2BlockSourceEvents.L2BlockProven]: (args: L2BlockSourceEvent) => void;
33
43
  * }>;
34
44
  * class Archiver extends (EventEmitter as new () => ArchiverEmitter) {
@@ -1,39 +0,0 @@
1
- /**
2
- * BN254 utility functions for point operations.
3
- * Provides compression, decompression, and public key generation for the BN254 curve.
4
- * Uses the bb.js Barretenberg backend for point operations.
5
- */
6
- /**
7
- * Generate a compressed BN254 G1 public key from a private key.
8
- *
9
- * @param privateKeyHex - Private key as 0x-prefixed hex string
10
- * @returns Compressed G1 point (32 bytes with sign bit in MSB)
11
- */
12
- export declare function computeBn254G1PublicKeyCompressed(privateKeyHex: string): Promise<string>;
13
- /**
14
- * Generate uncompressed BN254 G1 public key from a private key.
15
- *
16
- * @param privateKeyHex - Private key as 0x-prefixed hex string
17
- * @returns G1 point in affine coordinates
18
- */
19
- export declare function computeBn254G1PublicKey(privateKeyHex: string): Promise<{
20
- x: bigint;
21
- y: bigint;
22
- }>;
23
- /**
24
- * Generate BN254 G2 public key from a private key.
25
- *
26
- * @param privateKeyHex - Private key as 0x-prefixed hex string
27
- * @returns G2 point in affine coordinates
28
- */
29
- export declare function computeBn254G2PublicKey(privateKeyHex: string): Promise<{
30
- x: {
31
- c0: bigint;
32
- c1: bigint;
33
- };
34
- y: {
35
- c0: bigint;
36
- c1: bigint;
37
- };
38
- }>;
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm4yNTRfdXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jcnlwdG8vYm4yNTQvYm4yNTRfdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7Ozs7R0FJRztBQUVIOzs7OztHQUtHO0FBQ0gsd0JBQXNCLGlDQUFpQyxDQUFDLGFBQWEsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQVU5RjtBQUVEOzs7OztHQUtHO0FBQ0gsd0JBQXNCLHVCQUF1QixDQUFDLGFBQWEsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDO0lBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUFDLENBQUMsRUFBRSxNQUFNLENBQUE7Q0FBRSxDQUFDLENBUXRHO0FBRUQ7Ozs7O0dBS0c7QUFDSCx3QkFBc0IsdUJBQXVCLENBQUMsYUFBYSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDNUUsQ0FBQyxFQUFFO1FBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUFDLEVBQUUsRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDO0lBQzlCLENBQUMsRUFBRTtRQUFFLEVBQUUsRUFBRSxNQUFNLENBQUM7UUFBQyxFQUFFLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0FBQztDQUMvQixDQUFDLENBV0QifQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"bn254_utils.d.ts","sourceRoot":"","sources":["../../../src/crypto/bn254/bn254_utils.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AAEH;;;;;GAKG;AACH,wBAAsB,iCAAiC,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU9F;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAQtG;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5E,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/B,CAAC,CAWD"}
@@ -1,56 +0,0 @@
1
- import { Fr } from '../../fields/fields.js';
2
- import { Bn254G1Point, Bn254G2Point } from './index.js';
3
- /**
4
- * BN254 utility functions for point operations.
5
- * Provides compression, decompression, and public key generation for the BN254 curve.
6
- * Uses the bb.js Barretenberg backend for point operations.
7
- */ /**
8
- * Generate a compressed BN254 G1 public key from a private key.
9
- *
10
- * @param privateKeyHex - Private key as 0x-prefixed hex string
11
- * @returns Compressed G1 point (32 bytes with sign bit in MSB)
12
- */ export async function computeBn254G1PublicKeyCompressed(privateKeyHex) {
13
- const sk = BigInt(privateKeyHex);
14
- const skReduced = sk % Fr.MODULUS;
15
- // Generate G1 point on BN254 curve using bb.js
16
- const scalar = Fr.fromString(skReduced.toString());
17
- const pk1 = await Bn254G1Point.generator(scalar);
18
- // Compress the point using the primitive method
19
- return '0x' + pk1.compress().toString('hex');
20
- }
21
- /**
22
- * Generate uncompressed BN254 G1 public key from a private key.
23
- *
24
- * @param privateKeyHex - Private key as 0x-prefixed hex string
25
- * @returns G1 point in affine coordinates
26
- */ export async function computeBn254G1PublicKey(privateKeyHex) {
27
- const sk = BigInt(privateKeyHex);
28
- const skReduced = sk % Fr.MODULUS;
29
- const scalar = Fr.fromString(skReduced.toString());
30
- const pk1 = await Bn254G1Point.generator(scalar);
31
- return {
32
- x: pk1.x.toBigInt(),
33
- y: pk1.y.toBigInt()
34
- };
35
- }
36
- /**
37
- * Generate BN254 G2 public key from a private key.
38
- *
39
- * @param privateKeyHex - Private key as 0x-prefixed hex string
40
- * @returns G2 point in affine coordinates
41
- */ export async function computeBn254G2PublicKey(privateKeyHex) {
42
- const sk = BigInt(privateKeyHex);
43
- const skReduced = sk % Fr.MODULUS;
44
- const scalar = Fr.fromString(skReduced.toString());
45
- const pk2 = await Bn254G2Point.generator(scalar);
46
- return {
47
- x: {
48
- c0: pk2.x[0].toBigInt(),
49
- c1: pk2.x[1].toBigInt()
50
- },
51
- y: {
52
- c0: pk2.y[0].toBigInt(),
53
- c1: pk2.y[1].toBigInt()
54
- }
55
- };
56
- }
@@ -1,17 +0,0 @@
1
- export * from './keccak/index.js';
2
- export * from './random/index.js';
3
- export * from './sha256/index.js';
4
- export * from './sha512/index.js';
5
- export * from './pedersen/index.js';
6
- export * from './poseidon/index.js';
7
- export * from './secp256k1-signer/index.js';
8
- export * from './keys/index.js';
9
- export * from './aes128/index.js';
10
- export * from './bn254/index.js';
11
- export * from './grumpkin/index.js';
12
- export * from './ecdsa/index.js';
13
- export * from './secp256k1/index.js';
14
- export * from './schnorr/index.js';
15
- export * from './signature/index.js';
16
- export * from './bls/index.js';
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jcnlwdG8vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxnQkFBZ0IsQ0FBQyJ9
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/crypto/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC"}