toUncompressed method

List<int> toUncompressed()

Implementation

List<int> toUncompressed() {
  // Allocate 192 bytes
  final res = List<int>.filled(192, 0);

  // conditional_select(&self.x, &Fp2::zero(), self.infinity)
  final Bls12Fp2 xc = Bls12Fp2.conditionalSelect(
    x,
    Bls12Fp2.zero(),
    infinity,
  );

  final Bls12Fp2 yc = Bls12Fp2.conditionalSelect(
    y,
    Bls12Fp2.zero(),
    infinity,
  );

  // x = c1 || c0
  final xc1 = xc.c1.toBytes(); // 48 bytes
  final xc0 = xc.c0.toBytes(); // 48 bytes

  // y = c1 || c0
  final yc1 = yc.c1.toBytes(); // 48 bytes
  final yc0 = yc.c0.toBytes(); // 48 bytes

  for (var i = 0; i < 48; i++) {
    res[i] = xc1[i];
    res[i + 48] = xc0[i];
    res[i + 96] = yc1[i];
    res[i + 144] = yc0[i];
  }

  // Is this point at infinity? If so, set the second-most significant bit.
  res[0] |= IntUtils.ctSelectInt(0, 1 << 6, infinity);

  return res;
}