public Fp12 Squared() { Fp6 ab = a.Mul(b); Fp6 ra = a.Add(b).Mul(a.Add(b.MulByNonResidue())).Sub(ab).Sub(ab.MulByNonResidue()); Fp6 rb = ab.Add(ab); return(new Fp12(ra, rb)); }
public Fp12 Inverse() { Fp6 t0 = a.Squared(); Fp6 t1 = b.Squared(); Fp6 t2 = t0.Sub(t1.MulByNonResidue()); Fp6 t3 = t2.Inverse(); Fp6 ra = a.Mul(t3); Fp6 rb = b.Mul(t3).Negate(); return(new Fp12(ra, rb)); }
public Fp12 Mul(Fp12 o) { Fp6 a2 = o.a, b2 = o.b; Fp6 a1 = a, b1 = b; Fp6 a1a2 = a1.Mul(a2); Fp6 b1b2 = b1.Mul(b2); Fp6 ra = a1a2.Add(b1b2.MulByNonResidue()); Fp6 rb = a1.Add(b1).Mul(a2.Add(b2)).Sub(a1a2).Sub(b1b2); return(new Fp12(ra, rb)); }