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));
}