]> git.codecow.com Git - nano25519.git/commitdiff
Finish eliminating temp buffer.
authorChris Duncan <chris@codecow.com>
Tue, 29 Sep 2026 18:16:20 +0000 (11:16 -0700)
committerChris Duncan <chris@codecow.com>
Tue, 29 Sep 2026 18:16:20 +0000 (11:16 -0700)
src/assembly/ed25519/p.ts

index f6ec9b2a3052778de15c01639c9cd3c1dbd91a48..f56027510effbfc478309d17c08a8c22d20e396e 100644 (file)
@@ -310,7 +310,6 @@ export function ge_add_cached (r: ge_p1p1, p: ge_p3, q: ge_cached): void {
        v128.store_lane<u64>(rT_ptr, rT2, 0, 32)
 }
 
-const ge_add_precomp_t0: FieldElement = fe()
 /**
  * r = p + q
  */
@@ -328,7 +327,6 @@ export function ge_add_precomp (r: ge_p1p1, p: ge_p3, q: ge_precomp): void {
 
        const pX0 = v128.load(pX_ptr), pX1 = v128.load(pX_ptr, 16), pX2 = v128.load(pX_ptr, 32)
        const pY0 = v128.load(pY_ptr), pY1 = v128.load(pY_ptr, 16), pY2 = v128.load(pY_ptr, 32)
-       const pZ0 = v128.load(pZ_ptr), pZ1 = v128.load(pZ_ptr, 16), pZ2 = v128.load(pZ_ptr, 32)
 
        // fe_add(r.X, p.Y, p.X)
        let rX0 = v128.add<i32>(pY0, pX0)
@@ -362,9 +360,9 @@ export function ge_add_precomp (r: ge_p1p1, p: ge_p3, q: ge_precomp): void {
        let rT0 = v128.load(rT_ptr), rT1 = v128.load(rT_ptr, 16), rT2 = v128.load(rT_ptr, 32)
 
        // fe_dbl(t, p.Z)
-       const t0 = v128.shl<i32>(pZ0, 1)
-       const t1 = v128.shl<i32>(pZ1, 1)
-       const t2 = v128.shl<i32>(pZ2, 1)
+       const pZ0 = v128.shl<i32>(v128.load(pZ_ptr), 1)
+       const pZ1 = v128.shl<i32>(v128.load(pZ_ptr, 16), 1)
+       const pZ2 = v128.shl<i32>(v128.load(pZ_ptr, 32), 1)
 
        // fe_sub(r.X, r.Z, r.Y)
        rX0 = v128.sub<i32>(rZ0, rY0)
@@ -377,14 +375,14 @@ export function ge_add_precomp (r: ge_p1p1, p: ge_p3, q: ge_precomp): void {
        rY2 = v128.add<i32>(rZ2, rY2)
 
        // fe_add(r.Z, t, r.T)
-       rZ0 = v128.add<i32>(t0, rT0)
-       rZ1 = v128.add<i32>(t1, rT1)
-       rZ2 = v128.add<i32>(t2, rT2)
+       rZ0 = v128.add<i32>(pZ0, rT0)
+       rZ1 = v128.add<i32>(pZ1, rT1)
+       rZ2 = v128.add<i32>(pZ2, rT2)
 
        // fe_sub(r.T, t, r.T)
-       rT0 = v128.sub<i32>(t0, rT0)
-       rT1 = v128.sub<i32>(t1, rT1)
-       rT2 = v128.sub<i32>(t2, rT2)
+       rT0 = v128.sub<i32>(pZ0, rT0)
+       rT1 = v128.sub<i32>(pZ1, rT1)
+       rT2 = v128.sub<i32>(pZ2, rT2)
 
        // store r.X
        v128.store(rX_ptr, rX0)