in src/ecp8.js [479:579]
add: function(Q) {
var b, t0, t1, t2, t3, t4, x3, y3, z3;
b = 3 * ctx.ROM_CURVE.CURVE_B_I;
t0 = new ctx.FP8(this.x);
t0.mul(Q.x); // x.Q.x
t1 = new ctx.FP8(this.y);
t1.mul(Q.y); // y.Q.y
t2 = new ctx.FP8(this.z);
t2.mul(Q.z);
t3 = new ctx.FP8(this.x);
t3.add(this.y);
t3.norm(); //t3=X1+Y1
t4 = new ctx.FP8(Q.x);
t4.add(Q.y);
t4.norm(); //t4=X2+Y2
t3.mul(t4); //t3=(X1+Y1)(X2+Y2)
t4.copy(t0);
t4.add(t1); //t4=X1.X2+Y1.Y2
t3.sub(t4);
t3.norm();
if (ctx.ECP.SEXTIC_TWIST == ctx.ECP.D_TYPE) {
t3.times_i(); //t3=(X1+Y1)(X2+Y2)-(X1.X2+Y1.Y2) = X1.Y2+X2.Y1
}
t4.copy(this.y);
t4.add(this.z);
t4.norm(); //t4=Y1+Z1
x3 = new ctx.FP8(Q.y);
x3.add(Q.z);
x3.norm(); //x3=Y2+Z2
t4.mul(x3); //t4=(Y1+Z1)(Y2+Z2)
x3.copy(t1); //
x3.add(t2); //X3=Y1.Y2+Z1.Z2
t4.sub(x3);
t4.norm();
if (ctx.ECP.SEXTIC_TWIST == ctx.ECP.D_TYPE) {
t4.times_i(); //t4=(Y1+Z1)(Y2+Z2) - (Y1.Y2+Z1.Z2) = Y1.Z2+Y2.Z1
}
x3.copy(this.x);
x3.add(this.z);
x3.norm(); // x3=X1+Z1
y3 = new ctx.FP8(Q.x);
y3.add(Q.z);
y3.norm(); // y3=X2+Z2
x3.mul(y3); // x3=(X1+Z1)(X2+Z2)
y3.copy(t0);
y3.add(t2); // y3=X1.X2+Z1+Z2
y3.rsub(x3);
y3.norm(); // y3=(X1+Z1)(X2+Z2) - (X1.X2+Z1.Z2) = X1.Z2+X2.Z1
if (ctx.ECP.SEXTIC_TWIST == ctx.ECP.D_TYPE) {
t0.times_i();
t1.times_i();
}
x3.copy(t0);
x3.add(t0);
t0.add(x3);
t0.norm();
t2.imul(b);
if (ctx.ECP.SEXTIC_TWIST == ctx.ECP.M_TYPE) {
t2.times_i();
}
z3 = new ctx.FP8(t1);
z3.add(t2);
z3.norm();
t1.sub(t2);
t1.norm();
y3.imul(b);
if (ctx.ECP.SEXTIC_TWIST == ctx.ECP.M_TYPE) {
y3.times_i();
}
x3.copy(y3);
x3.mul(t4);
t2.copy(t3);
t2.mul(t1);
x3.rsub(t2);
y3.mul(t0);
t1.mul(z3);
y3.add(t1);
t0.mul(t3);
z3.mul(t4);
z3.add(t0);
this.x.copy(x3);
this.x.norm();
this.y.copy(y3);
this.y.norm();
this.z.copy(z3);
this.z.norm();
return 0;
},