authorgravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2026-09-27 17:51:33+02:00
committergravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2026-10-01 12:06:49+02:00
log56eba31be2ecf85c11403db7ef76afa60cc4ebe6
treee2744bef87712d5d13df5cd514fa9bbd8713febc
parentb30ccf20d34a94627aaa458c94ca191d5119b473

Shorter


1 files changed, 7 insertions(+), 12 deletions(-)

lib/std/crypto/pcurves/secp256k1.zig+7-12
......@@ -367,23 +367,18 @@ pub const Secp256k1 = struct {
367367
368368 for ([_][32]u8{ split.r1, split.r2 }, es[2 * i ..][0..2]) |r, *e| {
369369 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) {
376375 for (e) |*d| d.* = -d.*;
377376 }
378377 }
379378 }
380379
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);
387382 var q = Secp256k1.identityElement;
388383 while (true) : (pos -= 1) {
389384 for (&pcs, &es) |*pc, *e| {