package org.bouncycastle.pqc.crypto.mceliece; import org.bouncycastle.pqc.math.linearalgebra.GF2Matrix; import org.bouncycastle.pqc.math.linearalgebra.GF2mField; import org.bouncycastle.pqc.math.linearalgebra.GoppaCode; import org.bouncycastle.pqc.math.linearalgebra.Permutation; import org.bouncycastle.pqc.math.linearalgebra.PolynomialGF2mSmallM; import org.bouncycastle.pqc.math.linearalgebra.PolynomialRingGF2m; /** * * * */ public class McElieceCCA2PrivateKeyParameters extends McElieceCCA2KeyParameters { // the length of the code private int n; // the dimension of the code private int k; // the finte field GF(2^m) private GF2mField field; // the irreducible Goppa polynomial private PolynomialGF2mSmallM goppaPoly; // the permutation private Permutation p; // the canonical check matrix private GF2Matrix h; // the matrix used to compute square roots in (GF(2^m))^t private PolynomialGF2mSmallM[] qInv; /** * Constructor. * * @param n the length of the code * @param k the dimension of the code * @param field the finite field <tt>GF(2<sup>m</sup>)</tt> * @param gp the irreducible Goppa polynomial * @param p the permutation * @param digest name of digest algorithm */ public McElieceCCA2PrivateKeyParameters(int n, int k, GF2mField field, PolynomialGF2mSmallM gp, Permutation p, String digest) { this(n, k, field, gp, GoppaCode.createCanonicalCheckMatrix(field, gp), p, digest); } /** * Constructor. * * @param n the length of the code * @param k the dimension of the code * @param field the finite field <tt>GF(2<sup>m</sup>)</tt> * @param gp the irreducible Goppa polynomial * @param canonicalCheckMatrix the canonical check matrix * @param p the permutation * @param digest name of digest algorithm */ public McElieceCCA2PrivateKeyParameters(int n, int k, GF2mField field, PolynomialGF2mSmallM gp, GF2Matrix canonicalCheckMatrix, Permutation p, String digest) { super(true, digest); this.n = n; this.k = k; this.field = field; this.goppaPoly = gp; this.h = canonicalCheckMatrix; this.p = p; PolynomialRingGF2m ring = new PolynomialRingGF2m(field, gp); // matrix for computing square roots in (GF(2^m))^t this.qInv = ring.getSquareRootMatrix(); } /** * @return the length of the code */ public int getN() { return n; } /** * @return the dimension of the code */ public int getK() { return k; } /** * @return the degree of the Goppa polynomial (error correcting capability) */ public int getT() { return goppaPoly.getDegree(); } /** * @return the finite field */ public GF2mField getField() { return field; } /** * @return the irreducible Goppa polynomial */ public PolynomialGF2mSmallM getGoppaPoly() { return goppaPoly; } /** * @return the permutation P */ public Permutation getP() { return p; } /** * @return the canonical check matrix H */ public GF2Matrix getH() { return h; } /** * @return the matrix used to compute square roots in <tt>(GF(2^m))^t</tt> */ public PolynomialGF2mSmallM[] getQInv() { return qInv; } }