Function add [src]

Add secp256k1 points.

Prototype

pub fn add(p: Secp256k1, q: Secp256k1) Secp256k1

Parameters

p: Secp256k1q: Secp256k1

Source

pub fn add(p: Secp256k1, q: Secp256k1) Secp256k1 { var t0 = p.x.mul(q.x); var t1 = p.y.mul(q.y); var t2 = p.z.mul(q.z); var t3 = p.x.add(p.y); var t4 = q.x.add(q.y); t3 = t3.mul(t4); t4 = t0.add(t1); t3 = t3.sub(t4); t4 = p.y.add(p.z); var X3 = q.y.add(q.z); t4 = t4.mul(X3); X3 = t1.add(t2); t4 = t4.sub(X3); X3 = p.x.add(p.z); var Y3 = q.x.add(q.z); X3 = X3.mul(Y3); Y3 = t0.add(t2); Y3 = X3.sub(Y3); X3 = t0.dbl(); t0 = X3.add(t0); // b3 = (2^2)^2 + 2^2 + 1 const t2_4 = t2.dbl().dbl(); t2 = t2_4.dbl().dbl().add(t2_4).add(t2); var Z3 = t1.add(t2); t1 = t1.sub(t2); const Y3_4 = Y3.dbl().dbl(); Y3 = Y3_4.dbl().dbl().add(Y3_4).add(Y3); X3 = t4.mul(Y3); t2 = t3.mul(t1); X3 = t2.sub(X3); Y3 = Y3.mul(t0); t1 = t1.mul(Z3); Y3 = t1.add(Y3); t0 = t0.mul(t3); Z3 = Z3.mul(t4); Z3 = Z3.add(t0); return .{ .x = X3, .y = Y3, .z = Z3, }; }