powByTMinus1Over2 method
Computes (self)^((t - 1)/2), used in curve-specific operations.
Implementation
@override
VestaFq powByTMinus1Over2() {
VestaFq sqr(VestaFq x, int i) {
VestaFq result = x;
for (int j = 0; j < i; j++) {
result = result.square();
}
return result;
}
final s10 = square();
final s11 = s10 * this;
final s111 = s11.square() * this;
final s1001 = s111 * s10;
final s1011 = s1001 * s10;
final s1101 = s1011 * s10;
final sa = sqr(this, 129) * this;
final sb = sqr(sa, 7) * s1001;
final sc = sqr(sb, 7) * s1101;
final sd = sqr(sc, 4) * s11;
final se = sqr(sd, 6) * s111;
final sf = sqr(se, 3) * s111;
final sg = sqr(sf, 10) * s1001;
final sh = sqr(sg, 4) * s1001;
final si = sqr(sh, 5) * s1001;
final sj = sqr(si, 5) * s1001;
final sk = sqr(sj, 3) * s1001;
final sl = sqr(sk, 4) * s1011;
final sm = sqr(sl, 4) * s1011;
final sn = sqr(sm, 5) * s11;
final so = sqr(sn, 4) * this;
final sp = sqr(so, 5) * s11;
final sq = sqr(sp, 4) * s111;
final sr = sqr(sq, 5) * s1011;
final ss = sqr(sr, 3) * this;
return sqr(ss, 4); // final result
}