use of org.bouncycastle.pqc.asn1.XMSSKeyParams in project jmulticard by ctt-gob-es.
the class SubjectPublicKeyInfoFactory method createSubjectPublicKeyInfo.
/**
* Create a SubjectPublicKeyInfo public key.
*
* @param publicKey the key to be encoded into the info object.
* @return a SubjectPublicKeyInfo representing the key.
* @throws java.io.IOException on an error encoding the key
*/
public static SubjectPublicKeyInfo createSubjectPublicKeyInfo(AsymmetricKeyParameter publicKey) throws IOException {
if (publicKey instanceof QTESLAPublicKeyParameters) {
QTESLAPublicKeyParameters keyParams = (QTESLAPublicKeyParameters) publicKey;
AlgorithmIdentifier algorithmIdentifier = Utils.qTeslaLookupAlgID(keyParams.getSecurityCategory());
return new SubjectPublicKeyInfo(algorithmIdentifier, keyParams.getPublicData());
} else if (publicKey instanceof SPHINCSPublicKeyParameters) {
SPHINCSPublicKeyParameters params = (SPHINCSPublicKeyParameters) publicKey;
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.sphincs256, new SPHINCS256KeyParams(Utils.sphincs256LookupTreeAlgID(params.getTreeDigest())));
return new SubjectPublicKeyInfo(algorithmIdentifier, params.getKeyData());
} else if (publicKey instanceof NHPublicKeyParameters) {
NHPublicKeyParameters params = (NHPublicKeyParameters) publicKey;
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.newHope);
return new SubjectPublicKeyInfo(algorithmIdentifier, params.getPubData());
} else if (publicKey instanceof LMSPublicKeyParameters) {
LMSPublicKeyParameters params = (LMSPublicKeyParameters) publicKey;
byte[] encoding = Composer.compose().u32str(1).bytes(params).build();
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_alg_hss_lms_hashsig);
return new SubjectPublicKeyInfo(algorithmIdentifier, new DEROctetString(encoding));
} else if (publicKey instanceof HSSPublicKeyParameters) {
HSSPublicKeyParameters params = (HSSPublicKeyParameters) publicKey;
byte[] encoding = Composer.compose().u32str(params.getL()).bytes(params.getLMSPublicKey()).build();
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_alg_hss_lms_hashsig);
return new SubjectPublicKeyInfo(algorithmIdentifier, new DEROctetString(encoding));
} else if (publicKey instanceof SPHINCSPlusPublicKeyParameters) {
SPHINCSPlusPublicKeyParameters params = (SPHINCSPlusPublicKeyParameters) publicKey;
byte[] encoding = params.getEncoded();
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(Utils.sphincsPlusOidLookup(params.getParameters()));
return new SubjectPublicKeyInfo(algorithmIdentifier, new DEROctetString(encoding));
} else if (publicKey instanceof CMCEPublicKeyParameters) {
CMCEPublicKeyParameters params = (CMCEPublicKeyParameters) publicKey;
byte[] encoding = params.getEncoded();
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(Utils.mcElieceOidLookup(params.getParameters()));
// https://datatracker.ietf.org/doc/draft-uni-qsckeys/
return new SubjectPublicKeyInfo(algorithmIdentifier, new CMCEPublicKey(encoding));
} else if (publicKey instanceof XMSSPublicKeyParameters) {
XMSSPublicKeyParameters keyParams = (XMSSPublicKeyParameters) publicKey;
byte[] publicSeed = keyParams.getPublicSeed();
byte[] root = keyParams.getRoot();
byte[] keyEnc = keyParams.getEncoded();
if (keyEnc.length > publicSeed.length + root.length) {
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(IsaraObjectIdentifiers.id_alg_xmss);
return new SubjectPublicKeyInfo(algorithmIdentifier, new DEROctetString(keyEnc));
} else {
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.xmss, new XMSSKeyParams(keyParams.getParameters().getHeight(), Utils.xmssLookupTreeAlgID(keyParams.getTreeDigest())));
return new SubjectPublicKeyInfo(algorithmIdentifier, new XMSSPublicKey(publicSeed, root));
}
} else if (publicKey instanceof XMSSMTPublicKeyParameters) {
XMSSMTPublicKeyParameters keyParams = (XMSSMTPublicKeyParameters) publicKey;
byte[] publicSeed = keyParams.getPublicSeed();
byte[] root = keyParams.getRoot();
byte[] keyEnc = keyParams.getEncoded();
if (keyEnc.length > publicSeed.length + root.length) {
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(IsaraObjectIdentifiers.id_alg_xmssmt);
return new SubjectPublicKeyInfo(algorithmIdentifier, new DEROctetString(keyEnc));
} else {
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.xmss_mt, new XMSSMTKeyParams(keyParams.getParameters().getHeight(), keyParams.getParameters().getLayers(), Utils.xmssLookupTreeAlgID(keyParams.getTreeDigest())));
return new SubjectPublicKeyInfo(algorithmIdentifier, new XMSSMTPublicKey(keyParams.getPublicSeed(), keyParams.getRoot()));
}
} else if (publicKey instanceof McElieceCCA2PublicKeyParameters) {
McElieceCCA2PublicKeyParameters pub = (McElieceCCA2PublicKeyParameters) publicKey;
McElieceCCA2PublicKey mcEliecePub = new McElieceCCA2PublicKey(pub.getN(), pub.getT(), pub.getG(), Utils.getAlgorithmIdentifier(pub.getDigest()));
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.mcElieceCca2);
return new SubjectPublicKeyInfo(algorithmIdentifier, mcEliecePub);
} else if (publicKey instanceof FrodoPublicKeyParameters) {
FrodoPublicKeyParameters params = (FrodoPublicKeyParameters) publicKey;
byte[] encoding = params.getEncoded();
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(Utils.frodoOidLookup(params.getParameters()));
return new SubjectPublicKeyInfo(algorithmIdentifier, (new DEROctetString(encoding)));
} else if (publicKey instanceof SABERPublicKeyParameters) {
SABERPublicKeyParameters params = (SABERPublicKeyParameters) publicKey;
byte[] encoding = params.getEncoded();
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(Utils.saberOidLookup(params.getParameters()));
// https://datatracker.ietf.org/doc/draft-uni-qsckeys/
return new SubjectPublicKeyInfo(algorithmIdentifier, new DERSequence(new DEROctetString(encoding)));
} else {
throw new IOException("key parameters not recognized");
}
}
use of org.bouncycastle.pqc.asn1.XMSSKeyParams in project LinLong-Java by zhenwei1108.
the class PrivateKeyInfoFactory method createPrivateKeyInfo.
/**
* Create a PrivateKeyInfo representation of a private key with attributes.
*
* @param privateKey the key to be encoded into the info object.
* @param attributes the set of attributes to be included.
* @return the appropriate PrivateKeyInfo
* @throws IOException on an error encoding the key
*/
public static PrivateKeyInfo createPrivateKeyInfo(AsymmetricKeyParameter privateKey, ASN1Set attributes) throws IOException {
if (privateKey instanceof QTESLAPrivateKeyParameters) {
QTESLAPrivateKeyParameters keyParams = (QTESLAPrivateKeyParameters) privateKey;
AlgorithmIdentifier algorithmIdentifier = Utils.qTeslaLookupAlgID(keyParams.getSecurityCategory());
return new PrivateKeyInfo(algorithmIdentifier, new DEROctetString(keyParams.getSecret()), attributes);
} else if (privateKey instanceof SPHINCSPrivateKeyParameters) {
SPHINCSPrivateKeyParameters params = (SPHINCSPrivateKeyParameters) privateKey;
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.sphincs256, new SPHINCS256KeyParams(Utils.sphincs256LookupTreeAlgID(params.getTreeDigest())));
return new PrivateKeyInfo(algorithmIdentifier, new DEROctetString(params.getKeyData()));
} else if (privateKey instanceof NHPrivateKeyParameters) {
NHPrivateKeyParameters params = (NHPrivateKeyParameters) privateKey;
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.newHope);
short[] privateKeyData = params.getSecData();
byte[] octets = new byte[privateKeyData.length * 2];
for (int i = 0; i != privateKeyData.length; i++) {
Pack.shortToLittleEndian(privateKeyData[i], octets, i * 2);
}
return new PrivateKeyInfo(algorithmIdentifier, new DEROctetString(octets));
} else if (privateKey instanceof LMSPrivateKeyParameters) {
LMSPrivateKeyParameters params = (LMSPrivateKeyParameters) privateKey;
byte[] encoding = Composer.compose().u32str(1).bytes(params).build();
byte[] pubEncoding = Composer.compose().u32str(1).bytes(params.getPublicKey()).build();
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_alg_hss_lms_hashsig);
return new PrivateKeyInfo(algorithmIdentifier, new DEROctetString(encoding), attributes, pubEncoding);
} else if (privateKey instanceof HSSPrivateKeyParameters) {
HSSPrivateKeyParameters params = (HSSPrivateKeyParameters) privateKey;
byte[] encoding = Composer.compose().u32str(params.getL()).bytes(params).build();
byte[] pubEncoding = Composer.compose().u32str(params.getL()).bytes(params.getPublicKey().getLMSPublicKey()).build();
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_alg_hss_lms_hashsig);
return new PrivateKeyInfo(algorithmIdentifier, new DEROctetString(encoding), attributes, pubEncoding);
} else if (privateKey instanceof XMSSPrivateKeyParameters) {
XMSSPrivateKeyParameters keyParams = (XMSSPrivateKeyParameters) privateKey;
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.xmss, new XMSSKeyParams(keyParams.getParameters().getHeight(), Utils.xmssLookupTreeAlgID(keyParams.getTreeDigest())));
return new PrivateKeyInfo(algorithmIdentifier, xmssCreateKeyStructure(keyParams), attributes);
} else if (privateKey instanceof XMSSMTPrivateKeyParameters) {
XMSSMTPrivateKeyParameters keyParams = (XMSSMTPrivateKeyParameters) privateKey;
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.xmss_mt, new XMSSMTKeyParams(keyParams.getParameters().getHeight(), keyParams.getParameters().getLayers(), Utils.xmssLookupTreeAlgID(keyParams.getTreeDigest())));
return new PrivateKeyInfo(algorithmIdentifier, xmssmtCreateKeyStructure(keyParams), attributes);
} else if (privateKey instanceof McElieceCCA2PrivateKeyParameters) {
McElieceCCA2PrivateKeyParameters priv = (McElieceCCA2PrivateKeyParameters) privateKey;
McElieceCCA2PrivateKey mcEliecePriv = new McElieceCCA2PrivateKey(priv.getN(), priv.getK(), priv.getField(), priv.getGoppaPoly(), priv.getP(), Utils.getAlgorithmIdentifier(priv.getDigest()));
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.mcElieceCca2);
return new PrivateKeyInfo(algorithmIdentifier, mcEliecePriv);
} else {
throw new IOException("key parameters not recognized");
}
}
use of org.bouncycastle.pqc.asn1.XMSSKeyParams in project LinLong-Java by zhenwei1108.
the class SubjectPublicKeyInfoFactory method createSubjectPublicKeyInfo.
/**
* Create a SubjectPublicKeyInfo public key.
*
* @param publicKey the key to be encoded into the info object.
* @return a SubjectPublicKeyInfo representing the key.
* @throws IOException on an error encoding the key
*/
public static SubjectPublicKeyInfo createSubjectPublicKeyInfo(AsymmetricKeyParameter publicKey) throws IOException {
if (publicKey instanceof QTESLAPublicKeyParameters) {
QTESLAPublicKeyParameters keyParams = (QTESLAPublicKeyParameters) publicKey;
AlgorithmIdentifier algorithmIdentifier = Utils.qTeslaLookupAlgID(keyParams.getSecurityCategory());
return new SubjectPublicKeyInfo(algorithmIdentifier, keyParams.getPublicData());
} else if (publicKey instanceof SPHINCSPublicKeyParameters) {
SPHINCSPublicKeyParameters params = (SPHINCSPublicKeyParameters) publicKey;
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.sphincs256, new SPHINCS256KeyParams(Utils.sphincs256LookupTreeAlgID(params.getTreeDigest())));
return new SubjectPublicKeyInfo(algorithmIdentifier, params.getKeyData());
} else if (publicKey instanceof NHPublicKeyParameters) {
NHPublicKeyParameters params = (NHPublicKeyParameters) publicKey;
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.newHope);
return new SubjectPublicKeyInfo(algorithmIdentifier, params.getPubData());
} else if (publicKey instanceof LMSPublicKeyParameters) {
LMSPublicKeyParameters params = (LMSPublicKeyParameters) publicKey;
byte[] encoding = Composer.compose().u32str(1).bytes(params).build();
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_alg_hss_lms_hashsig);
return new SubjectPublicKeyInfo(algorithmIdentifier, new DEROctetString(encoding));
} else if (publicKey instanceof HSSPublicKeyParameters) {
HSSPublicKeyParameters params = (HSSPublicKeyParameters) publicKey;
byte[] encoding = Composer.compose().u32str(params.getL()).bytes(params.getLMSPublicKey()).build();
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_alg_hss_lms_hashsig);
return new SubjectPublicKeyInfo(algorithmIdentifier, new DEROctetString(encoding));
} else if (publicKey instanceof XMSSPublicKeyParameters) {
XMSSPublicKeyParameters keyParams = (XMSSPublicKeyParameters) publicKey;
byte[] publicSeed = keyParams.getPublicSeed();
byte[] root = keyParams.getRoot();
byte[] keyEnc = keyParams.getEncoded();
if (keyEnc.length > publicSeed.length + root.length) {
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(IsaraObjectIdentifiers.id_alg_xmss);
return new SubjectPublicKeyInfo(algorithmIdentifier, new DEROctetString(keyEnc));
} else {
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.xmss, new XMSSKeyParams(keyParams.getParameters().getHeight(), Utils.xmssLookupTreeAlgID(keyParams.getTreeDigest())));
return new SubjectPublicKeyInfo(algorithmIdentifier, new XMSSPublicKey(publicSeed, root));
}
} else if (publicKey instanceof XMSSMTPublicKeyParameters) {
XMSSMTPublicKeyParameters keyParams = (XMSSMTPublicKeyParameters) publicKey;
byte[] publicSeed = keyParams.getPublicSeed();
byte[] root = keyParams.getRoot();
byte[] keyEnc = keyParams.getEncoded();
if (keyEnc.length > publicSeed.length + root.length) {
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(IsaraObjectIdentifiers.id_alg_xmssmt);
return new SubjectPublicKeyInfo(algorithmIdentifier, new DEROctetString(keyEnc));
} else {
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.xmss_mt, new XMSSMTKeyParams(keyParams.getParameters().getHeight(), keyParams.getParameters().getLayers(), Utils.xmssLookupTreeAlgID(keyParams.getTreeDigest())));
return new SubjectPublicKeyInfo(algorithmIdentifier, new XMSSMTPublicKey(keyParams.getPublicSeed(), keyParams.getRoot()));
}
} else if (publicKey instanceof McElieceCCA2PublicKeyParameters) {
McElieceCCA2PublicKeyParameters pub = (McElieceCCA2PublicKeyParameters) publicKey;
McElieceCCA2PublicKey mcEliecePub = new McElieceCCA2PublicKey(pub.getN(), pub.getT(), pub.getG(), Utils.getAlgorithmIdentifier(pub.getDigest()));
AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.mcElieceCca2);
return new SubjectPublicKeyInfo(algorithmIdentifier, mcEliecePub);
} else {
throw new IOException("key parameters not recognized");
}
}
use of org.bouncycastle.pqc.asn1.XMSSKeyParams in project jmulticard by ctt-gob-es.
the class BCXMSSPrivateKey method init.
private void init(PrivateKeyInfo keyInfo) throws IOException {
this.attributes = keyInfo.getAttributes();
XMSSKeyParams keyParams = XMSSKeyParams.getInstance(keyInfo.getPrivateKeyAlgorithm().getParameters());
this.treeDigest = keyParams.getTreeDigest().getAlgorithm();
this.keyParams = (XMSSPrivateKeyParameters) PrivateKeyFactory.createKey(keyInfo);
}
use of org.bouncycastle.pqc.asn1.XMSSKeyParams in project LinLong-Java by zhenwei1108.
the class BCXMSSPrivateKey method init.
private void init(PrivateKeyInfo keyInfo) throws IOException {
this.attributes = keyInfo.getAttributes();
XMSSKeyParams keyParams = XMSSKeyParams.getInstance(keyInfo.getPrivateKeyAlgorithm().getParameters());
this.treeDigest = keyParams.getTreeDigest().getAlgorithm();
this.keyParams = (XMSSPrivateKeyParameters) PrivateKeyFactory.createKey(keyInfo);
}
Aggregations