]> git.codecow.com Git - libnemo.git/commitdiff
Slight refactor for point addition legibility.
authorChris Duncan <chris@zoso.dev>
Wed, 3 Dec 2025 14:27:49 +0000 (06:27 -0800)
committerChris Duncan <chris@zoso.dev>
Wed, 3 Dec 2025 14:27:49 +0000 (06:27 -0800)
src/lib/crypto/secp256k1.ts

index cf35dc0d37f4af15ddf7c9cff9049e86d97967ce..bce30a99eea6de52a55889e5decf9f43e66d70ee 100644 (file)
@@ -299,30 +299,31 @@ export class Secp256k1 {
                         * Cost: `12M + 0S + 3*a + 3*b3 + 23add`.
                         */
                        // prettier-ignore
-                       add: (other: Point): Point => {
+                       add (other: Point): Point {
+                               const { M, CURVE, Point } = secp256k1
                                const { X: X1, Y: Y1, Z: Z1 } = { X, Y, Z }
                                const { X: X2, Y: Y2, Z: Z2 } = other
                                const a = 0n
-                               const b = this._b
+                               const b = CURVE.b
+                               const b3 = M(b * 3n)
                                let X3 = 0n, Y3 = 0n, Z3 = 0n
-                               const b3 = this.M(b * 3n)
-                               let t0 = this.M(X1 * X2), t1 = this.M(Y1 * Y2), t2 = this.M(Z1 * Z2), t3 = this.M(X1 + Y1) // step 1
-                               let t4 = this.M(X2 + Y2) // step 5
-                               t3 = this.M(t3 * t4); t4 = this.M(t0 + t1); t3 = this.M(t3 - t4); t4 = this.M(X1 + Z1)
-                               let t5 = this.M(X2 + Z2) // step 10
-                               t4 = this.M(t4 * t5); t5 = this.M(t0 + t2); t4 = this.M(t4 - t5); t5 = this.M(Y1 + Z1)
-                               X3 = this.M(Y2 + Z2) // step 15
-                               t5 = this.M(t5 * X3); X3 = this.M(t1 + t2); t5 = this.M(t5 - X3); Z3 = this.M(a * t4)
-                               X3 = this.M(b3 * t2) // step 20
-                               Z3 = this.M(X3 + Z3); X3 = this.M(t1 - Z3); Z3 = this.M(t1 + Z3); Y3 = this.M(X3 * Z3)
-                               t1 = this.M(t0 + t0) // step 25
-                               t1 = this.M(t1 + t0); t2 = this.M(a * t2); t4 = this.M(b3 * t4); t1 = this.M(t1 + t2)
-                               t2 = this.M(t0 - t2) // step 30
-                               t2 = this.M(a * t2); t4 = this.M(t4 + t2); t0 = this.M(t1 * t4); Y3 = this.M(Y3 + t0)
-                               t0 = this.M(t5 * t4) // step 35
-                               X3 = this.M(t3 * X3); X3 = this.M(X3 - t0); t0 = this.M(t3 * t1); Z3 = this.M(t5 * Z3)
-                               Z3 = this.M(Z3 + t0) // step 40
-                               return this.Point(X3, Y3, Z3)
+                               let t0 = M(X1 * X2), t1 = M(Y1 * Y2), t2 = M(Z1 * Z2), t3 = M(X1 + Y1) // step 1
+                               let t4 = M(X2 + Y2) // step 5
+                               t3 = M(t3 * t4); t4 = M(t0 + t1); t3 = M(t3 - t4); t4 = M(X1 + Z1)
+                               let t5 = M(X2 + Z2) // step 10
+                               t4 = M(t4 * t5); t5 = M(t0 + t2); t4 = M(t4 - t5); t5 = M(Y1 + Z1)
+                               X3 = M(Y2 + Z2) // step 15
+                               t5 = M(t5 * X3); X3 = M(t1 + t2); t5 = M(t5 - X3); Z3 = M(a * t4)
+                               X3 = M(b3 * t2) // step 20
+                               Z3 = M(X3 + Z3); X3 = M(t1 - Z3); Z3 = M(t1 + Z3); Y3 = M(X3 * Z3)
+                               t1 = M(t0 + t0) // step 25
+                               t1 = M(t1 + t0); t2 = M(a * t2); t4 = M(b3 * t4); t1 = M(t1 + t2)
+                               t2 = M(t0 - t2) // step 30
+                               t2 = M(a * t2); t4 = M(t4 + t2); t0 = M(t1 * t4); Y3 = M(Y3 + t0)
+                               t0 = M(t5 * t4) // step 35
+                               X3 = M(t3 * X3); X3 = M(X3 - t0); t0 = M(t3 * t1); Z3 = M(t5 * Z3)
+                               Z3 = M(Z3 + t0) // step 40
+                               return Point(X3, Y3, Z3)
                        },
                        subtract (other: Point): Point {
                                return this.add(other.negate())