From: Chris Duncan Date: Fri, 21 Aug 2026 19:29:01 +0000 (-0700) Subject: Eliminate base buffer pointer computation entirely and use loop counter to avoid... X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=e206846be826fc814c112b7ddfc536b57c897a93;p=nano25519.git Eliminate base buffer pointer computation entirely and use loop counter to avoid multiplication. --- diff --git a/src/assembly/ge.ts b/src/assembly/ge.ts index 3093e06..b44881b 100644 --- a/src/assembly/ge.ts +++ b/src/assembly/ge.ts @@ -45,11 +45,10 @@ const ge_cmov8_precomp: StaticArray = StaticArray.fromArray(base) + offset, 1152) ge_precomp_0(t) @@ -231,8 +230,9 @@ function ge_scalarmult_base (h: ge_p3, a: StaticArray): void { ge_p3_0(h) - for (let i = 1; i < 64; i += 2) { - ge_cmov8_base(t, i / 2, e[i]) + // base pointer = 4 bytes * 12 values * 3 fe * 8 ge = 1152 bytes + for (let i = 1, bp = 0; i < 64; i += 2, bp += 1152) { + ge_cmov8_base(t, bp, e[i]) ge_add_precomp(r, h, t) ge_p1p1_to_p3(h, r) } @@ -246,8 +246,9 @@ function ge_scalarmult_base (h: ge_p3, a: StaticArray): void { ge_p2_dbl(r, s) ge_p1p1_to_p3(h, r) - for (let i = 0; i < 64; i += 2) { - ge_cmov8_base(t, i / 2, e[i]) + // base pointer = 4 bytes * 12 values * 3 fe * 8 ge = 1152 bytes + for (let i = 0, bp = 0; i < 64; i += 2, bp += 1152) { + ge_cmov8_base(t, bp, e[i]) ge_add_precomp(r, h, t) ge_p1p1_to_p3(h, r) }