add method
Implementation
ECPointFp add(ECPointFp b) {
if (isInfinity()) return b;
if (b.isInfinity()) return this;
final x1 = x!.toBigInteger();
final y1 = y!.toBigInteger();
final z1 = z;
final x2 = b.x!.toBigInteger();
final y2 = b.y!.toBigInteger();
final z2 = b.z;
final q = curve.q;
final w1 = (x1 * z2) % q;
final w2 = (x2 * z1) % q;
final w3 = (w1 - w2) % q;
final w4 = (y1 * z2) % q;
final w5 = (y2 * z1) % q;
final w6 = (w4 - w5) % q;
if (w3 == BigInt.zero) {
if (w6 == BigInt.zero) {
return twice();
}
return curve.infinity;
}
final w7 = (w1 + w2) % q;
final w8 = (z1 * z2) % q;
final w9 = (w3 * w3) % q;
final w10 = (w3 * w9) % q;
final w11 = (w8 * (w6 * w6) % q - w7 * w9) % q;
final x3 = (w3 * w11) % q;
final y3 = (w6 * (w9 * w1 % q - w11) - w4 * w10) % q;
final z3 = (w10 * w8) % q;
return ECPointFp(curve, curve.fromBigInteger(x3), curve.fromBigInteger(y3), z3);
}