secp256k1GeSetAllGej static method

void secp256k1GeSetAllGej(
  1. List<Secp256k1Ge> r,
  2. List<Secp256k1Gej> a,
  3. int len
)

Implementation

static void secp256k1GeSetAllGej(
    List<Secp256k1Ge> r, List<Secp256k1Gej> a, int len) {
  Secp256k1Fe u = Secp256k1Fe();
  int i;
  for (i = 0; i < len; i++) {
    _cond(secp256k1GejIsInfinity(a[i]) == 0, "secp256k1GeSetAllGej");
  }
  if (len == 0) {
    return;
  }

  /// Use destination's x coordinates as scratch space
  r[0].x = a[0].z.clone();
  for (i = 1; i < len; i++) {
    secp256k1FeMul(r[i].x, r[i - 1].x, a[i].z);
  }
  secp256k1FeInv(u, r[len - 1].x);

  for (i = len - 1; i > 0; i--) {
    secp256k1FeMul(r[i].x, r[i - 1].x, u);
    secp256k1FeMul(u, u, a[i].z);
  }
  r[0].x = u.clone();

  for (i = 0; i < len; i++) {
    secp256k1GeSetGejZinv(r[i], a[i], r[i].x);
  }
}