powByTMinus1Over2 method

  1. @override
VestaFq powByTMinus1Over2()
override

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
}