Class Fp12Element


  • public final class Fp12Element
    extends java.lang.Object
    Immutable element of Fp^12 = Fp^6[w] / (w^2 - v), the outer level of the BLS12-381 pairing field tower.

    An element is represented as c0 + c1*w where each c_i is an Fp^6 element. The relation w^2 = v (the polynomial generator of Fp^6) gives a clean Karatsuba-style multiplication.

    • Method Detail

      • isZero

        public boolean isZero()
      • mul

        public Fp12Element mul​(Fp12Element other)
        Karatsuba multiplication using w^2 = v:
           (a0 + a1*w)(b0 + b1*w) = (a0*b0 + a1*b1*v) + ((a0+a1)(b0+b1) - a0*b0 - a1*b1) * w
         
      • square

        public Fp12Element square()
        Squaring via complex-style: (a0 + a1*w)^2 = (a0+a1)(a0+a1*v) - a0*a1 - a0*a1*v + 2*a0*a1*w. Three Fp^6 multiplications versus four for the Karatsuba product.
      • frobeniusSquared

        public Fp12Element frobeniusSquared()
        Frobenius²: raise to the p^2 power. Combines Fp6Element.frobeniusSquared() on each Fp&sup6; component with a multiplication by the precomputed Fp² coefficient for the w basis on the c1 component.
      • frobenius

        public Fp12Element frobenius()
        Frobenius: raise to the p power. Combines Fp6Element.frobenius() on each Fp&sup6; component with a multiplication by the precomputed Fp² coefficient for the w basis on the c1 component.
      • conjugate

        public Fp12Element conjugate()
        Conjugate: (c0 + c1*w) → (c0 - c1*w). For BLS12-381 this equals the Fp^12 Frobenius applied 6 times (i.e. raising to the p^6 power), since the cyclotomic structure makes p^6-Frobenius act as conjugation.
      • inverse

        public Fp12Element inverse()
        Modular inverse:
           (c0 + c1*w)^-1 = (c0 - c1*w) / (c0^2 - c1^2 * v)
         
      • modPow

        public Fp12Element modPow​(java.math.BigInteger exponent)
        Modular exponentiation by an integer exponent. Uses right-to-left square-and-multiply on the bit representation of exponent; a negative exponent is handled by inverting and recursing on the absolute value.
      • equals

        public boolean equals​(java.lang.Object other)
        Overrides:
        equals in class java.lang.Object
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object