| ... | ... | @@ -367,23 +367,18 @@ pub const Secp256k1 = struct { |
| 367 | 367 | |
| 368 | 368 | for ([_][32]u8{ split.r1, split.r2 }, es[2 * i ..][0..2]) |r, *e| { |
| 369 | 369 | const x = mem.readInt(u256, &r, .little); |
| 370 | | if (x <= scalar.field_order / 2) { |
| 371 | | e.* = slide(r); |
| 372 | | } else { |
| 373 | | var r_neg: [32]u8 = undefined; |
| 374 | | mem.writeInt(u256, &r_neg, scalar.field_order - x, .little); |
| 375 | | e.* = slide(r_neg); |
| 370 | const negate = x > scalar.field_order / 2; |
| 371 | var r_abs: [32]u8 = undefined; |
| 372 | mem.writeInt(u256, &r_abs, if (negate) scalar.field_order - x else x, .little); |
| 373 | e.* = slide(r_abs); |
| 374 | if (negate) { |
| 376 | 375 | for (e) |*d| d.* = -d.*; |
| 377 | 376 | } |
| 378 | 377 | } |
| 379 | 378 | } |
| 380 | 379 | |
| 381 | | var pos: usize = 2 * 32; |
| 382 | | top: while (pos > 0) : (pos -= 1) { |
| 383 | | for (&es) |*e| { |
| 384 | | if (e[pos] != 0) break :top; |
| 385 | | } |
| 386 | | } |
| 380 | var pos: usize = 0; |
| 381 | for (&es) |*e| pos = @max(pos, mem.findLastNone(i8, e, &.{0}) orelse 0); |
| 387 | 382 | var q = Secp256k1.identityElement; |
| 388 | 383 | while (true) : (pos -= 1) { |
| 389 | 384 | for (&pcs, &es) |*pc, *e| { |