public Fp2 Squared() { Fp ab = a.Mul(b); Fp ra = a.Add(b).Mul(b.Mul(Fp.NON_RESIDUE).Add(a)) .Sub(ab) .Sub(ab.Mul(Fp.NON_RESIDUE)); // ra = (a + b)(a + NON_RESIDUE * b) - ab - NON_RESIDUE * b Fp rb = ab.Dbl(); return(new Fp2(ra, rb)); }
public Fp2 Mul(Fp2 o) { Fp aa = a.Mul(o.a); Fp bb = b.Mul(o.b); Fp ra = bb.Mul(Fp.NON_RESIDUE).Add(aa); // ra = a1 * a2 + NON_RESIDUE * b1 * b2 Fp rb = a.Add(b).Mul(o.a.Add(o.b)).Sub(aa).Sub(bb); // rb = (a1 + b1)(a2 + b2) - a1 * a2 - b1 * b2 return(new Fp2(ra, rb)); }