secp256k1GeSetAllGejVar static method
Implementation
static void secp256k1GeSetAllGejVar(
List<Secp256k1Ge> r, List<Secp256k1Gej> a, int len) {
Secp256k1Fe u = Secp256k1Fe();
int i;
int lastI = -1;
for (i = 0; i < len; i++) {
if (a[i].infinity.toBool) {
secp256k1GeSetInfinity(r[i]);
} else {
/// Use destination's x coordinates as scratch space
if (lastI == -1) {
r[i].x = a[i].z.clone();
} else {
secp256k1FeMul(r[i].x, r[lastI].x, a[i].z);
}
lastI = i;
}
}
if (lastI == -1) {
return;
}
secp256k1FeInvVar(u, r[lastI].x);
i = lastI;
while (i > 0) {
i--;
if (!a[i].infinity.toBool) {
secp256k1FeMul(r[lastI].x, r[i].x, u);
secp256k1FeMul(u, u, a[lastI].z);
lastI = i;
}
}
_cond(a[lastI].infinity == 0, "secp256k1GeSetAllGejVar");
r[lastI].x = u;
for (i = 0; i < len; i++) {
if (!a[i].infinity.toBool) {
secp256k1GeSetGejZinv(r[i], a[i], r[i].x);
}
}
}