Package org.bouncycastle.crypto.bls
Class Fp6Element
- java.lang.Object
-
- org.bouncycastle.crypto.bls.Fp6Element
-
public final class Fp6Element extends java.lang.ObjectImmutable element ofFp^6 = Fp^2[v] / (v^3 - (1 + I)), the cubic extension ofFp2Elementused as the inner level of the BLS12-381 pairing field tower.An element is represented as
c0 + c1*v + c2*v^2where each c_i is an Fp^2 element. Multiplication uses the relationv^3 = NON_RESIDUEwhereNON_RESIDUE = 1 + I, the standard BLS12-381 cubic non-residue choice.
-
-
Field Summary
Fields Modifier and Type Field Description static Fp6ElementONEstatic Fp6ElementZERO
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Fp6Elementadd(Fp6Element other)Fp2Elementc0()Fp2Elementc1()Fp2Elementc2()booleanequals(java.lang.Object other)Fp6Elementfrobenius()Frobenius: raise to theppower.Fp6ElementfrobeniusSquared()Frobenius²: raise to thep^2power.static Fp6ElementfromFp2(Fp2Element c0)inthashCode()Fp6Elementinverse()Inverse via the standard cubic-extension formula:booleanisZero()Fp6ElementmodPow(java.math.BigInteger exponent)Modular exponentiation by a non-negative integer.Fp6Elementmul(Fp6Element other)Schoolbook multiplication usingv^3 = NON_RESIDUE:Fp6ElementmulByV()Multiplies an element of Fp^6 byv, the polynomial generator.Fp6ElementmulFp2(Fp2Element s)Multiplies by an Fp^2 scalar.Fp6Elementneg()static Fp6Elementof(Fp2Element c0, Fp2Element c1, Fp2Element c2)Fp6Elementsquare()Squaring via the Chung-Hasan SQR3 algorithm: 6 Fp^2 multiplications versus 9 for the schoolbook product.Fp6Elementsub(Fp6Element other)java.lang.StringtoString()
-
-
-
Field Detail
-
ZERO
public static final Fp6Element ZERO
-
ONE
public static final Fp6Element ONE
-
-
Method Detail
-
of
public static Fp6Element of(Fp2Element c0, Fp2Element c1, Fp2Element c2)
-
fromFp2
public static Fp6Element fromFp2(Fp2Element c0)
-
c0
public Fp2Element c0()
-
c1
public Fp2Element c1()
-
c2
public Fp2Element c2()
-
isZero
public boolean isZero()
-
add
public Fp6Element add(Fp6Element other)
-
sub
public Fp6Element sub(Fp6Element other)
-
neg
public Fp6Element neg()
-
mul
public Fp6Element mul(Fp6Element other)
Schoolbook multiplication usingv^3 = NON_RESIDUE:(a0 + a1*v + a2*v^2) * (b0 + b1*v + b2*v^2) = (a0*b0 + (a1*b2 + a2*b1)*xi) + (a0*b1 + a1*b0 + a2*b2*xi) * v + (a0*b2 + a1*b1 + a2*b0) * v^2
where xi = NON_RESIDUE.
-
square
public Fp6Element square()
Squaring via the Chung-Hasan SQR3 algorithm: 6 Fp^2 multiplications versus 9 for the schoolbook product.
-
mulByV
public Fp6Element mulByV()
Multiplies an element of Fp^6 byv, the polynomial generator. Useful for the Fp^12 multiplication formula.
-
mulFp2
public Fp6Element mulFp2(Fp2Element s)
Multiplies by an Fp^2 scalar.
-
inverse
public Fp6Element inverse()
Inverse via the standard cubic-extension formula:t0 = c0^2 - xi*c1*c2 t1 = xi*c2^2 - c0*c1 t2 = c1^2 - c0*c2 norm = c0*t0 + xi*c2*t1 + xi*c1*t2 inv = (t0 + t1*v + t2*v^2) / norm
-
frobeniusSquared
public Fp6Element frobeniusSquared()
Frobenius²: raise to thep^2power. Identity on Fp² components (Frobenius² in Fp² is identity), with thev-basis components scaled by precomputed Fp² constants.
-
frobenius
public Fp6Element frobenius()
Frobenius: raise to theppower. The Fp² components are conjugated (Fp² Frobenius is conjugation since p ≡ 3 mod 4), then the v-basis components are scaled by precomputed coefficients.
-
modPow
public Fp6Element modPow(java.math.BigInteger exponent)
Modular exponentiation by a non-negative integer.
-
equals
public boolean equals(java.lang.Object other)
- Overrides:
equalsin classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCodein classjava.lang.Object
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
-