twice method
Implementation
ECPointFp twice() {
if (isInfinity()) return this;
if (y!.toBigInteger().sign == 0) return curve.infinity;
final x1 = x!.toBigInteger();
final y1 = y!.toBigInteger();
final z1 = z;
final q = curve.q;
final a = curve.a.toBigInteger();
final w1 = (x1 * x1 * BigInt.from(3) + a * (z1 * z1)) % q;
final w2 = (y1 * BigInt.from(2) * z1) % q;
final w3 = (y1 * y1) % q;
final w4 = (w3 * x1 * z1) % q;
final w5 = (w2 * w2) % q;
final w6 = (w1 * w1 - w4 * BigInt.from(8)) % q;
final x3 = (w2 * w6) % q;
final y3 = (w1 * (w4 * BigInt.from(4) - w6) - w5 * BigInt.from(2) * w3) % q;
final z3 = (w2 * w5) % q;
return ECPointFp(curve, curve.fromBigInteger(x3), curve.fromBigInteger(y3), z3);
}