secp256k1ScalarReduce static method

int secp256k1ScalarReduce(
  1. Secp256k1Scalar r,
  2. int overflow
)

Implementation

static int secp256k1ScalarReduce(Secp256k1Scalar r, int overflow) {
  Secp256k1Uint128 t = Secp256k1Uint128();
  _cond(overflow <= 1, "secp256k1ScalarReduce");

  secp256k1U128FromU64(t, r[0]);
  secp256k1U128AccumU64(t, overflow.toBigInt * Secp256k1Const.secp256k1NC0);
  r[0] = secp256k1U128ToU64(t);
  secp256k1U128Rshift(t, 64);
  secp256k1U128AccumU64(t, r[1]);
  secp256k1U128AccumU64(t, overflow.toBigInt * Secp256k1Const.secp256k1NC1);
  r[1] = secp256k1U128ToU64(t);
  secp256k1U128Rshift(t, 64);
  secp256k1U128AccumU64(t, r[2]);
  secp256k1U128AccumU64(t, overflow.toBigInt * Secp256k1Const.secp256k1NC2);
  r[2] = secp256k1U128ToU64(t);
  secp256k1U128Rshift(t, 64);
  secp256k1U128AccumU64(t, r[3]);
  r[3] = secp256k1U128ToU64(t);

  secp256k1ScalarVerify(r);
  return overflow;
}