Class ECCurve.F2m

java.lang.Object
org.gudy.bouncycastle.math.ec.ECCurve
org.gudy.bouncycastle.math.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.
  • Field Details

    • 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 BigInteger n
      The order of the base point of the curve.
    • h

      private 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 BigInteger[] si
      The auxiliary values s0 and s1 used for partial modular reduction for Koblitz curves.
  • Constructor Details

    • F2m

      public F2m(int m, int k, BigInteger a, 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.
    • F2m

      public F2m(int m, int k, BigInteger a, BigInteger b, BigInteger n, 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.
    • F2m

      public F2m(int m, int k1, int k2, int k3, BigInteger a, 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.
    • F2m

      public F2m(int m, int k1, int k2, int k3, BigInteger a, BigInteger b, BigInteger n, 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 Details

    • getFieldSize

      public int getFieldSize()
      Specified by:
      getFieldSize in class ECCurve
    • fromBigInteger

      public ECFieldElement fromBigInteger(BigInteger x)
      Specified by:
      fromBigInteger in class ECCurve
    • createPoint

      public ECPoint createPoint(BigInteger x, 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:
      IllegalArgumentException - if the given ECCurve is not a Koblitz curve.
    • getSi

      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(Object anObject)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class 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 BigInteger getN()
    • getH

      public BigInteger getH()