From: Chris Duncan Date: Wed, 3 Dec 2025 14:27:49 +0000 (-0800) Subject: Slight refactor for point addition legibility. X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=cdbe05d5de90131beb4ca2e52fb9c7f6342a8259;p=libnemo.git Slight refactor for point addition legibility. --- diff --git a/src/lib/crypto/secp256k1.ts b/src/lib/crypto/secp256k1.ts index cf35dc0..bce30a9 100644 --- a/src/lib/crypto/secp256k1.ts +++ b/src/lib/crypto/secp256k1.ts @@ -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())