blob: ed5bea87b0ff9a6b8abf9e5329888e753132857e [file] [log] [blame]
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 McElieceCCA2Parameters
*/
public McElieceCCA2PrivateKeyParameters(int n, int k, GF2mField field,
PolynomialGF2mSmallM gp, Permutation p, String digest)
{
super(true, digest);
this.n = n;
this.k = k;
this.field = field;
this.goppaPoly = gp;
this.p = p;
this.h = GoppaCode.createCanonicalCheckMatrix(field, gp);
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;
}
}