Search in sources :

Example 1 with XMSSPrivateKeyParameters

use of org.bouncycastle.pqc.crypto.xmss.XMSSPrivateKeyParameters in project jmulticard by ctt-gob-es.

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 java.io.IOException on an error encoding the key
 */
public static PrivateKeyInfo createPrivateKeyInfo(final AsymmetricKeyParameter privateKey, final ASN1Set attributes) throws IOException {
    if (privateKey instanceof QTESLAPrivateKeyParameters) {
        final QTESLAPrivateKeyParameters keyParams = (QTESLAPrivateKeyParameters) privateKey;
        final AlgorithmIdentifier algorithmIdentifier = Utils.qTeslaLookupAlgID(keyParams.getSecurityCategory());
        return new PrivateKeyInfo(algorithmIdentifier, new DEROctetString(keyParams.getSecret()), attributes);
    }
    if (privateKey instanceof SPHINCSPrivateKeyParameters) {
        final SPHINCSPrivateKeyParameters params = (SPHINCSPrivateKeyParameters) privateKey;
        final AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.sphincs256, new SPHINCS256KeyParams(Utils.sphincs256LookupTreeAlgID(params.getTreeDigest())));
        return new PrivateKeyInfo(algorithmIdentifier, new DEROctetString(params.getKeyData()));
    }
    if (privateKey instanceof NHPrivateKeyParameters) {
        final NHPrivateKeyParameters params = (NHPrivateKeyParameters) privateKey;
        final AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.newHope);
        final short[] privateKeyData = params.getSecData();
        final 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));
    }
    if (privateKey instanceof LMSPrivateKeyParameters) {
        final LMSPrivateKeyParameters params = (LMSPrivateKeyParameters) privateKey;
        final byte[] encoding = Composer.compose().u32str(1).bytes(params).build();
        final byte[] pubEncoding = Composer.compose().u32str(1).bytes(params.getPublicKey()).build();
        final AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_alg_hss_lms_hashsig);
        return new PrivateKeyInfo(algorithmIdentifier, new DEROctetString(encoding), attributes, pubEncoding);
    }
    if (privateKey instanceof HSSPrivateKeyParameters) {
        final HSSPrivateKeyParameters params = (HSSPrivateKeyParameters) privateKey;
        final byte[] encoding = Composer.compose().u32str(params.getL()).bytes(params).build();
        final byte[] pubEncoding = Composer.compose().u32str(params.getL()).bytes(params.getPublicKey().getLMSPublicKey()).build();
        final AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_alg_hss_lms_hashsig);
        return new PrivateKeyInfo(algorithmIdentifier, new DEROctetString(encoding), attributes, pubEncoding);
    }
    if (privateKey instanceof SPHINCSPlusPrivateKeyParameters) {
        final SPHINCSPlusPrivateKeyParameters params = (SPHINCSPlusPrivateKeyParameters) privateKey;
        final byte[] encoding = params.getEncoded();
        final byte[] pubEncoding = params.getEncodedPublicKey();
        final AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(Utils.sphincsPlusOidLookup(params.getParameters()));
        return new PrivateKeyInfo(algorithmIdentifier, new DEROctetString(encoding), attributes, pubEncoding);
    }
    if (privateKey instanceof CMCEPrivateKeyParameters) {
        final CMCEPrivateKeyParameters params = (CMCEPrivateKeyParameters) privateKey;
        final byte[] encoding = params.getEncoded();
        // todo either make CMCEPrivateKey split the parameters from the private key or
        // (current) Make CMCEPrivateKey take parts of the private key splitted in the params
        final AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(Utils.mcElieceOidLookup(params.getParameters()));
        final CMCEPublicKey cmcePub = new CMCEPublicKey(params.reconstructPublicKey());
        final CMCEPrivateKey cmcePriv = new CMCEPrivateKey(0, params.getDelta(), params.getC(), params.getG(), params.getAlpha(), params.getS(), cmcePub);
        return new PrivateKeyInfo(algorithmIdentifier, cmcePriv, attributes);
    } else if (privateKey instanceof XMSSPrivateKeyParameters || privateKey instanceof XMSSMTPrivateKeyParameters) {
        // $NON-NLS-1$
        throw new IOException("Modificacion para JMultiCard");
    } else if (privateKey instanceof McElieceCCA2PrivateKeyParameters) {
        final McElieceCCA2PrivateKeyParameters priv = (McElieceCCA2PrivateKeyParameters) privateKey;
        final McElieceCCA2PrivateKey mcEliecePriv = new McElieceCCA2PrivateKey(priv.getN(), priv.getK(), priv.getField(), priv.getGoppaPoly(), priv.getP(), Utils.getAlgorithmIdentifier(priv.getDigest()));
        final AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PQCObjectIdentifiers.mcElieceCca2);
        return new PrivateKeyInfo(algorithmIdentifier, mcEliecePriv);
    } else if (privateKey instanceof FrodoPrivateKeyParameters) {
        final FrodoPrivateKeyParameters params = (FrodoPrivateKeyParameters) privateKey;
        final byte[] encoding = params.getEncoded();
        final AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(Utils.frodoOidLookup(params.getParameters()));
        return new PrivateKeyInfo(algorithmIdentifier, new DEROctetString(encoding), attributes);
    } else if (privateKey instanceof SABERPrivateKeyParameters) {
        final SABERPrivateKeyParameters params = (SABERPrivateKeyParameters) privateKey;
        final byte[] encoding = params.getEncoded();
        final AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(Utils.saberOidLookup(params.getParameters()));
        return new PrivateKeyInfo(algorithmIdentifier, new DEROctetString(encoding), attributes);
    } else {
        // $NON-NLS-1$
        throw new IOException("key parameters not recognized");
    }
}
Also used : McElieceCCA2PrivateKeyParameters(org.bouncycastle.pqc.crypto.mceliece.McElieceCCA2PrivateKeyParameters) QTESLAPrivateKeyParameters(org.bouncycastle.pqc.crypto.qtesla.QTESLAPrivateKeyParameters) SABERPrivateKeyParameters(org.bouncycastle.pqc.crypto.saber.SABERPrivateKeyParameters) NHPrivateKeyParameters(org.bouncycastle.pqc.crypto.newhope.NHPrivateKeyParameters) CMCEPublicKey(org.bouncycastle.pqc.asn1.CMCEPublicKey) McElieceCCA2PrivateKey(org.bouncycastle.pqc.asn1.McElieceCCA2PrivateKey) SPHINCSPrivateKeyParameters(org.bouncycastle.pqc.crypto.sphincs.SPHINCSPrivateKeyParameters) HSSPrivateKeyParameters(org.bouncycastle.pqc.crypto.lms.HSSPrivateKeyParameters) IOException(java.io.IOException) FrodoPrivateKeyParameters(org.bouncycastle.pqc.crypto.frodo.FrodoPrivateKeyParameters) DEROctetString(org.bouncycastle.asn1.DEROctetString) AlgorithmIdentifier(org.bouncycastle.asn1.x509.AlgorithmIdentifier) SPHINCS256KeyParams(org.bouncycastle.pqc.asn1.SPHINCS256KeyParams) LMSPrivateKeyParameters(org.bouncycastle.pqc.crypto.lms.LMSPrivateKeyParameters) XMSSPrivateKeyParameters(org.bouncycastle.pqc.crypto.xmss.XMSSPrivateKeyParameters) CMCEPrivateKeyParameters(org.bouncycastle.pqc.crypto.cmce.CMCEPrivateKeyParameters) PrivateKeyInfo(org.bouncycastle.asn1.pkcs.PrivateKeyInfo) SPHINCSPlusPrivateKeyParameters(org.bouncycastle.pqc.crypto.sphincsplus.SPHINCSPlusPrivateKeyParameters) CMCEPrivateKey(org.bouncycastle.pqc.asn1.CMCEPrivateKey) XMSSMTPrivateKeyParameters(org.bouncycastle.pqc.crypto.xmss.XMSSMTPrivateKeyParameters)

