@aztec/foundation 0.46.7 → 0.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,4 +17,10 @@ export declare function keccak256String(input: string): string;
17
17
  * @returns The computed Keccak-224 hash as a Buffer.
18
18
  */
19
19
  export declare function keccak224(input: Buffer): Buffer;
20
+ /**
21
+ * Computes the Keccak-f1600 permutation of the input.
22
+ * @param state 25 64-bit words.
23
+ * @returns The permuted state.
24
+ */
25
+ export declare function keccakf1600(state: bigint[]): bigint[];
20
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/crypto/keccak/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,UAGtC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,UAK5C;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,UAGtC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/crypto/keccak/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,UAGtC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,UAK5C;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,UAGtC;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CA+MrD"}
@@ -28,4 +28,226 @@ export function keccak224(input) {
28
28
  const hash = new Keccak(224);
29
29
  return hash.update(input).digest();
30
30
  }
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY3J5cHRvL2tlY2Nhay9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlCOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUFhO0lBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWE7SUFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUFhO0lBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNyQyxDQUFDIn0=
31
+ /**
32
+ * Computes the Keccak-f1600 permutation of the input.
33
+ * @param state 25 64-bit words.
34
+ * @returns The permuted state.
35
+ */
36
+ export function keccakf1600(state) {
37
+ // Ideally we'd assert the size of the state and its constituent elements here.
38
+ // But since this gets included in the browser bundle, we can't use Node's assert module.
39
+ /* The implementation based on the "simple" implementation by Ronny Van Keer. */
40
+ /* Adapted from Barretenberg's CPP implementation. */
41
+ let Eba, Ebe, Ebi, Ebo, Ebu;
42
+ let Ega, Ege, Egi, Ego, Egu;
43
+ let Eka, Eke, Eki, Eko, Eku;
44
+ let Ema, Eme, Emi, Emo, Emu;
45
+ let Esa, Ese, Esi, Eso, Esu;
46
+ let Ba, Be, Bi, Bo, Bu;
47
+ let Da, De, Di, Do, Du;
48
+ let Aba = state[0];
49
+ let Abe = state[1];
50
+ let Abi = state[2];
51
+ let Abo = state[3];
52
+ let Abu = state[4];
53
+ let Aga = state[5];
54
+ let Age = state[6];
55
+ let Agi = state[7];
56
+ let Ago = state[8];
57
+ let Agu = state[9];
58
+ let Aka = state[10];
59
+ let Ake = state[11];
60
+ let Aki = state[12];
61
+ let Ako = state[13];
62
+ let Aku = state[14];
63
+ let Ama = state[15];
64
+ let Ame = state[16];
65
+ let Ami = state[17];
66
+ let Amo = state[18];
67
+ let Amu = state[19];
68
+ let Asa = state[20];
69
+ let Ase = state[21];
70
+ let Asi = state[22];
71
+ let Aso = state[23];
72
+ let Asu = state[24];
73
+ for (let round = 0; round < 24; round += 2) {
74
+ /* Round (round + 0): Axx -> Exx */
75
+ Ba = Aba ^ Aga ^ Aka ^ Ama ^ Asa;
76
+ Be = Abe ^ Age ^ Ake ^ Ame ^ Ase;
77
+ Bi = Abi ^ Agi ^ Aki ^ Ami ^ Asi;
78
+ Bo = Abo ^ Ago ^ Ako ^ Amo ^ Aso;
79
+ Bu = Abu ^ Agu ^ Aku ^ Amu ^ Asu;
80
+ Da = Bu ^ rol(Be, 1n);
81
+ De = Ba ^ rol(Bi, 1n);
82
+ Di = Be ^ rol(Bo, 1n);
83
+ Do = Bi ^ rol(Bu, 1n);
84
+ Du = Bo ^ rol(Ba, 1n);
85
+ Ba = Aba ^ Da;
86
+ Be = rol(Age ^ De, 44n);
87
+ Bi = rol(Aki ^ Di, 43n);
88
+ Bo = rol(Amo ^ Do, 21n);
89
+ Bu = rol(Asu ^ Du, 14n);
90
+ Eba = Ba ^ (~Be & Bi) ^ roundConstants[round];
91
+ Ebe = Be ^ (~Bi & Bo);
92
+ Ebi = Bi ^ (~Bo & Bu);
93
+ Ebo = Bo ^ (~Bu & Ba);
94
+ Ebu = Bu ^ (~Ba & Be);
95
+ Ba = rol(Abo ^ Do, 28n);
96
+ Be = rol(Agu ^ Du, 20n);
97
+ Bi = rol(Aka ^ Da, 3n);
98
+ Bo = rol(Ame ^ De, 45n);
99
+ Bu = rol(Asi ^ Di, 61n);
100
+ Ega = Ba ^ (~Be & Bi);
101
+ Ege = Be ^ (~Bi & Bo);
102
+ Egi = Bi ^ (~Bo & Bu);
103
+ Ego = Bo ^ (~Bu & Ba);
104
+ Egu = Bu ^ (~Ba & Be);
105
+ Ba = rol(Abe ^ De, 1n);
106
+ Be = rol(Agi ^ Di, 6n);
107
+ Bi = rol(Ako ^ Do, 25n);
108
+ Bo = rol(Amu ^ Du, 8n);
109
+ Bu = rol(Asa ^ Da, 18n);
110
+ Eka = Ba ^ (~Be & Bi);
111
+ Eke = Be ^ (~Bi & Bo);
112
+ Eki = Bi ^ (~Bo & Bu);
113
+ Eko = Bo ^ (~Bu & Ba);
114
+ Eku = Bu ^ (~Ba & Be);
115
+ Ba = rol(Abu ^ Du, 27n);
116
+ Be = rol(Aga ^ Da, 36n);
117
+ Bi = rol(Ake ^ De, 10n);
118
+ Bo = rol(Ami ^ Di, 15n);
119
+ Bu = rol(Aso ^ Do, 56n);
120
+ Ema = Ba ^ (~Be & Bi);
121
+ Eme = Be ^ (~Bi & Bo);
122
+ Emi = Bi ^ (~Bo & Bu);
123
+ Emo = Bo ^ (~Bu & Ba);
124
+ Emu = Bu ^ (~Ba & Be);
125
+ Ba = rol(Abi ^ Di, 62n);
126
+ Be = rol(Ago ^ Do, 55n);
127
+ Bi = rol(Aku ^ Du, 39n);
128
+ Bo = rol(Ama ^ Da, 41n);
129
+ Bu = rol(Ase ^ De, 2n);
130
+ Esa = Ba ^ (~Be & Bi);
131
+ Ese = Be ^ (~Bi & Bo);
132
+ Esi = Bi ^ (~Bo & Bu);
133
+ Eso = Bo ^ (~Bu & Ba);
134
+ Esu = Bu ^ (~Ba & Be);
135
+ /* Round (round + 1): Exx -> Axx */
136
+ Ba = Eba ^ Ega ^ Eka ^ Ema ^ Esa;
137
+ Be = Ebe ^ Ege ^ Eke ^ Eme ^ Ese;
138
+ Bi = Ebi ^ Egi ^ Eki ^ Emi ^ Esi;
139
+ Bo = Ebo ^ Ego ^ Eko ^ Emo ^ Eso;
140
+ Bu = Ebu ^ Egu ^ Eku ^ Emu ^ Esu;
141
+ Da = Bu ^ rol(Be, 1n);
142
+ De = Ba ^ rol(Bi, 1n);
143
+ Di = Be ^ rol(Bo, 1n);
144
+ Do = Bi ^ rol(Bu, 1n);
145
+ Du = Bo ^ rol(Ba, 1n);
146
+ Ba = Eba ^ Da;
147
+ Be = rol(Ege ^ De, 44n);
148
+ Bi = rol(Eki ^ Di, 43n);
149
+ Bo = rol(Emo ^ Do, 21n);
150
+ Bu = rol(Esu ^ Du, 14n);
151
+ Aba = Ba ^ (~Be & Bi) ^ roundConstants[round + 1];
152
+ Abe = Be ^ (~Bi & Bo);
153
+ Abi = Bi ^ (~Bo & Bu);
154
+ Abo = Bo ^ (~Bu & Ba);
155
+ Abu = Bu ^ (~Ba & Be);
156
+ Ba = rol(Ebo ^ Do, 28n);
157
+ Be = rol(Egu ^ Du, 20n);
158
+ Bi = rol(Eka ^ Da, 3n);
159
+ Bo = rol(Eme ^ De, 45n);
160
+ Bu = rol(Esi ^ Di, 61n);
161
+ Aga = Ba ^ (~Be & Bi);
162
+ Age = Be ^ (~Bi & Bo);
163
+ Agi = Bi ^ (~Bo & Bu);
164
+ Ago = Bo ^ (~Bu & Ba);
165
+ Agu = Bu ^ (~Ba & Be);
166
+ Ba = rol(Ebe ^ De, 1n);
167
+ Be = rol(Egi ^ Di, 6n);
168
+ Bi = rol(Eko ^ Do, 25n);
169
+ Bo = rol(Emu ^ Du, 8n);
170
+ Bu = rol(Esa ^ Da, 18n);
171
+ Aka = Ba ^ (~Be & Bi);
172
+ Ake = Be ^ (~Bi & Bo);
173
+ Aki = Bi ^ (~Bo & Bu);
174
+ Ako = Bo ^ (~Bu & Ba);
175
+ Aku = Bu ^ (~Ba & Be);
176
+ Ba = rol(Ebu ^ Du, 27n);
177
+ Be = rol(Ega ^ Da, 36n);
178
+ Bi = rol(Eke ^ De, 10n);
179
+ Bo = rol(Emi ^ Di, 15n);
180
+ Bu = rol(Eso ^ Do, 56n);
181
+ Ama = Ba ^ (~Be & Bi);
182
+ Ame = Be ^ (~Bi & Bo);
183
+ Ami = Bi ^ (~Bo & Bu);
184
+ Amo = Bo ^ (~Bu & Ba);
185
+ Amu = Bu ^ (~Ba & Be);
186
+ Ba = rol(Ebi ^ Di, 62n);
187
+ Be = rol(Ego ^ Do, 55n);
188
+ Bi = rol(Eku ^ Du, 39n);
189
+ Bo = rol(Ema ^ Da, 41n);
190
+ Bu = rol(Ese ^ De, 2n);
191
+ Asa = Ba ^ (~Be & Bi);
192
+ Ase = Be ^ (~Bi & Bo);
193
+ Asi = Bi ^ (~Bo & Bu);
194
+ Aso = Bo ^ (~Bu & Ba);
195
+ Asu = Bu ^ (~Ba & Be);
196
+ }
197
+ state[0] = Aba;
198
+ state[1] = Abe;
199
+ state[2] = Abi;
200
+ state[3] = Abo;
201
+ state[4] = Abu;
202
+ state[5] = Aga;
203
+ state[6] = Age;
204
+ state[7] = Agi;
205
+ state[8] = Ago;
206
+ state[9] = Agu;
207
+ state[10] = Aka;
208
+ state[11] = Ake;
209
+ state[12] = Aki;
210
+ state[13] = Ako;
211
+ state[14] = Aku;
212
+ state[15] = Ama;
213
+ state[16] = Ame;
214
+ state[17] = Ami;
215
+ state[18] = Amo;
216
+ state[19] = Amu;
217
+ state[20] = Asa;
218
+ state[21] = Ase;
219
+ state[22] = Asi;
220
+ state[23] = Aso;
221
+ state[24] = Asu;
222
+ return state;
223
+ }
224
+ function rol(x, s) {
225
+ return BigInt.asUintN(64, x << s) | (x >> (64n - s));
226
+ }
227
+ const roundConstants = [
228
+ 0x0000000000000001n,
229
+ 0x0000000000008082n,
230
+ 0x800000000000808an,
231
+ 0x8000000080008000n,
232
+ 0x000000000000808bn,
233
+ 0x0000000080000001n,
234
+ 0x8000000080008081n,
235
+ 0x8000000000008009n,
236
+ 0x000000000000008an,
237
+ 0x0000000000000088n,
238
+ 0x0000000080008009n,
239
+ 0x000000008000000an,
240
+ 0x000000008000808bn,
241
+ 0x800000000000008bn,
242
+ 0x8000000000008089n,
243
+ 0x8000000000008003n,
244
+ 0x8000000000008002n,
245
+ 0x8000000000000080n,
246
+ 0x000000000000800an,
247
+ 0x800000008000000an,
248
+ 0x8000000080008081n,
249
+ 0x8000000000008080n,
250
+ 0x0000000080000001n,
251
+ 0x8000000080008008n,
252
+ ];
253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY3J5cHRvL2tlY2Nhay9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlCOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUFhO0lBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWE7SUFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUFhO0lBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBZTtJQUN6QywrRUFBK0U7SUFDL0UseUZBQXlGO0lBQ3pGLGdGQUFnRjtJQUNoRixxREFBcUQ7SUFDckQsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQzVCLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM1QixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDNUIsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQzVCLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUU1QixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFFdkIsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBRXZCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVwQixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMzQyxtQ0FBbUM7UUFDbkMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDakMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDakMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDakMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDakMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFFakMsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0QixFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEIsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUV0QixFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNkLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0QixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUV0QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0QixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0QixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFdEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0QixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXRCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0QixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUV0QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0QixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0QixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFdEIsbUNBQW1DO1FBRW5DLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2pDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2pDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2pDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2pDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBRWpDLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0QixFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEIsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0QixFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFdEIsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDZCxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEQsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0QixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXRCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0QixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUV0QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0QixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0QixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFdEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0QixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXRCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0QixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEIsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNmLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDZixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2YsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNmLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDZixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2YsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNmLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDZixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2YsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNmLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDaEIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNoQixLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2hCLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDaEIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNoQixLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2hCLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDaEIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNoQixLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2hCLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDaEIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNoQixLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2hCLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDaEIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNoQixLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBRWhCLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsR0FBRyxDQUFDLENBQVMsRUFBRSxDQUFTO0lBQy9CLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELE1BQU0sY0FBYyxHQUFhO0lBQy9CLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsbUJBQW1CO0NBQ3BCLENBQUMifQ==
@@ -160,4 +160,7 @@ export declare class Point {
160
160
  * @returns Whether it looks like a point.
161
161
  */
162
162
  export declare function isPoint(obj: object): obj is Point;
163
+ export declare class NotOnCurveError extends Error {
164
+ constructor(x: Fr);
165
+ }
163
166
  //# sourceMappingURL=point.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"point.d.ts","sourceRoot":"","sources":["../../src/fields/point.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAqB,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC;;;;GAIG;AACH,qBAAa,KAAK;IASd;;OAEG;aACa,CAAC,EAAE,EAAE;IACrB;;OAEG;aACa,CAAC,EAAE,EAAE;IACrB;;OAEG;aACa,UAAU,EAAE,OAAO;IAnBrC,MAAM,CAAC,IAAI,QAAsC;IACjD,MAAM,CAAC,aAAa,SAAwB;IAC5C,MAAM,CAAC,wBAAwB,SAAwB;IAEvD,yDAAyD;IACzD,SAAgB,IAAI,WAAW;;IAG7B;;OAEG;IACa,CAAC,EAAE,EAAE;IACrB;;OAEG;IACa,CAAC,EAAE,EAAE;IACrB;;OAEG;IACa,UAAU,EAAE,OAAO;IAKrC;;;;OAIG;IACH,MAAM,CAAC,MAAM;IAcb;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAK/C;;;;;;OAMG;IACH,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAKzD;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM;IAIjC;;;OAGG;IACH,QAAQ;IAIR,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW;IAK5C;;;;;;;;OAQG;IACH,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO;IAsBxC;;;;OAIG;IACH,UAAU,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC;IAI3B;;;OAGG;IACH,SAAS;;;;;IAQT;;;;;;;;;OASG;IACH,QAAQ;IAWR;;;OAGG;IACH,kBAAkB;IAIlB;;;;;;OAMG;IACH,QAAQ;IAIR;;;;;;;OAOG;IACH,aAAa;IAKb,YAAY;;;;;IAMZ;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,EAAE,KAAK;IAIjB,MAAM;IAIN,IAAI;IAIJ;;;OAGG;IACH,IAAW,GAAG,YAEb;IAED,YAAY;CAYb;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,KAAK,CAMjD"}
1
+ {"version":3,"file":"point.d.ts","sourceRoot":"","sources":["../../src/fields/point.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAqB,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC;;;;GAIG;AACH,qBAAa,KAAK;IASd;;OAEG;aACa,CAAC,EAAE,EAAE;IACrB;;OAEG;aACa,CAAC,EAAE,EAAE;IACrB;;OAEG;aACa,UAAU,EAAE,OAAO;IAnBrC,MAAM,CAAC,IAAI,QAAsC;IACjD,MAAM,CAAC,aAAa,SAAwB;IAC5C,MAAM,CAAC,wBAAwB,SAAoB;IAEnD,yDAAyD;IACzD,SAAgB,IAAI,WAAW;;IAG7B;;OAEG;IACa,CAAC,EAAE,EAAE;IACrB;;OAEG;IACa,CAAC,EAAE,EAAE;IACrB;;OAEG;IACa,UAAU,EAAE,OAAO;IAKrC;;;;OAIG;IACH,MAAM,CAAC,MAAM;IAcb;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAK/C;;;;;;OAMG;IACH,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAUzD;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM;IAIjC;;;OAGG;IACH,QAAQ;IAIR,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW;IAK5C;;;;;;;;OAQG;IACH,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO;IAsBxC;;;;OAIG;IACH,UAAU,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC;IAI3B;;;OAGG;IACH,SAAS;;;;;IAQT;;;;;;;;;OASG;IACH,QAAQ;IAWR;;;OAGG;IACH,kBAAkB;IAalB;;;;;;OAMG;IACH,QAAQ;IAIR;;;;;;;OAOG;IACH,aAAa;IAKb,YAAY;;;;;IAMZ;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,EAAE,KAAK;IAIjB,MAAM;IAIN,IAAI;IAIJ;;;OAGG;IACH,IAAW,GAAG,YAEb;IAED,YAAY;CAYb;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,KAAK,CAMjD;AAED,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,CAAC,EAAE,EAAE;CAIlB"}
@@ -1,3 +1,4 @@
1
+ import { toBigIntBE } from '../bigint-buffer/index.js';
1
2
  import { poseidon2Hash, randomBoolean } from '../crypto/index.js';
2
3
  import { BufferReader, FieldReader, serializeToBuffer } from '../serialize/index.js';
3
4
  import { Fr } from './fields.js';
@@ -66,7 +67,10 @@ export class Point {
66
67
  */
67
68
  static fromCompressedBuffer(buffer) {
68
69
  const reader = BufferReader.asReader(buffer);
69
- return this.fromXAndSign(Fr.fromBuffer(reader), reader.readBoolean());
70
+ const value = toBigIntBE(reader.readBytes(Point.COMPRESSED_SIZE_IN_BYTES));
71
+ const x = new Fr(value & ((1n << 255n) - 1n));
72
+ const sign = (value & (1n << 255n)) !== 0n;
73
+ return this.fromXAndSign(x, sign);
70
74
  }
71
75
  /**
72
76
  * Create a Point instance from a hex-encoded string.
@@ -106,9 +110,9 @@ export class Point {
106
110
  const y = ySquared.sqrt();
107
111
  // If y is null, the x-coordinate is not on the curve
108
112
  if (y === null) {
109
- throw new NotOnCurveError();
113
+ throw new NotOnCurveError(x);
110
114
  }
111
- const yPositiveBigInt = y.toBigInt() > (Fr.MODULUS - 1n) / 2n ? Fr.MODULUS - y.toBigInt() : y.toBigInt();
115
+ const yPositiveBigInt = y.toBigInt() <= (Fr.MODULUS - 1n) / 2n ? y.toBigInt() : Fr.MODULUS - y.toBigInt();
112
116
  const yNegativeBigInt = Fr.MODULUS - yPositiveBigInt;
113
117
  // Choose the positive or negative root based on isPositive
114
118
  const finalY = sign ? new Fr(yPositiveBigInt) : new Fr(yNegativeBigInt);
@@ -159,7 +163,16 @@ export class Point {
159
163
  * @returns A Buffer representation of the Point instance
160
164
  */
161
165
  toCompressedBuffer() {
162
- return serializeToBuffer(this.toXAndSign());
166
+ const [x, sign] = this.toXAndSign();
167
+ // Here we leverage that Fr fits into 254 bits (log2(Fr.MODULUS) < 254) and given that we serialize Fr to 32 bytes
168
+ // and we use big-endian the 2 most significant bits are never populated. Hence we can use one of the bits as
169
+ // a sign bit.
170
+ const compressedValue = x.toBigInt() + (sign ? 2n ** 255n : 0n);
171
+ const buf = serializeToBuffer(compressedValue);
172
+ if (buf.length !== Point.COMPRESSED_SIZE_IN_BYTES) {
173
+ throw new Error(`Invalid buffer length for compressed Point: ${buf.length}`);
174
+ }
175
+ return buf;
163
176
  }
164
177
  /**
165
178
  * Convert the Point instance to a hexadecimal string representation.
@@ -225,7 +238,7 @@ export class Point {
225
238
  }
226
239
  Point.ZERO = new Point(Fr.ZERO, Fr.ZERO, false);
227
240
  Point.SIZE_IN_BYTES = Fr.SIZE_IN_BYTES * 2;
228
- Point.COMPRESSED_SIZE_IN_BYTES = Fr.SIZE_IN_BYTES + 1;
241
+ Point.COMPRESSED_SIZE_IN_BYTES = Fr.SIZE_IN_BYTES;
229
242
  /**
230
243
  * Does this object look like a point?
231
244
  * @param obj - Object to test if it is a point.
@@ -238,10 +251,10 @@ export function isPoint(obj) {
238
251
  const point = obj;
239
252
  return point.kind === 'point' && point.x !== undefined && point.y !== undefined;
240
253
  }
241
- class NotOnCurveError extends Error {
242
- constructor() {
243
- super('The given x-coordinate is not on the Grumpkin curve');
254
+ export class NotOnCurveError extends Error {
255
+ constructor(x) {
256
+ super('The given x-coordinate is not on the Grumpkin curve: ' + x.toString());
244
257
  this.name = 'NotOnCurveError';
245
258
  }
246
259
  }
247
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmllbGRzL3BvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWpDOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sS0FBSztJQVFoQjtJQUNFOztPQUVHO0lBQ2EsQ0FBSztJQUNyQjs7T0FFRztJQUNhLENBQUs7SUFDckI7O09BRUc7SUFDYSxVQUFtQjtRQVJuQixNQUFDLEdBQUQsQ0FBQyxDQUFJO1FBSUwsTUFBQyxHQUFELENBQUMsQ0FBSTtRQUlMLGVBQVUsR0FBVixVQUFVLENBQVM7UUFmckMseURBQXlEO1FBQ3pDLFNBQUksR0FBRyxPQUFPLENBQUM7UUFnQjdCLGlDQUFpQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxNQUFNO1FBQ1gsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQztnQkFDSCxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxlQUFlLENBQUMsRUFBRSxDQUFDO29CQUNwQyxNQUFNLENBQUMsQ0FBQztnQkFDVixDQUFDO2dCQUNELHNEQUFzRDtnQkFDdEQsU0FBUztZQUNYLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBNkI7UUFDN0MsTUFBTSxNQUFN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
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmllbGRzL3BvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVqQzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLEtBQUs7SUFRaEI7SUFDRTs7T0FFRztJQUNhLENBQUs7SUFDckI7O09BRUc7SUFDYSxDQUFLO0lBQ3JCOztPQUVHO0lBQ2EsVUFBbUI7UUFSbkIsTUFBQyxHQUFELENBQUMsQ0FBSTtRQUlMLE1BQUMsR0FBRCxDQUFDLENBQUk7UUFJTCxlQUFVLEdBQVYsVUFBVSxDQUFTO1FBZnJDLHlEQUF5RDtRQUN6QyxTQUFJLEdBQUcsT0FBTyxDQUFDO1FBZ0I3QixpQ0FBaUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsTUFBTTtRQUNYLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUM7Z0JBQ0gsT0FBTyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQzFELENBQUM7WUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO2dCQUNoQixJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksZUFBZSxDQUFDLEVBQUUsQ0FBQztvQkFDcEMsTUFBTSxDQUFDLENBQUM7Z0JBQ1YsQ0FBQztnQkFDRCxzREFBc0Q7Z0JBQ3RELFNBQVM7WUFDWCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFD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
@@ -1,7 +1,7 @@
1
1
  /** Structured log data to include with the message. */
2
2
  export type LogData = Record<string, string | number | bigint | boolean | {
3
3
  toString(): string;
4
- }>;
4
+ } | undefined>;
5
5
  /** A callable logger instance. */
6
6
  export type LogFn = (msg: string, data?: LogData) => void;
7
7
  //# sourceMappingURL=log_fn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"log_fn.d.ts","sourceRoot":"","sources":["../../src/log/log_fn.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG;IAAE,QAAQ,IAAI,MAAM,CAAA;CAAE,CAAC,CAAC;AAElG,kCAAkC;AAClC,MAAM,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC"}
1
+ {"version":3,"file":"log_fn.d.ts","sourceRoot":"","sources":["../../src/log/log_fn.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG;IAAE,QAAQ,IAAI,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAAC;AAE9G,kCAAkC;AAClC,MAAM,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/foundation",
3
- "version": "0.46.7",
3
+ "version": "0.47.0",
4
4
  "packageManager": "yarn@3.4.1",
5
5
  "type": "module",
6
6
  "main": "./dest/index.js",
@@ -88,7 +88,7 @@
88
88
  ]
89
89
  },
90
90
  "dependencies": {
91
- "@aztec/bb.js": "0.46.7",
91
+ "@aztec/bb.js": "0.47.0",
92
92
  "@koa/cors": "^5.0.0",
93
93
  "@noble/curves": "^1.2.0",
94
94
  "bn.js": "^5.2.1",
@@ -31,3 +31,248 @@ export function keccak224(input: Buffer) {
31
31
  const hash = new Keccak(224);
32
32
  return hash.update(input).digest();
33
33
  }
34
+
35
+ /**
36
+ * Computes the Keccak-f1600 permutation of the input.
37
+ * @param state 25 64-bit words.
38
+ * @returns The permuted state.
39
+ */
40
+ export function keccakf1600(state: bigint[]): bigint[] {
41
+ // Ideally we'd assert the size of the state and its constituent elements here.
42
+ // But since this gets included in the browser bundle, we can't use Node's assert module.
43
+ /* The implementation based on the "simple" implementation by Ronny Van Keer. */
44
+ /* Adapted from Barretenberg's CPP implementation. */
45
+ let Eba, Ebe, Ebi, Ebo, Ebu;
46
+ let Ega, Ege, Egi, Ego, Egu;
47
+ let Eka, Eke, Eki, Eko, Eku;
48
+ let Ema, Eme, Emi, Emo, Emu;
49
+ let Esa, Ese, Esi, Eso, Esu;
50
+
51
+ let Ba, Be, Bi, Bo, Bu;
52
+
53
+ let Da, De, Di, Do, Du;
54
+
55
+ let Aba = state[0];
56
+ let Abe = state[1];
57
+ let Abi = state[2];
58
+ let Abo = state[3];
59
+ let Abu = state[4];
60
+ let Aga = state[5];
61
+ let Age = state[6];
62
+ let Agi = state[7];
63
+ let Ago = state[8];
64
+ let Agu = state[9];
65
+ let Aka = state[10];
66
+ let Ake = state[11];
67
+ let Aki = state[12];
68
+ let Ako = state[13];
69
+ let Aku = state[14];
70
+ let Ama = state[15];
71
+ let Ame = state[16];
72
+ let Ami = state[17];
73
+ let Amo = state[18];
74
+ let Amu = state[19];
75
+ let Asa = state[20];
76
+ let Ase = state[21];
77
+ let Asi = state[22];
78
+ let Aso = state[23];
79
+ let Asu = state[24];
80
+
81
+ for (let round = 0; round < 24; round += 2) {
82
+ /* Round (round + 0): Axx -> Exx */
83
+ Ba = Aba ^ Aga ^ Aka ^ Ama ^ Asa;
84
+ Be = Abe ^ Age ^ Ake ^ Ame ^ Ase;
85
+ Bi = Abi ^ Agi ^ Aki ^ Ami ^ Asi;
86
+ Bo = Abo ^ Ago ^ Ako ^ Amo ^ Aso;
87
+ Bu = Abu ^ Agu ^ Aku ^ Amu ^ Asu;
88
+
89
+ Da = Bu ^ rol(Be, 1n);
90
+ De = Ba ^ rol(Bi, 1n);
91
+ Di = Be ^ rol(Bo, 1n);
92
+ Do = Bi ^ rol(Bu, 1n);
93
+ Du = Bo ^ rol(Ba, 1n);
94
+
95
+ Ba = Aba ^ Da;
96
+ Be = rol(Age ^ De, 44n);
97
+ Bi = rol(Aki ^ Di, 43n);
98
+ Bo = rol(Amo ^ Do, 21n);
99
+ Bu = rol(Asu ^ Du, 14n);
100
+ Eba = Ba ^ (~Be & Bi) ^ roundConstants[round];
101
+ Ebe = Be ^ (~Bi & Bo);
102
+ Ebi = Bi ^ (~Bo & Bu);
103
+ Ebo = Bo ^ (~Bu & Ba);
104
+ Ebu = Bu ^ (~Ba & Be);
105
+
106
+ Ba = rol(Abo ^ Do, 28n);
107
+ Be = rol(Agu ^ Du, 20n);
108
+ Bi = rol(Aka ^ Da, 3n);
109
+ Bo = rol(Ame ^ De, 45n);
110
+ Bu = rol(Asi ^ Di, 61n);
111
+ Ega = Ba ^ (~Be & Bi);
112
+ Ege = Be ^ (~Bi & Bo);
113
+ Egi = Bi ^ (~Bo & Bu);
114
+ Ego = Bo ^ (~Bu & Ba);
115
+ Egu = Bu ^ (~Ba & Be);
116
+
117
+ Ba = rol(Abe ^ De, 1n);
118
+ Be = rol(Agi ^ Di, 6n);
119
+ Bi = rol(Ako ^ Do, 25n);
120
+ Bo = rol(Amu ^ Du, 8n);
121
+ Bu = rol(Asa ^ Da, 18n);
122
+ Eka = Ba ^ (~Be & Bi);
123
+ Eke = Be ^ (~Bi & Bo);
124
+ Eki = Bi ^ (~Bo & Bu);
125
+ Eko = Bo ^ (~Bu & Ba);
126
+ Eku = Bu ^ (~Ba & Be);
127
+
128
+ Ba = rol(Abu ^ Du, 27n);
129
+ Be = rol(Aga ^ Da, 36n);
130
+ Bi = rol(Ake ^ De, 10n);
131
+ Bo = rol(Ami ^ Di, 15n);
132
+ Bu = rol(Aso ^ Do, 56n);
133
+ Ema = Ba ^ (~Be & Bi);
134
+ Eme = Be ^ (~Bi & Bo);
135
+ Emi = Bi ^ (~Bo & Bu);
136
+ Emo = Bo ^ (~Bu & Ba);
137
+ Emu = Bu ^ (~Ba & Be);
138
+
139
+ Ba = rol(Abi ^ Di, 62n);
140
+ Be = rol(Ago ^ Do, 55n);
141
+ Bi = rol(Aku ^ Du, 39n);
142
+ Bo = rol(Ama ^ Da, 41n);
143
+ Bu = rol(Ase ^ De, 2n);
144
+ Esa = Ba ^ (~Be & Bi);
145
+ Ese = Be ^ (~Bi & Bo);
146
+ Esi = Bi ^ (~Bo & Bu);
147
+ Eso = Bo ^ (~Bu & Ba);
148
+ Esu = Bu ^ (~Ba & Be);
149
+
150
+ /* Round (round + 1): Exx -> Axx */
151
+
152
+ Ba = Eba ^ Ega ^ Eka ^ Ema ^ Esa;
153
+ Be = Ebe ^ Ege ^ Eke ^ Eme ^ Ese;
154
+ Bi = Ebi ^ Egi ^ Eki ^ Emi ^ Esi;
155
+ Bo = Ebo ^ Ego ^ Eko ^ Emo ^ Eso;
156
+ Bu = Ebu ^ Egu ^ Eku ^ Emu ^ Esu;
157
+
158
+ Da = Bu ^ rol(Be, 1n);
159
+ De = Ba ^ rol(Bi, 1n);
160
+ Di = Be ^ rol(Bo, 1n);
161
+ Do = Bi ^ rol(Bu, 1n);
162
+ Du = Bo ^ rol(Ba, 1n);
163
+
164
+ Ba = Eba ^ Da;
165
+ Be = rol(Ege ^ De, 44n);
166
+ Bi = rol(Eki ^ Di, 43n);
167
+ Bo = rol(Emo ^ Do, 21n);
168
+ Bu = rol(Esu ^ Du, 14n);
169
+ Aba = Ba ^ (~Be & Bi) ^ roundConstants[round + 1];
170
+ Abe = Be ^ (~Bi & Bo);
171
+ Abi = Bi ^ (~Bo & Bu);
172
+ Abo = Bo ^ (~Bu & Ba);
173
+ Abu = Bu ^ (~Ba & Be);
174
+
175
+ Ba = rol(Ebo ^ Do, 28n);
176
+ Be = rol(Egu ^ Du, 20n);
177
+ Bi = rol(Eka ^ Da, 3n);
178
+ Bo = rol(Eme ^ De, 45n);
179
+ Bu = rol(Esi ^ Di, 61n);
180
+ Aga = Ba ^ (~Be & Bi);
181
+ Age = Be ^ (~Bi & Bo);
182
+ Agi = Bi ^ (~Bo & Bu);
183
+ Ago = Bo ^ (~Bu & Ba);
184
+ Agu = Bu ^ (~Ba & Be);
185
+
186
+ Ba = rol(Ebe ^ De, 1n);
187
+ Be = rol(Egi ^ Di, 6n);
188
+ Bi = rol(Eko ^ Do, 25n);
189
+ Bo = rol(Emu ^ Du, 8n);
190
+ Bu = rol(Esa ^ Da, 18n);
191
+ Aka = Ba ^ (~Be & Bi);
192
+ Ake = Be ^ (~Bi & Bo);
193
+ Aki = Bi ^ (~Bo & Bu);
194
+ Ako = Bo ^ (~Bu & Ba);
195
+ Aku = Bu ^ (~Ba & Be);
196
+
197
+ Ba = rol(Ebu ^ Du, 27n);
198
+ Be = rol(Ega ^ Da, 36n);
199
+ Bi = rol(Eke ^ De, 10n);
200
+ Bo = rol(Emi ^ Di, 15n);
201
+ Bu = rol(Eso ^ Do, 56n);
202
+ Ama = Ba ^ (~Be & Bi);
203
+ Ame = Be ^ (~Bi & Bo);
204
+ Ami = Bi ^ (~Bo & Bu);
205
+ Amo = Bo ^ (~Bu & Ba);
206
+ Amu = Bu ^ (~Ba & Be);
207
+
208
+ Ba = rol(Ebi ^ Di, 62n);
209
+ Be = rol(Ego ^ Do, 55n);
210
+ Bi = rol(Eku ^ Du, 39n);
211
+ Bo = rol(Ema ^ Da, 41n);
212
+ Bu = rol(Ese ^ De, 2n);
213
+ Asa = Ba ^ (~Be & Bi);
214
+ Ase = Be ^ (~Bi & Bo);
215
+ Asi = Bi ^ (~Bo & Bu);
216
+ Aso = Bo ^ (~Bu & Ba);
217
+ Asu = Bu ^ (~Ba & Be);
218
+ }
219
+
220
+ state[0] = Aba;
221
+ state[1] = Abe;
222
+ state[2] = Abi;
223
+ state[3] = Abo;
224
+ state[4] = Abu;
225
+ state[5] = Aga;
226
+ state[6] = Age;
227
+ state[7] = Agi;
228
+ state[8] = Ago;
229
+ state[9] = Agu;
230
+ state[10] = Aka;
231
+ state[11] = Ake;
232
+ state[12] = Aki;
233
+ state[13] = Ako;
234
+ state[14] = Aku;
235
+ state[15] = Ama;
236
+ state[16] = Ame;
237
+ state[17] = Ami;
238
+ state[18] = Amo;
239
+ state[19] = Amu;
240
+ state[20] = Asa;
241
+ state[21] = Ase;
242
+ state[22] = Asi;
243
+ state[23] = Aso;
244
+ state[24] = Asu;
245
+
246
+ return state;
247
+ }
248
+
249
+ function rol(x: bigint, s: bigint) {
250
+ return BigInt.asUintN(64, x << s) | (x >> (64n - s));
251
+ }
252
+
253
+ const roundConstants: bigint[] = [
254
+ 0x0000000000000001n,
255
+ 0x0000000000008082n,
256
+ 0x800000000000808an,
257
+ 0x8000000080008000n,
258
+ 0x000000000000808bn,
259
+ 0x0000000080000001n,
260
+ 0x8000000080008081n,
261
+ 0x8000000000008009n,
262
+ 0x000000000000008an,
263
+ 0x0000000000000088n,
264
+ 0x0000000080008009n,
265
+ 0x000000008000000an,
266
+ 0x000000008000808bn,
267
+ 0x800000000000008bn,
268
+ 0x8000000000008089n,
269
+ 0x8000000000008003n,
270
+ 0x8000000000008002n,
271
+ 0x8000000000000080n,
272
+ 0x000000000000800an,
273
+ 0x800000008000000an,
274
+ 0x8000000080008081n,
275
+ 0x8000000000008080n,
276
+ 0x0000000080000001n,
277
+ 0x8000000080008008n,
278
+ ];
@@ -1,3 +1,4 @@
1
+ import { toBigIntBE } from '../bigint-buffer/index.js';
1
2
  import { poseidon2Hash, randomBoolean } from '../crypto/index.js';
2
3
  import { BufferReader, FieldReader, serializeToBuffer } from '../serialize/index.js';
3
4
  import { Fr } from './fields.js';
@@ -10,7 +11,7 @@ import { Fr } from './fields.js';
10
11
  export class Point {
11
12
  static ZERO = new Point(Fr.ZERO, Fr.ZERO, false);
12
13
  static SIZE_IN_BYTES = Fr.SIZE_IN_BYTES * 2;
13
- static COMPRESSED_SIZE_IN_BYTES = Fr.SIZE_IN_BYTES + 1;
14
+ static COMPRESSED_SIZE_IN_BYTES = Fr.SIZE_IN_BYTES;
14
15
 
15
16
  /** Used to differentiate this class from AztecAddress */
16
17
  public readonly kind = 'point';
@@ -72,7 +73,12 @@ export class Point {
72
73
  */
73
74
  static fromCompressedBuffer(buffer: Buffer | BufferReader) {
74
75
  const reader = BufferReader.asReader(buffer);
75
- return this.fromXAndSign(Fr.fromBuffer(reader), reader.readBoolean());
76
+ const value = toBigIntBE(reader.readBytes(Point.COMPRESSED_SIZE_IN_BYTES));
77
+
78
+ const x = new Fr(value & ((1n << 255n) - 1n));
79
+ const sign = (value & (1n << 255n)) !== 0n;
80
+
81
+ return this.fromXAndSign(x, sign);
76
82
  }
77
83
 
78
84
  /**
@@ -118,10 +124,10 @@ export class Point {
118
124
 
119
125
  // If y is null, the x-coordinate is not on the curve
120
126
  if (y === null) {
121
- throw new NotOnCurveError();
127
+ throw new NotOnCurveError(x);
122
128
  }
123
129
 
124
- const yPositiveBigInt = y.toBigInt() > (Fr.MODULUS - 1n) / 2n ? Fr.MODULUS - y.toBigInt() : y.toBigInt();
130
+ const yPositiveBigInt = y.toBigInt() <= (Fr.MODULUS - 1n) / 2n ? y.toBigInt() : Fr.MODULUS - y.toBigInt();
125
131
  const yNegativeBigInt = Fr.MODULUS - yPositiveBigInt;
126
132
 
127
133
  // Choose the positive or negative root based on isPositive
@@ -178,7 +184,16 @@ export class Point {
178
184
  * @returns A Buffer representation of the Point instance
179
185
  */
180
186
  toCompressedBuffer() {
181
- return serializeToBuffer(this.toXAndSign());
187
+ const [x, sign] = this.toXAndSign();
188
+ // Here we leverage that Fr fits into 254 bits (log2(Fr.MODULUS) < 254) and given that we serialize Fr to 32 bytes
189
+ // and we use big-endian the 2 most significant bits are never populated. Hence we can use one of the bits as
190
+ // a sign bit.
191
+ const compressedValue = x.toBigInt() + (sign ? 2n ** 255n : 0n);
192
+ const buf = serializeToBuffer(compressedValue);
193
+ if (buf.length !== Point.COMPRESSED_SIZE_IN_BYTES) {
194
+ throw new Error(`Invalid buffer length for compressed Point: ${buf.length}`);
195
+ }
196
+ return buf;
182
197
  }
183
198
 
184
199
  /**
@@ -265,9 +280,9 @@ export function isPoint(obj: object): obj is Point {
265
280
  return point.kind === 'point' && point.x !== undefined && point.y !== undefined;
266
281
  }
267
282
 
268
- class NotOnCurveError extends Error {
269
- constructor() {
270
- super('The given x-coordinate is not on the Grumpkin curve');
283
+ export class NotOnCurveError extends Error {
284
+ constructor(x: Fr) {
285
+ super('The given x-coordinate is not on the Grumpkin curve: ' + x.toString());
271
286
  this.name = 'NotOnCurveError';
272
287
  }
273
288
  }
package/src/log/log_fn.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /** Structured log data to include with the message. */
2
- export type LogData = Record<string, string | number | bigint | boolean | { toString(): string }>;
2
+ export type LogData = Record<string, string | number | bigint | boolean | { toString(): string } | undefined>;
3
3
 
4
4
  /** A callable logger instance. */
5
5
  export type LogFn = (msg: string, data?: LogData) => void;