Example #1
0
        public Fp2 FrobeniusMap(int power)
        {
            Fp ra = a;
            Fp rb = FROBENIUS_COEFFS_B[power % 2].Mul(b);

            return(new Fp2(ra, rb));
        }
Example #2
0
        public static Fp2 Create(byte[] aa, byte[] bb)
        {
            Fp a = Fp.Create(aa);
            Fp b = Fp.Create(bb);

            return(new Fp2(a, b));
        }
Example #3
0
        public static Fp2 Create(BigInteger aa, BigInteger bb)
        {
            Fp a = Fp.Create(aa);
            Fp b = Fp.Create(bb);

            return(new Fp2(a, b));
        }
Example #4
0
        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));
        }
Example #5
0
        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));
        }
Example #6
0
        public Fp2 Inverse()
        {
            Fp t0 = a.Squared();
            Fp t1 = b.Squared();
            Fp t2 = t0.Sub(Fp.NON_RESIDUE.Mul(t1));
            Fp t3 = t2.Inverse();

            Fp ra = a.Mul(t3);          // ra = a * t3
            Fp rb = b.Mul(t3).Negate(); // rb = -(b * t3)

            return(new Fp2(ra, rb));
        }
Example #7
0
 public Fp2(Fp a, Fp b)
 {
     this.a = a;
     this.b = b;
 }