secp256k1ECmultOddMultiplesTable static method

void secp256k1ECmultOddMultiplesTable(
  1. int n,
  2. List<Secp256k1Ge> preA,
  3. List<Secp256k1Fe> zr,
  4. Secp256k1Fe z,
  5. Secp256k1Gej a,
)

Implementation

static void secp256k1ECmultOddMultiplesTable(int n, List<Secp256k1Ge> preA,
    List<Secp256k1Fe> zr, Secp256k1Fe z, Secp256k1Gej a) {
  Secp256k1Gej d = Secp256k1Gej(), ai = Secp256k1Gej();
  Secp256k1Ge dGe = Secp256k1Ge();
  int i;

  _cond(a.infinity == 0, "secp256k1ECmultOddMultiplesTable");

  secp256k1GejDoubleVar(d, a, null);

  secp256k1GeSetXy(dGe, d.x, d.y);
  secp256k1GeSetGejZinv(preA[0], a, d.z);
  secp256k1GejSetGe(ai, preA[0]);
  ai.z = a.z.clone();

  zr[0] = d.z.clone();

  for (i = 1; i < n; i++) {
    secp256k1GejAddGeVar(ai, ai, dGe, zr[i]);
    secp256k1GeSetXy(preA[i], ai.x, ai.y);
  }

  secp256k1FeMul(z, ai.z, d.z);
}