OwlCurve (Bouncy Castle Library 1.85 API Specification)
Date: 2026-07-12

org.bouncycastle.crypto.agreement.owl

## Class OwlCurve

- java.lang.Object
- - org.bouncycastle.crypto.agreement.owl.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 and 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 and 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