cyclotomicSquare static method

Bls12NativeFp12 cyclotomicSquare(
  1. Bls12NativeFp12 f
)

Implementation

static Bls12NativeFp12 cyclotomicSquare(Bls12NativeFp12 f) {
  Bls12NativeFp2 z0 = f.c0.c0;
  Bls12NativeFp2 z4 = f.c0.c1;
  Bls12NativeFp2 z3 = f.c0.c2;
  Bls12NativeFp2 z2 = f.c1.c0;
  Bls12NativeFp2 z1 = f.c1.c1;
  Bls12NativeFp2 z5 = f.c1.c2;

  var t = fp4Square(z0, z1);
  var t0 = t.$1;
  var t1 = t.$2;
  // For A
  z0 = t0 - z0;
  z0 = z0 + z0 + t0;

  z1 = t1 + z1;
  z1 = z1 + z1 + t1;

  t = fp4Square(z2, z3);
  t0 = t.$1;
  t1 = t.$2;
  t = fp4Square(z4, z5);
  var t2 = t.$1;
  var t3 = t.$2;
  // For C
  z4 = t0 - z4;
  z4 = z4 + z4 + t0;

  z5 = t1 + z5;
  z5 = z5 + z5 + t1;

  // For B
  t0 = t3.mulByNonresidue();
  z2 = t0 + z2;
  z2 = z2 + z2 + t0;

  z3 = t2 - z3;
  z3 = z3 + z3 + t2;

  return Bls12NativeFp12(
    c0: Bls12NativeFp6(c0: z0, c1: z4, c2: z3),
    c1: Bls12NativeFp6(c0: z2, c1: z1, c2: z5),
  );
}