@aztec/bb.js 0.85.0-alpha-testnet.2 → 0.85.0-alpha-testnet.4

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 (221) hide show
  1. package/dest/browser/733.655674bbbb79bdf168c4.js +7 -0
  2. package/dest/browser/barretenberg-threads.js +2 -29
  3. package/dest/browser/barretenberg.js +2 -29
  4. package/dest/browser/index.js +10996 -8241
  5. package/dest/browser/main.worker.js +1316 -0
  6. package/dest/browser/thread.worker.js +1200 -0
  7. package/dest/node/barretenberg/backend.d.ts +5 -6
  8. package/dest/node/barretenberg/backend.d.ts.map +1 -1
  9. package/dest/node/barretenberg/backend.js +49 -10
  10. package/dest/node/barretenberg/index.d.ts +3 -1
  11. package/dest/node/barretenberg/index.d.ts.map +1 -1
  12. package/dest/node/barretenberg/index.js +6 -3
  13. package/dest/node/barretenberg_api/index.d.ts +20 -33
  14. package/dest/node/barretenberg_api/index.d.ts.map +1 -1
  15. package/dest/node/barretenberg_api/index.js +93 -194
  16. package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  17. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts +1 -1
  18. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts.map +1 -1
  19. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.js +9 -4
  20. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts +1 -2
  21. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts.map +1 -1
  22. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.js +5 -5
  23. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts +1 -1
  24. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts.map +1 -1
  25. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.js +2 -2
  26. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts +1 -1
  27. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts.map +1 -1
  28. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.js +9 -4
  29. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts +1 -2
  30. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts.map +1 -1
  31. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.js +5 -5
  32. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts +1 -1
  33. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts.map +1 -1
  34. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.js +2 -2
  35. package/dest/node/barretenberg_wasm/helpers/browser/index.d.ts +7 -1
  36. package/dest/node/barretenberg_wasm/helpers/browser/index.d.ts.map +1 -1
  37. package/dest/node/barretenberg_wasm/helpers/browser/index.js +15 -2
  38. package/dest/node/barretenberg_wasm/helpers/node/index.d.ts +1 -1
  39. package/dest/node/barretenberg_wasm/helpers/node/index.d.ts.map +1 -1
  40. package/dest/node/barretenberg_wasm/helpers/node/index.js +1 -1
  41. package/dest/node/barretenberg_wasm/index.d.ts +0 -13
  42. package/dest/node/barretenberg_wasm/index.d.ts.map +1 -1
  43. package/dest/node/barretenberg_wasm/index.js +2 -18
  44. package/dest/node/barretenberg_wasm/index.test.js +6 -6
  45. package/dest/node/bindgen/mappings.d.ts.map +1 -1
  46. package/dest/node/bindgen/mappings.js +2 -1
  47. package/dest/node/bindgen/typescript.js +4 -4
  48. package/dest/node/index.d.ts +2 -2
  49. package/dest/node/index.d.ts.map +1 -1
  50. package/dest/node/index.js +1 -1
  51. package/dest/node/main.d.ts +0 -1
  52. package/dest/node/main.d.ts.map +1 -1
  53. package/dest/node/main.js +1 -35
  54. package/dest/node-cjs/barretenberg/backend.d.ts +5 -6
  55. package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -1
  56. package/dest/node-cjs/barretenberg/backend.js +49 -10
  57. package/dest/node-cjs/barretenberg/index.d.ts +3 -1
  58. package/dest/node-cjs/barretenberg/index.d.ts.map +1 -1
  59. package/dest/node-cjs/barretenberg/index.js +12 -9
  60. package/dest/node-cjs/barretenberg_api/index.d.ts +20 -33
  61. package/dest/node-cjs/barretenberg_api/index.d.ts.map +1 -1
  62. package/dest/node-cjs/barretenberg_api/index.js +92 -193
  63. package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  64. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts +1 -1
  65. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts.map +1 -1
  66. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.js +9 -4
  67. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts +1 -2
  68. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts.map +1 -1
  69. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.js +5 -5
  70. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts +1 -1
  71. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts.map +1 -1
  72. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.js +2 -2
  73. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts +1 -1
  74. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts.map +1 -1
  75. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.js +9 -4
  76. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts +1 -2
  77. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts.map +1 -1
  78. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.js +5 -5
  79. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts +1 -1
  80. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts.map +1 -1
  81. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.js +2 -2
  82. package/dest/node-cjs/barretenberg_wasm/helpers/browser/index.d.ts +7 -1
  83. package/dest/node-cjs/barretenberg_wasm/helpers/browser/index.d.ts.map +1 -1
  84. package/dest/node-cjs/barretenberg_wasm/helpers/browser/index.js +17 -3
  85. package/dest/node-cjs/barretenberg_wasm/helpers/node/index.d.ts +1 -1
  86. package/dest/node-cjs/barretenberg_wasm/helpers/node/index.d.ts.map +1 -1
  87. package/dest/node-cjs/barretenberg_wasm/helpers/node/index.js +1 -1
  88. package/dest/node-cjs/barretenberg_wasm/index.d.ts +0 -13
  89. package/dest/node-cjs/barretenberg_wasm/index.d.ts.map +1 -1
  90. package/dest/node-cjs/barretenberg_wasm/index.js +6 -23
  91. package/dest/node-cjs/barretenberg_wasm/index.test.js +6 -6
  92. package/dest/node-cjs/bindgen/mappings.d.ts.map +1 -1
  93. package/dest/node-cjs/bindgen/mappings.js +2 -1
  94. package/dest/node-cjs/bindgen/typescript.js +4 -4
  95. package/dest/node-cjs/index.d.ts +2 -2
  96. package/dest/node-cjs/index.d.ts.map +1 -1
  97. package/dest/node-cjs/index.js +1 -1
  98. package/dest/node-cjs/main.d.ts +0 -1
  99. package/dest/node-cjs/main.d.ts.map +1 -1
  100. package/dest/node-cjs/main.js +2 -37
  101. package/package.json +10 -12
  102. package/src/barretenberg/backend.ts +64 -11
  103. package/src/barretenberg/index.ts +7 -3
  104. package/src/barretenberg_api/index.ts +156 -360
  105. package/src/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.ts +8 -3
  106. package/src/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.ts +4 -6
  107. package/src/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.ts +1 -1
  108. package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.ts +8 -3
  109. package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.ts +4 -6
  110. package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.ts +1 -1
  111. package/src/barretenberg_wasm/helpers/browser/index.ts +18 -2
  112. package/src/barretenberg_wasm/helpers/node/index.ts +2 -2
  113. package/src/barretenberg_wasm/index.test.ts +7 -7
  114. package/src/barretenberg_wasm/index.ts +1 -24
  115. package/src/bindgen/mappings.ts +1 -0
  116. package/src/bindgen/typescript.ts +4 -4
  117. package/src/index.ts +2 -2
  118. package/src/main.ts +0 -39
  119. package/dest/browser/522.6386c00ebfb22619e11b.js +0 -3
  120. package/dest/browser/barretenberg/backend.d.ts +0 -89
  121. package/dest/browser/barretenberg/backend.d.ts.map +0 -1
  122. package/dest/browser/barretenberg/index.d.ts +0 -51
  123. package/dest/browser/barretenberg/index.d.ts.map +0 -1
  124. package/dest/browser/barretenberg/verifier.d.ts +0 -16
  125. package/dest/browser/barretenberg/verifier.d.ts.map +0 -1
  126. package/dest/browser/barretenberg_api/index.d.ts +0 -114
  127. package/dest/browser/barretenberg_api/index.d.ts.map +0 -1
  128. package/dest/browser/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +0 -44
  129. package/dest/browser/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +0 -1
  130. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts +0 -2
  131. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts.map +0 -1
  132. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts +0 -3
  133. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts.map +0 -1
  134. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts +0 -4
  135. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts.map +0 -1
  136. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +0 -21
  137. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +0 -1
  138. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +0 -47
  139. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +0 -1
  140. package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts +0 -2
  141. package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts.map +0 -1
  142. package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts +0 -3
  143. package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts.map +0 -1
  144. package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts +0 -4
  145. package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts.map +0 -1
  146. package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts +0 -28
  147. package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts.map +0 -1
  148. package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg-threads.d.ts +0 -3
  149. package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg-threads.d.ts.map +0 -1
  150. package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg.d.ts +0 -3
  151. package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg.d.ts.map +0 -1
  152. package/dest/browser/barretenberg_wasm/fetch_code/browser/index.d.ts +0 -2
  153. package/dest/browser/barretenberg_wasm/fetch_code/browser/index.d.ts.map +0 -1
  154. package/dest/browser/barretenberg_wasm/fetch_code/index.d.ts +0 -2
  155. package/dest/browser/barretenberg_wasm/fetch_code/index.d.ts.map +0 -1
  156. package/dest/browser/barretenberg_wasm/fetch_code/node/index.d.ts +0 -2
  157. package/dest/browser/barretenberg_wasm/fetch_code/node/index.d.ts.map +0 -1
  158. package/dest/browser/barretenberg_wasm/helpers/browser/index.d.ts +0 -6
  159. package/dest/browser/barretenberg_wasm/helpers/browser/index.d.ts.map +0 -1
  160. package/dest/browser/barretenberg_wasm/helpers/index.d.ts +0 -2
  161. package/dest/browser/barretenberg_wasm/helpers/index.d.ts.map +0 -1
  162. package/dest/browser/barretenberg_wasm/helpers/node/index.d.ts +0 -22
  163. package/dest/browser/barretenberg_wasm/helpers/node/index.d.ts.map +0 -1
  164. package/dest/browser/barretenberg_wasm/helpers/node/node_endpoint.d.ts +0 -8
  165. package/dest/browser/barretenberg_wasm/helpers/node/node_endpoint.d.ts.map +0 -1
  166. package/dest/browser/barretenberg_wasm/index.d.ts +0 -18
  167. package/dest/browser/barretenberg_wasm/index.d.ts.map +0 -1
  168. package/dest/browser/bigint-array/index.d.ts +0 -18
  169. package/dest/browser/bigint-array/index.d.ts.map +0 -1
  170. package/dest/browser/crs/browser/cached_net_crs.d.ts +0 -43
  171. package/dest/browser/crs/browser/cached_net_crs.d.ts.map +0 -1
  172. package/dest/browser/crs/browser/index.d.ts +0 -2
  173. package/dest/browser/crs/browser/index.d.ts.map +0 -1
  174. package/dest/browser/crs/index.d.ts +0 -2
  175. package/dest/browser/crs/index.d.ts.map +0 -1
  176. package/dest/browser/crs/net_crs.d.ts +0 -85
  177. package/dest/browser/crs/net_crs.d.ts.map +0 -1
  178. package/dest/browser/crs/node/index.d.ts +0 -38
  179. package/dest/browser/crs/node/index.d.ts.map +0 -1
  180. package/dest/browser/index.d.ts +0 -5
  181. package/dest/browser/index.d.ts.map +0 -1
  182. package/dest/browser/proof/index.d.ts +0 -20
  183. package/dest/browser/proof/index.d.ts.map +0 -1
  184. package/dest/browser/random/browser/index.d.ts +0 -2
  185. package/dest/browser/random/browser/index.d.ts.map +0 -1
  186. package/dest/browser/random/index.d.ts +0 -2
  187. package/dest/browser/random/index.d.ts.map +0 -1
  188. package/dest/browser/random/node/index.d.ts +0 -2
  189. package/dest/browser/random/node/index.d.ts.map +0 -1
  190. package/dest/browser/retry/index.d.ts +0 -26
  191. package/dest/browser/retry/index.d.ts.map +0 -1
  192. package/dest/browser/serialize/buffer_reader.d.ts +0 -28
  193. package/dest/browser/serialize/buffer_reader.d.ts.map +0 -1
  194. package/dest/browser/serialize/index.d.ts +0 -4
  195. package/dest/browser/serialize/index.d.ts.map +0 -1
  196. package/dest/browser/serialize/output_type.d.ts +0 -11
  197. package/dest/browser/serialize/output_type.d.ts.map +0 -1
  198. package/dest/browser/serialize/serialize.d.ts +0 -53
  199. package/dest/browser/serialize/serialize.d.ts.map +0 -1
  200. package/dest/browser/thread.worker.worker.worker.js.LICENSE.txt +0 -5
  201. package/dest/browser/types/fields.d.ts +0 -44
  202. package/dest/browser/types/fields.d.ts.map +0 -1
  203. package/dest/browser/types/fixed_size_buffer.d.ts +0 -26
  204. package/dest/browser/types/fixed_size_buffer.d.ts.map +0 -1
  205. package/dest/browser/types/index.d.ts +0 -6
  206. package/dest/browser/types/index.d.ts.map +0 -1
  207. package/dest/browser/types/point.d.ts +0 -17
  208. package/dest/browser/types/point.d.ts.map +0 -1
  209. package/dest/browser/types/ptr.d.ts +0 -13
  210. package/dest/browser/types/ptr.d.ts.map +0 -1
  211. package/dest/browser/types/raw_buffer.d.ts +0 -3
  212. package/dest/browser/types/raw_buffer.d.ts.map +0 -1
  213. package/dest/node/barretenberg/schnorr.test.d.ts +0 -2
  214. package/dest/node/barretenberg/schnorr.test.d.ts.map +0 -1
  215. package/dest/node/barretenberg/schnorr.test.js +0 -113
  216. package/dest/node-cjs/barretenberg/schnorr.test.d.ts +0 -2
  217. package/dest/node-cjs/barretenberg/schnorr.test.d.ts.map +0 -1
  218. package/dest/node-cjs/barretenberg/schnorr.test.js +0 -115
  219. package/src/barretenberg/schnorr.test.ts +0 -182
  220. /package/dest/browser/{main.worker.worker.js.LICENSE.txt → main.worker.js.LICENSE.txt} +0 -0
  221. /package/dest/browser/{thread.worker.worker.js.LICENSE.txt → thread.worker.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/random/node/index.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,cAEtC"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Generates a backoff sequence for retrying operations with an increasing delay.
3
- * The backoff sequence follows this pattern: 1, 1, 1, 2, 4, 8, 16, 32, 64, ...
4
- * This generator can be used in combination with the `retry` function to perform
5
- * retries with exponential backoff and capped at 64 seconds between attempts.
6
- *
7
- * @returns A generator that yields the next backoff value in seconds as an integer.
8
- */
9
- export declare function backoffGenerator(): Generator<number, void, unknown>;
10
- /**
11
- * Generates a backoff sequence based on the array of retry intervals to use with the `retry` function.
12
- * @param retries - Intervals to retry (in seconds).
13
- * @returns A generator sequence.
14
- */
15
- export declare function makeBackoff(retries: number[]): Generator<number, void, unknown>;
16
- /**
17
- * Retry a given asynchronous function with a specific backoff strategy, until it succeeds or backoff generator ends.
18
- * It logs the error and retry interval in case an error is caught. The function can be named for better log output.
19
- *
20
- * @param fn - The asynchronous function to be retried.
21
- * @param backoff - The optional backoff generator providing the intervals in seconds between retries. Defaults to a predefined series.
22
- * @returns A Promise that resolves with the successful result of the provided function, or rejects if backoff generator ends.
23
- * @throws If `NoRetryError` is thrown by the `fn`, it is rethrown.
24
- */
25
- export declare function retry<Result>(fn: () => Promise<Result>, backoff?: Generator<number, void, unknown>): Promise<Result>;
26
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/retry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAiB,gBAAgB,qCAMhC;AAED;;;;GAIG;AACH,wBAAiB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,oCAI7C;AAED;;;;;;;;GAQG;AACH,wBAAsB,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,mCAAqB,mBAa1F"}
@@ -1,28 +0,0 @@
1
- export declare class BufferReader {
2
- private buffer;
3
- private index;
4
- constructor(buffer: Uint8Array, offset?: number);
5
- static asReader(bufferOrReader: Uint8Array | BufferReader): BufferReader;
6
- readNumber(): number;
7
- readBoolean(): boolean;
8
- readBytes(n: number): Uint8Array;
9
- readNumberVector(): number[];
10
- readVector<T>(itemDeserializer: {
11
- fromBuffer: (reader: BufferReader) => T;
12
- }): T[];
13
- readArray<T>(size: number, itemDeserializer: {
14
- fromBuffer: (reader: BufferReader) => T;
15
- }): T[];
16
- readObject<T>(deserializer: {
17
- fromBuffer: (reader: BufferReader) => T;
18
- }): T;
19
- peekBytes(n?: number): Uint8Array;
20
- readString(): string;
21
- readBuffer(): Uint8Array;
22
- readMap<T>(deserializer: {
23
- fromBuffer: (reader: BufferReader) => T;
24
- }): {
25
- [key: string]: T;
26
- };
27
- }
28
- //# sourceMappingURL=buffer_reader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buffer_reader.d.ts","sourceRoot":"","sources":["../../../src/serialize/buffer_reader.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY;IAEX,OAAO,CAAC,MAAM;IAD1B,OAAO,CAAC,KAAK,CAAS;gBACF,MAAM,EAAE,UAAU,EAAE,MAAM,SAAI;WAIpC,QAAQ,CAAC,cAAc,EAAE,UAAU,GAAG,YAAY;IAIzD,UAAU,IAAI,MAAM;IAMpB,WAAW,IAAI,OAAO;IAKtB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU;IAKhC,gBAAgB,IAAI,MAAM,EAAE;IAM5B,UAAU,CAAC,CAAC,EAAE,gBAAgB,EAAE;QAAE,UAAU,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,CAAC,CAAA;KAAE,GAAG,CAAC,EAAE;IASjF,SAAS,CAAC,CAAC,EAChB,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE;QAChB,UAAU,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,CAAC,CAAC;KACzC,GACA,CAAC,EAAE;IAQC,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE;QAAE,UAAU,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,CAAC,CAAA;KAAE,GAAG,CAAC;IAI3E,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM;IAIpB,UAAU,IAAI,MAAM;IAIpB,UAAU,IAAI,UAAU;IAKxB,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE;QAAE,UAAU,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,CAAC,CAAA;KAAE,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAA;KAAE;CAUnG"}
@@ -1,4 +0,0 @@
1
- export * from './buffer_reader.js';
2
- export * from './output_type.js';
3
- export * from './serialize.js';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/serialize/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
@@ -1,11 +0,0 @@
1
- import { BufferReader } from './buffer_reader.js';
2
- export interface OutputType<T = any> {
3
- SIZE_IN_BYTES?: number;
4
- fromBuffer: (b: Uint8Array | BufferReader) => T;
5
- }
6
- export declare function BoolDeserializer(): OutputType;
7
- export declare function NumberDeserializer(): OutputType;
8
- export declare function VectorDeserializer<T>(t: OutputType<T>): OutputType;
9
- export declare function BufferDeserializer(): OutputType;
10
- export declare function StringDeserializer(): OutputType;
11
- //# sourceMappingURL=output_type.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"output_type.d.ts","sourceRoot":"","sources":["../../../src/serialize/output_type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,GAAG;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,CAAC,CAAC,EAAE,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC;CACjD;AAED,wBAAgB,gBAAgB,IAAI,UAAU,CAQ7C;AAED,wBAAgB,kBAAkB,IAAI,UAAU,CAQ/C;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAOlE;AAED,wBAAgB,kBAAkB,IAAI,UAAU,CAO/C;AAED,wBAAgB,kBAAkB,IAAI,UAAU,CAO/C"}
@@ -1,53 +0,0 @@
1
- export declare function boolToBuffer(b: boolean): Uint8Array;
2
- export declare function numToUInt32LE(n: number, bufferSize?: number): Uint8Array;
3
- export declare function numToUInt32BE(n: number, bufferSize?: number): Uint8Array;
4
- export declare function numToInt32BE(n: number, bufferSize?: number): Uint8Array;
5
- export declare function numToUInt8(n: number): Uint8Array;
6
- export declare function concatenateUint8Arrays(arrayOfUint8Arrays: Uint8Array[]): Uint8Array;
7
- export declare function uint8ArrayToHexString(uint8Array: Uint8Array): string;
8
- export declare function serializeBufferToVector(buf: Uint8Array): Uint8Array;
9
- export declare function serializeBigInt(n: bigint, width?: number): Uint8Array;
10
- export declare function deserializeBigInt(buf: Uint8Array, offset?: number, width?: number): {
11
- elem: bigint;
12
- adv: number;
13
- };
14
- export declare function serializeDate(date: Date): Uint8Array;
15
- export declare function deserializeBufferFromVector(vector: Uint8Array, offset?: number): {
16
- elem: Uint8Array;
17
- adv: number;
18
- };
19
- export declare function deserializeBool(buf: Uint8Array, offset?: number): {
20
- elem: boolean;
21
- adv: number;
22
- };
23
- export declare function deserializeUInt32(buf: Uint8Array, offset?: number): {
24
- elem: number;
25
- adv: number;
26
- };
27
- export declare function deserializeInt32(buf: Uint8Array, offset?: number): {
28
- elem: number;
29
- adv: number;
30
- };
31
- export declare function deserializeField(buf: Uint8Array, offset?: number): {
32
- elem: Uint8Array;
33
- adv: number;
34
- };
35
- export declare function serializeBufferArrayToVector(arr: Uint8Array[]): Uint8Array;
36
- export declare function deserializeArrayFromVector<T>(deserialize: (buf: Uint8Array, offset: number) => {
37
- elem: T;
38
- adv: number;
39
- }, vector: Uint8Array, offset?: number): {
40
- elem: T[];
41
- adv: number;
42
- };
43
- /** A type that can be written to a buffer. */
44
- export type Bufferable = boolean | Uint8Array | number | string | {
45
- toBuffer: () => Uint8Array;
46
- } | Bufferable[];
47
- /**
48
- * Serializes a list of objects contiguously for calling into wasm.
49
- * @param objs - Objects to serialize.
50
- * @returns A buffer list with the concatenation of all fields.
51
- */
52
- export declare function serializeBufferable(obj: Bufferable): Uint8Array;
53
- //# sourceMappingURL=serialize.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../../src/serialize/serialize.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,cAItC;AAGD,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,SAAI,cAItD;AAGD,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,SAAI,cAItD;AAGD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,SAAI,cAIrD;AAGD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,cAInC;AAED,wBAAgB,sBAAsB,CAAC,kBAAkB,EAAE,UAAU,EAAE,cAStE;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,UAE3D;AAGD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,UAAU,cAEtD;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,cAMpD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,SAAI,EAAE,KAAK,SAAK;;;EAMxE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,cAEvC;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,SAAI;;;EAKzE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,SAAI;;;EAI1D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,SAAI;;;EAI5D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,SAAI;;;EAI3D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,SAAI;;;EAI3D;AAGD,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,UAAU,EAAE,cAE7D;AAED,wBAAgB,0BAA0B,CAAC,CAAC,EAC1C,WAAW,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAC1E,MAAM,EAAE,UAAU,EAClB,MAAM,SAAI;;;EAYX;AAED,8CAA8C;AAC9C,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;CAAE,GAAG,UAAU,EAAE,CAAC;AAEhH;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU,CAkB/D"}
@@ -1,5 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2019 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
@@ -1,44 +0,0 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import { BufferReader } from '../serialize/index.js';
3
- /**
4
- * Fr field class.
5
- * @dev This class is used to represent elements of BN254 scalar field or elements in the base field of Grumpkin.
6
- * (Grumpkin's scalar field corresponds to BN254's base field and vice versa.)
7
- */
8
- export declare class Fr {
9
- static ZERO: Fr;
10
- static MODULUS: bigint;
11
- static MAX_VALUE: bigint;
12
- static SIZE_IN_BYTES: number;
13
- value: Uint8Array;
14
- constructor(value: Uint8Array | Buffer | bigint);
15
- static random(): Fr;
16
- static fromBuffer(buffer: Uint8Array | Buffer | BufferReader): Fr;
17
- static fromBufferReduce(buffer: Uint8Array | BufferReader): Fr;
18
- static fromString(str: string): Fr;
19
- toBuffer(): Uint8Array;
20
- toString(): string;
21
- equals(rhs: Fr): boolean;
22
- isZero(): boolean;
23
- }
24
- /**
25
- * Fq field class.
26
- * @dev This class is used to represent elements of BN254 base field or elements in the scalar field of Grumpkin.
27
- * (Grumpkin's scalar field corresponds to BN254's base field and vice versa.)
28
- */
29
- export declare class Fq {
30
- readonly value: bigint;
31
- static MODULUS: bigint;
32
- static MAX_VALUE: bigint;
33
- static SIZE_IN_BYTES: number;
34
- constructor(value: bigint);
35
- static random(): Fq;
36
- static fromBuffer(buffer: Uint8Array | Buffer | BufferReader): Fq;
37
- static fromBufferReduce(buffer: Uint8Array | Buffer | BufferReader): Fq;
38
- static fromString(str: string): Fq;
39
- toBuffer(): Buffer;
40
- toString(): string;
41
- equals(rhs: Fq): boolean;
42
- isZero(): boolean;
43
- }
44
- //# sourceMappingURL=fields.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../src/types/fields.ts"],"names":[],"mappings":";AAOA,OAAO,EAAE,YAAY,EAAyB,MAAM,uBAAuB,CAAC;AAG5E;;;;GAIG;AACH,qBAAa,EAAE;IACb,MAAM,CAAC,IAAI,KAAc;IACzB,MAAM,CAAC,OAAO,SAAuE;IACrF,MAAM,CAAC,SAAS,SAAqB;IACrC,MAAM,CAAC,aAAa,SAAM;IAC1B,KAAK,EAAE,UAAU,CAAC;gBAEN,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM;IAiB/C,MAAM,CAAC,MAAM;IAKb,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,YAAY;IAK5D,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY;IAKzD,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM;IAI7B,QAAQ;IAIR,QAAQ;IAIR,MAAM,CAAC,GAAG,EAAE,EAAE;IAId,MAAM;CAGP;AAED;;;;GAIG;AACH,qBAAa,EAAE;aAKe,KAAK,EAAE,MAAM;IAJzC,MAAM,CAAC,OAAO,SAAuE;IACrF,MAAM,CAAC,SAAS,SAAqB;IACrC,MAAM,CAAC,aAAa,SAAM;gBAEE,KAAK,EAAE,MAAM;IAMzC,MAAM,CAAC,MAAM;IAKb,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,YAAY;IAK5D,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,YAAY;IAKlE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM;IAI7B,QAAQ;IAIR,QAAQ;IAIR,MAAM,CAAC,GAAG,EAAE,EAAE;IAId,MAAM;CAGP"}
@@ -1,26 +0,0 @@
1
- import { BufferReader } from '../serialize/index.js';
2
- export declare class Buffer32 {
3
- readonly buffer: Uint8Array;
4
- static SIZE_IN_BYTES: number;
5
- constructor(buffer: Uint8Array);
6
- static fromBuffer(buffer: Uint8Array | BufferReader): Buffer32;
7
- static random(): Buffer32;
8
- toBuffer(): Uint8Array;
9
- }
10
- export declare class Buffer64 {
11
- readonly buffer: Uint8Array;
12
- static SIZE_IN_BYTES: number;
13
- constructor(buffer: Uint8Array);
14
- static fromBuffer(buffer: Uint8Array | BufferReader): Buffer64;
15
- static random(): Buffer64;
16
- toBuffer(): Uint8Array;
17
- }
18
- export declare class Buffer128 {
19
- readonly buffer: Uint8Array;
20
- static SIZE_IN_BYTES: number;
21
- constructor(buffer: Uint8Array);
22
- static fromBuffer(buffer: Uint8Array | BufferReader): Buffer128;
23
- static random(): Buffer128;
24
- toBuffer(): Uint8Array;
25
- }
26
- //# sourceMappingURL=fixed_size_buffer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fixed_size_buffer.d.ts","sourceRoot":"","sources":["../../../src/types/fixed_size_buffer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,QAAQ;aAGS,MAAM,EAAE,UAAU;IAF9C,MAAM,CAAC,aAAa,SAAM;gBAEE,MAAM,EAAE,UAAU;IAE9C,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY;IAKnD,MAAM,CAAC,MAAM;IAIb,QAAQ;CAGT;AAED,qBAAa,QAAQ;aAGS,MAAM,EAAE,UAAU;IAF9C,MAAM,CAAC,aAAa,SAAM;gBAEE,MAAM,EAAE,UAAU;IAE9C,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY;IAKnD,MAAM,CAAC,MAAM;IAIb,QAAQ;CAGT;AAED,qBAAa,SAAS;aAGQ,MAAM,EAAE,UAAU;IAF9C,MAAM,CAAC,aAAa,SAAO;gBAEC,MAAM,EAAE,UAAU;IAE9C,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY;IAKnD,MAAM,CAAC,MAAM;IAIb,QAAQ;CAGT"}
@@ -1,6 +0,0 @@
1
- export * from './ptr.js';
2
- export * from './fields.js';
3
- export * from './point.js';
4
- export * from './fixed_size_buffer.js';
5
- export * from './raw_buffer.js';
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC"}
@@ -1,17 +0,0 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import { Fr } from './index.js';
3
- import { BufferReader } from '../serialize/buffer_reader.js';
4
- export declare class Point {
5
- readonly x: Fr;
6
- readonly y: Fr;
7
- static SIZE_IN_BYTES: number;
8
- static EMPTY: Point;
9
- constructor(x: Fr, y: Fr);
10
- static random(): Point;
11
- static fromBuffer(buffer: Uint8Array | BufferReader): Point;
12
- static fromString(address: string): Point;
13
- toBuffer(): Buffer;
14
- toString(): string;
15
- equals(rhs: Point): boolean;
16
- }
17
- //# sourceMappingURL=point.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"point.d.ts","sourceRoot":"","sources":["../../../src/types/point.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,qBAAa,KAAK;aAIY,CAAC,EAAE,EAAE;aAAkB,CAAC,EAAE,EAAE;IAHxD,MAAM,CAAC,aAAa,SAAM;IAC1B,MAAM,CAAC,KAAK,QAA+B;gBAEf,CAAC,EAAE,EAAE,EAAkB,CAAC,EAAE,EAAE;IAExD,MAAM,CAAC,MAAM;IAKb,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY;IAKnD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM;IAIjC,QAAQ;IAIR,QAAQ;IAIR,MAAM,CAAC,GAAG,EAAE,KAAK;CAGlB"}
@@ -1,13 +0,0 @@
1
- import { BufferReader } from '../serialize/index.js';
2
- /**
3
- * Holds an opaque pointer into WASM memory.
4
- * Currently only 4 bytes, but could grow to 8 bytes with wasm64.
5
- */
6
- export declare class Ptr {
7
- readonly value: Uint8Array;
8
- static SIZE_IN_BYTES: number;
9
- constructor(value: Uint8Array);
10
- static fromBuffer(buffer: Uint8Array | BufferReader): Ptr;
11
- toBuffer(): Uint8Array;
12
- }
13
- //# sourceMappingURL=ptr.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ptr.d.ts","sourceRoot":"","sources":["../../../src/types/ptr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD;;;GAGG;AACH,qBAAa,GAAG;aAGc,KAAK,EAAE,UAAU;IAF7C,MAAM,CAAC,aAAa,SAAK;gBAEG,KAAK,EAAE,UAAU;IAE7C,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY;IAKnD,QAAQ;CAGT"}
@@ -1,3 +0,0 @@
1
- export declare class RawBuffer extends Uint8Array {
2
- }
3
- //# sourceMappingURL=raw_buffer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"raw_buffer.d.ts","sourceRoot":"","sources":["../../../src/types/raw_buffer.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAU,SAAQ,UAAU;CAAG"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=schnorr.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schnorr.test.d.ts","sourceRoot":"","sources":["../../../src/barretenberg/schnorr.test.ts"],"names":[],"mappings":""}
@@ -1,113 +0,0 @@
1
- import { TextEncoder } from 'util';
2
- import { Buffer128, Buffer32, Fq, Fr, Point } from '../types/index.js';
3
- import { Barretenberg } from './index.js';
4
- import { asyncMap } from '../async_map/index.js';
5
- describe('schnorr', () => {
6
- const msg = Buffer.from(new TextEncoder().encode('The quick brown dog jumped over the lazy fox.'));
7
- let api;
8
- beforeAll(async () => {
9
- api = await Barretenberg.new({ threads: 1 });
10
- }, 30000);
11
- afterAll(async () => {
12
- await api.destroy();
13
- });
14
- it('should verify signature', async () => {
15
- const pk = Fr.fromBuffer(new Uint8Array([
16
- 0x0b, 0x9b, 0x3a, 0xde, 0xe6, 0xb3, 0xd8, 0x1b, 0x28, 0xa0, 0x88, 0x6b, 0x2a, 0x84, 0x15, 0xc7, 0xda, 0x31,
17
- 0x29, 0x1a, 0x5e, 0x96, 0xbb, 0x7a, 0x56, 0x63, 0x9e, 0x17, 0x7d, 0x30, 0x1b, 0xeb,
18
- ]));
19
- const pubKey = await api.schnorrComputePublicKey(pk);
20
- const [s, e] = await api.schnorrConstructSignature(msg, pk);
21
- const verified = await api.schnorrVerifySignature(msg, pubKey, s, e);
22
- expect(verified).toBe(true);
23
- });
24
- it('public key negation should work', async () => {
25
- const publicKeyStr = '0x164f01b1011a1b292217acf53eef4d74f625f6e9bd5edfdb74c56fd81aafeebb21912735f9266a3719f61c1eb747ddee0cac9917f5c807485d356709b529b62c';
26
- const publicKey = Point.fromString(publicKeyStr);
27
- // hardcoded expected negated public key
28
- const expectedInvertedStr = '0x164f01b1011a1b292217acf53eef4d74f625f6e9bd5edfdb74c56fd81aafeebb0ed3273ce80b35f29e5a2997ca397a6f1b874f3083f16948e6ac8e8a3ad649d5';
29
- const expectedInverted = Point.fromString(expectedInvertedStr);
30
- // negate - should match expected negated key
31
- const negatedPublicKey = await api.schnorrNegatePublicKey(publicKey);
32
- expect(negatedPublicKey.equals(expectedInverted)).toEqual(true);
33
- // negate again - should be original public key now
34
- expect((await api.schnorrNegatePublicKey(negatedPublicKey)).equals(publicKey)).toEqual(true);
35
- });
36
- it('should create + verify multi signature', async () => {
37
- // set up multisig accounts
38
- const numSigners = 7;
39
- const pks = [...Array(numSigners)].map(() => Fq.random());
40
- const pubKeys = await asyncMap(pks, pk => api.schnorrMultisigCreateMultisigPublicKey(pk));
41
- // round one
42
- const roundOnePublicOutputs = [];
43
- const roundOnePrivateOutputs = [];
44
- for (let i = 0; i < numSigners; ++i) {
45
- const [publicOutput, privateOutput] = await api.schnorrMultisigConstructSignatureRound1();
46
- roundOnePublicOutputs.push(publicOutput);
47
- roundOnePrivateOutputs.push(privateOutput);
48
- }
49
- // round two
50
- const roundTwoOutputs = await asyncMap(pks, async (pk, i) => (await api.schnorrMultisigConstructSignatureRound2(msg, pk, roundOnePrivateOutputs[i], pubKeys, roundOnePublicOutputs))[0]);
51
- // generate signature
52
- const [s, e] = await api.schnorrMultisigCombineSignatures(msg, pubKeys, roundOnePublicOutputs, roundTwoOutputs);
53
- const [combinedKey] = await api.schnorrMultisigValidateAndCombineSignerPubkeys(pubKeys);
54
- expect(combinedKey).not.toEqual(Buffer.alloc(64));
55
- const verified = await api.schnorrVerifySignature(msg, combinedKey, s, e);
56
- expect(verified).toBe(true);
57
- });
58
- it('should identify invalid multi signature', async () => {
59
- const pks = [...Array(3)].map(() => Fq.random());
60
- const pubKeys = await asyncMap(pks, pk => api.schnorrMultisigCreateMultisigPublicKey(pk));
61
- const [combinedKey] = await api.schnorrMultisigValidateAndCombineSignerPubkeys(pubKeys);
62
- const verified = await api.schnorrVerifySignature(msg, combinedKey, Buffer32.random(), Buffer32.random());
63
- expect(verified).toBe(false);
64
- });
65
- it('should not construct invalid multi signature', async () => {
66
- // set up multisig accounts
67
- const numSigners = 7;
68
- const pks = [...Array(numSigners)].map(() => Fq.random());
69
- const pubKeys = await asyncMap(pks, pk => api.schnorrMultisigCreateMultisigPublicKey(pk));
70
- // round one
71
- const roundOnePublicOutputs = [];
72
- const roundOnePrivateOutputs = [];
73
- for (let i = 0; i < numSigners; ++i) {
74
- const [publicOutput, privateOutput] = await api.schnorrMultisigConstructSignatureRound1();
75
- roundOnePublicOutputs.push(publicOutput);
76
- roundOnePrivateOutputs.push(privateOutput);
77
- }
78
- // round two
79
- const roundTwoOutputs = await asyncMap(pks, async (pk, i) => (await api.schnorrMultisigConstructSignatureRound2(msg, pk, roundOnePrivateOutputs[i], pubKeys, roundOnePublicOutputs))[0]);
80
- // wrong number of data
81
- {
82
- expect((await api.schnorrMultisigCombineSignatures(msg, pubKeys.slice(0, -1), roundOnePublicOutputs.slice(0, -1), roundTwoOutputs.slice(0, -1)))[2]).toBe(false);
83
- }
84
- // invalid round two output
85
- {
86
- const invalidOutputs = [...roundTwoOutputs];
87
- invalidOutputs[1] = (await api.schnorrMultisigConstructSignatureRound2(msg, pks[2], // <- Wrong private key.
88
- roundOnePrivateOutputs[1], pubKeys, roundOnePublicOutputs))[0];
89
- expect((await api.schnorrMultisigCombineSignatures(msg, pubKeys, roundOnePublicOutputs, invalidOutputs))[2]).toBe(false);
90
- }
91
- // contains duplicates
92
- {
93
- const invalidOutputs = [...roundTwoOutputs];
94
- invalidOutputs[1] = roundTwoOutputs[2];
95
- expect((await api.schnorrMultisigCombineSignatures(msg, pubKeys, roundOnePublicOutputs, invalidOutputs))[2]).toBe(false);
96
- }
97
- });
98
- it('should not create combined key from public keys containing invalid key', async () => {
99
- const pks = [...Array(5)].map(() => Fq.random());
100
- const pubKeys = await asyncMap(pks, pk => api.schnorrMultisigCreateMultisigPublicKey(pk));
101
- // not a valid point
102
- {
103
- pubKeys[1] = new Buffer128(Buffer.alloc(128));
104
- expect((await api.schnorrMultisigValidateAndCombineSignerPubkeys(pubKeys))[1]).toBe(false);
105
- }
106
- // contains duplicates
107
- {
108
- pubKeys[1] = pubKeys[2];
109
- expect((await api.schnorrMultisigValidateAndCombineSignerPubkeys(pubKeys))[1]).toBe(false);
110
- }
111
- });
112
- });
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nobm9yci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhcnJldGVuYmVyZy9zY2hub3JyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWpELFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQ3ZCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsK0NBQStDLENBQUMsQ0FBQyxDQUFDO0lBQ25HLElBQUksR0FBaUIsQ0FBQztJQUV0QixTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDbkIsR0FBRyxHQUFHLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUVWLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQixNQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN0QixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2QyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUN0QixJQUFJLFVBQVUsQ0FBQztZQUNiLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUs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
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=schnorr.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schnorr.test.d.ts","sourceRoot":"","sources":["../../../src/barretenberg/schnorr.test.ts"],"names":[],"mappings":""}
@@ -1,115 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const util_1 = require("util");
4
- const index_js_1 = require("../types/index.js");
5
- const index_js_2 = require("./index.js");
6
- const index_js_3 = require("../async_map/index.js");
7
- describe('schnorr', () => {
8
- const msg = Buffer.from(new util_1.TextEncoder().encode('The quick brown dog jumped over the lazy fox.'));
9
- let api;
10
- beforeAll(async () => {
11
- api = await index_js_2.Barretenberg.new({ threads: 1 });
12
- }, 30000);
13
- afterAll(async () => {
14
- await api.destroy();
15
- });
16
- it('should verify signature', async () => {
17
- const pk = index_js_1.Fr.fromBuffer(new Uint8Array([
18
- 0x0b, 0x9b, 0x3a, 0xde, 0xe6, 0xb3, 0xd8, 0x1b, 0x28, 0xa0, 0x88, 0x6b, 0x2a, 0x84, 0x15, 0xc7, 0xda, 0x31,
19
- 0x29, 0x1a, 0x5e, 0x96, 0xbb, 0x7a, 0x56, 0x63, 0x9e, 0x17, 0x7d, 0x30, 0x1b, 0xeb,
20
- ]));
21
- const pubKey = await api.schnorrComputePublicKey(pk);
22
- const [s, e] = await api.schnorrConstructSignature(msg, pk);
23
- const verified = await api.schnorrVerifySignature(msg, pubKey, s, e);
24
- expect(verified).toBe(true);
25
- });
26
- it('public key negation should work', async () => {
27
- const publicKeyStr = '0x164f01b1011a1b292217acf53eef4d74f625f6e9bd5edfdb74c56fd81aafeebb21912735f9266a3719f61c1eb747ddee0cac9917f5c807485d356709b529b62c';
28
- const publicKey = index_js_1.Point.fromString(publicKeyStr);
29
- // hardcoded expected negated public key
30
- const expectedInvertedStr = '0x164f01b1011a1b292217acf53eef4d74f625f6e9bd5edfdb74c56fd81aafeebb0ed3273ce80b35f29e5a2997ca397a6f1b874f3083f16948e6ac8e8a3ad649d5';
31
- const expectedInverted = index_js_1.Point.fromString(expectedInvertedStr);
32
- // negate - should match expected negated key
33
- const negatedPublicKey = await api.schnorrNegatePublicKey(publicKey);
34
- expect(negatedPublicKey.equals(expectedInverted)).toEqual(true);
35
- // negate again - should be original public key now
36
- expect((await api.schnorrNegatePublicKey(negatedPublicKey)).equals(publicKey)).toEqual(true);
37
- });
38
- it('should create + verify multi signature', async () => {
39
- // set up multisig accounts
40
- const numSigners = 7;
41
- const pks = [...Array(numSigners)].map(() => index_js_1.Fq.random());
42
- const pubKeys = await (0, index_js_3.asyncMap)(pks, pk => api.schnorrMultisigCreateMultisigPublicKey(pk));
43
- // round one
44
- const roundOnePublicOutputs = [];
45
- const roundOnePrivateOutputs = [];
46
- for (let i = 0; i < numSigners; ++i) {
47
- const [publicOutput, privateOutput] = await api.schnorrMultisigConstructSignatureRound1();
48
- roundOnePublicOutputs.push(publicOutput);
49
- roundOnePrivateOutputs.push(privateOutput);
50
- }
51
- // round two
52
- const roundTwoOutputs = await (0, index_js_3.asyncMap)(pks, async (pk, i) => (await api.schnorrMultisigConstructSignatureRound2(msg, pk, roundOnePrivateOutputs[i], pubKeys, roundOnePublicOutputs))[0]);
53
- // generate signature
54
- const [s, e] = await api.schnorrMultisigCombineSignatures(msg, pubKeys, roundOnePublicOutputs, roundTwoOutputs);
55
- const [combinedKey] = await api.schnorrMultisigValidateAndCombineSignerPubkeys(pubKeys);
56
- expect(combinedKey).not.toEqual(Buffer.alloc(64));
57
- const verified = await api.schnorrVerifySignature(msg, combinedKey, s, e);
58
- expect(verified).toBe(true);
59
- });
60
- it('should identify invalid multi signature', async () => {
61
- const pks = [...Array(3)].map(() => index_js_1.Fq.random());
62
- const pubKeys = await (0, index_js_3.asyncMap)(pks, pk => api.schnorrMultisigCreateMultisigPublicKey(pk));
63
- const [combinedKey] = await api.schnorrMultisigValidateAndCombineSignerPubkeys(pubKeys);
64
- const verified = await api.schnorrVerifySignature(msg, combinedKey, index_js_1.Buffer32.random(), index_js_1.Buffer32.random());
65
- expect(verified).toBe(false);
66
- });
67
- it('should not construct invalid multi signature', async () => {
68
- // set up multisig accounts
69
- const numSigners = 7;
70
- const pks = [...Array(numSigners)].map(() => index_js_1.Fq.random());
71
- const pubKeys = await (0, index_js_3.asyncMap)(pks, pk => api.schnorrMultisigCreateMultisigPublicKey(pk));
72
- // round one
73
- const roundOnePublicOutputs = [];
74
- const roundOnePrivateOutputs = [];
75
- for (let i = 0; i < numSigners; ++i) {
76
- const [publicOutput, privateOutput] = await api.schnorrMultisigConstructSignatureRound1();
77
- roundOnePublicOutputs.push(publicOutput);
78
- roundOnePrivateOutputs.push(privateOutput);
79
- }
80
- // round two
81
- const roundTwoOutputs = await (0, index_js_3.asyncMap)(pks, async (pk, i) => (await api.schnorrMultisigConstructSignatureRound2(msg, pk, roundOnePrivateOutputs[i], pubKeys, roundOnePublicOutputs))[0]);
82
- // wrong number of data
83
- {
84
- expect((await api.schnorrMultisigCombineSignatures(msg, pubKeys.slice(0, -1), roundOnePublicOutputs.slice(0, -1), roundTwoOutputs.slice(0, -1)))[2]).toBe(false);
85
- }
86
- // invalid round two output
87
- {
88
- const invalidOutputs = [...roundTwoOutputs];
89
- invalidOutputs[1] = (await api.schnorrMultisigConstructSignatureRound2(msg, pks[2], // <- Wrong private key.
90
- roundOnePrivateOutputs[1], pubKeys, roundOnePublicOutputs))[0];
91
- expect((await api.schnorrMultisigCombineSignatures(msg, pubKeys, roundOnePublicOutputs, invalidOutputs))[2]).toBe(false);
92
- }
93
- // contains duplicates
94
- {
95
- const invalidOutputs = [...roundTwoOutputs];
96
- invalidOutputs[1] = roundTwoOutputs[2];
97
- expect((await api.schnorrMultisigCombineSignatures(msg, pubKeys, roundOnePublicOutputs, invalidOutputs))[2]).toBe(false);
98
- }
99
- });
100
- it('should not create combined key from public keys containing invalid key', async () => {
101
- const pks = [...Array(5)].map(() => index_js_1.Fq.random());
102
- const pubKeys = await (0, index_js_3.asyncMap)(pks, pk => api.schnorrMultisigCreateMultisigPublicKey(pk));
103
- // not a valid point
104
- {
105
- pubKeys[1] = new index_js_1.Buffer128(Buffer.alloc(128));
106
- expect((await api.schnorrMultisigValidateAndCombineSignerPubkeys(pubKeys))[1]).toBe(false);
107
- }
108
- // contains duplicates
109
- {
110
- pubKeys[1] = pubKeys[2];
111
- expect((await api.schnorrMultisigValidateAndCombineSignerPubkeys(pubKeys))[1]).toBe(false);
112
- }
113
- });
114
- });
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nobm9yci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhcnJldGVuYmVyZy9zY2hub3JyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwrQkFBbUM7QUFDbkMsZ0RBQXVFO0FBQ3ZFLHlDQUEwQztBQUMxQyxvREFBaUQ7QUFFakQsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7SUFDdkIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLGtCQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsK0NBQStDLENBQUMsQ0FBQyxDQUFDO0lBQ25HLElBQUksR0FBaUIsQ0FBQztJQUV0QixTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDbkIsR0FBRyxHQUFHLE1BQU0sdUJBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFVixRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDbEIsTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMseUJBQXlCLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDdkMsTUFBTSxFQUFFLEdBQUcsYUFBRSxDQUFDLFVBQVUsQ0FDdEIsSUFBSSxVQUFVLENBQUM7WUFDYixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDMUcsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJ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