common_crypto_secp256k1.mjs raw
1 // Package common/crypto/secp256k1
2 // Generated by TinyJS — TinyGo JavaScript backend
3
4 import * as $rt from './$runtime/index.mjs';
5
6 import * as common$crypto$sha256 from './common_crypto_sha256.mjs';
7
8 // Package-level variables
9 export let G = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
10 export let curveN = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
11 export let Infinity = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
12 export let feZero = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
13 export let feOne = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
14 export let feP = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
15
16 $rt.types.registerType('common/crypto/secp256k1.Point', {
17 id: 'common/crypto/secp256k1.Point',
18 kind: 'struct',
19 methods: new Map(),
20 fields: [
21 { name: 'X', type: 'common/crypto/secp256k1.Fe', tag: '', embedded: false },
22 { name: 'Y', type: 'common/crypto/secp256k1.Fe', tag: '', embedded: false },
23 { name: 'Z', type: 'common/crypto/secp256k1.Fe', tag: '', embedded: false },
24 ],
25 zero: () => ({ X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }),
26 });
27 $rt.types.registerType('common/crypto/secp256k1.AffinePoint', {
28 id: 'common/crypto/secp256k1.AffinePoint',
29 kind: 'struct',
30 methods: new Map(),
31 fields: [
32 { name: 'X', type: 'common/crypto/secp256k1.Fe', tag: '', embedded: false },
33 { name: 'Y', type: 'common/crypto/secp256k1.Fe', tag: '', embedded: false },
34 ],
35 zero: () => ({ X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }),
36 });
37 export function init() {
38 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32;
39 $t0_1 = feZero.$get().addr(0);
40 $t1_2 = feZero.$get().addr(1);
41 $t2_3 = feZero.$get().addr(2);
42 $t3_4 = feZero.$get().addr(3);
43 $t0_1.$set(0);
44 $t1_2.$set(0);
45 $t2_3.$set(0);
46 $t3_4.$set(0);
47 $t4_5 = feOne.$get().addr(0);
48 $t5_6 = feOne.$get().addr(1);
49 $t6_7 = feOne.$get().addr(2);
50 $t7_8 = feOne.$get().addr(3);
51 $t4_5.$set(1);
52 $t5_6.$set(0);
53 $t6_7.$set(0);
54 $t7_8.$set(0);
55 $t8_9 = feP.$get().addr(0);
56 $t9_10 = feP.$get().addr(1);
57 $t10_11 = feP.$get().addr(2);
58 $t11_12 = feP.$get().addr(3);
59 $t8_9.$set(18446744069414583343);
60 $t9_10.$set(18446744073709551615);
61 $t10_11.$set(18446744073709551615);
62 $t11_12.$set(18446744073709551615);
63 $t12_13 = { $get() { return G.$get().X; }, $set(v) { const obj = G.$get(); obj.X = v; G.$set(obj); } };
64 $t13_14 = $t12_13.$get().addr(0);
65 $t14_15 = $t12_13.$get().addr(1);
66 $t15_16 = $t12_13.$get().addr(2);
67 $t16_17 = $t12_13.$get().addr(3);
68 $t17_18 = { $get() { return G.$get().Y; }, $set(v) { const obj = G.$get(); obj.Y = v; G.$set(obj); } };
69 $t18_19 = $t17_18.$get().addr(0);
70 $t19_20 = $t17_18.$get().addr(1);
71 $t20_21 = $t17_18.$get().addr(2);
72 $t21_22 = $t17_18.$get().addr(3);
73 $t13_14.$set(6481385041966929816);
74 $t14_15.$set(188021827762530521);
75 $t15_16.$set(6170039885052185351);
76 $t16_17.$set(8772561819708210092);
77 $t18_19.$set(11261198710074299576);
78 $t19_20.$set(18237243440184513561);
79 $t20_21.$set(6747795201694173352);
80 $t21_22.$set(5204712524664259685);
81 $t22_23 = curveN.$get().addr(0);
82 $t23_24 = curveN.$get().addr(1);
83 $t24_25 = curveN.$get().addr(2);
84 $t25_26 = curveN.$get().addr(3);
85 $t22_23.$set(13822214165235122497);
86 $t23_24.$set(13451932020343611451);
87 $t24_25.$set(18446744073709551614);
88 $t25_26.$set(18446744073709551615);
89 $t26_27 = { $get() { return Infinity.$get().X; }, $set(v) { const obj = Infinity.$get(); obj.X = v; Infinity.$set(obj); } };
90 $t27_28 = feZero.$get();
91 $t28_29 = { $get() { return Infinity.$get().Y; }, $set(v) { const obj = Infinity.$get(); obj.Y = v; Infinity.$set(obj); } };
92 $t29_30 = feOne.$get();
93 $t30_31 = { $get() { return Infinity.$get().Z; }, $set(v) { const obj = Infinity.$get(); obj.Z = v; Infinity.$set(obj); } };
94 $t31_32 = feZero.$get();
95 $t26_27.$set($rt.builtin.cloneValue($t27_28));
96 $t28_29.$set($rt.builtin.cloneValue($t29_30));
97 $t30_31.$set($rt.builtin.cloneValue($t31_32));
98 return;
99 }
100
101 export function VerifySchnorr(pubkey, msg, sig) {
102 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47;
103 let $block = 0;
104 while (true) {
105 switch ($block) {
106 case 0: {
107 $t0_1 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
108 $t0_1.$set($rt.builtin.cloneValue(pubkey));
109 $t1_2 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
110 $t1_2.$set($rt.builtin.cloneValue(msg));
111 $t2_3 = { $value: $rt.builtin.makeSlice(64, 64, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
112 $t2_3.$set($rt.builtin.cloneValue(sig));
113 $t3_4 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
114 $t4_5 = feFromBytes($t3_4);
115 $t5_6 = LiftX($t4_5);
116 $t6_7 = $t5_6[0];
117 $t7_8 = $t5_6[1];
118 if ($t7_8) {
119 $block = 2; break;
120 }
121 else {
122 $block = 1; break;
123 }
124 break;
125 }
126 case 1: {
127 return false;
128 break;
129 }
130 case 2: {
131 $t8_9 = $rt.builtin.sliceSlice($t2_3.$get(), undefined, 32, undefined);
132 $t9_10 = feFromBytes($t8_9);
133 $t10_11 = $rt.builtin.sliceSlice($t2_3.$get(), 32, undefined, undefined);
134 $t11_12 = scalarFromBytes($t10_11);
135 $t12_13 = $rt.builtin.sliceSlice($t2_3.$get(), undefined, 32, undefined);
136 $t13_14 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
137 $t14_15 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, undefined, undefined);
138 $t15_16 = computeChallenge($t12_13, $t13_14, $t14_15);
139 $t16_17 = ScalarBaseMult($t11_12);
140 $t17_18 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
141 $t18_19 = pointFromAffine($t6_7);
142 $t19_20 = ScalarMult($t18_19, $t15_16);
143 $t20_21 = Point$toAffine($t19_20);
144 $t17_18.$set($rt.builtin.cloneValue($t20_21));
145 $t21_22 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
146 $t22_23 = { $get() { return $t21_22.$get().X; }, $set(v) { const obj = $t21_22.$get(); obj.X = v; $t21_22.$set(obj); } };
147 $t23_24 = { $get() { return $t17_18.$get().X; }, $set(v) { const obj = $t17_18.$get(); obj.X = v; $t17_18.$set(obj); } };
148 $t24_25 = $t23_24.$get();
149 $t25_26 = { $get() { return $t21_22.$get().Y; }, $set(v) { const obj = $t21_22.$get(); obj.Y = v; $t21_22.$set(obj); } };
150 $t26_27 = { $get() { return $t17_18.$get().Y; }, $set(v) { const obj = $t17_18.$get(); obj.Y = v; $t17_18.$set(obj); } };
151 $t27_28 = $t26_27.$get();
152 $t28_29 = feNeg($t27_28);
153 $t22_23.$set($rt.builtin.cloneValue($t24_25));
154 $t25_26.$set($rt.builtin.cloneValue($t28_29));
155 $t29_30 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
156 $t30_31 = pointFromAffine($t16_17);
157 $t31_32 = $t21_22.$get();
158 $t32_33 = pointFromAffine($t31_32);
159 $t33_34 = pointAdd($t30_31, $t32_33);
160 $t34_35 = Point$toAffine($t33_34);
161 $t29_30.$set($rt.builtin.cloneValue($t34_35));
162 $t35_36 = { $get() { return $t29_30.$get().X; }, $set(v) { const obj = $t29_30.$get(); obj.X = v; $t29_30.$set(obj); } };
163 $t36_37 = $t35_36.$get();
164 $t37_38 = feIsZero($t36_37);
165 if ($t37_38) {
166 $block = 5; break;
167 }
168 else {
169 $block = 4; break;
170 }
171 break;
172 }
173 case 3: {
174 return false;
175 break;
176 }
177 case 4: {
178 $t38_39 = { $get() { return $t29_30.$get().X; }, $set(v) { const obj = $t29_30.$get(); obj.X = v; $t29_30.$set(obj); } };
179 $t39_40 = $t38_39.$get();
180 $t40_41 = ($t39_40 !== $t9_10);
181 if ($t40_41) {
182 $block = 6; break;
183 }
184 else {
185 $block = 7; break;
186 }
187 break;
188 }
189 case 5: {
190 $t41_42 = { $get() { return $t29_30.$get().Y; }, $set(v) { const obj = $t29_30.$get(); obj.Y = v; $t29_30.$set(obj); } };
191 $t42_43 = $t41_42.$get();
192 $t43_44 = feIsZero($t42_43);
193 if ($t43_44) {
194 $block = 3; break;
195 }
196 else {
197 $block = 4; break;
198 }
199 break;
200 }
201 case 6: {
202 return false;
203 break;
204 }
205 case 7: {
206 $t44_45 = { $get() { return $t29_30.$get().Y; }, $set(v) { const obj = $t29_30.$get(); obj.Y = v; $t29_30.$set(obj); } };
207 $t45_46 = $t44_45.$get();
208 $t46_47 = feIsEven($t45_46);
209 if ($t46_47) {
210 $block = 9; break;
211 }
212 else {
213 $block = 8; break;
214 }
215 break;
216 }
217 case 8: {
218 return false;
219 break;
220 }
221 case 9: {
222 return true;
223 break;
224 }
225 }
226 }
227 }
228
229 export function SignSchnorr(seckey, msg, auxRand) {
230 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86;
231 let $block = 0;
232 while (true) {
233 switch ($block) {
234 case 0: {
235 $t0_1 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
236 $t0_1.$set($rt.builtin.cloneValue(seckey));
237 $t1_2 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
238 $t1_2.$set($rt.builtin.cloneValue(msg));
239 $t2_3 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
240 $t2_3.$set($rt.builtin.cloneValue(auxRand));
241 $t3_4 = { $value: $rt.builtin.makeSlice(64, 64, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
242 $t4_5 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
243 $t5_6 = scalarFromBytes($t4_5);
244 $t6_7 = scalarIsZero($t5_6);
245 if ($t6_7) {
246 $block = 1; break;
247 }
248 else {
249 $block = 2; break;
250 }
251 break;
252 }
253 case 1: {
254 $t7_8 = $t3_4.$get();
255 $t3_4.$set($rt.builtin.cloneValue($t7_8));
256 $t8_9 = $t3_4.$get();
257 return [$t8_9, false];
258 break;
259 }
260 case 2: {
261 $t9_10 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
262 $t10_11 = ScalarBaseMult($t5_6);
263 $t9_10.$set($rt.builtin.cloneValue($t10_11));
264 $t11_12 = { $get() { return $t9_10.$get().Y; }, $set(v) { const obj = $t9_10.$get(); obj.Y = v; $t9_10.$set(obj); } };
265 $t12_13 = $t11_12.$get();
266 $t13_14 = feIsEven($t12_13);
267 if ($t13_14) {
268 $t15_16 = $t5_6;
269 $block = 4; break;
270 }
271 else {
272 $block = 3; break;
273 }
274 break;
275 }
276 case 3: {
277 $t14_15 = scalarNeg($t5_6);
278 $t15_16 = $t14_15;
279 $block = 4; break;
280 break;
281 }
282 case 4: {
283 $t16_17 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
284 $t17_18 = { $get() { return $t9_10.$get().X; }, $set(v) { const obj = $t9_10.$get(); obj.X = v; $t9_10.$set(obj); } };
285 $t18_19 = $t17_18.$get();
286 $t19_20 = feToBytes($t18_19);
287 $t16_17.$set($rt.builtin.cloneValue($t19_20));
288 $t20_21 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
289 $t21_22 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
290 $t22_23 = $rt.builtin.sliceSlice($t2_3.$get(), undefined, undefined, undefined);
291 $t23_24 = taggedHash('BIP0340/aux', $t22_23);
292 $t21_22.$set($rt.builtin.cloneValue($t23_24));
293 $t24_25 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
294 $t25_26 = feToBytes($t15_16);
295 $t24_25.$set($rt.builtin.cloneValue($t25_26));
296 $t26_27 = 0;
297 $block = 5; break;
298 break;
299 }
300 case 5: {
301 $t27_28 = ($t26_27 < 32);
302 if ($t27_28) {
303 $block = 6; break;
304 }
305 else {
306 $block = 7; break;
307 }
308 break;
309 }
310 case 6: {
311 $t28_29 = $t24_25.$get().addr($t26_27);
312 $t29_30 = $t28_29.$get();
313 $t30_31 = $t21_22.$get().addr($t26_27);
314 $t31_32 = $t30_31.$get();
315 $t32_33 = ($t29_30 ^ $t31_32);
316 $t33_34 = $t20_21.$get().addr($t26_27);
317 $t33_34.$set($t32_33);
318 $t34_35 = ($t26_27 + 1);
319 $t26_27 = $t34_35;
320 $block = 5; break;
321 break;
322 }
323 case 7: {
324 $t35_36 = { $value: $rt.builtin.makeSlice(96, 96, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
325 $t36_37 = $rt.builtin.sliceSlice($t35_36.$get(), undefined, 32, undefined);
326 $t37_38 = $rt.builtin.sliceSlice($t20_21.$get(), undefined, undefined, undefined);
327 $t38_39 = $rt.builtin.copy($t36_37, $t37_38);
328 $t39_40 = $rt.builtin.sliceSlice($t35_36.$get(), 32, 64, undefined);
329 $t40_41 = $rt.builtin.sliceSlice($t16_17.$get(), undefined, undefined, undefined);
330 $t41_42 = $rt.builtin.copy($t39_40, $t40_41);
331 $t42_43 = $rt.builtin.sliceSlice($t35_36.$get(), 64, 96, undefined);
332 $t43_44 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, undefined, undefined);
333 $t44_45 = $rt.builtin.copy($t42_43, $t43_44);
334 $t45_46 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
335 $t46_47 = $rt.builtin.sliceSlice($t35_36.$get(), undefined, undefined, undefined);
336 $t47_48 = taggedHash('BIP0340/nonce', $t46_47);
337 $t45_46.$set($rt.builtin.cloneValue($t47_48));
338 $t48_49 = $rt.builtin.sliceSlice($t45_46.$get(), undefined, undefined, undefined);
339 $t49_50 = scalarFromBytes($t48_49);
340 $t50_51 = curveN.$get();
341 $t51_52 = feCmp($t49_50, $t50_51);
342 $t52_53 = ($t51_52 >= 0);
343 if ($t52_53) {
344 $block = 8; break;
345 }
346 else {
347 $t55_56 = $t49_50;
348 $block = 9; break;
349 }
350 break;
351 }
352 case 8: {
353 $t53_54 = curveN.$get();
354 $t54_55 = scalarSub($t49_50, $t53_54);
355 $t55_56 = $t54_55;
356 $block = 9; break;
357 break;
358 }
359 case 9: {
360 $t56_57 = scalarIsZero($t55_56);
361 if ($t56_57) {
362 $block = 10; break;
363 }
364 else {
365 $block = 11; break;
366 }
367 break;
368 }
369 case 10: {
370 $t57_58 = $t3_4.$get();
371 $t3_4.$set($rt.builtin.cloneValue($t57_58));
372 $t58_59 = $t3_4.$get();
373 return [$t58_59, false];
374 break;
375 }
376 case 11: {
377 $t59_60 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
378 $t60_61 = ScalarBaseMult($t55_56);
379 $t59_60.$set($rt.builtin.cloneValue($t60_61));
380 $t61_62 = { $get() { return $t59_60.$get().Y; }, $set(v) { const obj = $t59_60.$get(); obj.Y = v; $t59_60.$set(obj); } };
381 $t62_63 = $t61_62.$get();
382 $t63_64 = feIsEven($t62_63);
383 if ($t63_64) {
384 $t65_66 = $t55_56;
385 $block = 13; break;
386 }
387 else {
388 $block = 12; break;
389 }
390 break;
391 }
392 case 12: {
393 $t64_65 = scalarNeg($t55_56);
394 $t65_66 = $t64_65;
395 $block = 13; break;
396 break;
397 }
398 case 13: {
399 $t66_67 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
400 $t67_68 = { $get() { return $t59_60.$get().X; }, $set(v) { const obj = $t59_60.$get(); obj.X = v; $t59_60.$set(obj); } };
401 $t68_69 = $t67_68.$get();
402 $t69_70 = feToBytes($t68_69);
403 $t66_67.$set($rt.builtin.cloneValue($t69_70));
404 $t70_71 = $rt.builtin.sliceSlice($t66_67.$get(), undefined, undefined, undefined);
405 $t71_72 = $rt.builtin.sliceSlice($t16_17.$get(), undefined, undefined, undefined);
406 $t72_73 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, undefined, undefined);
407 $t73_74 = computeChallenge($t70_71, $t71_72, $t72_73);
408 $t74_75 = scalarMul($t73_74, $t15_16);
409 $t75_76 = scalarAdd($t65_66, $t74_75);
410 $t76_77 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
411 $t77_78 = feToBytes($t75_76);
412 $t76_77.$set($rt.builtin.cloneValue($t77_78));
413 $t78_79 = $rt.builtin.sliceSlice($t3_4.$get(), undefined, 32, undefined);
414 $t79_80 = $rt.builtin.sliceSlice($t66_67.$get(), undefined, undefined, undefined);
415 $t80_81 = $rt.builtin.copy($t78_79, $t79_80);
416 $t81_82 = $rt.builtin.sliceSlice($t3_4.$get(), 32, undefined, undefined);
417 $t82_83 = $rt.builtin.sliceSlice($t76_77.$get(), undefined, undefined, undefined);
418 $t83_84 = $rt.builtin.copy($t81_82, $t82_83);
419 $t84_85 = $t3_4.$get();
420 $t3_4.$set($rt.builtin.cloneValue($t84_85));
421 $t85_86 = $t3_4.$get();
422 return [$t85_86, true];
423 break;
424 }
425 }
426 }
427 }
428
429 export function PubKeyFromSecKey(seckey) {
430 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9;
431 let $block = 0;
432 while (true) {
433 switch ($block) {
434 case 0: {
435 $t0_1 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
436 $t0_1.$set($rt.builtin.cloneValue(seckey));
437 $t1_2 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
438 $t2_3 = scalarFromBytes($t1_2);
439 $t3_4 = scalarIsZero($t2_3);
440 if ($t3_4) {
441 $block = 1; break;
442 }
443 else {
444 $block = 2; break;
445 }
446 break;
447 }
448 case 1: {
449 return [$rt.builtin.makeSlice(32, 32, 0), false];
450 break;
451 }
452 case 2: {
453 $t4_5 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
454 $t5_6 = ScalarBaseMult($t2_3);
455 $t4_5.$set($rt.builtin.cloneValue($t5_6));
456 $t6_7 = { $get() { return $t4_5.$get().X; }, $set(v) { const obj = $t4_5.$get(); obj.X = v; $t4_5.$set(obj); } };
457 $t7_8 = $t6_7.$get();
458 $t8_9 = feToBytes($t7_8);
459 return [$t8_9, true];
460 break;
461 }
462 }
463 }
464 }
465
466 export function ECDH(seckey, pubkey) {
467 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23;
468 let $block = 0;
469 while (true) {
470 switch ($block) {
471 case 0: {
472 $t0_1 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
473 $t0_1.$set($rt.builtin.cloneValue(seckey));
474 $t1_2 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
475 $t1_2.$set($rt.builtin.cloneValue(pubkey));
476 $t2_3 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
477 $t3_4 = scalarFromBytes($t2_3);
478 $t4_5 = scalarIsZero($t3_4);
479 if ($t4_5) {
480 $block = 1; break;
481 }
482 else {
483 $block = 2; break;
484 }
485 break;
486 }
487 case 1: {
488 return [$rt.builtin.makeSlice(32, 32, 0), false];
489 break;
490 }
491 case 2: {
492 $t5_6 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, undefined, undefined);
493 $t6_7 = feFromBytes($t5_6);
494 $t7_8 = LiftX($t6_7);
495 $t8_9 = $t7_8[0];
496 $t9_10 = $t7_8[1];
497 if ($t9_10) {
498 $block = 4; break;
499 }
500 else {
501 $block = 3; break;
502 }
503 break;
504 }
505 case 3: {
506 return [$rt.builtin.makeSlice(32, 32, 0), false];
507 break;
508 }
509 case 4: {
510 $t10_11 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
511 $t11_12 = pointFromAffine($t8_9);
512 $t12_13 = ScalarMult($t11_12, $t3_4);
513 $t13_14 = Point$toAffine($t12_13);
514 $t10_11.$set($rt.builtin.cloneValue($t13_14));
515 $t14_15 = { $get() { return $t10_11.$get().X; }, $set(v) { const obj = $t10_11.$get(); obj.X = v; $t10_11.$set(obj); } };
516 $t15_16 = $t14_15.$get();
517 $t16_17 = feIsZero($t15_16);
518 if ($t16_17) {
519 $block = 7; break;
520 }
521 else {
522 $block = 6; break;
523 }
524 break;
525 }
526 case 5: {
527 return [$rt.builtin.makeSlice(32, 32, 0), false];
528 break;
529 }
530 case 6: {
531 $t17_18 = { $get() { return $t10_11.$get().X; }, $set(v) { const obj = $t10_11.$get(); obj.X = v; $t10_11.$set(obj); } };
532 $t18_19 = $t17_18.$get();
533 $t19_20 = feToBytes($t18_19);
534 return [$t19_20, true];
535 break;
536 }
537 case 7: {
538 $t20_21 = { $get() { return $t10_11.$get().Y; }, $set(v) { const obj = $t10_11.$get(); obj.Y = v; $t10_11.$set(obj); } };
539 $t21_22 = $t20_21.$get();
540 $t22_23 = feIsZero($t21_22);
541 if ($t22_23) {
542 $block = 5; break;
543 }
544 else {
545 $block = 6; break;
546 }
547 break;
548 }
549 }
550 }
551 }
552
553 export function taggedHash(tag, msg) {
554 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
555 $t0_1 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
556 $t1_2 = $rt.builtin.stringToBytes(tag);
557 $t2_3 = common$crypto$sha256.Sum($t1_2);
558 $t0_1.$set($rt.builtin.cloneValue($t2_3));
559 $t3_4 = $rt.builtin.len(msg);
560 $t4_5 = (64 + $t3_4);
561 $t5_6 = $rt.builtin.makeSlice(0, $t4_5, 0);
562 $t6_7 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
563 $t7_8 = $rt.builtin.appendSlice($t5_6, $t6_7);
564 $t8_9 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
565 $t9_10 = $rt.builtin.appendSlice($t7_8, $t8_9);
566 $t10_11 = $rt.builtin.appendSlice($t9_10, msg);
567 $t11_12 = common$crypto$sha256.Sum($t10_11);
568 return $t11_12;
569 }
570
571 export function computeChallenge(rx, px, msg) {
572 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15;
573 let $block = 0;
574 while (true) {
575 switch ($block) {
576 case 0: {
577 $t0_1 = { $value: $rt.builtin.makeSlice(96, 96, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
578 $t1_2 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, 0, undefined);
579 $t2_3 = $rt.builtin.appendSlice($t1_2, rx);
580 $t3_4 = $rt.builtin.appendSlice($t2_3, px);
581 $t4_5 = $rt.builtin.appendSlice($t3_4, msg);
582 $t5_6 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
583 $t6_7 = taggedHash('BIP0340/challenge', $t4_5);
584 $t5_6.$set($rt.builtin.cloneValue($t6_7));
585 $t7_8 = $rt.builtin.sliceSlice($t5_6.$get(), undefined, undefined, undefined);
586 $t8_9 = scalarFromBytes($t7_8);
587 $t9_10 = curveN.$get();
588 $t10_11 = feCmp($t8_9, $t9_10);
589 $t11_12 = ($t10_11 >= 0);
590 if ($t11_12) {
591 $block = 1; break;
592 }
593 else {
594 $t14_15 = $t8_9;
595 $block = 2; break;
596 }
597 break;
598 }
599 case 1: {
600 $t12_13 = curveN.$get();
601 $t13_14 = scalarSub($t8_9, $t12_13);
602 $t14_15 = $t13_14;
603 $block = 2; break;
604 break;
605 }
606 case 2: {
607 return $t14_15;
608 break;
609 }
610 }
611 }
612 }
613
614 export function scalarAdd(a, b) {
615 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73;
616 let $block = 0;
617 while (true) {
618 switch ($block) {
619 case 0: {
620 $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
621 $t0_1.$set($rt.builtin.cloneValue(a));
622 $t1_2 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
623 $t1_2.$set($rt.builtin.cloneValue(b));
624 $t2_3 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
625 $t3_4 = $t0_1.$get().addr(0);
626 $t4_5 = $t3_4.$get();
627 $t5_6 = $t1_2.$get().addr(0);
628 $t6_7 = $t5_6.$get();
629 $t7_8 = addWithCarry($t4_5, $t6_7, 0);
630 $t8_9 = $t7_8[0];
631 $t9_10 = $t2_3.$get().addr(0);
632 $t9_10.$set($t8_9);
633 $t10_11 = $t7_8[1];
634 $t11_12 = $t0_1.$get().addr(1);
635 $t12_13 = $t11_12.$get();
636 $t13_14 = $t1_2.$get().addr(1);
637 $t14_15 = $t13_14.$get();
638 $t15_16 = addWithCarry($t12_13, $t14_15, $t10_11);
639 $t16_17 = $t15_16[0];
640 $t17_18 = $t2_3.$get().addr(1);
641 $t17_18.$set($t16_17);
642 $t18_19 = $t15_16[1];
643 $t19_20 = $t0_1.$get().addr(2);
644 $t20_21 = $t19_20.$get();
645 $t21_22 = $t1_2.$get().addr(2);
646 $t22_23 = $t21_22.$get();
647 $t23_24 = addWithCarry($t20_21, $t22_23, $t18_19);
648 $t24_25 = $t23_24[0];
649 $t25_26 = $t2_3.$get().addr(2);
650 $t25_26.$set($t24_25);
651 $t26_27 = $t23_24[1];
652 $t27_28 = $t0_1.$get().addr(3);
653 $t28_29 = $t27_28.$get();
654 $t29_30 = $t1_2.$get().addr(3);
655 $t30_31 = $t29_30.$get();
656 $t31_32 = addWithCarry($t28_29, $t30_31, $t26_27);
657 $t32_33 = $t31_32[0];
658 $t33_34 = $t2_3.$get().addr(3);
659 $t33_34.$set($t32_33);
660 $t34_35 = $t31_32[1];
661 $t35_36 = ($t34_35 !== 0);
662 if ($t35_36) {
663 $block = 1; break;
664 }
665 else {
666 $block = 3; break;
667 }
668 break;
669 }
670 case 1: {
671 $t36_37 = $t2_3.$get().addr(0);
672 $t37_38 = $t36_37.$get();
673 $t38_39 = curveN.$get().addr(0);
674 $t39_40 = $t38_39.$get();
675 $t40_41 = subWithBorrow($t37_38, $t39_40, 0);
676 $t41_42 = $t40_41[0];
677 $t42_43 = $t2_3.$get().addr(0);
678 $t42_43.$set($t41_42);
679 $t43_44 = $t40_41[1];
680 $t44_45 = $t2_3.$get().addr(1);
681 $t45_46 = $t44_45.$get();
682 $t46_47 = curveN.$get().addr(1);
683 $t47_48 = $t46_47.$get();
684 $t48_49 = subWithBorrow($t45_46, $t47_48, $t43_44);
685 $t49_50 = $t48_49[0];
686 $t50_51 = $t2_3.$get().addr(1);
687 $t50_51.$set($t49_50);
688 $t51_52 = $t48_49[1];
689 $t52_53 = $t2_3.$get().addr(2);
690 $t53_54 = $t52_53.$get();
691 $t54_55 = curveN.$get().addr(2);
692 $t55_56 = $t54_55.$get();
693 $t56_57 = subWithBorrow($t53_54, $t55_56, $t51_52);
694 $t57_58 = $t56_57[0];
695 $t58_59 = $t2_3.$get().addr(2);
696 $t58_59.$set($t57_58);
697 $t59_60 = $t56_57[1];
698 $t60_61 = $t2_3.$get().addr(3);
699 $t61_62 = $t60_61.$get();
700 $t62_63 = curveN.$get().addr(3);
701 $t63_64 = $t62_63.$get();
702 $t64_65 = subWithBorrow($t61_62, $t63_64, $t59_60);
703 $t65_66 = $t64_65[0];
704 $t66_67 = $t2_3.$get().addr(3);
705 $t66_67.$set($t65_66);
706 $t67_68 = $t64_65[1];
707 $block = 2; break;
708 break;
709 }
710 case 2: {
711 $t68_69 = $t2_3.$get();
712 return $t68_69;
713 break;
714 }
715 case 3: {
716 $t69_70 = $t2_3.$get();
717 $t70_71 = curveN.$get();
718 $t71_72 = feCmp($t69_70, $t70_71);
719 $t72_73 = ($t71_72 >= 0);
720 if ($t72_73) {
721 $block = 1; break;
722 }
723 else {
724 $block = 2; break;
725 }
726 break;
727 }
728 }
729 }
730 }
731
732 export function scalarMul(a, b) {
733 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34;
734 let $block = 0;
735 while (true) {
736 switch ($block) {
737 case 0: {
738 $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
739 $t0_1.$set($rt.builtin.cloneValue(a));
740 $t1_2 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
741 $t1_2.$set($rt.builtin.cloneValue(b));
742 $t2_3 = { $value: $rt.builtin.makeSlice(8, 8, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
743 $t3_4 = 0;
744 $block = 1; break;
745 break;
746 }
747 case 1: {
748 $t4_5 = ($t3_4 < 4);
749 if ($t4_5) {
750 $block = 2; break;
751 }
752 else {
753 $block = 3; break;
754 }
755 break;
756 }
757 case 2: {
758 $t7_8 = 0;
759 $t8_9 = 0;
760 $block = 4; break;
761 break;
762 }
763 case 3: {
764 $t5_6 = $t2_3.$get();
765 $t6_7 = scalarReduceFull($t5_6);
766 return $t6_7;
767 break;
768 }
769 case 4: {
770 $t9_10 = ($t8_9 < 4);
771 if ($t9_10) {
772 $block = 5; break;
773 }
774 else {
775 $block = 6; break;
776 }
777 break;
778 }
779 case 5: {
780 $t10_11 = $t0_1.$get().addr($t3_4);
781 $t11_12 = $t10_11.$get();
782 $t12_13 = $t1_2.$get().addr($t8_9);
783 $t13_14 = $t12_13.$get();
784 $t14_15 = mul64($t11_12, $t13_14);
785 $t15_16 = $t14_15[0];
786 $t16_17 = $t14_15[1];
787 $t17_18 = ($t3_4 + $t8_9);
788 $t18_19 = $t2_3.$get().addr($t17_18);
789 $t19_20 = $t18_19.$get();
790 $t20_21 = addWithCarry($t16_17, $t19_20, 0);
791 $t21_22 = $t20_21[0];
792 $t22_23 = $t20_21[1];
793 $t23_24 = ($t15_16 + $t22_23);
794 $t24_25 = addWithCarry($t21_22, $t7_8, 0);
795 $t25_26 = $t24_25[0];
796 $t26_27 = $t24_25[1];
797 $t27_28 = ($t23_24 + $t26_27);
798 $t28_29 = ($t3_4 + $t8_9);
799 $t29_30 = $t2_3.$get().addr($t28_29);
800 $t29_30.$set($t25_26);
801 $t30_31 = ($t8_9 + 1);
802 $t7_8 = $t27_28;
803 $t8_9 = $t30_31;
804 $block = 4; break;
805 break;
806 }
807 case 6: {
808 $t31_32 = ($t3_4 + 4);
809 $t32_33 = $t2_3.$get().addr($t31_32);
810 $t32_33.$set($t7_8);
811 $t33_34 = ($t3_4 + 1);
812 $t3_4 = $t33_34;
813 $block = 1; break;
814 break;
815 }
816 }
817 }
818 }
819
820 export function scalarNeg(a) {
821 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
822 let $block = 0;
823 while (true) {
824 switch ($block) {
825 case 0: {
826 $t0_1 = feZero.$get();
827 $t1_2 = (a === $t0_1);
828 if ($t1_2) {
829 $block = 1; break;
830 }
831 else {
832 $block = 2; break;
833 }
834 break;
835 }
836 case 1: {
837 $t2_3 = feZero.$get();
838 return $t2_3;
839 break;
840 }
841 case 2: {
842 $t3_4 = curveN.$get();
843 $t4_5 = scalarSub($t3_4, a);
844 return $t4_5;
845 break;
846 }
847 }
848 }
849 }
850
851 export function scalarSub(a, b) {
852 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78;
853 let $block = 0;
854 while (true) {
855 switch ($block) {
856 case 0: {
857 $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
858 $t0_1.$set($rt.builtin.cloneValue(a));
859 $t1_2 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
860 $t1_2.$set($rt.builtin.cloneValue(b));
861 $t2_3 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
862 $t3_4 = $t0_1.$get().addr(0);
863 $t4_5 = $t3_4.$get();
864 $t5_6 = $t1_2.$get().addr(0);
865 $t6_7 = $t5_6.$get();
866 $t7_8 = subWithBorrow($t4_5, $t6_7, 0);
867 $t8_9 = $t7_8[0];
868 $t9_10 = $t2_3.$get().addr(0);
869 $t9_10.$set($t8_9);
870 $t10_11 = $t7_8[1];
871 $t11_12 = $t2_3.$get().addr(1);
872 $t12_13 = $t11_12.$get();
873 $t13_14 = $t0_1.$get().addr(1);
874 $t14_15 = $t13_14.$get();
875 $t15_16 = ($t12_13 + $t14_15);
876 $t16_17 = $t1_2.$get().addr(1);
877 $t17_18 = $t16_17.$get();
878 $t18_19 = subWithBorrow($t15_16, $t17_18, $t10_11);
879 $t19_20 = $t18_19[0];
880 $t20_21 = $t2_3.$get().addr(1);
881 $t20_21.$set($t19_20);
882 $t21_22 = $t18_19[1];
883 $t22_23 = $t2_3.$get().addr(2);
884 $t23_24 = $t22_23.$get();
885 $t24_25 = $t0_1.$get().addr(2);
886 $t25_26 = $t24_25.$get();
887 $t26_27 = ($t23_24 + $t25_26);
888 $t27_28 = $t1_2.$get().addr(2);
889 $t28_29 = $t27_28.$get();
890 $t29_30 = subWithBorrow($t26_27, $t28_29, $t21_22);
891 $t30_31 = $t29_30[0];
892 $t31_32 = $t2_3.$get().addr(2);
893 $t31_32.$set($t30_31);
894 $t32_33 = $t29_30[1];
895 $t33_34 = $t2_3.$get().addr(3);
896 $t34_35 = $t33_34.$get();
897 $t35_36 = $t0_1.$get().addr(3);
898 $t36_37 = $t35_36.$get();
899 $t37_38 = ($t34_35 + $t36_37);
900 $t38_39 = $t1_2.$get().addr(3);
901 $t39_40 = $t38_39.$get();
902 $t40_41 = subWithBorrow($t37_38, $t39_40, $t32_33);
903 $t41_42 = $t40_41[0];
904 $t42_43 = $t2_3.$get().addr(3);
905 $t42_43.$set($t41_42);
906 $t43_44 = $t40_41[1];
907 $t44_45 = ($t43_44 !== 0);
908 if ($t44_45) {
909 $block = 1; break;
910 }
911 else {
912 $block = 2; break;
913 }
914 break;
915 }
916 case 1: {
917 $t45_46 = $t2_3.$get().addr(0);
918 $t46_47 = $t45_46.$get();
919 $t47_48 = curveN.$get().addr(0);
920 $t48_49 = $t47_48.$get();
921 $t49_50 = addWithCarry($t46_47, $t48_49, 0);
922 $t50_51 = $t49_50[0];
923 $t51_52 = $t2_3.$get().addr(0);
924 $t51_52.$set($t50_51);
925 $t52_53 = $t49_50[1];
926 $t53_54 = $t2_3.$get().addr(1);
927 $t54_55 = $t53_54.$get();
928 $t55_56 = curveN.$get().addr(1);
929 $t56_57 = $t55_56.$get();
930 $t57_58 = addWithCarry($t54_55, $t56_57, $t52_53);
931 $t58_59 = $t57_58[0];
932 $t59_60 = $t2_3.$get().addr(1);
933 $t59_60.$set($t58_59);
934 $t60_61 = $t57_58[1];
935 $t61_62 = $t2_3.$get().addr(2);
936 $t62_63 = $t61_62.$get();
937 $t63_64 = curveN.$get().addr(2);
938 $t64_65 = $t63_64.$get();
939 $t65_66 = addWithCarry($t62_63, $t64_65, $t60_61);
940 $t66_67 = $t65_66[0];
941 $t67_68 = $t2_3.$get().addr(2);
942 $t67_68.$set($t66_67);
943 $t68_69 = $t65_66[1];
944 $t69_70 = $t2_3.$get().addr(3);
945 $t70_71 = $t69_70.$get();
946 $t71_72 = curveN.$get().addr(3);
947 $t72_73 = $t71_72.$get();
948 $t73_74 = addWithCarry($t70_71, $t72_73, $t68_69);
949 $t74_75 = $t73_74[0];
950 $t75_76 = $t2_3.$get().addr(3);
951 $t75_76.$set($t74_75);
952 $t76_77 = $t73_74[1];
953 $block = 2; break;
954 break;
955 }
956 case 2: {
957 $t77_78 = $t2_3.$get();
958 return $t77_78;
959 break;
960 }
961 }
962 }
963 }
964
965 export function scalarInv(a) {
966 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
967 $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
968 $t1_2 = $t0_1.$get().addr(0);
969 $t2_3 = $t0_1.$get().addr(1);
970 $t3_4 = $t0_1.$get().addr(2);
971 $t4_5 = $t0_1.$get().addr(3);
972 $t1_2.$set(13822214165235122495);
973 $t2_3.$set(13451932020343611451);
974 $t3_4.$set(18446744073709551614);
975 $t4_5.$set(18446744073709551615);
976 $t5_6 = $t0_1.$get();
977 $t6_7 = scalarExp(a, $t5_6);
978 return $t6_7;
979 }
980
981 export function scalarExp(base, exp) {
982 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21;
983 let $block = 0;
984 while (true) {
985 switch ($block) {
986 case 0: {
987 $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
988 $t0_1.$set($rt.builtin.cloneValue(exp));
989 $t1_2 = feOne.$get();
990 $t2_3 = $t1_2;
991 $t3_4 = base;
992 $t4_5 = 0;
993 $block = 1; break;
994 break;
995 }
996 case 1: {
997 $t5_6 = ($t4_5 < 4);
998 if ($t5_6) {
999 $block = 2; break;
1000 }
1001 else {
1002 $block = 3; break;
1003 }
1004 break;
1005 }
1006 case 2: {
1007 $t6_7 = $t0_1.$get().addr($t4_5);
1008 $t7_8 = $t6_7.$get();
1009 $t8_9 = $t2_3;
1010 $t9_10 = $t3_4;
1011 $t10_11 = $t7_8;
1012 $t11_12 = 0;
1013 $block = 4; break;
1014 break;
1015 }
1016 case 3: {
1017 return $t2_3;
1018 break;
1019 }
1020 case 4: {
1021 $t12_13 = ($t11_12 < 64);
1022 if ($t12_13) {
1023 $block = 5; break;
1024 }
1025 else {
1026 $block = 6; break;
1027 }
1028 break;
1029 }
1030 case 5: {
1031 $t13_14 = $rt.builtin.int64and($t10_11, 1);
1032 $t14_15 = ($t13_14 === 1);
1033 if ($t14_15) {
1034 $block = 7; break;
1035 }
1036 else {
1037 $t17_18 = $t8_9;
1038 $block = 8; break;
1039 }
1040 break;
1041 }
1042 case 6: {
1043 $t15_16 = ($t4_5 + 1);
1044 $t2_3 = $t8_9;
1045 $t3_4 = $t9_10;
1046 $t4_5 = $t15_16;
1047 $block = 1; break;
1048 break;
1049 }
1050 case 7: {
1051 $t16_17 = scalarMul($t8_9, $t9_10);
1052 $t17_18 = $t16_17;
1053 $block = 8; break;
1054 break;
1055 }
1056 case 8: {
1057 $t18_19 = scalarMul($t9_10, $t9_10);
1058 $t19_20 = Math.trunc($t10_11 / (2 ** 1));
1059 $t20_21 = ($t11_12 + 1);
1060 $t8_9 = $t17_18;
1061 $t9_10 = $t18_19;
1062 $t10_11 = $t19_20;
1063 $t11_12 = $t20_21;
1064 $block = 4; break;
1065 break;
1066 }
1067 }
1068 }
1069 }
1070
1071 export function scalarReduceFull(t) {
1072 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88, $t88_89, $t89_90, $t90_91, $t91_92, $t92_93, $t93_94, $t94_95, $t95_96, $t96_97, $t97_98, $t98_99, $t99_100, $t100_101, $t101_102, $t102_103, $t103_104, $t104_105, $t105_106, $t106_107, $t107_108, $t108_109, $t109_110, $t110_111, $t111_112, $t112_113, $t113_114, $t114_115, $t115_116, $t116_117, $t117_118, $t118_119;
1073 let $block = 0;
1074 while (true) {
1075 switch ($block) {
1076 case 0: {
1077 $t0_1 = { $value: $rt.builtin.makeSlice(3, 3, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1078 $t1_2 = $t0_1.$get().addr(0);
1079 $t2_3 = $t0_1.$get().addr(1);
1080 $t3_4 = $t0_1.$get().addr(2);
1081 $t1_2.$set(4624529908474429119);
1082 $t2_3.$set(4994812053365940164);
1083 $t3_4.$set(1);
1084 $t4_5 = { $value: $rt.builtin.makeSlice(8, 8, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1085 $t5_6 = $t0_1.$get();
1086 $t6_7 = scalarFoldHigh(t, $t5_6);
1087 $t4_5.$set($rt.builtin.cloneValue($t6_7));
1088 $t7_8 = $t4_5.$get();
1089 $t8_9 = $t0_1.$get();
1090 $t9_10 = scalarFoldHigh($t7_8, $t8_9);
1091 $t4_5.$set($rt.builtin.cloneValue($t9_10));
1092 $t10_11 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1093 $t11_12 = $t4_5.$get().addr(0);
1094 $t12_13 = $t11_12.$get();
1095 $t13_14 = $t10_11.$get().addr(0);
1096 $t13_14.$set($t12_13);
1097 $t14_15 = $t4_5.$get().addr(1);
1098 $t15_16 = $t14_15.$get();
1099 $t16_17 = $t10_11.$get().addr(1);
1100 $t16_17.$set($t15_16);
1101 $t17_18 = $t4_5.$get().addr(2);
1102 $t18_19 = $t17_18.$get();
1103 $t19_20 = $t10_11.$get().addr(2);
1104 $t19_20.$set($t18_19);
1105 $t20_21 = $t4_5.$get().addr(3);
1106 $t21_22 = $t20_21.$get();
1107 $t22_23 = $t10_11.$get().addr(3);
1108 $t22_23.$set($t21_22);
1109 $t23_24 = $t4_5.$get().addr(4);
1110 $t24_25 = $t23_24.$get();
1111 $t25_26 = ($t24_25 !== 0);
1112 if ($t25_26) {
1113 $block = 1; break;
1114 }
1115 else {
1116 $block = 4; break;
1117 }
1118 break;
1119 }
1120 case 1: {
1121 $t26_27 = $t4_5.$get().addr(4);
1122 $t27_28 = $t26_27.$get();
1123 $t28_29 = $t0_1.$get().addr(0);
1124 $t29_30 = $t28_29.$get();
1125 $t30_31 = mul64($t27_28, $t29_30);
1126 $t31_32 = $t30_31[0];
1127 $t32_33 = $t30_31[1];
1128 $t33_34 = $t10_11.$get().addr(0);
1129 $t34_35 = $t33_34.$get();
1130 $t35_36 = addWithCarry($t32_33, $t34_35, 0);
1131 $t36_37 = $t35_36[0];
1132 $t37_38 = $t35_36[1];
1133 $t38_39 = ($t31_32 + $t37_38);
1134 $t39_40 = $t10_11.$get().addr(0);
1135 $t39_40.$set($t36_37);
1136 $t40_41 = $t4_5.$get().addr(4);
1137 $t41_42 = $t40_41.$get();
1138 $t42_43 = $t0_1.$get().addr(1);
1139 $t43_44 = $t42_43.$get();
1140 $t44_45 = mul64($t41_42, $t43_44);
1141 $t45_46 = $t44_45[0];
1142 $t46_47 = $t44_45[1];
1143 $t47_48 = $t10_11.$get().addr(1);
1144 $t48_49 = $t47_48.$get();
1145 $t49_50 = addWithCarry($t46_47, $t48_49, 0);
1146 $t50_51 = $t49_50[0];
1147 $t51_52 = $t49_50[1];
1148 $t52_53 = ($t45_46 + $t51_52);
1149 $t53_54 = addWithCarry($t50_51, $t38_39, 0);
1150 $t54_55 = $t53_54[0];
1151 $t55_56 = $t53_54[1];
1152 $t56_57 = ($t52_53 + $t55_56);
1153 $t57_58 = $t10_11.$get().addr(1);
1154 $t57_58.$set($t54_55);
1155 $t58_59 = $t4_5.$get().addr(4);
1156 $t59_60 = $t58_59.$get();
1157 $t60_61 = $t0_1.$get().addr(2);
1158 $t61_62 = $t60_61.$get();
1159 $t62_63 = mul64($t59_60, $t61_62);
1160 $t63_64 = $t62_63[0];
1161 $t64_65 = $t62_63[1];
1162 $t65_66 = $t10_11.$get().addr(2);
1163 $t66_67 = $t65_66.$get();
1164 $t67_68 = addWithCarry($t64_65, $t66_67, 0);
1165 $t68_69 = $t67_68[0];
1166 $t69_70 = $t67_68[1];
1167 $t70_71 = ($t63_64 + $t69_70);
1168 $t71_72 = addWithCarry($t68_69, $t56_57, 0);
1169 $t72_73 = $t71_72[0];
1170 $t73_74 = $t71_72[1];
1171 $t74_75 = ($t70_71 + $t73_74);
1172 $t75_76 = $t10_11.$get().addr(2);
1173 $t75_76.$set($t72_73);
1174 $t76_77 = $t10_11.$get().addr(3);
1175 $t77_78 = $t76_77.$get();
1176 $t78_79 = addWithCarry($t77_78, $t74_75, 0);
1177 $t79_80 = $t78_79[0];
1178 $t80_81 = $t10_11.$get().addr(3);
1179 $t80_81.$set($t79_80);
1180 $t81_82 = $t78_79[1];
1181 $block = 4; break;
1182 break;
1183 }
1184 case 2: {
1185 $t82_83 = $t10_11.$get().addr(0);
1186 $t83_84 = $t82_83.$get();
1187 $t84_85 = curveN.$get().addr(0);
1188 $t85_86 = $t84_85.$get();
1189 $t86_87 = subWithBorrow($t83_84, $t85_86, 0);
1190 $t87_88 = $t86_87[0];
1191 $t88_89 = $t10_11.$get().addr(0);
1192 $t88_89.$set($t87_88);
1193 $t89_90 = $t86_87[1];
1194 $t90_91 = $t10_11.$get().addr(1);
1195 $t91_92 = $t90_91.$get();
1196 $t92_93 = curveN.$get().addr(1);
1197 $t93_94 = $t92_93.$get();
1198 $t94_95 = subWithBorrow($t91_92, $t93_94, $t89_90);
1199 $t95_96 = $t94_95[0];
1200 $t96_97 = $t10_11.$get().addr(1);
1201 $t96_97.$set($t95_96);
1202 $t97_98 = $t94_95[1];
1203 $t98_99 = $t10_11.$get().addr(2);
1204 $t99_100 = $t98_99.$get();
1205 $t100_101 = curveN.$get().addr(2);
1206 $t101_102 = $t100_101.$get();
1207 $t102_103 = subWithBorrow($t99_100, $t101_102, $t97_98);
1208 $t103_104 = $t102_103[0];
1209 $t104_105 = $t10_11.$get().addr(2);
1210 $t104_105.$set($t103_104);
1211 $t105_106 = $t102_103[1];
1212 $t106_107 = $t10_11.$get().addr(3);
1213 $t107_108 = $t106_107.$get();
1214 $t108_109 = curveN.$get().addr(3);
1215 $t109_110 = $t108_109.$get();
1216 $t110_111 = subWithBorrow($t107_108, $t109_110, $t105_106);
1217 $t111_112 = $t110_111[0];
1218 $t112_113 = $t10_11.$get().addr(3);
1219 $t112_113.$set($t111_112);
1220 $t113_114 = $t110_111[1];
1221 $block = 4; break;
1222 break;
1223 }
1224 case 3: {
1225 $t114_115 = $t10_11.$get();
1226 return $t114_115;
1227 break;
1228 }
1229 case 4: {
1230 $t115_116 = $t10_11.$get();
1231 $t116_117 = curveN.$get();
1232 $t117_118 = feCmp($t115_116, $t116_117);
1233 $t118_119 = ($t117_118 >= 0);
1234 if ($t118_119) {
1235 $block = 2; break;
1236 }
1237 else {
1238 $block = 3; break;
1239 }
1240 break;
1241 }
1242 }
1243 }
1244 }
1245
1246 export function scalarFoldHigh(t, cc) {
1247 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60;
1248 let $block = 0;
1249 while (true) {
1250 switch ($block) {
1251 case 0: {
1252 $t0_1 = { $value: $rt.builtin.makeSlice(8, 8, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1253 $t0_1.$set($rt.builtin.cloneValue(t));
1254 $t1_2 = { $value: $rt.builtin.makeSlice(3, 3, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1255 $t1_2.$set($rt.builtin.cloneValue(cc));
1256 $t2_3 = { $value: $rt.builtin.makeSlice(8, 8, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1257 $t3_4 = $t0_1.$get().addr(0);
1258 $t4_5 = $t3_4.$get();
1259 $t5_6 = $t2_3.$get().addr(0);
1260 $t5_6.$set($t4_5);
1261 $t6_7 = $t0_1.$get().addr(1);
1262 $t7_8 = $t6_7.$get();
1263 $t8_9 = $t2_3.$get().addr(1);
1264 $t8_9.$set($t7_8);
1265 $t9_10 = $t0_1.$get().addr(2);
1266 $t10_11 = $t9_10.$get();
1267 $t11_12 = $t2_3.$get().addr(2);
1268 $t11_12.$set($t10_11);
1269 $t12_13 = $t0_1.$get().addr(3);
1270 $t13_14 = $t12_13.$get();
1271 $t14_15 = $t2_3.$get().addr(3);
1272 $t14_15.$set($t13_14);
1273 $t15_16 = 0;
1274 $block = 1; break;
1275 break;
1276 }
1277 case 1: {
1278 $t16_17 = ($t15_16 < 4);
1279 if ($t16_17) {
1280 $block = 2; break;
1281 }
1282 else {
1283 $block = 4; break;
1284 }
1285 break;
1286 }
1287 case 2: {
1288 $t17_18 = ($t15_16 + 4);
1289 $t18_19 = $t0_1.$get().addr($t17_18);
1290 $t19_20 = $t18_19.$get();
1291 $t20_21 = ($t19_20 === 0);
1292 if ($t20_21) {
1293 $block = 3; break;
1294 }
1295 else {
1296 $block = 5; break;
1297 }
1298 break;
1299 }
1300 case 3: {
1301 $t21_22 = ($t15_16 + 1);
1302 $t15_16 = $t21_22;
1303 $block = 1; break;
1304 break;
1305 }
1306 case 4: {
1307 $t22_23 = $t2_3.$get();
1308 return $t22_23;
1309 break;
1310 }
1311 case 5: {
1312 $t23_24 = 0;
1313 $t24_25 = 0;
1314 $block = 6; break;
1315 break;
1316 }
1317 case 6: {
1318 $t25_26 = ($t24_25 < 3);
1319 if ($t25_26) {
1320 $block = 7; break;
1321 }
1322 else {
1323 $block = 8; break;
1324 }
1325 break;
1326 }
1327 case 7: {
1328 $t26_27 = ($t15_16 + 4);
1329 $t27_28 = $t0_1.$get().addr($t26_27);
1330 $t28_29 = $t27_28.$get();
1331 $t29_30 = $t1_2.$get().addr($t24_25);
1332 $t30_31 = $t29_30.$get();
1333 $t31_32 = mul64($t28_29, $t30_31);
1334 $t32_33 = $t31_32[0];
1335 $t33_34 = $t31_32[1];
1336 $t34_35 = ($t15_16 + $t24_25);
1337 $t35_36 = $t2_3.$get().addr($t34_35);
1338 $t36_37 = $t35_36.$get();
1339 $t37_38 = addWithCarry($t33_34, $t36_37, 0);
1340 $t38_39 = $t37_38[0];
1341 $t39_40 = $t37_38[1];
1342 $t40_41 = ($t32_33 + $t39_40);
1343 $t41_42 = addWithCarry($t38_39, $t23_24, 0);
1344 $t42_43 = $t41_42[0];
1345 $t43_44 = $t41_42[1];
1346 $t44_45 = ($t40_41 + $t43_44);
1347 $t45_46 = ($t15_16 + $t24_25);
1348 $t46_47 = $t2_3.$get().addr($t45_46);
1349 $t46_47.$set($t42_43);
1350 $t47_48 = ($t24_25 + 1);
1351 $t23_24 = $t44_45;
1352 $t24_25 = $t47_48;
1353 $block = 6; break;
1354 break;
1355 }
1356 case 8: {
1357 $t48_49 = ($t15_16 + 3);
1358 $t49_50 = $t23_24;
1359 $t50_51 = $t48_49;
1360 $block = 9; break;
1361 break;
1362 }
1363 case 9: {
1364 $t51_52 = ($t49_50 !== 0);
1365 if ($t51_52) {
1366 $block = 11; break;
1367 }
1368 else {
1369 $block = 3; break;
1370 }
1371 break;
1372 }
1373 case 10: {
1374 $t52_53 = $t2_3.$get().addr($t50_51);
1375 $t53_54 = $t52_53.$get();
1376 $t54_55 = addWithCarry($t53_54, $t49_50, 0);
1377 $t55_56 = $t54_55[0];
1378 $t56_57 = $t2_3.$get().addr($t50_51);
1379 $t56_57.$set($t55_56);
1380 $t57_58 = $t54_55[1];
1381 $t58_59 = ($t50_51 + 1);
1382 $t49_50 = $t57_58;
1383 $t50_51 = $t58_59;
1384 $block = 9; break;
1385 break;
1386 }
1387 case 11: {
1388 $t59_60 = ($t50_51 < 8);
1389 if ($t59_60) {
1390 $block = 10; break;
1391 }
1392 else {
1393 $block = 3; break;
1394 }
1395 break;
1396 }
1397 }
1398 }
1399 }
1400
1401 export function scalarIsZero(s) {
1402 let $t0_1, $t1_2;
1403 $t0_1 = feZero.$get();
1404 $t1_2 = (s === $t0_1);
1405 return $t1_2;
1406 }
1407
1408 export function scalarFromBytes(b) {
1409 let $t0_1;
1410 $t0_1 = feFromBytes(b);
1411 return $t0_1;
1412 }
1413
1414 export function pointFromAffine(p) {
1415 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11;
1416 $t0_1 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1417 $t0_1.$set($rt.builtin.cloneValue(p));
1418 $t1_2 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1419 $t2_3 = { $get() { return $t1_2.$get().X; }, $set(v) { const obj = $t1_2.$get(); obj.X = v; $t1_2.$set(obj); } };
1420 $t3_4 = { $get() { return $t0_1.$get().X; }, $set(v) { const obj = $t0_1.$get(); obj.X = v; $t0_1.$set(obj); } };
1421 $t4_5 = $t3_4.$get();
1422 $t5_6 = { $get() { return $t1_2.$get().Y; }, $set(v) { const obj = $t1_2.$get(); obj.Y = v; $t1_2.$set(obj); } };
1423 $t6_7 = { $get() { return $t0_1.$get().Y; }, $set(v) { const obj = $t0_1.$get(); obj.Y = v; $t0_1.$set(obj); } };
1424 $t7_8 = $t6_7.$get();
1425 $t8_9 = { $get() { return $t1_2.$get().Z; }, $set(v) { const obj = $t1_2.$get(); obj.Z = v; $t1_2.$set(obj); } };
1426 $t9_10 = feOne.$get();
1427 $t2_3.$set($rt.builtin.cloneValue($t4_5));
1428 $t5_6.$set($rt.builtin.cloneValue($t7_8));
1429 $t8_9.$set($rt.builtin.cloneValue($t9_10));
1430 $t10_11 = $t1_2.$get();
1431 return $t10_11;
1432 }
1433
1434 export function pointDouble(p) {
1435 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41;
1436 let $block = 0;
1437 while (true) {
1438 switch ($block) {
1439 case 0: {
1440 $t0_1 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1441 $t0_1.$set($rt.builtin.cloneValue(p));
1442 $t1_2 = { $get() { return $t0_1.$get().Z; }, $set(v) { const obj = $t0_1.$get(); obj.Z = v; $t0_1.$set(obj); } };
1443 $t2_3 = $t1_2.$get();
1444 $t3_4 = feIsZero($t2_3);
1445 if ($t3_4) {
1446 $block = 1; break;
1447 }
1448 else {
1449 $block = 2; break;
1450 }
1451 break;
1452 }
1453 case 1: {
1454 $t4_5 = $t0_1.$get();
1455 return $t4_5;
1456 break;
1457 }
1458 case 2: {
1459 $t5_6 = { $get() { return $t0_1.$get().X; }, $set(v) { const obj = $t0_1.$get(); obj.X = v; $t0_1.$set(obj); } };
1460 $t6_7 = $t5_6.$get();
1461 $t7_8 = feSqr($t6_7);
1462 $t8_9 = { $get() { return $t0_1.$get().Y; }, $set(v) { const obj = $t0_1.$get(); obj.Y = v; $t0_1.$set(obj); } };
1463 $t9_10 = $t8_9.$get();
1464 $t10_11 = feSqr($t9_10);
1465 $t11_12 = feSqr($t10_11);
1466 $t12_13 = { $get() { return $t0_1.$get().X; }, $set(v) { const obj = $t0_1.$get(); obj.X = v; $t0_1.$set(obj); } };
1467 $t13_14 = $t12_13.$get();
1468 $t14_15 = feAdd($t13_14, $t10_11);
1469 $t15_16 = feSqr($t14_15);
1470 $t16_17 = feSub($t15_16, $t7_8);
1471 $t17_18 = feSub($t16_17, $t11_12);
1472 $t18_19 = feAdd($t17_18, $t17_18);
1473 $t19_20 = feAdd($t7_8, $t7_8);
1474 $t20_21 = feAdd($t19_20, $t7_8);
1475 $t21_22 = feSqr($t20_21);
1476 $t22_23 = feAdd($t18_19, $t18_19);
1477 $t23_24 = feSub($t21_22, $t22_23);
1478 $t24_25 = feSub($t18_19, $t23_24);
1479 $t25_26 = feMul($t20_21, $t24_25);
1480 $t26_27 = feAdd($t11_12, $t11_12);
1481 $t27_28 = feAdd($t26_27, $t26_27);
1482 $t28_29 = feAdd($t27_28, $t27_28);
1483 $t29_30 = feSub($t25_26, $t28_29);
1484 $t30_31 = { $get() { return $t0_1.$get().Y; }, $set(v) { const obj = $t0_1.$get(); obj.Y = v; $t0_1.$set(obj); } };
1485 $t31_32 = $t30_31.$get();
1486 $t32_33 = { $get() { return $t0_1.$get().Z; }, $set(v) { const obj = $t0_1.$get(); obj.Z = v; $t0_1.$set(obj); } };
1487 $t33_34 = $t32_33.$get();
1488 $t34_35 = feMul($t31_32, $t33_34);
1489 $t35_36 = feAdd($t34_35, $t34_35);
1490 $t36_37 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1491 $t37_38 = { $get() { return $t36_37.$get().X; }, $set(v) { const obj = $t36_37.$get(); obj.X = v; $t36_37.$set(obj); } };
1492 $t38_39 = { $get() { return $t36_37.$get().Y; }, $set(v) { const obj = $t36_37.$get(); obj.Y = v; $t36_37.$set(obj); } };
1493 $t39_40 = { $get() { return $t36_37.$get().Z; }, $set(v) { const obj = $t36_37.$get(); obj.Z = v; $t36_37.$set(obj); } };
1494 $t37_38.$set($rt.builtin.cloneValue($t23_24));
1495 $t38_39.$set($rt.builtin.cloneValue($t29_30));
1496 $t39_40.$set($rt.builtin.cloneValue($t35_36));
1497 $t40_41 = $t36_37.$get();
1498 return $t40_41;
1499 break;
1500 }
1501 }
1502 }
1503 }
1504
1505 export function pointAdd(p, q) {
1506 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63;
1507 let $block = 0;
1508 while (true) {
1509 switch ($block) {
1510 case 0: {
1511 $t0_1 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1512 $t0_1.$set($rt.builtin.cloneValue(p));
1513 $t1_2 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1514 $t1_2.$set($rt.builtin.cloneValue(q));
1515 $t2_3 = $t0_1.$get();
1516 $t3_4 = Point$isInfinity($t2_3);
1517 if ($t3_4) {
1518 $block = 1; break;
1519 }
1520 else {
1521 $block = 2; break;
1522 }
1523 break;
1524 }
1525 case 1: {
1526 $t4_5 = $t1_2.$get();
1527 return $t4_5;
1528 break;
1529 }
1530 case 2: {
1531 $t5_6 = $t1_2.$get();
1532 $t6_7 = Point$isInfinity($t5_6);
1533 if ($t6_7) {
1534 $block = 3; break;
1535 }
1536 else {
1537 $block = 4; break;
1538 }
1539 break;
1540 }
1541 case 3: {
1542 $t7_8 = $t0_1.$get();
1543 return $t7_8;
1544 break;
1545 }
1546 case 4: {
1547 $t8_9 = { $get() { return $t0_1.$get().Z; }, $set(v) { const obj = $t0_1.$get(); obj.Z = v; $t0_1.$set(obj); } };
1548 $t9_10 = $t8_9.$get();
1549 $t10_11 = feSqr($t9_10);
1550 $t11_12 = { $get() { return $t1_2.$get().Z; }, $set(v) { const obj = $t1_2.$get(); obj.Z = v; $t1_2.$set(obj); } };
1551 $t12_13 = $t11_12.$get();
1552 $t13_14 = feSqr($t12_13);
1553 $t14_15 = { $get() { return $t0_1.$get().X; }, $set(v) { const obj = $t0_1.$get(); obj.X = v; $t0_1.$set(obj); } };
1554 $t15_16 = $t14_15.$get();
1555 $t16_17 = feMul($t15_16, $t13_14);
1556 $t17_18 = { $get() { return $t1_2.$get().X; }, $set(v) { const obj = $t1_2.$get(); obj.X = v; $t1_2.$set(obj); } };
1557 $t18_19 = $t17_18.$get();
1558 $t19_20 = feMul($t18_19, $t10_11);
1559 $t20_21 = { $get() { return $t0_1.$get().Y; }, $set(v) { const obj = $t0_1.$get(); obj.Y = v; $t0_1.$set(obj); } };
1560 $t21_22 = $t20_21.$get();
1561 $t22_23 = { $get() { return $t1_2.$get().Z; }, $set(v) { const obj = $t1_2.$get(); obj.Z = v; $t1_2.$set(obj); } };
1562 $t23_24 = $t22_23.$get();
1563 $t24_25 = feMul($t13_14, $t23_24);
1564 $t25_26 = feMul($t21_22, $t24_25);
1565 $t26_27 = { $get() { return $t1_2.$get().Y; }, $set(v) { const obj = $t1_2.$get(); obj.Y = v; $t1_2.$set(obj); } };
1566 $t27_28 = $t26_27.$get();
1567 $t28_29 = { $get() { return $t0_1.$get().Z; }, $set(v) { const obj = $t0_1.$get(); obj.Z = v; $t0_1.$set(obj); } };
1568 $t29_30 = $t28_29.$get();
1569 $t30_31 = feMul($t10_11, $t29_30);
1570 $t31_32 = feMul($t27_28, $t30_31);
1571 $t32_33 = ($t16_17 === $t19_20);
1572 if ($t32_33) {
1573 $block = 5; break;
1574 }
1575 else {
1576 $block = 6; break;
1577 }
1578 break;
1579 }
1580 case 5: {
1581 $t33_34 = ($t25_26 === $t31_32);
1582 if ($t33_34) {
1583 $block = 7; break;
1584 }
1585 else {
1586 $block = 8; break;
1587 }
1588 break;
1589 }
1590 case 6: {
1591 $t34_35 = feSub($t19_20, $t16_17);
1592 $t35_36 = feSub($t31_32, $t25_26);
1593 $t36_37 = feSqr($t34_35);
1594 $t37_38 = feMul($t36_37, $t34_35);
1595 $t38_39 = feSqr($t35_36);
1596 $t39_40 = feSub($t38_39, $t37_38);
1597 $t40_41 = feMul($t16_17, $t36_37);
1598 $t41_42 = feMul($t16_17, $t36_37);
1599 $t42_43 = feAdd($t40_41, $t41_42);
1600 $t43_44 = feSub($t39_40, $t42_43);
1601 $t44_45 = feMul($t16_17, $t36_37);
1602 $t45_46 = feSub($t44_45, $t43_44);
1603 $t46_47 = feMul($t35_36, $t45_46);
1604 $t47_48 = feMul($t25_26, $t37_38);
1605 $t48_49 = feSub($t46_47, $t47_48);
1606 $t49_50 = { $get() { return $t0_1.$get().Z; }, $set(v) { const obj = $t0_1.$get(); obj.Z = v; $t0_1.$set(obj); } };
1607 $t50_51 = $t49_50.$get();
1608 $t51_52 = { $get() { return $t1_2.$get().Z; }, $set(v) { const obj = $t1_2.$get(); obj.Z = v; $t1_2.$set(obj); } };
1609 $t52_53 = $t51_52.$get();
1610 $t53_54 = feMul($t50_51, $t52_53);
1611 $t54_55 = feMul($t53_54, $t34_35);
1612 $t55_56 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1613 $t56_57 = { $get() { return $t55_56.$get().X; }, $set(v) { const obj = $t55_56.$get(); obj.X = v; $t55_56.$set(obj); } };
1614 $t57_58 = { $get() { return $t55_56.$get().Y; }, $set(v) { const obj = $t55_56.$get(); obj.Y = v; $t55_56.$set(obj); } };
1615 $t58_59 = { $get() { return $t55_56.$get().Z; }, $set(v) { const obj = $t55_56.$get(); obj.Z = v; $t55_56.$set(obj); } };
1616 $t56_57.$set($rt.builtin.cloneValue($t43_44));
1617 $t57_58.$set($rt.builtin.cloneValue($t48_49));
1618 $t58_59.$set($rt.builtin.cloneValue($t54_55));
1619 $t59_60 = $t55_56.$get();
1620 return $t59_60;
1621 break;
1622 }
1623 case 7: {
1624 $t60_61 = $t0_1.$get();
1625 $t61_62 = pointDouble($t60_61);
1626 return $t61_62;
1627 break;
1628 }
1629 case 8: {
1630 $t62_63 = Infinity.$get();
1631 return $t62_63;
1632 break;
1633 }
1634 }
1635 }
1636 }
1637
1638 export function ScalarBaseMult(k) {
1639 let $t0_1, $t1_2, $t2_3, $t3_4;
1640 $t0_1 = G.$get();
1641 $t1_2 = pointFromAffine($t0_1);
1642 $t2_3 = ScalarMult($t1_2, k);
1643 $t3_4 = Point$toAffine($t2_3);
1644 return $t3_4;
1645 }
1646
1647 export function ScalarMult(p, k) {
1648 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21;
1649 let $block = 0;
1650 while (true) {
1651 switch ($block) {
1652 case 0: {
1653 $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1654 $t0_1.$set($rt.builtin.cloneValue(k));
1655 $t1_2 = Infinity.$get();
1656 $t2_3 = $t1_2;
1657 $t3_4 = p;
1658 $t4_5 = 0;
1659 $block = 1; break;
1660 break;
1661 }
1662 case 1: {
1663 $t5_6 = ($t4_5 < 4);
1664 if ($t5_6) {
1665 $block = 2; break;
1666 }
1667 else {
1668 $block = 3; break;
1669 }
1670 break;
1671 }
1672 case 2: {
1673 $t6_7 = $t0_1.$get().addr($t4_5);
1674 $t7_8 = $t6_7.$get();
1675 $t8_9 = $t2_3;
1676 $t9_10 = $t3_4;
1677 $t10_11 = $t7_8;
1678 $t11_12 = 0;
1679 $block = 4; break;
1680 break;
1681 }
1682 case 3: {
1683 return $t2_3;
1684 break;
1685 }
1686 case 4: {
1687 $t12_13 = ($t11_12 < 64);
1688 if ($t12_13) {
1689 $block = 5; break;
1690 }
1691 else {
1692 $block = 6; break;
1693 }
1694 break;
1695 }
1696 case 5: {
1697 $t13_14 = $rt.builtin.int64and($t10_11, 1);
1698 $t14_15 = ($t13_14 === 1);
1699 if ($t14_15) {
1700 $block = 7; break;
1701 }
1702 else {
1703 $t17_18 = $t8_9;
1704 $block = 8; break;
1705 }
1706 break;
1707 }
1708 case 6: {
1709 $t15_16 = ($t4_5 + 1);
1710 $t2_3 = $t8_9;
1711 $t3_4 = $t9_10;
1712 $t4_5 = $t15_16;
1713 $block = 1; break;
1714 break;
1715 }
1716 case 7: {
1717 $t16_17 = pointAdd($t8_9, $t9_10);
1718 $t17_18 = $t16_17;
1719 $block = 8; break;
1720 break;
1721 }
1722 case 8: {
1723 $t18_19 = pointDouble($t9_10);
1724 $t19_20 = Math.trunc($t10_11 / (2 ** 1));
1725 $t20_21 = ($t11_12 + 1);
1726 $t8_9 = $t17_18;
1727 $t9_10 = $t18_19;
1728 $t10_11 = $t19_20;
1729 $t11_12 = $t20_21;
1730 $block = 4; break;
1731 break;
1732 }
1733 }
1734 }
1735 }
1736
1737 export function LiftX(x) {
1738 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19;
1739 let $block = 0;
1740 while (true) {
1741 switch ($block) {
1742 case 0: {
1743 $t0_1 = feSqr(x);
1744 $t1_2 = feMul($t0_1, x);
1745 $t2_3 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1746 $t3_4 = $t2_3.$get().addr(0);
1747 $t4_5 = $t2_3.$get().addr(1);
1748 $t5_6 = $t2_3.$get().addr(2);
1749 $t6_7 = $t2_3.$get().addr(3);
1750 $t3_4.$set(7);
1751 $t4_5.$set(0);
1752 $t5_6.$set(0);
1753 $t6_7.$set(0);
1754 $t7_8 = $t2_3.$get();
1755 $t8_9 = feAdd($t1_2, $t7_8);
1756 $t9_10 = feSqrt($t8_9);
1757 $t10_11 = $t9_10[0];
1758 $t11_12 = $t9_10[1];
1759 if ($t11_12) {
1760 $block = 2; break;
1761 }
1762 else {
1763 $block = 1; break;
1764 }
1765 break;
1766 }
1767 case 1: {
1768 return [{ X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, false];
1769 break;
1770 }
1771 case 2: {
1772 $t12_13 = feIsEven($t10_11);
1773 if ($t12_13) {
1774 $t14_15 = $t10_11;
1775 $block = 4; break;
1776 }
1777 else {
1778 $block = 3; break;
1779 }
1780 break;
1781 }
1782 case 3: {
1783 $t13_14 = feNeg($t10_11);
1784 $t14_15 = $t13_14;
1785 $block = 4; break;
1786 break;
1787 }
1788 case 4: {
1789 $t15_16 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1790 $t16_17 = { $get() { return $t15_16.$get().X; }, $set(v) { const obj = $t15_16.$get(); obj.X = v; $t15_16.$set(obj); } };
1791 $t17_18 = { $get() { return $t15_16.$get().Y; }, $set(v) { const obj = $t15_16.$get(); obj.Y = v; $t15_16.$set(obj); } };
1792 $t16_17.$set($rt.builtin.cloneValue(x));
1793 $t17_18.$set($rt.builtin.cloneValue($t14_15));
1794 $t18_19 = $t15_16.$get();
1795 return [$t18_19, true];
1796 break;
1797 }
1798 }
1799 }
1800 }
1801
1802 export function feAdd(a, b) {
1803 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37;
1804 $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1805 $t0_1.$set($rt.builtin.cloneValue(a));
1806 $t1_2 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1807 $t1_2.$set($rt.builtin.cloneValue(b));
1808 $t2_3 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1809 $t3_4 = $t0_1.$get().addr(0);
1810 $t4_5 = $t3_4.$get();
1811 $t5_6 = $t1_2.$get().addr(0);
1812 $t6_7 = $t5_6.$get();
1813 $t7_8 = addWithCarry($t4_5, $t6_7, 0);
1814 $t8_9 = $t7_8[0];
1815 $t9_10 = $t2_3.$get().addr(0);
1816 $t9_10.$set($t8_9);
1817 $t10_11 = $t7_8[1];
1818 $t11_12 = $t0_1.$get().addr(1);
1819 $t12_13 = $t11_12.$get();
1820 $t13_14 = $t1_2.$get().addr(1);
1821 $t14_15 = $t13_14.$get();
1822 $t15_16 = addWithCarry($t12_13, $t14_15, $t10_11);
1823 $t16_17 = $t15_16[0];
1824 $t17_18 = $t2_3.$get().addr(1);
1825 $t17_18.$set($t16_17);
1826 $t18_19 = $t15_16[1];
1827 $t19_20 = $t0_1.$get().addr(2);
1828 $t20_21 = $t19_20.$get();
1829 $t21_22 = $t1_2.$get().addr(2);
1830 $t22_23 = $t21_22.$get();
1831 $t23_24 = addWithCarry($t20_21, $t22_23, $t18_19);
1832 $t24_25 = $t23_24[0];
1833 $t25_26 = $t2_3.$get().addr(2);
1834 $t25_26.$set($t24_25);
1835 $t26_27 = $t23_24[1];
1836 $t27_28 = $t0_1.$get().addr(3);
1837 $t28_29 = $t27_28.$get();
1838 $t29_30 = $t1_2.$get().addr(3);
1839 $t30_31 = $t29_30.$get();
1840 $t31_32 = addWithCarry($t28_29, $t30_31, $t26_27);
1841 $t32_33 = $t31_32[0];
1842 $t33_34 = $t2_3.$get().addr(3);
1843 $t33_34.$set($t32_33);
1844 $t34_35 = $t31_32[1];
1845 $t35_36 = $t2_3.$get();
1846 $t36_37 = feReduce($t35_36, $t34_35);
1847 return $t36_37;
1848 }
1849
1850 export function feSub(a, b) {
1851 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69;
1852 let $block = 0;
1853 while (true) {
1854 switch ($block) {
1855 case 0: {
1856 $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1857 $t0_1.$set($rt.builtin.cloneValue(a));
1858 $t1_2 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1859 $t1_2.$set($rt.builtin.cloneValue(b));
1860 $t2_3 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1861 $t3_4 = $t0_1.$get().addr(0);
1862 $t4_5 = $t3_4.$get();
1863 $t5_6 = $t1_2.$get().addr(0);
1864 $t6_7 = $t5_6.$get();
1865 $t7_8 = subWithBorrow($t4_5, $t6_7, 0);
1866 $t8_9 = $t7_8[0];
1867 $t9_10 = $t2_3.$get().addr(0);
1868 $t9_10.$set($t8_9);
1869 $t10_11 = $t7_8[1];
1870 $t11_12 = $t0_1.$get().addr(1);
1871 $t12_13 = $t11_12.$get();
1872 $t13_14 = $t1_2.$get().addr(1);
1873 $t14_15 = $t13_14.$get();
1874 $t15_16 = subWithBorrow($t12_13, $t14_15, $t10_11);
1875 $t16_17 = $t15_16[0];
1876 $t17_18 = $t2_3.$get().addr(1);
1877 $t17_18.$set($t16_17);
1878 $t18_19 = $t15_16[1];
1879 $t19_20 = $t0_1.$get().addr(2);
1880 $t20_21 = $t19_20.$get();
1881 $t21_22 = $t1_2.$get().addr(2);
1882 $t22_23 = $t21_22.$get();
1883 $t23_24 = subWithBorrow($t20_21, $t22_23, $t18_19);
1884 $t24_25 = $t23_24[0];
1885 $t25_26 = $t2_3.$get().addr(2);
1886 $t25_26.$set($t24_25);
1887 $t26_27 = $t23_24[1];
1888 $t27_28 = $t0_1.$get().addr(3);
1889 $t28_29 = $t27_28.$get();
1890 $t29_30 = $t1_2.$get().addr(3);
1891 $t30_31 = $t29_30.$get();
1892 $t31_32 = subWithBorrow($t28_29, $t30_31, $t26_27);
1893 $t32_33 = $t31_32[0];
1894 $t33_34 = $t2_3.$get().addr(3);
1895 $t33_34.$set($t32_33);
1896 $t34_35 = $t31_32[1];
1897 $t35_36 = ($t34_35 !== 0);
1898 if ($t35_36) {
1899 $block = 1; break;
1900 }
1901 else {
1902 $block = 2; break;
1903 }
1904 break;
1905 }
1906 case 1: {
1907 $t36_37 = $t2_3.$get().addr(0);
1908 $t37_38 = $t36_37.$get();
1909 $t38_39 = feP.$get().addr(0);
1910 $t39_40 = $t38_39.$get();
1911 $t40_41 = addWithCarry($t37_38, $t39_40, 0);
1912 $t41_42 = $t40_41[0];
1913 $t42_43 = $t2_3.$get().addr(0);
1914 $t42_43.$set($t41_42);
1915 $t43_44 = $t40_41[1];
1916 $t44_45 = $t2_3.$get().addr(1);
1917 $t45_46 = $t44_45.$get();
1918 $t46_47 = feP.$get().addr(1);
1919 $t47_48 = $t46_47.$get();
1920 $t48_49 = addWithCarry($t45_46, $t47_48, $t43_44);
1921 $t49_50 = $t48_49[0];
1922 $t50_51 = $t2_3.$get().addr(1);
1923 $t50_51.$set($t49_50);
1924 $t51_52 = $t48_49[1];
1925 $t52_53 = $t2_3.$get().addr(2);
1926 $t53_54 = $t52_53.$get();
1927 $t54_55 = feP.$get().addr(2);
1928 $t55_56 = $t54_55.$get();
1929 $t56_57 = addWithCarry($t53_54, $t55_56, $t51_52);
1930 $t57_58 = $t56_57[0];
1931 $t58_59 = $t2_3.$get().addr(2);
1932 $t58_59.$set($t57_58);
1933 $t59_60 = $t56_57[1];
1934 $t60_61 = $t2_3.$get().addr(3);
1935 $t61_62 = $t60_61.$get();
1936 $t62_63 = feP.$get().addr(3);
1937 $t63_64 = $t62_63.$get();
1938 $t64_65 = addWithCarry($t61_62, $t63_64, $t59_60);
1939 $t65_66 = $t64_65[0];
1940 $t66_67 = $t2_3.$get().addr(3);
1941 $t66_67.$set($t65_66);
1942 $t67_68 = $t64_65[1];
1943 $block = 2; break;
1944 break;
1945 }
1946 case 2: {
1947 $t68_69 = $t2_3.$get();
1948 return $t68_69;
1949 break;
1950 }
1951 }
1952 }
1953 }
1954
1955 export function feNeg(a) {
1956 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
1957 let $block = 0;
1958 while (true) {
1959 switch ($block) {
1960 case 0: {
1961 $t0_1 = feZero.$get();
1962 $t1_2 = (a === $t0_1);
1963 if ($t1_2) {
1964 $block = 1; break;
1965 }
1966 else {
1967 $block = 2; break;
1968 }
1969 break;
1970 }
1971 case 1: {
1972 $t2_3 = feZero.$get();
1973 return $t2_3;
1974 break;
1975 }
1976 case 2: {
1977 $t3_4 = feP.$get();
1978 $t4_5 = feSub($t3_4, a);
1979 return $t4_5;
1980 break;
1981 }
1982 }
1983 }
1984 }
1985
1986 export function feMul(a, b) {
1987 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34;
1988 let $block = 0;
1989 while (true) {
1990 switch ($block) {
1991 case 0: {
1992 $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1993 $t0_1.$set($rt.builtin.cloneValue(a));
1994 $t1_2 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1995 $t1_2.$set($rt.builtin.cloneValue(b));
1996 $t2_3 = { $value: $rt.builtin.makeSlice(8, 8, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1997 $t3_4 = 0;
1998 $block = 1; break;
1999 break;
2000 }
2001 case 1: {
2002 $t4_5 = ($t3_4 < 4);
2003 if ($t4_5) {
2004 $block = 2; break;
2005 }
2006 else {
2007 $block = 3; break;
2008 }
2009 break;
2010 }
2011 case 2: {
2012 $t7_8 = 0;
2013 $t8_9 = 0;
2014 $block = 4; break;
2015 break;
2016 }
2017 case 3: {
2018 $t5_6 = $t2_3.$get();
2019 $t6_7 = feReduceFull($t5_6);
2020 return $t6_7;
2021 break;
2022 }
2023 case 4: {
2024 $t9_10 = ($t8_9 < 4);
2025 if ($t9_10) {
2026 $block = 5; break;
2027 }
2028 else {
2029 $block = 6; break;
2030 }
2031 break;
2032 }
2033 case 5: {
2034 $t10_11 = $t0_1.$get().addr($t3_4);
2035 $t11_12 = $t10_11.$get();
2036 $t12_13 = $t1_2.$get().addr($t8_9);
2037 $t13_14 = $t12_13.$get();
2038 $t14_15 = mul64($t11_12, $t13_14);
2039 $t15_16 = $t14_15[0];
2040 $t16_17 = $t14_15[1];
2041 $t17_18 = ($t3_4 + $t8_9);
2042 $t18_19 = $t2_3.$get().addr($t17_18);
2043 $t19_20 = $t18_19.$get();
2044 $t20_21 = addWithCarry($t16_17, $t19_20, 0);
2045 $t21_22 = $t20_21[0];
2046 $t22_23 = $t20_21[1];
2047 $t23_24 = ($t15_16 + $t22_23);
2048 $t24_25 = addWithCarry($t21_22, $t7_8, 0);
2049 $t25_26 = $t24_25[0];
2050 $t26_27 = $t24_25[1];
2051 $t27_28 = ($t23_24 + $t26_27);
2052 $t28_29 = ($t3_4 + $t8_9);
2053 $t29_30 = $t2_3.$get().addr($t28_29);
2054 $t29_30.$set($t25_26);
2055 $t30_31 = ($t8_9 + 1);
2056 $t7_8 = $t27_28;
2057 $t8_9 = $t30_31;
2058 $block = 4; break;
2059 break;
2060 }
2061 case 6: {
2062 $t31_32 = ($t3_4 + 4);
2063 $t32_33 = $t2_3.$get().addr($t31_32);
2064 $t32_33.$set($t7_8);
2065 $t33_34 = ($t3_4 + 1);
2066 $t3_4 = $t33_34;
2067 $block = 1; break;
2068 break;
2069 }
2070 }
2071 }
2072 }
2073
2074 export function feSqr(a) {
2075 let $t0_1;
2076 $t0_1 = feMul(a, a);
2077 return $t0_1;
2078 }
2079
2080 export function feInv(a) {
2081 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
2082 $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2083 $t1_2 = $t0_1.$get().addr(0);
2084 $t2_3 = $t0_1.$get().addr(1);
2085 $t3_4 = $t0_1.$get().addr(2);
2086 $t4_5 = $t0_1.$get().addr(3);
2087 $t1_2.$set(18446744069414583341);
2088 $t2_3.$set(18446744073709551615);
2089 $t3_4.$set(18446744073709551615);
2090 $t4_5.$set(18446744073709551615);
2091 $t5_6 = $t0_1.$get();
2092 $t6_7 = feExp(a, $t5_6);
2093 return $t6_7;
2094 }
2095
2096 export function feExp(base, exp) {
2097 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21;
2098 let $block = 0;
2099 while (true) {
2100 switch ($block) {
2101 case 0: {
2102 $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2103 $t0_1.$set($rt.builtin.cloneValue(exp));
2104 $t1_2 = feOne.$get();
2105 $t2_3 = $t1_2;
2106 $t3_4 = base;
2107 $t4_5 = 0;
2108 $block = 1; break;
2109 break;
2110 }
2111 case 1: {
2112 $t5_6 = ($t4_5 < 4);
2113 if ($t5_6) {
2114 $block = 2; break;
2115 }
2116 else {
2117 $block = 3; break;
2118 }
2119 break;
2120 }
2121 case 2: {
2122 $t6_7 = $t0_1.$get().addr($t4_5);
2123 $t7_8 = $t6_7.$get();
2124 $t8_9 = $t2_3;
2125 $t9_10 = $t3_4;
2126 $t10_11 = $t7_8;
2127 $t11_12 = 0;
2128 $block = 4; break;
2129 break;
2130 }
2131 case 3: {
2132 return $t2_3;
2133 break;
2134 }
2135 case 4: {
2136 $t12_13 = ($t11_12 < 64);
2137 if ($t12_13) {
2138 $block = 5; break;
2139 }
2140 else {
2141 $block = 6; break;
2142 }
2143 break;
2144 }
2145 case 5: {
2146 $t13_14 = $rt.builtin.int64and($t10_11, 1);
2147 $t14_15 = ($t13_14 === 1);
2148 if ($t14_15) {
2149 $block = 7; break;
2150 }
2151 else {
2152 $t17_18 = $t8_9;
2153 $block = 8; break;
2154 }
2155 break;
2156 }
2157 case 6: {
2158 $t15_16 = ($t4_5 + 1);
2159 $t2_3 = $t8_9;
2160 $t3_4 = $t9_10;
2161 $t4_5 = $t15_16;
2162 $block = 1; break;
2163 break;
2164 }
2165 case 7: {
2166 $t16_17 = feMul($t8_9, $t9_10);
2167 $t17_18 = $t16_17;
2168 $block = 8; break;
2169 break;
2170 }
2171 case 8: {
2172 $t18_19 = feSqr($t9_10);
2173 $t19_20 = Math.trunc($t10_11 / (2 ** 1));
2174 $t20_21 = ($t11_12 + 1);
2175 $t8_9 = $t17_18;
2176 $t9_10 = $t18_19;
2177 $t10_11 = $t19_20;
2178 $t11_12 = $t20_21;
2179 $block = 4; break;
2180 break;
2181 }
2182 }
2183 }
2184 }
2185
2186 export function feSqrt(a) {
2187 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
2188 let $block = 0;
2189 while (true) {
2190 switch ($block) {
2191 case 0: {
2192 $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2193 $t1_2 = $t0_1.$get().addr(0);
2194 $t2_3 = $t0_1.$get().addr(1);
2195 $t3_4 = $t0_1.$get().addr(2);
2196 $t4_5 = $t0_1.$get().addr(3);
2197 $t1_2.$set(18446744072635809548);
2198 $t2_3.$set(18446744073709551615);
2199 $t3_4.$set(18446744073709551615);
2200 $t4_5.$set(4611686018427387903);
2201 $t5_6 = $t0_1.$get();
2202 $t6_7 = feExp(a, $t5_6);
2203 $t7_8 = feSqr($t6_7);
2204 $t8_9 = ($t7_8 === a);
2205 if ($t8_9) {
2206 $block = 1; break;
2207 }
2208 else {
2209 $block = 2; break;
2210 }
2211 break;
2212 }
2213 case 1: {
2214 return [$t6_7, true];
2215 break;
2216 }
2217 case 2: {
2218 $t9_10 = feZero.$get();
2219 return [$t9_10, false];
2220 break;
2221 }
2222 }
2223 }
2224 }
2225
2226 export function feFromBytes(b) {
2227 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17;
2228 let $block = 0;
2229 while (true) {
2230 switch ($block) {
2231 case 0: {
2232 $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2233 $t1_2 = $rt.builtin.len(b);
2234 $t2_3 = ($t1_2 < 32);
2235 if ($t2_3) {
2236 $block = 1; break;
2237 }
2238 else {
2239 $block = 2; break;
2240 }
2241 break;
2242 }
2243 case 1: {
2244 $t3_4 = $t0_1.$get();
2245 return $t3_4;
2246 break;
2247 }
2248 case 2: {
2249 $t4_5 = $rt.builtin.sliceSlice(b, 0, 8, undefined);
2250 $t5_6 = beUint64($t4_5);
2251 $t6_7 = $t0_1.$get().addr(3);
2252 $t6_7.$set($t5_6);
2253 $t7_8 = $rt.builtin.sliceSlice(b, 8, 16, undefined);
2254 $t8_9 = beUint64($t7_8);
2255 $t9_10 = $t0_1.$get().addr(2);
2256 $t9_10.$set($t8_9);
2257 $t10_11 = $rt.builtin.sliceSlice(b, 16, 24, undefined);
2258 $t11_12 = beUint64($t10_11);
2259 $t12_13 = $t0_1.$get().addr(1);
2260 $t12_13.$set($t11_12);
2261 $t13_14 = $rt.builtin.sliceSlice(b, 24, 32, undefined);
2262 $t14_15 = beUint64($t13_14);
2263 $t15_16 = $t0_1.$get().addr(0);
2264 $t15_16.$set($t14_15);
2265 $t16_17 = $t0_1.$get();
2266 return $t16_17;
2267 break;
2268 }
2269 }
2270 }
2271 }
2272
2273 export function feToBytes(a) {
2274 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19;
2275 $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2276 $t0_1.$set($rt.builtin.cloneValue(a));
2277 $t1_2 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2278 $t2_3 = $rt.builtin.sliceSlice($t1_2.$get(), 0, 8, undefined);
2279 $t3_4 = $t0_1.$get().addr(3);
2280 $t4_5 = $t3_4.$get();
2281 $t5_6 = putBeUint64($t2_3, $t4_5);
2282 $t6_7 = $rt.builtin.sliceSlice($t1_2.$get(), 8, 16, undefined);
2283 $t7_8 = $t0_1.$get().addr(2);
2284 $t8_9 = $t7_8.$get();
2285 $t9_10 = putBeUint64($t6_7, $t8_9);
2286 $t10_11 = $rt.builtin.sliceSlice($t1_2.$get(), 16, 24, undefined);
2287 $t11_12 = $t0_1.$get().addr(1);
2288 $t12_13 = $t11_12.$get();
2289 $t13_14 = putBeUint64($t10_11, $t12_13);
2290 $t14_15 = $rt.builtin.sliceSlice($t1_2.$get(), 24, 32, undefined);
2291 $t15_16 = $t0_1.$get().addr(0);
2292 $t16_17 = $t15_16.$get();
2293 $t17_18 = putBeUint64($t14_15, $t16_17);
2294 $t18_19 = $t1_2.$get();
2295 return $t18_19;
2296 }
2297
2298 export function feIsZero(a) {
2299 let $t0_1, $t1_2;
2300 $t0_1 = feZero.$get();
2301 $t1_2 = (a === $t0_1);
2302 return $t1_2;
2303 }
2304
2305 export function feIsEven(a) {
2306 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
2307 $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2308 $t0_1.$set($rt.builtin.cloneValue(a));
2309 $t1_2 = $t0_1.$get().addr(0);
2310 $t2_3 = $t1_2.$get();
2311 $t3_4 = $rt.builtin.int64and($t2_3, 1);
2312 $t4_5 = ($t3_4 === 0);
2313 return $t4_5;
2314 }
2315
2316 export function feCmp(a, b) {
2317 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15;
2318 let $block = 0;
2319 while (true) {
2320 switch ($block) {
2321 case 0: {
2322 $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2323 $t0_1.$set($rt.builtin.cloneValue(a));
2324 $t1_2 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2325 $t1_2.$set($rt.builtin.cloneValue(b));
2326 $t2_3 = 3;
2327 $block = 1; break;
2328 break;
2329 }
2330 case 1: {
2331 $t3_4 = ($t2_3 >= 0);
2332 if ($t3_4) {
2333 $block = 2; break;
2334 }
2335 else {
2336 $block = 3; break;
2337 }
2338 break;
2339 }
2340 case 2: {
2341 $t4_5 = $t0_1.$get().addr($t2_3);
2342 $t5_6 = $t4_5.$get();
2343 $t6_7 = $t1_2.$get().addr($t2_3);
2344 $t7_8 = $t6_7.$get();
2345 $t8_9 = ($t5_6 < $t7_8);
2346 if ($t8_9) {
2347 $block = 4; break;
2348 }
2349 else {
2350 $block = 5; break;
2351 }
2352 break;
2353 }
2354 case 3: {
2355 return 0;
2356 break;
2357 }
2358 case 4: {
2359 return -1;
2360 break;
2361 }
2362 case 5: {
2363 $t9_10 = $t0_1.$get().addr($t2_3);
2364 $t10_11 = $t9_10.$get();
2365 $t11_12 = $t1_2.$get().addr($t2_3);
2366 $t12_13 = $t11_12.$get();
2367 $t13_14 = ($t10_11 > $t12_13);
2368 if ($t13_14) {
2369 $block = 6; break;
2370 }
2371 else {
2372 $block = 7; break;
2373 }
2374 break;
2375 }
2376 case 6: {
2377 return 1;
2378 break;
2379 }
2380 case 7: {
2381 $t14_15 = ($t2_3 - 1);
2382 $t2_3 = $t14_15;
2383 $block = 1; break;
2384 break;
2385 }
2386 }
2387 }
2388 }
2389
2390 export function feReduce(r, carry) {
2391 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39;
2392 let $block = 0;
2393 while (true) {
2394 switch ($block) {
2395 case 0: {
2396 $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2397 $t0_1.$set($rt.builtin.cloneValue(r));
2398 $t1_2 = (carry !== 0);
2399 if ($t1_2) {
2400 $block = 1; break;
2401 }
2402 else {
2403 $block = 3; break;
2404 }
2405 break;
2406 }
2407 case 1: {
2408 $t2_3 = $t0_1.$get().addr(0);
2409 $t3_4 = $t2_3.$get();
2410 $t4_5 = feP.$get().addr(0);
2411 $t5_6 = $t4_5.$get();
2412 $t6_7 = subWithBorrow($t3_4, $t5_6, 0);
2413 $t7_8 = $t6_7[0];
2414 $t8_9 = $t0_1.$get().addr(0);
2415 $t8_9.$set($t7_8);
2416 $t9_10 = $t6_7[1];
2417 $t10_11 = $t0_1.$get().addr(1);
2418 $t11_12 = $t10_11.$get();
2419 $t12_13 = feP.$get().addr(1);
2420 $t13_14 = $t12_13.$get();
2421 $t14_15 = subWithBorrow($t11_12, $t13_14, $t9_10);
2422 $t15_16 = $t14_15[0];
2423 $t16_17 = $t0_1.$get().addr(1);
2424 $t16_17.$set($t15_16);
2425 $t17_18 = $t14_15[1];
2426 $t18_19 = $t0_1.$get().addr(2);
2427 $t19_20 = $t18_19.$get();
2428 $t20_21 = feP.$get().addr(2);
2429 $t21_22 = $t20_21.$get();
2430 $t22_23 = subWithBorrow($t19_20, $t21_22, $t17_18);
2431 $t23_24 = $t22_23[0];
2432 $t24_25 = $t0_1.$get().addr(2);
2433 $t24_25.$set($t23_24);
2434 $t25_26 = $t22_23[1];
2435 $t26_27 = $t0_1.$get().addr(3);
2436 $t27_28 = $t26_27.$get();
2437 $t28_29 = feP.$get().addr(3);
2438 $t29_30 = $t28_29.$get();
2439 $t30_31 = subWithBorrow($t27_28, $t29_30, $t25_26);
2440 $t31_32 = $t30_31[0];
2441 $t32_33 = $t0_1.$get().addr(3);
2442 $t32_33.$set($t31_32);
2443 $t33_34 = $t30_31[1];
2444 $block = 2; break;
2445 break;
2446 }
2447 case 2: {
2448 $t34_35 = $t0_1.$get();
2449 return $t34_35;
2450 break;
2451 }
2452 case 3: {
2453 $t35_36 = $t0_1.$get();
2454 $t36_37 = feP.$get();
2455 $t37_38 = feCmp($t35_36, $t36_37);
2456 $t38_39 = ($t37_38 >= 0);
2457 if ($t38_39) {
2458 $block = 1; break;
2459 }
2460 else {
2461 $block = 2; break;
2462 }
2463 break;
2464 }
2465 }
2466 }
2467 }
2468
2469 export function feReduceFull(t) {
2470 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88;
2471 let $block = 0;
2472 while (true) {
2473 switch ($block) {
2474 case 0: {
2475 $t0_1 = { $value: $rt.builtin.makeSlice(8, 8, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2476 $t0_1.$set($rt.builtin.cloneValue(t));
2477 $t1_2 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2478 $t2_3 = 0;
2479 $t3_4 = 0;
2480 $block = 1; break;
2481 break;
2482 }
2483 case 1: {
2484 $t4_5 = ($t3_4 < 4);
2485 if ($t4_5) {
2486 $block = 2; break;
2487 }
2488 else {
2489 $block = 3; break;
2490 }
2491 break;
2492 }
2493 case 2: {
2494 $t5_6 = ($t3_4 + 4);
2495 $t6_7 = $t0_1.$get().addr($t5_6);
2496 $t7_8 = $t6_7.$get();
2497 $t8_9 = mul64($t7_8, 4294968273);
2498 $t9_10 = $t8_9[0];
2499 $t10_11 = $t8_9[1];
2500 $t11_12 = $t0_1.$get().addr($t3_4);
2501 $t12_13 = $t11_12.$get();
2502 $t13_14 = addWithCarry($t10_11, $t12_13, 0);
2503 $t14_15 = $t13_14[0];
2504 $t15_16 = $t13_14[1];
2505 $t16_17 = ($t9_10 + $t15_16);
2506 $t17_18 = addWithCarry($t14_15, $t2_3, 0);
2507 $t18_19 = $t17_18[0];
2508 $t19_20 = $t17_18[1];
2509 $t20_21 = ($t16_17 + $t19_20);
2510 $t21_22 = $t1_2.$get().addr($t3_4);
2511 $t21_22.$set($t18_19);
2512 $t22_23 = ($t3_4 + 1);
2513 $t2_3 = $t20_21;
2514 $t3_4 = $t22_23;
2515 $block = 1; break;
2516 break;
2517 }
2518 case 3: {
2519 $t23_24 = ($t2_3 !== 0);
2520 if ($t23_24) {
2521 $block = 4; break;
2522 }
2523 else {
2524 $block = 5; break;
2525 }
2526 break;
2527 }
2528 case 4: {
2529 $t24_25 = mul64($t2_3, 4294968273);
2530 $t25_26 = $t24_25[0];
2531 $t26_27 = $t24_25[1];
2532 $t27_28 = $t1_2.$get().addr(0);
2533 $t28_29 = $t27_28.$get();
2534 $t29_30 = addWithCarry($t28_29, $t26_27, 0);
2535 $t30_31 = $t29_30[0];
2536 $t31_32 = $t1_2.$get().addr(0);
2537 $t31_32.$set($t30_31);
2538 $t32_33 = $t29_30[1];
2539 $t33_34 = $t1_2.$get().addr(1);
2540 $t34_35 = $t33_34.$get();
2541 $t35_36 = addWithCarry($t34_35, $t25_26, $t32_33);
2542 $t36_37 = $t35_36[0];
2543 $t37_38 = $t1_2.$get().addr(1);
2544 $t37_38.$set($t36_37);
2545 $t38_39 = $t35_36[1];
2546 $t39_40 = $t1_2.$get().addr(2);
2547 $t40_41 = $t39_40.$get();
2548 $t41_42 = addWithCarry($t40_41, 0, $t38_39);
2549 $t42_43 = $t41_42[0];
2550 $t43_44 = $t1_2.$get().addr(2);
2551 $t43_44.$set($t42_43);
2552 $t44_45 = $t41_42[1];
2553 $t45_46 = $t1_2.$get().addr(3);
2554 $t46_47 = $t45_46.$get();
2555 $t47_48 = addWithCarry($t46_47, 0, $t44_45);
2556 $t48_49 = $t47_48[0];
2557 $t49_50 = $t1_2.$get().addr(3);
2558 $t49_50.$set($t48_49);
2559 $t50_51 = $t47_48[1];
2560 $block = 5; break;
2561 break;
2562 }
2563 case 5: {
2564 $t51_52 = $t1_2.$get();
2565 $t52_53 = feP.$get();
2566 $t53_54 = feCmp($t51_52, $t52_53);
2567 $t54_55 = ($t53_54 >= 0);
2568 if ($t54_55) {
2569 $block = 6; break;
2570 }
2571 else {
2572 $block = 7; break;
2573 }
2574 break;
2575 }
2576 case 6: {
2577 $t55_56 = $t1_2.$get().addr(0);
2578 $t56_57 = $t55_56.$get();
2579 $t57_58 = feP.$get().addr(0);
2580 $t58_59 = $t57_58.$get();
2581 $t59_60 = subWithBorrow($t56_57, $t58_59, 0);
2582 $t60_61 = $t59_60[0];
2583 $t61_62 = $t1_2.$get().addr(0);
2584 $t61_62.$set($t60_61);
2585 $t62_63 = $t59_60[1];
2586 $t63_64 = $t1_2.$get().addr(1);
2587 $t64_65 = $t63_64.$get();
2588 $t65_66 = feP.$get().addr(1);
2589 $t66_67 = $t65_66.$get();
2590 $t67_68 = subWithBorrow($t64_65, $t66_67, $t62_63);
2591 $t68_69 = $t67_68[0];
2592 $t69_70 = $t1_2.$get().addr(1);
2593 $t69_70.$set($t68_69);
2594 $t70_71 = $t67_68[1];
2595 $t71_72 = $t1_2.$get().addr(2);
2596 $t72_73 = $t71_72.$get();
2597 $t73_74 = feP.$get().addr(2);
2598 $t74_75 = $t73_74.$get();
2599 $t75_76 = subWithBorrow($t72_73, $t74_75, $t70_71);
2600 $t76_77 = $t75_76[0];
2601 $t77_78 = $t1_2.$get().addr(2);
2602 $t77_78.$set($t76_77);
2603 $t78_79 = $t75_76[1];
2604 $t79_80 = $t1_2.$get().addr(3);
2605 $t80_81 = $t79_80.$get();
2606 $t81_82 = feP.$get().addr(3);
2607 $t82_83 = $t81_82.$get();
2608 $t83_84 = subWithBorrow($t80_81, $t82_83, $t78_79);
2609 $t84_85 = $t83_84[0];
2610 $t85_86 = $t1_2.$get().addr(3);
2611 $t85_86.$set($t84_85);
2612 $t86_87 = $t83_84[1];
2613 $block = 7; break;
2614 break;
2615 }
2616 case 7: {
2617 $t87_88 = $t1_2.$get();
2618 return $t87_88;
2619 break;
2620 }
2621 }
2622 }
2623 }
2624
2625 export function addWithCarry(a, b, carry) {
2626 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
2627 let $block = 0;
2628 while (true) {
2629 switch ($block) {
2630 case 0: {
2631 $t0_1 = (a + b);
2632 $t1_2 = ($t0_1 + carry);
2633 $t2_3 = ($t1_2 < a);
2634 if ($t2_3) {
2635 $block = 1; break;
2636 }
2637 else {
2638 $block = 3; break;
2639 }
2640 break;
2641 }
2642 case 1: {
2643 $t3_4 = 1;
2644 $block = 2; break;
2645 break;
2646 }
2647 case 2: {
2648 return [$t1_2, $t3_4];
2649 break;
2650 }
2651 case 3: {
2652 $t4_5 = ($t1_2 === a);
2653 if ($t4_5) {
2654 $block = 4; break;
2655 }
2656 else {
2657 $t3_4 = 0;
2658 $block = 2; break;
2659 }
2660 break;
2661 }
2662 case 4: {
2663 $t5_6 = $rt.builtin.int64or(b, carry);
2664 $t6_7 = ($t5_6 !== 0);
2665 if ($t6_7) {
2666 $block = 1; break;
2667 }
2668 else {
2669 $t3_4 = 0;
2670 $block = 2; break;
2671 }
2672 break;
2673 }
2674 }
2675 }
2676 }
2677
2678 export function subWithBorrow(a, b, borrow) {
2679 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
2680 let $block = 0;
2681 while (true) {
2682 switch ($block) {
2683 case 0: {
2684 $t0_1 = (a - b);
2685 $t1_2 = ($t0_1 - borrow);
2686 $t2_3 = (b + borrow);
2687 $t3_4 = (a < $t2_3);
2688 if ($t3_4) {
2689 $block = 1; break;
2690 }
2691 else {
2692 $block = 3; break;
2693 }
2694 break;
2695 }
2696 case 1: {
2697 $t4_5 = 1;
2698 $block = 2; break;
2699 break;
2700 }
2701 case 2: {
2702 return [$t1_2, $t4_5];
2703 break;
2704 }
2705 case 3: {
2706 $t5_6 = (borrow !== 0);
2707 if ($t5_6) {
2708 $block = 4; break;
2709 }
2710 else {
2711 $t4_5 = 0;
2712 $block = 2; break;
2713 }
2714 break;
2715 }
2716 case 4: {
2717 $t6_7 = (b === 18446744073709551615);
2718 if ($t6_7) {
2719 $block = 1; break;
2720 }
2721 else {
2722 $t4_5 = 0;
2723 $block = 2; break;
2724 }
2725 break;
2726 }
2727 }
2728 }
2729 }
2730
2731 export function mul64(a, b) {
2732 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22;
2733 let $block = 0;
2734 while (true) {
2735 switch ($block) {
2736 case 0: {
2737 $t0_1 = Math.trunc(a / (2 ** 32));
2738 $t1_2 = $rt.builtin.int64and(a, 4294967295);
2739 $t2_3 = Math.trunc(b / (2 ** 32));
2740 $t3_4 = $rt.builtin.int64and(b, 4294967295);
2741 $t4_5 = ($t1_2 * $t3_4);
2742 $t5_6 = ($t0_1 * $t3_4);
2743 $t6_7 = ($t1_2 * $t2_3);
2744 $t7_8 = ($t0_1 * $t2_3);
2745 $t8_9 = Math.trunc($t4_5 / (2 ** 32));
2746 $t9_10 = ($t5_6 + $t8_9);
2747 $t10_11 = ($t9_10 < $t5_6);
2748 if ($t10_11) {
2749 $block = 1; break;
2750 }
2751 else {
2752 $t12_13 = $t7_8;
2753 $block = 2; break;
2754 }
2755 break;
2756 }
2757 case 1: {
2758 $t11_12 = ($t7_8 + 4294967296);
2759 $t12_13 = $t11_12;
2760 $block = 2; break;
2761 break;
2762 }
2763 case 2: {
2764 $t13_14 = ($t9_10 + $t6_7);
2765 $t14_15 = ($t13_14 < $t9_10);
2766 if ($t14_15) {
2767 $block = 3; break;
2768 }
2769 else {
2770 $t16_17 = $t12_13;
2771 $block = 4; break;
2772 }
2773 break;
2774 }
2775 case 3: {
2776 $t15_16 = ($t12_13 + 4294967296);
2777 $t16_17 = $t15_16;
2778 $block = 4; break;
2779 break;
2780 }
2781 case 4: {
2782 $t17_18 = ($t13_14 * (2 ** 32));
2783 $t18_19 = $rt.builtin.int64and($t4_5, 4294967295);
2784 $t19_20 = $rt.builtin.int64or($t17_18, $t18_19);
2785 $t20_21 = Math.trunc($t13_14 / (2 ** 32));
2786 $t21_22 = ($t16_17 + $t20_21);
2787 return [$t21_22, $t19_20];
2788 break;
2789 }
2790 }
2791 }
2792 }
2793
2794 export function beUint64(b) {
2795 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38;
2796 $t0_1 = b.addr(0);
2797 $t1_2 = $t0_1.$get();
2798 $t2_3 = $t1_2;
2799 $t3_4 = ($t2_3 * (2 ** 56));
2800 $t4_5 = b.addr(1);
2801 $t5_6 = $t4_5.$get();
2802 $t6_7 = $t5_6;
2803 $t7_8 = ($t6_7 * (2 ** 48));
2804 $t8_9 = $rt.builtin.int64or($t3_4, $t7_8);
2805 $t9_10 = b.addr(2);
2806 $t10_11 = $t9_10.$get();
2807 $t11_12 = $t10_11;
2808 $t12_13 = ($t11_12 * (2 ** 40));
2809 $t13_14 = $rt.builtin.int64or($t8_9, $t12_13);
2810 $t14_15 = b.addr(3);
2811 $t15_16 = $t14_15.$get();
2812 $t16_17 = $t15_16;
2813 $t17_18 = ($t16_17 * (2 ** 32));
2814 $t18_19 = $rt.builtin.int64or($t13_14, $t17_18);
2815 $t19_20 = b.addr(4);
2816 $t20_21 = $t19_20.$get();
2817 $t21_22 = $t20_21;
2818 $t22_23 = ($t21_22 * (2 ** 24));
2819 $t23_24 = $rt.builtin.int64or($t18_19, $t22_23);
2820 $t24_25 = b.addr(5);
2821 $t25_26 = $t24_25.$get();
2822 $t26_27 = $t25_26;
2823 $t27_28 = ($t26_27 * (2 ** 16));
2824 $t28_29 = $rt.builtin.int64or($t23_24, $t27_28);
2825 $t29_30 = b.addr(6);
2826 $t30_31 = $t29_30.$get();
2827 $t31_32 = $t30_31;
2828 $t32_33 = ($t31_32 * (2 ** 8));
2829 $t33_34 = $rt.builtin.int64or($t28_29, $t32_33);
2830 $t34_35 = b.addr(7);
2831 $t35_36 = $t34_35.$get();
2832 $t36_37 = $t35_36;
2833 $t37_38 = $rt.builtin.int64or($t33_34, $t36_37);
2834 return $t37_38;
2835 }
2836
2837 export function putBeUint64(b, v) {
2838 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23;
2839 $t0_1 = Math.trunc(v / (2 ** 56));
2840 $t1_2 = ($t0_1 & 0xFF);
2841 $t2_3 = b.addr(0);
2842 $t2_3.$set($t1_2);
2843 $t3_4 = Math.trunc(v / (2 ** 48));
2844 $t4_5 = ($t3_4 & 0xFF);
2845 $t5_6 = b.addr(1);
2846 $t5_6.$set($t4_5);
2847 $t6_7 = Math.trunc(v / (2 ** 40));
2848 $t7_8 = ($t6_7 & 0xFF);
2849 $t8_9 = b.addr(2);
2850 $t8_9.$set($t7_8);
2851 $t9_10 = Math.trunc(v / (2 ** 32));
2852 $t10_11 = ($t9_10 & 0xFF);
2853 $t11_12 = b.addr(3);
2854 $t11_12.$set($t10_11);
2855 $t12_13 = Math.trunc(v / (2 ** 24));
2856 $t13_14 = ($t12_13 & 0xFF);
2857 $t14_15 = b.addr(4);
2858 $t14_15.$set($t13_14);
2859 $t15_16 = Math.trunc(v / (2 ** 16));
2860 $t16_17 = ($t15_16 & 0xFF);
2861 $t17_18 = b.addr(5);
2862 $t17_18.$set($t16_17);
2863 $t18_19 = Math.trunc(v / (2 ** 8));
2864 $t19_20 = ($t18_19 & 0xFF);
2865 $t20_21 = b.addr(6);
2866 $t20_21.$set($t19_20);
2867 $t21_22 = (v & 0xFF);
2868 $t22_23 = b.addr(7);
2869 $t22_23.$set($t21_22);
2870 return;
2871 }
2872
2873 export function Point$isInfinity(p) {
2874 let $t0_1, $t1_2, $t2_3, $t3_4;
2875 $t0_1 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
2876 $t0_1.$set($rt.builtin.cloneValue(p));
2877 $t1_2 = { $get() { return $t0_1.$get().Z; }, $set(v) { const obj = $t0_1.$get(); obj.Z = v; $t0_1.$set(obj); } };
2878 $t2_3 = $t1_2.$get();
2879 $t3_4 = feIsZero($t2_3);
2880 return $t3_4;
2881 }
2882
2883 $rt.types.getType('common/crypto/secp256k1.Point')?.methods?.set('isInfinity', Point$isInfinity);
2884 export function Point$toAffine(p) {
2885 let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25;
2886 let $block = 0;
2887 while (true) {
2888 switch ($block) {
2889 case 0: {
2890 $t0_1 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
2891 $t0_1.$set($rt.builtin.cloneValue(p));
2892 $t1_2 = { $get() { return $t0_1.$get().Z; }, $set(v) { const obj = $t0_1.$get(); obj.Z = v; $t0_1.$set(obj); } };
2893 $t2_3 = $t1_2.$get();
2894 $t3_4 = feIsZero($t2_3);
2895 if ($t3_4) {
2896 $block = 1; break;
2897 }
2898 else {
2899 $block = 2; break;
2900 }
2901 break;
2902 }
2903 case 1: {
2904 $t4_5 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
2905 $t5_6 = { $get() { return $t4_5.$get().X; }, $set(v) { const obj = $t4_5.$get(); obj.X = v; $t4_5.$set(obj); } };
2906 $t6_7 = feZero.$get();
2907 $t7_8 = { $get() { return $t4_5.$get().Y; }, $set(v) { const obj = $t4_5.$get(); obj.Y = v; $t4_5.$set(obj); } };
2908 $t8_9 = feZero.$get();
2909 $t5_6.$set($rt.builtin.cloneValue($t6_7));
2910 $t7_8.$set($rt.builtin.cloneValue($t8_9));
2911 $t9_10 = $t4_5.$get();
2912 return $t9_10;
2913 break;
2914 }
2915 case 2: {
2916 $t10_11 = { $get() { return $t0_1.$get().Z; }, $set(v) { const obj = $t0_1.$get(); obj.Z = v; $t0_1.$set(obj); } };
2917 $t11_12 = $t10_11.$get();
2918 $t12_13 = feInv($t11_12);
2919 $t13_14 = feSqr($t12_13);
2920 $t14_15 = feMul($t13_14, $t12_13);
2921 $t15_16 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
2922 $t16_17 = { $get() { return $t15_16.$get().X; }, $set(v) { const obj = $t15_16.$get(); obj.X = v; $t15_16.$set(obj); } };
2923 $t17_18 = { $get() { return $t0_1.$get().X; }, $set(v) { const obj = $t0_1.$get(); obj.X = v; $t0_1.$set(obj); } };
2924 $t18_19 = $t17_18.$get();
2925 $t19_20 = feMul($t18_19, $t13_14);
2926 $t20_21 = { $get() { return $t15_16.$get().Y; }, $set(v) { const obj = $t15_16.$get(); obj.Y = v; $t15_16.$set(obj); } };
2927 $t21_22 = { $get() { return $t0_1.$get().Y; }, $set(v) { const obj = $t0_1.$get(); obj.Y = v; $t0_1.$set(obj); } };
2928 $t22_23 = $t21_22.$get();
2929 $t23_24 = feMul($t22_23, $t14_15);
2930 $t16_17.$set($rt.builtin.cloneValue($t19_20));
2931 $t20_21.$set($rt.builtin.cloneValue($t23_24));
2932 $t24_25 = $t15_16.$get();
2933 return $t24_25;
2934 break;
2935 }
2936 }
2937 }
2938 }
2939
2940 $rt.types.getType('common/crypto/secp256k1.Point')?.methods?.set('toAffine', Point$toAffine);
2941