Class OwlCurve


  • public class OwlCurve
    extends java.lang.Object
    A pre-computed elliptic curve over a prime field, in short-Weierstrass form for use during an Owl exchange.

    In general, Owl can use any elliptic curve or prime order group that is suitable for public key cryptography.

    See OwlCurves for convenient standard curves.

    NIST publishes many curves with different forms and levels of security.

    • Constructor Summary

      Constructors 
      Constructor Description
      OwlCurve​(java.math.BigInteger q, java.math.BigInteger a, java.math.BigInteger b, java.math.BigInteger n, java.math.BigInteger h, java.math.BigInteger g_x, java.math.BigInteger g_y)
      Constructs a new OwlCurve.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.math.BigInteger getA()
      Get the curve coefficient a
      java.math.BigInteger getB()
      Get the curve coefficient b
      ECCurve.AbstractFp getCurve()
      Get the elliptic curve
      ECPoint getG()
      Get the base point G
      java.math.BigInteger getH()
      Get the co-factor h of the curve
      java.math.BigInteger getN()
      Get n, the order of the base point
      java.math.BigInteger getQ()
      Get the prime field modulus q of the curve
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • OwlCurve

        public OwlCurve​(java.math.BigInteger q,
                        java.math.BigInteger a,
                        java.math.BigInteger b,
                        java.math.BigInteger n,
                        java.math.BigInteger h,
                        java.math.BigInteger g_x,
                        java.math.BigInteger g_y)
        Constructs a new OwlCurve.

        In general, you should use one of the pre-approved curves from OwlCurves, rather than manually constructing one.

        The following basic checks are performed:

        • q must be prime
        • n must be prime
        • The curve must not be singular i.e. the discriminant is equal to 0 mod q
        • G must lie on the curve
        • n*h must equal the order of the curve
        • a must be in [0, q-1]
        • b must be in [0, q-1]

        The prime checks are performed using BigInteger.isProbablePrime(int), and are therefore subject to the same probability guarantees.

        These checks prevent trivial mistakes. However, due to the small uncertainties if p and q are not prime, advanced attacks are not prevented. Use it at your own risk.

        Parameters:
        q - The prime field modulus
        a - The curve coefficient a
        b - The curve coefficient b
        n - The order of the base point G
        h - The co-factor
        g_x - The x coordinate of the base point G
        g_y - The y coordinate of the base point G
        Throws:
        java.lang.NullPointerException - if any argument is null
        java.lang.IllegalArgumentException - if any of the above validations fail
    • Method Detail

      • getCurve

        public ECCurve.AbstractFp getCurve()
        Get the elliptic curve
        Returns:
        The curve
      • getG

        public ECPoint getG()
        Get the base point G
        Returns:
        G
      • getA

        public java.math.BigInteger getA()
        Get the curve coefficient a
        Returns:
        a
      • getB

        public java.math.BigInteger getB()
        Get the curve coefficient b
        Returns:
        b
      • getN

        public java.math.BigInteger getN()
        Get n, the order of the base point
        Returns:
        n
      • getH

        public java.math.BigInteger getH()
        Get the co-factor h of the curve
        Returns:
        h
      • getQ

        public java.math.BigInteger getQ()
        Get the prime field modulus q of the curve
        Returns:
        q