Aggregations

IOException (java.io.IOException)1 DEROctetString (org.bouncycastle.asn1.DEROctetString)1 PrivateKeyInfo (org.bouncycastle.asn1.pkcs.PrivateKeyInfo)1 AlgorithmIdentifier (org.bouncycastle.asn1.x509.AlgorithmIdentifier)1 CMCEPrivateKey (org.bouncycastle.pqc.asn1.CMCEPrivateKey)1 CMCEPublicKey (org.bouncycastle.pqc.asn1.CMCEPublicKey)1 McElieceCCA2PrivateKey (org.bouncycastle.pqc.asn1.McElieceCCA2PrivateKey)1 SPHINCS256KeyParams (org.bouncycastle.pqc.asn1.SPHINCS256KeyParams)1 CMCEPrivateKeyParameters (org.bouncycastle.pqc.crypto.cmce.CMCEPrivateKeyParameters)1 FrodoPrivateKeyParameters (org.bouncycastle.pqc.crypto.frodo.FrodoPrivateKeyParameters)1 HSSPrivateKeyParameters (org.bouncycastle.pqc.crypto.lms.HSSPrivateKeyParameters)1 LMSPrivateKeyParameters (org.bouncycastle.pqc.crypto.lms.LMSPrivateKeyParameters)1 McElieceCCA2PrivateKeyParameters (org.bouncycastle.pqc.crypto.mceliece.McElieceCCA2PrivateKeyParameters)1 NHPrivateKeyParameters (org.bouncycastle.pqc.crypto.newhope.NHPrivateKeyParameters)1 QTESLAPrivateKeyParameters (org.bouncycastle.pqc.crypto.qtesla.QTESLAPrivateKeyParameters)1 SABERPrivateKeyParameters (org.bouncycastle.pqc.crypto.saber.SABERPrivateKeyParameters)1 SPHINCSPrivateKeyParameters (org.bouncycastle.pqc.crypto.sphincs.SPHINCSPrivateKeyParameters)1 SPHINCSPlusPrivateKeyParameters (org.bouncycastle.pqc.crypto.sphincsplus.SPHINCSPlusPrivateKeyParameters)1 XMSSMTPrivateKeyParameters (org.bouncycastle.pqc.crypto.xmss.XMSSMTPrivateKeyParameters)1 XMSSPrivateKeyParameters (org.bouncycastle.pqc.crypto.xmss.XMSSPrivateKeyParameters)1