From: Chris Duncan Date: Sat, 19 Sep 2026 06:17:21 +0000 (-0700) Subject: Clear static buffer after use to avoid leaveing the negated copy of the last base... X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=b19957689ae414ef553c3767abaf8ca2345bde50;p=nano25519.git Clear static buffer after use to avoid leaveing the negated copy of the last base table entry selected by the scalar since matching it against the 8 public entries recovers `|e[62]|`, the final radix-16 digit of the secret scalar. --- diff --git a/src/assembly/ge.ts b/src/assembly/ge.ts index dcbd51d..db4ed8b 100644 --- a/src/assembly/ge.ts +++ b/src/assembly/ge.ts @@ -31,7 +31,8 @@ function ge_cmov (t: ge_precomp, u: usize, b: u8): void { fe_memcmov(changetype(t.xy2d), u + 96, b) } -const minust = changetype(new StaticArray(36)) +/** Scratch array equivalent to a `ge_precomp`: 3x 12-limb FieldElements */ +const minust = new StaticArray(36) //@ts-expect-error @inline function ge_cmov8_base (t: ge_precomp, bp: usize, b: i8): void { @@ -50,11 +51,12 @@ function ge_cmov8_base (t: ge_precomp, bp: usize, b: i8): void { ge_cmov(t, bp += 144, equal(babs, 7)) ge_cmov(t, bp += 144, equal(babs, 8)) - fe_memcopy(minust, changetype(t.yminusx)) - fe_memcopy(minust + 48, changetype(t.yplusx)) - fe_memneg(minust + 96, changetype(t.xy2d)) + fe_memcopy(changetype(minust), changetype(t.yminusx)) + fe_memcopy(changetype(minust) + 48, changetype(t.yplusx)) + fe_memneg(changetype(minust) + 96, changetype(t.xy2d)) - ge_cmov(t, minust, bnegative) + ge_cmov(t, changetype(minust), bnegative) + minust.fill(0) } const u: FieldElement = fe()