com.fitbur.bouncycastle.pqc.jcajce.spec.McEliecePrivateKeySpec Maven / Gradle / Ivy
package com.fitbur.bouncycastle.pqc.jcajce.spec;
import java.security.spec.KeySpec;
import com.fitbur.bouncycastle.pqc.math.linearalgebra.GF2Matrix;
import com.fitbur.bouncycastle.pqc.math.linearalgebra.GF2mField;
import com.fitbur.bouncycastle.pqc.math.linearalgebra.Permutation;
import com.fitbur.bouncycastle.pqc.math.linearalgebra.PolynomialGF2mSmallM;
/**
* This class provides a specification for a McEliece private key.
*
* @see com.fitbur.bouncycastle.pqc.ecc.JDKMcEliecePrivateKey.McEliecePrivateKey
* @see KeySpec
*/
public class McEliecePrivateKeySpec
implements KeySpec
{
// the OID of the algorithm
private String oid;
// the length of the code
private int n;
// the dimension of the code, where k >= n - mt
private int k;
// the underlying finite field
private GF2mField field;
// the irreducible Goppa polynomial
private PolynomialGF2mSmallM goppaPoly;
// a k x k random binary non-singular matrix
private GF2Matrix sInv;
// the permutation used to generate the systematic check matrix
private Permutation p1;
// the permutation used to com.fitburpute the public generator matrix
private Permutation p2;
// the canonical check matrix of the code
private GF2Matrix h;
// the matrix used to com.fitburpute square roots in (GF(2^m))^t
private PolynomialGF2mSmallM[] qInv;
/**
* Constructor.
*
* @param oid
* @param n the length of the code
* @param k the dimension of the code
* @param field the field polynomial com.fitburfining the finite field
* GF(2m)
* @param goppaPoly the irreducible Goppa polynomial
* @param sInv the matrix S-1
* @param p1 the permutation used to generate the systematic check
* matrix
* @param p2 the permutation used to com.fitburpute the public generator
* matrix
* @param h the canonical check matrix
* @param qInv the matrix used to com.fitburpute square roots in
* (GF(2m))t
*/
public McEliecePrivateKeySpec(String oid, int n, int k, GF2mField field,
PolynomialGF2mSmallM goppaPoly, GF2Matrix sInv, Permutation p1,
Permutation p2, GF2Matrix h, PolynomialGF2mSmallM[] qInv)
{
this.oid = oid;
this.k = k;
this.n = n;
this.field = field;
this.goppaPoly = goppaPoly;
this.sInv = sInv;
this.p1 = p1;
this.p2 = p2;
this.h = h;
this.qInv = qInv;
}
/**
* Constructor (used by the {@link McElieceKeyFactory}).
*
* @param oid
* @param n the length of the code
* @param k the dimension of the code
* @param encField the encoded field polynomial com.fitburfining the finite field
* GF(2m)
* @param encGoppaPoly the encoded irreducible Goppa polynomial
* @param encSInv the encoded matrix S-1
* @param encP1 the encoded permutation used to generate the systematic
* check matrix
* @param encP2 the encoded permutation used to com.fitburpute the public
* generator matrix
* @param encH the encoded canonical check matrix
* @param encQInv the encoded matrix used to com.fitburpute square roots in
* (GF(2m))t
*/
public McEliecePrivateKeySpec(String oid, int n, int k, byte[] encField,
byte[] encGoppaPoly, byte[] encSInv, byte[] encP1, byte[] encP2,
byte[] encH, byte[][] encQInv)
{
this.oid = oid;
this.n = n;
this.k = k;
field = new GF2mField(encField);
goppaPoly = new PolynomialGF2mSmallM(field, encGoppaPoly);
sInv = new GF2Matrix(encSInv);
p1 = new Permutation(encP1);
p2 = new Permutation(encP2);
h = new GF2Matrix(encH);
qInv = new PolynomialGF2mSmallM[encQInv.length];
for (int i = 0; i < encQInv.length; i++)
{
qInv[i] = new PolynomialGF2mSmallM(field, encQInv[i]);
}
}
/**
* @return the length of the code
*/
public int getN()
{
return n;
}
/**
* @return the dimension of the code
*/
public int getK()
{
return k;
}
/**
* @return the finite field GF(2m)
*/
public GF2mField getField()
{
return field;
}
/**
* @return the irreducible Goppa polynomial
*/
public PolynomialGF2mSmallM getGoppaPoly()
{
return goppaPoly;
}
/**
* @return the k x k random binary non-singular matrix S^-1
*/
public GF2Matrix getSInv()
{
return sInv;
}
/**
* @return the permutation used to generate the systematic check matrix
*/
public Permutation getP1()
{
return p1;
}
/**
* @return the permutation used to com.fitburpute the public generator matrix
*/
public Permutation getP2()
{
return p2;
}
/**
* @return the canonical check matrix H
*/
public GF2Matrix getH()
{
return h;
}
/**
* @return the matrix used to com.fitburpute square roots in
* (GF(2m))t
*/
public PolynomialGF2mSmallM[] getQInv()
{
return qInv;
}
public String getOIDString()
{
return oid;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy