isoMap<F extends PastaFieldElement<F>> static method

(F, F, F) isoMap<F extends PastaFieldElement<F>>({
  1. required (F, F, F) p,
  2. required List<F> iso,
})

Implementation

static (F, F, F) isoMap<F extends PastaFieldElement<F>>({
  required (F, F, F) p,
  required List<F> iso,
}) {
  final x = p.$1;
  final z = p.$3;
  final y = p.$2;
  final z2 = z.square();
  final z3 = z2 * z;
  final z4 = z2.square();
  final z6 = z3.square();

  final numX =
      ((iso[0] * x + iso[1] * z2) * x + iso[2] * z4) * x + iso[3] * z6;
  final divX = (z2 * x + iso[4] * z4) * x + iso[5] * z6;

  final numY =
      (((iso[6] * x + iso[7] * z2) * x + iso[8] * z4) * x + iso[9] * z6) * y;
  final divY =
      (((x + iso[10] * z2) * x + iso[11] * z4) * x + iso[12] * z6) * z3;

  final zo = divX * divY;
  final xo = numX * divY * zo;
  final yo = numY * divX * zo.square();
  return (xo, yo, zo);
}