secp256k1ScalarAdd static method

int secp256k1ScalarAdd(
  1. Secp256k1Scalar r,
  2. Secp256k1Scalar a,
  3. Secp256k1Scalar b
)

Implementation

static int secp256k1ScalarAdd(
    Secp256k1Scalar r, Secp256k1Scalar a, Secp256k1Scalar b) {
  int overflow;
  Secp256k1Uint128 t = Secp256k1Uint128();
  secp256k1ScalarVerify(a);
  secp256k1ScalarVerify(b);

  secp256k1U128FromU64(t, a[0]);
  secp256k1U128AccumU64(t, b[0]);
  r[0] = secp256k1U128ToU64(t);
  secp256k1U128Rshift(t, 64);
  secp256k1U128AccumU64(t, a[1]);
  secp256k1U128AccumU64(t, b[1]);
  r[1] = secp256k1U128ToU64(t);
  secp256k1U128Rshift(t, 64);
  secp256k1U128AccumU64(t, a[2]);
  secp256k1U128AccumU64(t, b[2]);
  r[2] = secp256k1U128ToU64(t);
  secp256k1U128Rshift(t, 64);
  secp256k1U128AccumU64(t, a[3]);
  secp256k1U128AccumU64(t, b[3]);
  r[3] = secp256k1U128ToU64(t);
  secp256k1U128Rshift(t, 64);
  overflow = secp256k1U128ToU64(t).toInt() + secp256k1ScalarCheckOverflow(r);
  _cond(overflow == 0 || overflow == 1, "secp256k1ScalarAdd");
  secp256k1ScalarReduce(r, overflow);
  secp256k1ScalarVerify(r);
  return overflow.toInt();
}