From: Chris Duncan Date: Fri, 21 Aug 2026 20:25:47 +0000 (-0700) Subject: Reduce down to one scratch object for base point arithmetic. X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=253dd75b62eb37e2baecce9747af8365b6a13ef2;p=nano25519.git Reduce down to one scratch object for base point arithmetic. --- diff --git a/src/assembly/ge.ts b/src/assembly/ge.ts index d48c3ee..ca953a9 100644 --- a/src/assembly/ge.ts +++ b/src/assembly/ge.ts @@ -31,28 +31,26 @@ function ge_cmov (t: ge_precomp, u: ge_precomp, b: u8): void { fe_cmov(t.xy2d, u.xy2d, b) } -const ge_cmov8_minust: ge_precomp = new ge_precomp() -const ge_cmov8_precomp: ge_precomp = new ge_precomp() +const base_precomp: ge_precomp = new ge_precomp() //@ts-expect-error @inline function ge_cmov8_base (t: ge_precomp, offset: i32, b: i8): void { - const minust = ge_cmov8_minust const bnegative: u8 = negative(b) const babs: u8 = b - (((-bnegative) & b) * (i8(1) << 1)) ge_precomp_0(t) for (let i = 0; i < 8; i++) { - const ptr = base + offset + (i * 144) // 4 bytes * 12 values * 3 fields - memory.copy(changetype(ge_cmov8_precomp.yplusx), ptr, 48) - memory.copy(changetype(ge_cmov8_precomp.yminusx), ptr + 48, 48) - memory.copy(changetype(ge_cmov8_precomp.xy2d), ptr + 96, 48) - ge_cmov(t, ge_cmov8_precomp, equal(babs, i8(i + 1))) + const baseptr = base + offset + (i * 144) // 4 bytes * 12 values * 3 fields + memory.copy(changetype(base_precomp.yplusx), baseptr, 48) + memory.copy(changetype(base_precomp.yminusx), baseptr + 48, 48) + memory.copy(changetype(base_precomp.xy2d), baseptr + 96, 48) + ge_cmov(t, base_precomp, equal(babs, i8(i + 1))) } - fe_copy(minust.yplusx, t.yminusx) - fe_copy(minust.yminusx, t.yplusx) - fe_neg(minust.xy2d, t.xy2d) - ge_cmov(t, minust, bnegative) + fe_copy(base_precomp.yplusx, t.yminusx) + fe_copy(base_precomp.yminusx, t.yplusx) + fe_neg(base_precomp.xy2d, t.xy2d) + ge_cmov(t, base_precomp, bnegative) } const u: FieldElement = fe()