Package org.bouncycastle.pqc.crypto.ntru

## Class NTRUEncryptionKeyGenerationParameters

- java.lang.Object
- - org.bouncycastle.crypto.KeyGenerationParameters
  - - org.bouncycastle.pqc.crypto.ntru.NTRUEncryptionKeyGenerationParameters

- All Implemented Interfaces:
    `java.lang.Cloneable`

      public class NTRUEncryptionKeyGenerationParameters
      extends KeyGenerationParameters
      implements java.lang.Cloneable

  A set of parameters for NtruEncrypt. Several predefined parameter sets are available and new ones can be created as well.

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static NTRUEncryptionKeyGenerationParameters` | `APR2011_439` | A parameter set that gives 128 bits of security and uses simple ternary polynomials.
    `static NTRUEncryptionKeyGenerationParameters` | `APR2011_439_FAST` | Like `APR2011_439`, this parameter set gives 128 bits of security but uses product-form polynomials and `f=1+pF`.
    `static NTRUEncryptionKeyGenerationParameters` | `APR2011_743` | A parameter set that gives 256 bits of security and uses simple ternary polynomials.
    `static NTRUEncryptionKeyGenerationParameters` | `APR2011_743_FAST` | Like `APR2011_743`, this parameter set gives 256 bits of security but uses product-form polynomials and `f=1+pF`.
    `int` | `bufferLenBits` |
    `int` | `c` |
    `int` | `db` |
    `int` | `df` |
    `int` | `df1` |
    `int` | `df2` |
    `int` | `df3` |
    `int` | `dg` |
    `int` | `dm0` |
    `int` | `dr` |
    `int` | `dr1` |
    `int` | `dr2` |
    `int` | `dr3` |
    `static NTRUEncryptionKeyGenerationParameters` | `EES1087EP2` | A conservative (in terms of security) parameter set that gives 256 bits of security and is optimized for key size.
    `static NTRUEncryptionKeyGenerationParameters` | `EES1171EP1` | A conservative (in terms of security) parameter set that gives 256 bits of security and is a tradeoff between key size and encryption/decryption speed.
    `static NTRUEncryptionKeyGenerationParameters` | `EES1499EP1` | A conservative (in terms of security) parameter set that gives 256 bits of security and is optimized for encryption/decryption speed.
    `boolean` | `fastFp` |
    `Digest` | `hashAlg` |
    `boolean` | `hashSeed` |
    `int` | `maxMsgLenBytes` |
    `int` | `minCallsMask` |
    `int` | `minCallsR` |
    `int` | `N` |
    `byte[]` | `oid` |
    `int` | `pkLen` |
    `int` | `polyType` |
    `int` | `q` |
    `boolean` | `sparse` |

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `NTRUEncryptionKeyGenerationParameters​(int N, int q, int df, int dm0, int db, int c, int minCallsR, int minCallsMask, boolean hashSeed, byte[] oid, boolean sparse, boolean fastFp, Digest hashAlg)` | Constructs a parameter set that uses ternary private keys (i.e.
    `NTRUEncryptionKeyGenerationParameters​(int N, int q, int df, int dm0, int db, int c, int minCallsR, int minCallsMask, boolean hashSeed, byte[] oid, boolean sparse, boolean fastFp, Digest hashAlg, java.security.SecureRandom random)` | Constructs a parameter set that uses ternary private keys (i.e.
    `NTRUEncryptionKeyGenerationParameters​(int N, int q, int df1, int df2, int df3, int dm0, int db, int c, int minCallsR, int minCallsMask, boolean hashSeed, byte[] oid, boolean sparse, boolean fastFp, Digest hashAlg)` | Constructs a parameter set that uses product-form private keys (i.e.
    `NTRUEncryptionKeyGenerationParameters​(int N, int q, int df1, int df2, int df3, int dm0, int db, int c, int minCallsR, int minCallsMask, boolean hashSeed, byte[] oid, boolean sparse, boolean fastFp, Digest hashAlg, java.security.SecureRandom random)` | Constructs a parameter set that uses product-form private keys (i.e.
    `NTRUEncryptionKeyGenerationParameters​(java.io.InputStream is)` | Reads a parameter set from an input stream.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `NTRUEncryptionKeyGenerationParameters` | `clone()` |
    `boolean` | `equals​(java.lang.Object obj)` |
    `NTRUEncryptionParameters` | `getEncryptionParameters()` |
    `int` | `getMaxMessageLength()` | Returns the maximum length a plaintext message can be with this parameter set.
    `int` | `hashCode()` |
    `java.lang.String` | `toString()` |
    `void` | `writeTo​(java.io.OutputStream os)` | Writes the parameter set to an output stream

    - ### Methods inherited from class org.bouncycastle.crypto.KeyGenerationParameters

      `getRandom, getStrength`

    - ### Methods inherited from class java.lang.Object

      `finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### EES1087EP2

          public static final NTRUEncryptionKeyGenerationParameters EES1087EP2

      A conservative (in terms of security) parameter set that gives 256 bits of security and is optimized for key size. Uses `CryptoServicesRegistrar.getSecureRandom()` as an entropy source (but the value present at class load time).

    - #### EES1171EP1

          public static final NTRUEncryptionKeyGenerationParameters EES1171EP1

      A conservative (in terms of security) parameter set that gives 256 bits of security and is a tradeoff between key size and encryption/decryption speed. Uses `CryptoServicesRegistrar.getSecureRandom()` as an entropy source (but the value present at class load time).

    - #### EES1499EP1

          public static final NTRUEncryptionKeyGenerationParameters EES1499EP1

      A conservative (in terms of security) parameter set that gives 256 bits of security and is optimized for encryption/decryption speed. Uses `CryptoServicesRegistrar.getSecureRandom()` as an entropy source (but the value present at class load time).

    - #### APR2011_439

          public static final NTRUEncryptionKeyGenerationParameters APR2011_439

      A parameter set that gives 128 bits of security and uses simple ternary polynomials. Uses `CryptoServicesRegistrar.getSecureRandom()` as an entropy source (but the value present at class load time).

    - #### APR2011_439_FAST

          public static final NTRUEncryptionKeyGenerationParameters APR2011_439_FAST

      Like `APR2011_439`, this parameter set gives 128 bits of security but uses product-form polynomials and `f=1+pF`. Uses `CryptoServicesRegistrar.getSecureRandom()` as an entropy source (but the value present at class load time).

    - #### APR2011_743

          public static final NTRUEncryptionKeyGenerationParameters APR2011_743

      A parameter set that gives 256 bits of security and uses simple ternary polynomials. Uses `CryptoServicesRegistrar.getSecureRandom()` as an entropy source (but the value present at class load time).

    - #### APR2011_743_FAST

          public static final NTRUEncryptionKeyGenerationParameters APR2011_743_FAST

      Like `APR2011_743`, this parameter set gives 256 bits of security but uses product-form polynomials and `f=1+pF`. Uses `CryptoServicesRegistrar.getSecureRandom()` as an entropy source (but the value present at class load time).

    - #### N

          public int N

    - #### q

          public int q

    - #### df

          public int df

    - #### df1

          public int df1

    - #### df2

          public int df2

    - #### df3

          public int df3

    - #### dr

          public int dr

    - #### dr1

          public int dr1

    - #### dr2

          public int dr2

    - #### dr3

          public int dr3

    - #### dg

          public int dg

    - #### maxMsgLenBytes

          public int maxMsgLenBytes

    - #### db

          public int db

    - #### bufferLenBits

          public int bufferLenBits

    - #### dm0

          public int dm0

    - #### pkLen

          public int pkLen

    - #### c

          public int c

    - #### minCallsR

          public int minCallsR

    - #### minCallsMask

          public int minCallsMask

    - #### hashSeed

          public boolean hashSeed

    - #### oid

          public byte[] oid

    - #### sparse

          public boolean sparse

    - #### fastFp

          public boolean fastFp

    - #### polyType

          public int polyType

    - #### hashAlg

          public Digest hashAlg

  - ### Constructor Detail

    - #### NTRUEncryptionKeyGenerationParameters

          public NTRUEncryptionKeyGenerationParameters​(int N,
                                                       int q,
                                                       int df,
                                                       int dm0,
                                                       int db,
                                                       int c,
                                                       int minCallsR,
                                                       int minCallsMask,
                                                       boolean hashSeed,
                                                       byte[] oid,
                                                       boolean sparse,
                                                       boolean fastFp,
                                                       Digest hashAlg,
                                                       java.security.SecureRandom random)

      Constructs a parameter set that uses ternary private keys (i.e. `polyType=SIMPLE`).
      Parameters:
        `N` - number of polynomial coefficients
        `q` - modulus
        `df` - number of ones in the private polynomial `f`
        `dm0` - minimum acceptable number of -1's, 0's, and 1's in the polynomial `m'` in the last encryption step
        `db` - number of random bits to prepend to the message
        `c` - a parameter for the Index Generation Function (`IndexGenerator`)
        `minCallsR` - minimum number of hash calls for the IGF to make
        `minCallsMask` - minimum number of calls to generate the masking polynomial
        `hashSeed` - whether to hash the seed in the MGF first (true) or use the seed directly (false)
        `oid` - three bytes that uniquely identify the parameter set
        `sparse` - whether to treat ternary polynomials as sparsely populated (`SparseTernaryPolynomial` vs `DenseTernaryPolynomial`)
        `fastFp` - whether `f=1+p*F` for a ternary `F` (true) or `f` is ternary (false)
        `hashAlg` - a valid identifier for a `java.security.MessageDigest` instance such as `SHA-256`. The `MessageDigest` must support the `getDigestLength()` method.
        `random` - entropy source, if `null` uses `CryptoServicesRegistrar.getSecureRandom()`

    - #### NTRUEncryptionKeyGenerationParameters

          public NTRUEncryptionKeyGenerationParameters​(int N,
                                                       int q,
                                                       int df,
                                                       int dm0,
                                                       int db,
                                                       int c,
                                                       int minCallsR,
                                                       int minCallsMask,
                                                       boolean hashSeed,
                                                       byte[] oid,
                                                       boolean sparse,
                                                       boolean fastFp,
                                                       Digest hashAlg)

      Constructs a parameter set that uses ternary private keys (i.e. `polyType=SIMPLE`).
      Parameters:
        `N` - number of polynomial coefficients
        `q` - modulus
        `df` - number of ones in the private polynomial `f`
        `dm0` - minimum acceptable number of -1's, 0's, and 1's in the polynomial `m'` in the last encryption step
        `db` - number of random bits to prepend to the message
        `c` - a parameter for the Index Generation Function (`IndexGenerator`)
        `minCallsR` - minimum number of hash calls for the IGF to make
        `minCallsMask` - minimum number of calls to generate the masking polynomial
        `hashSeed` - whether to hash the seed in the MGF first (true) or use the seed directly (false)
        `oid` - three bytes that uniquely identify the parameter set
        `sparse` - whether to treat ternary polynomials as sparsely populated (`SparseTernaryPolynomial` vs `DenseTernaryPolynomial`)
        `fastFp` - whether `f=1+p*F` for a ternary `F` (true) or `f` is ternary (false)
        `hashAlg` - a valid identifier for a `java.security.MessageDigest` instance such as `SHA-256`. The `MessageDigest` must support the `getDigestLength()` method.

    - #### NTRUEncryptionKeyGenerationParameters

          public NTRUEncryptionKeyGenerationParameters​(int N,
                                                       int q,
                                                       int df1,
                                                       int df2,
                                                       int df3,
                                                       int dm0,
                                                       int db,
                                                       int c,
                                                       int minCallsR,
                                                       int minCallsMask,
                                                       boolean hashSeed,
                                                       byte[] oid,
                                                       boolean sparse,
                                                       boolean fastFp,
                                                       Digest hashAlg,
                                                       java.security.SecureRandom random)

      Constructs a parameter set that uses product-form private keys (i.e. `polyType=PRODUCT`).
      Parameters:
        `N` - number of polynomial coefficients
        `q` - modulus
        `df1` - number of ones in the private polynomial `f1`
        `df2` - number of ones in the private polynomial `f2`
        `df3` - number of ones in the private polynomial `f3`
        `dm0` - minimum acceptable number of -1's, 0's, and 1's in the polynomial `m'` in the last encryption step
        `db` - number of random bits to prepend to the message
        `c` - a parameter for the Index Generation Function (`IndexGenerator`)
        `minCallsR` - minimum number of hash calls for the IGF to make
        `minCallsMask` - minimum number of calls to generate the masking polynomial
        `hashSeed` - whether to hash the seed in the MGF first (true) or use the seed directly (false)
        `oid` - three bytes that uniquely identify the parameter set
        `sparse` - whether to treat ternary polynomials as sparsely populated (`SparseTernaryPolynomial` vs `DenseTernaryPolynomial`)
        `fastFp` - whether `f=1+p*F` for a ternary `F` (true) or `f` is ternary (false)
        `hashAlg` - a valid identifier for a `java.security.MessageDigest` instance such as `SHA-256`
        `random` - entropy source, if `null` uses `CryptoServicesRegistrar.getSecureRandom()`

    - #### NTRUEncryptionKeyGenerationParameters

          public NTRUEncryptionKeyGenerationParameters​(int N,
                                                       int q,
                                                       int df1,
                                                       int df2,
                                                       int df3,
                                                       int dm0,
                                                       int db,
                                                       int c,
                                                       int minCallsR,
                                                       int minCallsMask,
                                                       boolean hashSeed,
                                                       byte[] oid,
                                                       boolean sparse,
                                                       boolean fastFp,
                                                       Digest hashAlg)

      Constructs a parameter set that uses product-form private keys (i.e. `polyType=PRODUCT`). Uses `CryptoServicesRegistrar.getSecureRandom()` as an entropy source.
      Parameters:
        `N` - number of polynomial coefficients
        `q` - modulus
        `df1` - number of ones in the private polynomial `f1`
        `df2` - number of ones in the private polynomial `f2`
        `df3` - number of ones in the private polynomial `f3`
        `dm0` - minimum acceptable number of -1's, 0's, and 1's in the polynomial `m'` in the last encryption step
        `db` - number of random bits to prepend to the message
        `c` - a parameter for the Index Generation Function (`IndexGenerator`)
        `minCallsR` - minimum number of hash calls for the IGF to make
        `minCallsMask` - minimum number of calls to generate the masking polynomial
        `hashSeed` - whether to hash the seed in the MGF first (true) or use the seed directly (false)
        `oid` - three bytes that uniquely identify the parameter set
        `sparse` - whether to treat ternary polynomials as sparsely populated (`SparseTernaryPolynomial` vs `DenseTernaryPolynomial`)
        `fastFp` - whether `f=1+p*F` for a ternary `F` (true) or `f` is ternary (false)
        `hashAlg` - a valid identifier for a `java.security.MessageDigest` instance such as `SHA-256`

    - #### NTRUEncryptionKeyGenerationParameters

          public NTRUEncryptionKeyGenerationParameters​(java.io.InputStream is)
                                                throws java.io.IOException

      Reads a parameter set from an input stream.
      Parameters:
        `is` - an input stream
      Throws:
        `java.io.IOException`

  - ### Method Detail

    - #### getEncryptionParameters

          public NTRUEncryptionParameters getEncryptionParameters()

    - #### clone

          public NTRUEncryptionKeyGenerationParameters clone()

      Overrides:
        `clone` in class `java.lang.Object`

    - #### getMaxMessageLength

          public int getMaxMessageLength()

      Returns the maximum length a plaintext message can be with this parameter set.
      Returns:
        the maximum length in bytes

    - #### writeTo

          public void writeTo​(java.io.OutputStream os)
                       throws java.io.IOException

      Writes the parameter set to an output stream
      Parameters:
        `os` - an output stream
      Throws:
        `java.io.IOException`

    - #### hashCode

          public int hashCode()

      Overrides:
        `hashCode` in class `java.lang.Object`

    - #### equals

          public boolean equals​(java.lang.Object obj)

      Overrides:
        `equals` in class `java.lang.Object`

    - #### toString

          public java.lang.String toString()

      Overrides:
        `toString` in class `java.lang.Object`