コード例 #1
0
        public Fp12 UnitaryInverse()
        {
            Fp6 ra = a;
            Fp6 rb = b.Negate();

            return(new Fp12(ra, rb));
        }
コード例 #2
0
        public Fp12 FrobeniusMap(int power)
        {
            Fp6 ra = a.FrobeniusMap(power);
            Fp6 rb = b.FrobeniusMap(power).Mul(FROBENIUS_COEFFS_B[power % 12]);

            return(new Fp12(ra, rb));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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));
        }
コード例 #5
0
        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));
        }
コード例 #6
0
 public Fp12(Fp6 a, Fp6 b)
 {
     this.a = a;
     this.b = b;
 }