package org.bouncycastle.pqc.crypto.ntru;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
import org.bouncycastle.pqc.math.ntru.polynomial.IntegerPolynomial;

A NtruSign public key is essentially a polynomial named h.
/** * A NtruSign public key is essentially a polynomial named <code>h</code>. */
public class NTRUSigningPublicKeyParameters extends AsymmetricKeyParameter { private NTRUSigningParameters params; public IntegerPolynomial h;
Constructs a new public key from a polynomial
Params:
  • h – the polynomial h which determines the key
  • params – the NtruSign parameters to use
/** * Constructs a new public key from a polynomial * * @param h the polynomial <code>h</code> which determines the key * @param params the NtruSign parameters to use */
public NTRUSigningPublicKeyParameters(IntegerPolynomial h, NTRUSigningParameters params) { super(false); this.h = h; this.params = params; }
Converts a byte array to a polynomial h and constructs a new public key
Params:
  • b – an encoded polynomial
  • params – the NtruSign parameters to use
/** * Converts a byte array to a polynomial <code>h</code> and constructs a new public key * * @param b an encoded polynomial * @param params the NtruSign parameters to use */
public NTRUSigningPublicKeyParameters(byte[] b, NTRUSigningParameters params) { super(false); h = IntegerPolynomial.fromBinary(b, params.N, params.q); this.params = params; }
Reads a polynomial h from an input stream and constructs a new public key
Params:
  • is – an input stream
  • params – the NtruSign parameters to use
/** * Reads a polynomial <code>h</code> from an input stream and constructs a new public key * * @param is an input stream * @param params the NtruSign parameters to use */
public NTRUSigningPublicKeyParameters(InputStream is, NTRUSigningParameters params) throws IOException { super(false); h = IntegerPolynomial.fromBinary(is, params.N, params.q); this.params = params; }
Converts the key to a byte array
Returns:the encoded key
/** * Converts the key to a byte array * * @return the encoded key */
public byte[] getEncoded() { return h.toBinary(params.q); }
Writes the key to an output stream
Params:
  • os – an output stream
Throws:
/** * Writes the key to an output stream * * @param os an output stream * @throws IOException */
public void writeTo(OutputStream os) throws IOException { os.write(getEncoded()); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((h == null) ? 0 : h.hashCode()); result = prime * result + ((params == null) ? 0 : params.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } NTRUSigningPublicKeyParameters other = (NTRUSigningPublicKeyParameters)obj; if (h == null) { if (other.h != null) { return false; } } else if (!h.equals(other.h)) { return false; } if (params == null) { if (other.params != null) { return false; } } else if (!params.equals(other.params)) { return false; } return true; } }