Package org.gudy.bouncycastle.math.ec
Class ECCurve.F2m
- java.lang.Object
-
- org.gudy.bouncycastle.math.ec.ECCurve
-
- org.gudy.bouncycastle.math.ec.ECCurve.F2m
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.gudy.bouncycastle.math.ec.ECCurve
ECCurve.F2m, ECCurve.Fp
-
-
Field Summary
Fields Modifier and Type Field Description private java.math.BigInteger
h
The cofactor of the curve.private ECPoint.F2m
infinity
The point at infinity on this curve.private int
k1
TPB: The integerk
wherexm + xk + 1
represents the reduction polynomialf(z)
.
PPB: The integerk1
wherexm + xk3 + xk2 + xk1 + 1
represents the reduction polynomialf(z)
.private int
k2
TPB: Always set to0
PPB: The integerk2
wherexm + xk3 + xk2 + xk1 + 1
represents the reduction polynomialf(z)
.private int
k3
TPB: Always set to0
PPB: The integerk3
wherexm + xk3 + xk2 + xk1 + 1
represents the reduction polynomialf(z)
.private int
m
The exponentm
ofF2m
.private byte
mu
The parameterμ
of the elliptic curve if this is a Koblitz curve.private java.math.BigInteger
n
The order of the base point of the curve.private java.math.BigInteger[]
si
The auxiliary valuess0
ands1
used for partial modular reduction for Koblitz curves.
-
Constructor Summary
Constructors Constructor Description F2m(int m, int k1, int k2, int k3, java.math.BigInteger a, java.math.BigInteger b)
Constructor for Pentanomial Polynomial Basis (PPB).F2m(int m, int k1, int k2, int k3, java.math.BigInteger a, java.math.BigInteger b, java.math.BigInteger n, java.math.BigInteger h)
Constructor for Pentanomial Polynomial Basis (PPB).F2m(int m, int k, java.math.BigInteger a, java.math.BigInteger b)
Constructor for Trinomial Polynomial Basis (TPB).F2m(int m, int k, java.math.BigInteger a, java.math.BigInteger b, java.math.BigInteger n, java.math.BigInteger h)
Constructor for Trinomial Polynomial Basis (TPB).
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description ECPoint
createPoint(java.math.BigInteger x, java.math.BigInteger y, boolean withCompression)
ECPoint
decodePoint(byte[] encoded)
private ECPoint
decompressPoint(byte[] xEnc, int ypBit)
Decompresses a compressed point P = (xp, yp) (X9.62 s 4.2.2).boolean
equals(java.lang.Object anObject)
ECFieldElement
fromBigInteger(java.math.BigInteger x)
int
getFieldSize()
java.math.BigInteger
getH()
ECPoint
getInfinity()
int
getK1()
int
getK2()
int
getK3()
int
getM()
(package private) byte
getMu()
Returns the parameterμ
of the elliptic curve.java.math.BigInteger
getN()
(package private) java.math.BigInteger[]
getSi()
int
hashCode()
boolean
isKoblitz()
Returns true if this is a Koblitz curve (ABC curve).boolean
isTrinomial()
Return true if curve uses a Trinomial basis.private ECFieldElement
solveQuadradicEquation(ECFieldElement beta)
Solves a quadratic equationz2 + z = beta
(X9.62 D.1.6) The other solution isz + 1
.
-
-
-
Field Detail
-
m
private int m
The exponentm
ofF2m
.
-
k1
private int k1
TPB: The integerk
wherexm + xk + 1
represents the reduction polynomialf(z)
.
PPB: The integerk1
wherexm + xk3 + xk2 + xk1 + 1
represents the reduction polynomialf(z)
.
-
k2
private int k2
TPB: Always set to0
PPB: The integerk2
wherexm + xk3 + xk2 + xk1 + 1
represents the reduction polynomialf(z)
.
-
k3
private int k3
TPB: Always set to0
PPB: The integerk3
wherexm + xk3 + xk2 + xk1 + 1
represents the reduction polynomialf(z)
.
-
n
private java.math.BigInteger n
The order of the base point of the curve.
-
h
private java.math.BigInteger h
The cofactor of the curve.
-
infinity
private ECPoint.F2m infinity
The point at infinity on this curve.
-
mu
private byte mu
The parameterμ
of the elliptic curve if this is a Koblitz curve.
-
si
private java.math.BigInteger[] si
The auxiliary valuess0
ands1
used for partial modular reduction for Koblitz curves.
-
-
Constructor Detail
-
F2m
public F2m(int m, int k, java.math.BigInteger a, java.math.BigInteger b)
Constructor for Trinomial Polynomial Basis (TPB).- Parameters:
m
- The exponentm
ofF2m
.k
- The integerk
wherexm + xk + 1
represents the reduction polynomialf(z)
.a
- The coefficienta
in the Weierstrass equation for non-supersingular elliptic curves overF2m
.b
- The coefficientb
in the Weierstrass equation for non-supersingular elliptic curves overF2m
.
-
F2m
public F2m(int m, int k, java.math.BigInteger a, java.math.BigInteger b, java.math.BigInteger n, java.math.BigInteger h)
Constructor for Trinomial Polynomial Basis (TPB).- Parameters:
m
- The exponentm
ofF2m
.k
- The integerk
wherexm + xk + 1
represents the reduction polynomialf(z)
.a
- The coefficienta
in the Weierstrass equation for non-supersingular elliptic curves overF2m
.b
- The coefficientb
in the Weierstrass equation for non-supersingular elliptic curves overF2m
.n
- The order of the main subgroup of the elliptic curve.h
- The cofactor of the elliptic curve, i.e.#Ea(F2m) = h * n
.
-
F2m
public F2m(int m, int k1, int k2, int k3, java.math.BigInteger a, java.math.BigInteger b)
Constructor for Pentanomial Polynomial Basis (PPB).- Parameters:
m
- The exponentm
ofF2m
.k1
- The integerk1
wherexm + xk3 + xk2 + xk1 + 1
represents the reduction polynomialf(z)
.k2
- The integerk2
wherexm + xk3 + xk2 + xk1 + 1
represents the reduction polynomialf(z)
.k3
- The integerk3
wherexm + xk3 + xk2 + xk1 + 1
represents the reduction polynomialf(z)
.a
- The coefficienta
in the Weierstrass equation for non-supersingular elliptic curves overF2m
.b
- The coefficientb
in the Weierstrass equation for non-supersingular elliptic curves overF2m
.
-
F2m
public F2m(int m, int k1, int k2, int k3, java.math.BigInteger a, java.math.BigInteger b, java.math.BigInteger n, java.math.BigInteger h)
Constructor for Pentanomial Polynomial Basis (PPB).- Parameters:
m
- The exponentm
ofF2m
.k1
- The integerk1
wherexm + xk3 + xk2 + xk1 + 1
represents the reduction polynomialf(z)
.k2
- The integerk2
wherexm + xk3 + xk2 + xk1 + 1
represents the reduction polynomialf(z)
.k3
- The integerk3
wherexm + xk3 + xk2 + xk1 + 1
represents the reduction polynomialf(z)
.a
- The coefficienta
in the Weierstrass equation for non-supersingular elliptic curves overF2m
.b
- The coefficientb
in the Weierstrass equation for non-supersingular elliptic curves overF2m
.n
- The order of the main subgroup of the elliptic curve.h
- The cofactor of the elliptic curve, i.e.#Ea(F2m) = h * n
.
-
-
Method Detail
-
getFieldSize
public int getFieldSize()
- Specified by:
getFieldSize
in classECCurve
-
fromBigInteger
public ECFieldElement fromBigInteger(java.math.BigInteger x)
- Specified by:
fromBigInteger
in classECCurve
-
createPoint
public ECPoint createPoint(java.math.BigInteger x, java.math.BigInteger y, boolean withCompression)
- Specified by:
createPoint
in classECCurve
-
decodePoint
public ECPoint decodePoint(byte[] encoded)
- Specified by:
decodePoint
in classECCurve
-
getInfinity
public ECPoint getInfinity()
- Specified by:
getInfinity
in classECCurve
-
isKoblitz
public boolean isKoblitz()
Returns true if this is a Koblitz curve (ABC curve).- Returns:
- true if this is a Koblitz curve (ABC curve), false otherwise
-
getMu
byte getMu()
Returns the parameterμ
of the elliptic curve.- Returns:
μ
of the elliptic curve.- Throws:
java.lang.IllegalArgumentException
- if the given ECCurve is not a Koblitz curve.
-
getSi
java.math.BigInteger[] getSi()
- Returns:
- the auxiliary values
s0
ands1
used for partial modular reduction for Koblitz curves.
-
decompressPoint
private ECPoint decompressPoint(byte[] xEnc, int ypBit)
Decompresses a compressed point P = (xp, yp) (X9.62 s 4.2.2).- Parameters:
xEnc
- The encoding of field element xp.ypBit
- ~yp, an indication bit for the decompression of yp.- Returns:
- the decompressed point.
-
solveQuadradicEquation
private ECFieldElement solveQuadradicEquation(ECFieldElement beta)
Solves a quadratic equationz2 + z = beta
(X9.62 D.1.6) The other solution isz + 1
.- Parameters:
beta
- The value to solve the qradratic equation for.- Returns:
- the solution for
z2 + z = beta
ornull
if no solution exists.
-
equals
public boolean equals(java.lang.Object anObject)
- Overrides:
equals
in classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
getM
public int getM()
-
isTrinomial
public boolean isTrinomial()
Return true if curve uses a Trinomial basis.- Returns:
- true if curve Trinomial, false otherwise.
-
getK1
public int getK1()
-
getK2
public int getK2()
-
getK3
public int getK3()
-
getN
public java.math.BigInteger getN()
-
getH
public java.math.BigInteger getH()
-
-