secp256k1FeHalf static method

void secp256k1FeHalf(
  1. Secp256k1Fe r
)

Implementation

static void secp256k1FeHalf(Secp256k1Fe r) {
  BigInt t0 = r[0], t1 = r[1], t2 = r[2], t3 = r[3], t4 = r[4];
  BigInt one = BigInt.one;
  BigInt mask = ((-(t0 & one)).toUnsigned64 >> 12).toUnsigned64;

  t0 = (t0 + (Secp256k1Const.mask47 & mask)).toUnsigned64;
  t1 = (t1 + mask).toUnsigned64;
  t2 = (t2 + mask).toUnsigned64;
  t3 = (t3 + mask).toUnsigned64;
  t4 = (t4 + (mask >> 4)).toUnsigned64;

  _cond((t0 & one) == BigInt.zero, "secp256k1FeHalf");

  r[0] = (t0 >> 1).toUnsigned64 + ((t1 & one) << 51);
  r[1] = (t1 >> 1).toUnsigned64 + ((t2 & one) << 51);
  r[2] = (t2 >> 1).toUnsigned64 + ((t3 & one) << 51);
  r[3] = (t3 >> 1).toUnsigned64 + ((t4 & one) << 51);
  r[4] = (t4 >> 1);
}