kz.gamma.hardware.crypto.software.ec
Class ECCurve.F2m

java.lang.Object
  extended by kz.gamma.hardware.crypto.software.ec.ECCurve
      extended by kz.gamma.hardware.crypto.software.ec.ECCurve.F2m
Enclosing class:
ECCurve

public static class ECCurve.F2m
extends ECCurve

Elliptic curves over F2m. The Weierstrass equation is given by y2 + xy = x3 + ax2 + b.


Nested Class Summary
 
Nested classes/interfaces inherited from class kz.gamma.hardware.crypto.software.ec.ECCurve
ECCurve.F2m, ECCurve.Fp
 
Field Summary
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 integer k where xm + xk + 1 represents the reduction polynomial f(z).
private  int k2
          TPB: Always set to 0
PPB: The integer k2 where xm + xk3 + xk2 + xk1 + 1 represents the reduction polynomial f(z).
private  int k3
          TPB: Always set to 0
PPB: The integer k3 where xm + xk3 + xk2 + xk1 + 1 represents the reduction polynomial f(z).
private  int m
          The exponent m of F2m.
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 values s0 and s1 used for partial modular reduction for Koblitz curves.
 
Fields inherited from class kz.gamma.hardware.crypto.software.ec.ECCurve
a, b
 
Constructor Summary
ECCurve.F2m(int m, int k, java.math.BigInteger a, java.math.BigInteger b)
          Constructor for Trinomial Polynomial Basis (TPB).
ECCurve.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).
ECCurve.F2m(int m, int k1, int k2, int k3, java.math.BigInteger a, java.math.BigInteger b)
          Constructor for Pentanomial Polynomial Basis (PPB).
ECCurve.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).
 
Method Summary
 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 equation z2 + z = beta(X9.62 D.1.6) The other solution is z + 1.
 
Methods inherited from class kz.gamma.hardware.crypto.software.ec.ECCurve
getA, getB
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

m

private int m
The exponent m of F2m.


k1

private int k1
TPB: The integer k where xm + xk + 1 represents the reduction polynomial f(z).
PPB: The integer k1 where xm + xk3 + xk2 + xk1 + 1 represents the reduction polynomial f(z).


k2

private int k2
TPB: Always set to 0
PPB: The integer k2 where xm + xk3 + xk2 + xk1 + 1 represents the reduction polynomial f(z).


k3

private int k3
TPB: Always set to 0
PPB: The integer k3 where xm + xk3 + xk2 + xk1 + 1 represents the reduction polynomial f(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 values s0 and s1 used for partial modular reduction for Koblitz curves.

Constructor Detail

ECCurve.F2m

public ECCurve.F2m(int m,
                   int k,
                   java.math.BigInteger a,
                   java.math.BigInteger b)
Constructor for Trinomial Polynomial Basis (TPB).

Parameters:
m - The exponent m of F2m.
k - The integer k where xm + xk + 1 represents the reduction polynomial f(z).
a - The coefficient a in the Weierstrass equation for non-supersingular elliptic curves over F2m.
b - The coefficient b in the Weierstrass equation for non-supersingular elliptic curves over F2m.

ECCurve.F2m

public ECCurve.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 exponent m of F2m.
k - The integer k where xm + xk + 1 represents the reduction polynomial f(z).
a - The coefficient a in the Weierstrass equation for non-supersingular elliptic curves over F2m.
b - The coefficient b in the Weierstrass equation for non-supersingular elliptic curves over F2m.
n - The order of the main subgroup of the elliptic curve.
h - The cofactor of the elliptic curve, i.e. #Ea(F2m) = h * n.

ECCurve.F2m

public ECCurve.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 exponent m of F2m.
k1 - The integer k1 where xm + xk3 + xk2 + xk1 + 1 represents the reduction polynomial f(z).
k2 - The integer k2 where xm + xk3 + xk2 + xk1 + 1 represents the reduction polynomial f(z).
k3 - The integer k3 where xm + xk3 + xk2 + xk1 + 1 represents the reduction polynomial f(z).
a - The coefficient a in the Weierstrass equation for non-supersingular elliptic curves over F2m.
b - The coefficient b in the Weierstrass equation for non-supersingular elliptic curves over F2m.

ECCurve.F2m

public ECCurve.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 exponent m of F2m.
k1 - The integer k1 where xm + xk3 + xk2 + xk1 + 1 represents the reduction polynomial f(z).
k2 - The integer k2 where xm + xk3 + xk2 + xk1 + 1 represents the reduction polynomial f(z).
k3 - The integer k3 where xm + xk3 + xk2 + xk1 + 1 represents the reduction polynomial f(z).
a - The coefficient a in the Weierstrass equation for non-supersingular elliptic curves over F2m.
b - The coefficient b in the Weierstrass equation for non-supersingular elliptic curves over F2m.
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 class ECCurve

fromBigInteger

public ECFieldElement fromBigInteger(java.math.BigInteger x)
Specified by:
fromBigInteger in class ECCurve

createPoint

public ECPoint createPoint(java.math.BigInteger x,
                           java.math.BigInteger y,
                           boolean withCompression)
Specified by:
createPoint in class ECCurve

decodePoint

public ECPoint decodePoint(byte[] encoded)
Specified by:
decodePoint in class ECCurve

getInfinity

public ECPoint getInfinity()
Specified by:
getInfinity in class ECCurve

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 and s1 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 equation z2 + z = beta(X9.62 D.1.6) The other solution is z + 1.

Parameters:
beta - The value to solve the qradratic equation for.
Returns:
the solution for z2 + z = beta or null if no solution exists.

equals

public boolean equals(java.lang.Object anObject)
Overrides:
equals in class java.lang.Object

hashCode

public int hashCode()
Overrides:
hashCode in class java.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()


Copyright © 2013 Gamma Technologies. All Rights Reserved.