| ... | ... | @@ -341,7 +341,7 @@ pub const Fe = struct { |
| 341 | 341 | } |
| 342 | 342 | |
| 343 | 343 | /// Square a field element `n` times |
| 344 | | inline fn sqn(a: Fe, comptime n: comptime_int) Fe { |
| 344 | fn sqn(a: Fe, n: usize) Fe { |
| 345 | 345 | var i: usize = 0; |
| 346 | 346 | var fe = a; |
| 347 | 347 | while (i < n) : (i += 1) { |
| ... | ... | @@ -390,13 +390,12 @@ pub const Fe = struct { |
| 390 | 390 | const _11 = a.mul(a.sq()); |
| 391 | 391 | const _1111 = _11.mul(_11.sq().sq()); |
| 392 | 392 | const _11111111 = _1111.mul(_1111.sq().sq().sq().sq()); |
| 393 | | var t = _11111111.sqn(2).mul(_11); |
| 394 | | const u = t; |
| 395 | | t = t.sqn(10).mul(u).sqn(10).mul(u); |
| 396 | | t = t.sqn(30).mul(t); |
| 397 | | t = t.sqn(60).mul(t); |
| 398 | | t = t.sqn(120).mul(t).sqn(10).mul(u).sqn(3).mul(_11).sq(); |
| 399 | | return @bitCast(bool, @truncate(u1, ~(t.toBytes()[1] & 1))); |
| 393 | const u = _11111111.sqn(2).mul(_11); |
| 394 | const t = u.sqn(10).mul(u).sqn(10).mul(u); |
| 395 | const t2 = t.sqn(30).mul(t); |
| 396 | const t3 = t2.sqn(60).mul(t2); |
| 397 | const t4 = t3.sqn(120).mul(t3).sqn(10).mul(u).sqn(3).mul(_11).sq(); |
| 398 | return @bitCast(bool, @truncate(u1, ~(t4.toBytes()[1] & 1))); |
| 400 | 399 | } |
| 401 | 400 | |
| 402 | 401 | fn uncheckedSqrt(x2: Fe) Fe { |