invert method
Implementation
@override
JubJubFr? invert() {
JubJubFr squareAssignMulti(JubJubFr n, int numTimes) {
for (int i = 0; i < numTimes; i++) {
n = n.square();
}
return n;
}
// Initial computations
JubJubFr t1 = square();
JubJubFr t0 = t1.square();
JubJubFr t3 = t0 * t1;
JubJubFr t6 = t3 * this;
JubJubFr t7 = t6 * t1;
JubJubFr t12 = t7 * t3;
JubJubFr t13 = t12 * t0;
JubJubFr t16 = t12 * t3;
JubJubFr t2 = t13 * t3;
JubJubFr t15 = t16 * t3;
JubJubFr t19 = t2 * t0;
JubJubFr t9 = t15 * t3;
JubJubFr t18 = t9 * t3;
JubJubFr t14 = t18 * t1;
JubJubFr t4 = t18 * t0;
JubJubFr t8 = t18 * t3;
JubJubFr t17 = t14 * t3;
JubJubFr t11 = t8 * t3;
t1 = t17 * t3;
JubJubFr t5 = t11 * t3;
t3 = t5 * t0;
t0 = t5.square();
// Sequence of squarings and multiplications
t0 = squareAssignMulti(t0, 5) * t3;
t0 = squareAssignMulti(t0, 6) * t8;
t0 = squareAssignMulti(t0, 7) * t19;
t0 = squareAssignMulti(t0, 6) * t13;
t0 = squareAssignMulti(t0, 8) * t14;
t0 = squareAssignMulti(t0, 6) * t18;
t0 = squareAssignMulti(t0, 7) * t17;
t0 = squareAssignMulti(t0, 5) * t16;
t0 = squareAssignMulti(t0, 3) * this;
t0 = squareAssignMulti(t0, 11) * t11;
t0 = squareAssignMulti(t0, 8) * t5;
t0 = squareAssignMulti(t0, 5) * t15;
t0 = squareAssignMulti(t0, 8) * this;
t0 = squareAssignMulti(t0, 12) * t13;
t0 = squareAssignMulti(t0, 7) * t9;
t0 = squareAssignMulti(t0, 5) * t15;
t0 = squareAssignMulti(t0, 14) * t14;
t0 = squareAssignMulti(t0, 5) * t13;
t0 = squareAssignMulti(t0, 2) * this;
t0 = squareAssignMulti(t0, 6) * this;
t0 = squareAssignMulti(t0, 9) * t7;
t0 = squareAssignMulti(t0, 6) * t12;
t0 = squareAssignMulti(t0, 8) * t11;
t0 = squareAssignMulti(t0, 3) * this;
t0 = squareAssignMulti(t0, 12) * t9;
t0 = squareAssignMulti(t0, 11) * t8;
t0 = squareAssignMulti(t0, 8) * t7;
t0 = squareAssignMulti(t0, 4) * t6;
t0 = squareAssignMulti(t0, 10) * t5;
t0 = squareAssignMulti(t0, 7) * t3;
t0 = squareAssignMulti(t0, 6) * t4;
t0 = squareAssignMulti(t0, 7) * t3;
t0 = squareAssignMulti(t0, 5) * t2;
t0 = squareAssignMulti(t0, 6) * t2;
t0 = squareAssignMulti(t0, 7) * t1;
if (this == JubJubFr.zero()) return null;
return t0;
}