secp256k1Modinv64Mul62 static method

void secp256k1Modinv64Mul62(
  1. Secp256k1ModinvSigned r,
  2. Secp256k1ModinvSigned a,
  3. int alen,
  4. BigInt factor,
)

Implementation

static void secp256k1Modinv64Mul62(Secp256k1ModinvSigned r,
    Secp256k1ModinvSigned a, int alen, BigInt factor) {
  BigInt m62 = Secp256k1Const.mask62;
  Secp256k1Int128 c = Secp256k1Int128(), d = Secp256k1Int128();
  int i;
  secp256k1I128FromI64(c, BigInt.zero);
  for (i = 0; i < 4; ++i) {
    if (i < alen) secp256k1I128AccumMul(c, a[i], factor);
    r[i] = secp256k1I128ToU64(c) & m62;
    secp256k1I128Rshift(c, 62);
  }
  if (4 < alen) secp256k1I128AccumMul(c, a[4], factor);
  secp256k1I128FromI64(d, secp256k1I128ToI64(c));
  _cond(secp256k1I128EqVar(c, d) == 1, "secp256k1Modinv64Mul62");
  r[4] = secp256k1I128ToI64(c);
}