From b19957689ae414ef553c3767abaf8ca2345bde50 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Fri, 18 Sep 2026 23:17:21 -0700 Subject: [PATCH] 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. --- src/assembly/ge.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) 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() -- 2.52.0