doublingStep static method
Performs a doubling step on a G2 point and returns the new point with line coefficients.
Implementation
static (G2NativeProjective, (Bls12NativeFp2, Bls12NativeFp2, Bls12NativeFp2))
doublingStep(G2NativeProjective r) {
Bls12NativeFp2 tmp0 = r.x.square();
Bls12NativeFp2 tmp1 = r.y.square();
Bls12NativeFp2 tmp2 = tmp1.square();
Bls12NativeFp2 tmp3 = (tmp1 + r.x).square() - tmp0 - tmp2;
tmp3 = tmp3 + tmp3;
Bls12NativeFp2 tmp4 = tmp0 + tmp0 + tmp0;
Bls12NativeFp2 tmp6 = r.x + tmp4;
Bls12NativeFp2 tmp5 = tmp4.square();
Bls12NativeFp2 zsquared = r.z.square();
r = r.copyWith(x: tmp5 - tmp3 - tmp3);
r = r.copyWith(z: (r.z + r.y).square() - tmp1 - zsquared);
r = r.copyWith(y: (tmp3 - r.x) * tmp4);
tmp2 = tmp2 + tmp2;
tmp2 = tmp2 + tmp2;
tmp2 = tmp2 + tmp2;
r = r.copyWith(y: r.y - tmp2);
tmp3 = tmp4 * zsquared;
tmp3 = tmp3 + tmp3;
tmp3 = -tmp3;
tmp6 = tmp6.square() - tmp0 - tmp5;
tmp1 = tmp1 + tmp1;
tmp1 = tmp1 + tmp1;
tmp6 = tmp6 - tmp1;
tmp0 = r.z * zsquared;
tmp0 = tmp0 + tmp0;
return (r, (tmp0, tmp3, tmp6));
}