secp256k1ScalarCaddBit static method

void secp256k1ScalarCaddBit(
  1. Secp256k1Scalar r,
  2. int bit,
  3. int flag
)

Implementation

static void secp256k1ScalarCaddBit(Secp256k1Scalar r, int bit, int flag) {
  Secp256k1Uint128 t = Secp256k1Uint128();
  int vflag = flag;
  secp256k1ScalarVerify(r);
  _cond(bit < 256, "secp256k1ScalarCaddBit");

  bit += (vflag - 1) & 0x100;
  secp256k1U128FromU64(t, r[0]);
  secp256k1U128AccumU64(t, (((bit >> 6) == 0)).toBigInt << (bit & 0x3F));
  r[0] = secp256k1U128ToU64(t);
  secp256k1U128Rshift(t, 64);
  secp256k1U128AccumU64(t, r[1]);
  secp256k1U128AccumU64(t, (((bit >> 6) == 1)).toBigInt << (bit & 0x3F));
  r[1] = secp256k1U128ToU64(t);
  secp256k1U128Rshift(t, 64);
  secp256k1U128AccumU64(t, r[2]);
  secp256k1U128AccumU64(t, (((bit >> 6) == 2)).toBigInt << (bit & 0x3F));
  r[2] = secp256k1U128ToU64(t);
  secp256k1U128Rshift(t, 64);
  secp256k1U128AccumU64(t, r[3]);
  secp256k1U128AccumU64(t, (((bit >> 6) == 3)).toBigInt << (bit & 0x3F));
  r[3] = secp256k1U128ToU64(t);

  secp256k1ScalarVerify(r);
  _cond(secp256k1U128HiU64(t) == BigInt.zero, "secp256k1ScalarCaddBit");
}