From cb88148ba0a6abb9882ce1b0d53c1aee0e680f55 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Sun, 27 Sep 2026 21:24:39 -0700 Subject: [PATCH] Inline another single-use utility function. --- src/assembly/ed25519/ge.ts | 10 +++++----- src/assembly/ed25519/utils.ts | 8 -------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/assembly/ed25519/ge.ts b/src/assembly/ed25519/ge.ts index dbc93fe..2c9b06e 100644 --- a/src/assembly/ed25519/ge.ts +++ b/src/assembly/ed25519/ge.ts @@ -20,7 +20,6 @@ import { base } from './base' import { base2 } from './base2' import { FieldElement, fe, fe_1, fe_add, fe_cmov, fe_frombytes, fe_isnegative, fe_iszero, fe_memcmov, fe_memcopy, fe_memneg, fe_mul, fe_neg, fe_pow22523, fe_sq, fe_sub } from './fe' import { ge_add_cached, ge_add_precomp, ge_cached, ge_p1p1, ge_p1p1_0, ge_p1p1_to_p2, ge_p1p1_to_p3, ge_p2, ge_p2_0, ge_p2_dbl, ge_p2_to_p3, ge_p3, ge_p3_0, ge_p3_dbl, ge_p3_to_cached, ge_p3_tobytes, ge_precomp, ge_precomp_0, ge_sub_cached, ge_sub_precomp } from './p' -import { equal } from './utils' /** * √-1 @@ -48,10 +47,11 @@ function ge_cmov8_base (t: ge_precomp, bp: usize, b: i8): void { ge_precomp_0(t) // base pointer offset += 144n = (4 bytes * 12 values * 3 fields) * n - for (let i: i8 = 1; i < 9; i++, bp += 144) { - fe_memcmov(changetype(t.yplusx), bp, equal(babs, i)) - fe_memcmov(changetype(t.yminusx), bp + 48, equal(babs, i)) - fe_memcmov(changetype(t.xy2d), bp + 96, equal(babs, i)) + for (let i: u8 = 1; i < 9; i++, bp += 144) { + const iEqualsBabs = (u32(babs ^ i) - 1) >> 31 /* 1: yes; 0: no */ + fe_memcmov(changetype(t.yplusx), bp, iEqualsBabs) + fe_memcmov(changetype(t.yminusx), bp + 48, iEqualsBabs) + fe_memcmov(changetype(t.xy2d), bp + 96, iEqualsBabs) } fe_memcopy(changetype(minust), changetype(t.yminusx)) diff --git a/src/assembly/ed25519/utils.ts b/src/assembly/ed25519/utils.ts index 29c06eb..ab2d874 100644 --- a/src/assembly/ed25519/utils.ts +++ b/src/assembly/ed25519/utils.ts @@ -16,14 +16,6 @@ export function clamp (k: StaticArray): void { k[31] |= 64 } -//@ts-expect-error -@inline -export function equal (b: i8, c: i8): u8 { - const x: u8 = u8(b) ^ u8(c) /* 0: yes; 1..255: no */ - const y: u32 = u32(x) /* 0: yes; 1..255: no */ - return u8((y - 1) >> 31) /* 1: yes; 0: no */ -} - /** * Constant-time byte comparison. * @param {StaticArray} f -- 2.52.0