From 4ed8aa5c27e60a2c1a56e95dc6839cf4b5b90b77 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Fri, 2 Oct 2026 02:57:51 -0700 Subject: [PATCH] Move remaining p scratch buffers except for tobytes. --- src/assembly/ed25519/ge.ts | 14 ++++++++------ src/assembly/ed25519/p.ts | 16 ++++++---------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/assembly/ed25519/ge.ts b/src/assembly/ed25519/ge.ts index bb3cd19..cfd0df1 100644 --- a/src/assembly/ed25519/ge.ts +++ b/src/assembly/ed25519/ge.ts @@ -264,6 +264,7 @@ const ge_scalarmult_base_tobytes_e: StaticArray = new StaticArray(64) const ge_scalarmult_base_tobytes_r: ge_p1p1 = new ge_p1p1() const ge_scalarmult_base_tobytes_s: ge_p2 = new ge_p2() const ge_scalarmult_base_tobytes_t: ge_precomp = new ge_precomp() +const ge_scalarmult_base_tobytes_fe_scratch: FieldElement = fe() /** * `h = a * B` (with precomputation) * @@ -287,6 +288,7 @@ export function ge_scalarmult_base_tobytes (S: StaticArray, a: StaticArray> 0) & 15 @@ -314,13 +316,13 @@ export function ge_scalarmult_base_tobytes (S: StaticArray, a: StaticArray ge_p3_to_cached(Ai[0], A) - ge_p3_dbl(t, A) + ge_p3_dbl(t, A, fe_scratch) ge_p1p1_to_p3(A2, t) ge_add_cached(t, A2, Ai[0], fe_scratch) @@ -421,7 +423,7 @@ export function ge_double_scalarmult_vartime_to_p3 (r: ge_p3, a: StaticArray } for (; i >= 0; --i) { - ge_p2_dbl(t, p) + ge_p2_dbl(t, p, fe_scratch) if (aslide[i] > 0) { ge_p1p1_to_p3(u, t) diff --git a/src/assembly/ed25519/p.ts b/src/assembly/ed25519/p.ts index 6cb144e..c9d9f6c 100644 --- a/src/assembly/ed25519/p.ts +++ b/src/assembly/ed25519/p.ts @@ -127,37 +127,33 @@ export function ge_p3_tobytes (s: StaticArray, h: ge_p3): void { s[31] ^= fe_isnegative(x, fe_scratch_0) << 7 } -const ge_p2_dbl_t: FieldElement = fe() /** * r = 2 * p */ -export function ge_p2_dbl (r: ge_p1p1, p: ge_p2): void { - const t = ge_p2_dbl_t +export function ge_p2_dbl (r: ge_p1p1, p: ge_p2, fe_scratch: FieldElement): void { fe_sq(r.X, p.X) fe_sq(r.Z, p.Y) fe_sq2(r.T, p.Z) fe_add(r.Y, p.X, p.Y) - fe_sq(t, r.Y) + fe_sq(fe_scratch, r.Y) fe_add(r.Y, r.Z, r.X) fe_sub(r.Z, r.Z, r.X) - fe_sub(r.X, t, r.Y) + fe_sub(r.X, fe_scratch, r.Y) fe_sub(r.T, r.T, r.Z) } -const ge_p3_dbl_t: FieldElement = fe() /** * r = 2 * p */ -export function ge_p3_dbl (r: ge_p1p1, p: ge_p3): void { - const t = ge_p3_dbl_t +export function ge_p3_dbl (r: ge_p1p1, p: ge_p3, fe_scratch: FieldElement): void { fe_sq(r.X, p.X) fe_sq(r.Z, p.Y) fe_sq2(r.T, p.Z) fe_add(r.Y, p.X, p.Y) - fe_sq(t, r.Y) + fe_sq(fe_scratch, r.Y) fe_add(r.Y, r.Z, r.X) fe_sub(r.Z, r.Z, r.X) - fe_sub(r.X, t, r.Y) + fe_sub(r.X, fe_scratch, r.Y) fe_sub(r.T, r.T, r.Z) } -- 2.52.0