Class SparseTernaryPolynomial

java.lang.Object
org.bouncycastle.pqc.legacy.math.ntru.polynomial.SparseTernaryPolynomial
All Implemented Interfaces:
Polynomial, TernaryPolynomial

public class SparseTernaryPolynomial extends Object implements TernaryPolynomial
A TernaryPolynomial with a "low" number of nonzero coefficients.
  • Constructor Details

    • SparseTernaryPolynomial

      public SparseTernaryPolynomial(IntegerPolynomial intPoly)
      Constructs a DenseTernaryPolynomial from a IntegerPolynomial. The two polynomials are independent of each other.
      Parameters:
      intPoly - the original polynomial
    • SparseTernaryPolynomial

      public SparseTernaryPolynomial(int[] coeffs)
      Constructs a new SparseTernaryPolynomial with a given set of coefficients.
      Parameters:
      coeffs - the coefficients
  • Method Details

    • fromBinary

      public static SparseTernaryPolynomial fromBinary(InputStream is, int N, int numOnes, int numNegOnes) throws IOException
      Decodes a byte array encoded with toBinary() to a ploynomial.
      Parameters:
      is - an input stream containing an encoded polynomial
      N - number of coefficients including zeros
      numOnes - number of coefficients equal to 1
      numNegOnes - number of coefficients equal to -1
      Returns:
      the decoded polynomial
      Throws:
      IOException
    • generateRandom

      public static SparseTernaryPolynomial generateRandom(int N, int numOnes, int numNegOnes, SecureRandom random)
      Generates a random polynomial with numOnes coefficients equal to 1, numNegOnes coefficients equal to -1, and the rest equal to 0.
      Parameters:
      N - number of coefficients
      numOnes - number of 1's
      numNegOnes - number of -1's
    • mult

      public IntegerPolynomial mult(IntegerPolynomial poly2)
      Description copied from interface: TernaryPolynomial
      Multiplies the polynomial by an IntegerPolynomial, taking the indices mod N
      Specified by:
      mult in interface Polynomial
      Specified by:
      mult in interface TernaryPolynomial
      Parameters:
      poly2 - a polynomial
      Returns:
      the product of the two polynomials
    • 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
    • mult

      public BigIntPolynomial mult(BigIntPolynomial poly2)
      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:
      poly2 - the polynomial to multiply by
      Returns:
      a new polynomial
    • getOnes

      public int[] getOnes()
      Specified by:
      getOnes in interface TernaryPolynomial
    • getNegOnes

      public int[] getNegOnes()
      Specified by:
      getNegOnes in interface TernaryPolynomial
    • toBinary

      public byte[] toBinary()
      Encodes the polynomial to a byte array writing BITS_PER_INDEX bits for each coefficient.
      Returns:
      the encoded 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 IntegerPolynomials). The new polynomial is guaranteed to be independent of the original.
      Specified by:
      toIntegerPolynomial in interface Polynomial
      Returns:
      a new IntegerPolynomial.
    • size

      public int size()
      Description copied from interface: TernaryPolynomial
      Returns the maximum number of coefficients the polynomial can have
      Specified by:
      size in interface TernaryPolynomial
    • clear

      public void clear()
      Specified by:
      clear in interface TernaryPolynomial
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object