Class Fp12Element
java.lang.Object
org.bouncycastle.crypto.bls.Fp12Element
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.
-
Field Summary
Fields -
Method Summary
Modifier and TypeMethodDescriptionadd(Fp12Element other) c0()c1()Conjugate: (c0 + c1*w) → (c0 - c1*w).booleanFrobenius: raise to theppower.Frobenius²: raise to thep^2power.static Fp12ElementfromFp6(Fp6Element c0) inthashCode()inverse()Modular inverse:booleanisZero()modPow(BigInteger exponent) Modular exponentiation by an integer exponent.mul(Fp12Element other) Karatsuba multiplication usingw^2 = v:neg()static Fp12Elementof(Fp6Element c0, Fp6Element c1) square()Squaring via complex-style: (a0 + a1*w)^2 = (a0+a1)(a0+a1*v) - a0*a1 - a0*a1*v + 2*a0*a1*w.sub(Fp12Element other) toString()
-
Field Details
-
ZERO
-
ONE
-
-
Method Details
-
of
-
fromFp6
-
c0
-
c1
-
isZero
public boolean isZero() -
add
-
sub
-
neg
-
mul
Karatsuba multiplication usingw^2 = v:(a0 + a1*w)(b0 + b1*w) = (a0*b0 + a1*b1*v) + ((a0+a1)(b0+b1) - a0*b0 - a1*b1) * w
-
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
Frobenius²: raise to thep^2power. CombinesFp6Element.frobeniusSquared()on each Fp&sup6; component with a multiplication by the precomputed Fp² coefficient for thewbasis on the c1 component. -
frobenius
Frobenius: raise to theppower. CombinesFp6Element.frobenius()on each Fp&sup6; component with a multiplication by the precomputed Fp² coefficient for thewbasis on the c1 component. -
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
Modular inverse:(c0 + c1*w)^-1 = (c0 - c1*w) / (c0^2 - c1^2 * v)
-
modPow
Modular exponentiation by an integer exponent. Uses right-to-left square-and-multiply on the bit representation ofexponent; a negative exponent is handled by inverting and recursing on the absolute value. -
equals
-
hashCode
-
toString
-