Package org.bouncycastle.pqc.math.ntru.polynomial

## Class ProductFormPolynomial

- java.lang.Object
- - org.bouncycastle.pqc.math.ntru.polynomial.ProductFormPolynomial

- All Implemented Interfaces:
    `Polynomial`

      public class ProductFormPolynomial
      extends java.lang.Object
      implements Polynomial

  A polynomial of the form `f1*f2+f3`, where `f1,f2,f3` are very sparsely populated ternary polynomials.

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `ProductFormPolynomial​(SparseTernaryPolynomial f1, SparseTernaryPolynomial f2, SparseTernaryPolynomial f3)` |

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `equals​(java.lang.Object obj)` |
    `static ProductFormPolynomial` | `fromBinary​(byte[] data, int N, int df1, int df2, int df3Ones, int df3NegOnes)` |
    `static ProductFormPolynomial` | `fromBinary​(java.io.InputStream is, int N, int df1, int df2, int df3Ones, int df3NegOnes)` |
    `static ProductFormPolynomial` | `generateRandom​(int N, int df1, int df2, int df3Ones, int df3NegOnes, java.security.SecureRandom random)` |
    `int` | `hashCode()` |
    `BigIntPolynomial` | `mult​(BigIntPolynomial b)` | Multiplies the polynomial by a `BigIntPolynomial`, taking the indices mod N.
    `IntegerPolynomial` | `mult​(IntegerPolynomial b)` | Multiplies the polynomial by an `IntegerPolynomial`, taking the indices mod `N`.
    `IntegerPolynomial` | `mult​(IntegerPolynomial poly2, int modulus)` | Multiplies the polynomial by an `IntegerPolynomial`, taking the coefficient values mod `modulus` and the indices mod `N`.
    `byte[]` | `toBinary()` |
    `IntegerPolynomial` | `toIntegerPolynomial()` | Returns a polynomial that is equal to this polynomial (in the sense that `Polynomial.mult(IntegerPolynomial, int)` returns equal `IntegerPolynomial`s).

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

      `clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### ProductFormPolynomial

          public ProductFormPolynomial​(SparseTernaryPolynomial f1,
                                       SparseTernaryPolynomial f2,
                                       SparseTernaryPolynomial f3)

  - ### Method Detail

    - #### generateRandom

          public static ProductFormPolynomial generateRandom​(int N,
                                                             int df1,
                                                             int df2,
                                                             int df3Ones,
                                                             int df3NegOnes,
                                                             java.security.SecureRandom random)

    - #### fromBinary

          public static ProductFormPolynomial fromBinary​(byte[] data,
                                                         int N,
                                                         int df1,
                                                         int df2,
                                                         int df3Ones,
                                                         int df3NegOnes)
                                                  throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### fromBinary

          public static ProductFormPolynomial fromBinary​(java.io.InputStream is,
                                                         int N,
                                                         int df1,
                                                         int df2,
                                                         int df3Ones,
                                                         int df3NegOnes)
                                                  throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### toBinary

          public byte[] toBinary()

    - #### mult

          public IntegerPolynomial mult​(IntegerPolynomial b)

      Description copied from interface: `Polynomial`
      Multiplies the polynomial by an `IntegerPolynomial`, taking the indices mod `N`.
      Specified by:
        `mult` in interface `Polynomial`
      Parameters:
        `b` - a polynomial
      Returns:
        the product of the two polynomials

    - #### mult

          public BigIntPolynomial mult​(BigIntPolynomial b)

      Description copied from interface: `Polynomial`
      Multiplies the polynomial by a `BigIntPolynomial`, taking the indices mod N. Does not change this polynomial but returns the result as a new polynomial.
      Both polynomials must have the same number of coefficients.
      Specified by:
        `mult` in interface `Polynomial`
      Parameters:
        `b` - the polynomial to multiply by
      Returns:
        a new polynomial

    - #### toIntegerPolynomial

          public IntegerPolynomial toIntegerPolynomial()

      Description copied from interface: `Polynomial`
      Returns a polynomial that is equal to this polynomial (in the sense that `Polynomial.mult(IntegerPolynomial, int)` returns equal `IntegerPolynomial`s). The new polynomial is guaranteed to be independent of the original.
      Specified by:
        `toIntegerPolynomial` in interface `Polynomial`
      Returns:
        a new `IntegerPolynomial`.

    - #### mult

          public IntegerPolynomial mult​(IntegerPolynomial poly2,
                                        int modulus)

      Description copied from interface: `Polynomial`
      Multiplies the polynomial by an `IntegerPolynomial`, taking the coefficient values mod `modulus` and the indices mod `N`.
      Specified by:
        `mult` in interface `Polynomial`
      Parameters:
        `poly2` - a polynomial
        `modulus` - a modulus to apply
      Returns:
        the product of the two polynomials

    - #### 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`