Class 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 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 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).
      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 org.gudy.bouncycastle.math.ec.ECCurve

        a, b
    • 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).
    • 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

      • F2m

        public 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.
      • 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 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,
                   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.
      • 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 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

      • createPoint

        public ECPoint createPoint​(java.math.BigInteger x,
                                   java.math.BigInteger y,
                                   boolean withCompression)
        Specified by:
        createPoint 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()