secp256k1ScalarSplitLambda static method

void secp256k1ScalarSplitLambda(
  1. Secp256k1Scalar r1,
  2. Secp256k1Scalar r2,
  3. Secp256k1Scalar k
)

Implementation

static void secp256k1ScalarSplitLambda(
    Secp256k1Scalar r1, Secp256k1Scalar r2, Secp256k1Scalar k) {
  Secp256k1Scalar c1 = Secp256k1Scalar(), c2 = Secp256k1Scalar();

  secp256k1ScalarVerify(k);
  _cond(!identical(r1, k), "secp256k1ScalarSplitLambda");
  _cond(!identical(r2, k), "secp256k1ScalarSplitLambda");
  _cond(!identical(r1, r2), "secp256k1ScalarSplitLambda");

  /// these _var calls are constant time since the shift amount is constant
  secp256k1ScalarMulShiftVar(c1, k, Secp256k1Const.g1, 384);
  secp256k1ScalarMulShiftVar(c2, k, Secp256k1Const.g2, 384);
  secp256k1ScalarMul(c1, c1, Secp256k1Const.minusB1);
  secp256k1ScalarMul(c2, c2, Secp256k1Const.minusB2);
  secp256k1ScalarAdd(r2, c1, c2);
  secp256k1ScalarMul(r1, r2, Secp256k1Const.secp256k1ConstLambda);
  secp256k1ScalarNegate(r1, r1);
  secp256k1ScalarAdd(r1, r1, k);

  secp256k1ScalarVerify(r1);
  secp256k1ScalarVerify(r2);
}