secp256k1ScalarNegate static method

void secp256k1ScalarNegate(
  1. Secp256k1Scalar r,
  2. Secp256k1Scalar a
)

Implementation

static void secp256k1ScalarNegate(Secp256k1Scalar r, Secp256k1Scalar a) {
  BigInt nonzero =
      (Secp256k1Const.secp256k1n3 * (secp256k1ScalarIsZero(a) == 0).toBigInt);
  Secp256k1Uint128 t = Secp256k1Uint128();
  secp256k1ScalarVerify(a);
  secp256k1U128FromU64(t, ~a[0]);
  secp256k1U128AccumU64(t, Secp256k1Const.secp256k1n0 + BigInt.one);
  r[0] = (secp256k1U128ToU64(t) & nonzero);
  secp256k1U128Rshift(t, 64);
  secp256k1U128AccumU64(t, ~a[1]);
  secp256k1U128AccumU64(t, Secp256k1Const.secp256k1n1);
  r[1] = (secp256k1U128ToU64(t) & nonzero);
  secp256k1U128Rshift(t, 64);
  secp256k1U128AccumU64(t, ~a[2]);
  secp256k1U128AccumU64(t, Secp256k1Const.secp256k1n2);
  r[2] = (secp256k1U128ToU64(t) & nonzero);
  secp256k1U128Rshift(t, 64);
  secp256k1U128AccumU64(t, ~a[3]);
  secp256k1U128AccumU64(t, Secp256k1Const.secp256k1n3);
  r[3] = (secp256k1U128ToU64(t) & nonzero);
  secp256k1ScalarVerify(r);
}