Create a private key parameter from the passed in PKCS8 PrivateKeyInfo object.
AlgorithmIdentifier algId = keyInfo.getAlgorithmId();
if (algId.getObjectId().equals(PKCSObjectIdentifiers.rsaEncryption))
{
RSAPrivateKeyStructure keyStructure = new RSAPrivateKeyStructure((ASN1Sequence)keyInfo.getPrivateKey());
return new RSAPrivateCrtKeyParameters(
keyStructure.getModulus(),
keyStructure.getPublicExponent(),
keyStructure.getPrivateExponent(),
keyStructure.getPrime1(),
keyStructure.getPrime2(),
keyStructure.getExponent1(),
keyStructure.getExponent2(),
keyStructure.getCoefficient());
}
else if (algId.getObjectId().equals(PKCSObjectIdentifiers.dhKeyAgreement))
{
DHParameter params = new DHParameter((ASN1Sequence)keyInfo.getAlgorithmId().getParameters());
DERInteger derX = (DERInteger)keyInfo.getPrivateKey();
return new DHPrivateKeyParameters(derX.getValue(), new DHParameters(params.getP(), params.getG()));
}
// BEGIN android-removed
// else if (algId.getObjectId().equals(OIWObjectIdentifiers.elGamalAlgorithm))
// {
// ElGamalParameter params = new ElGamalParameter((ASN1Sequence)keyInfo.getAlgorithmId().getParameters());
// DERInteger derX = (DERInteger)keyInfo.getPrivateKey();
//
// return new ElGamalPrivateKeyParameters(derX.getValue(), new ElGamalParameters(params.getP(), params.getG()));
// }
// END android-removed
else if (algId.getObjectId().equals(X9ObjectIdentifiers.id_dsa))
{
DSAParameter params = new DSAParameter((ASN1Sequence)keyInfo.getAlgorithmId().getParameters());
DERInteger derX = (DERInteger)keyInfo.getPrivateKey();
return new DSAPrivateKeyParameters(derX.getValue(), new DSAParameters(params.getP(), params.getQ(), params.getG()));
}
// BEGIN android-removed
// else if (algId.getObjectId().equals(X9ObjectIdentifiers.id_ecPublicKey))
// {
// X962Parameters params = new X962Parameters((DERObject)keyInfo.getAlgorithmId().getParameters());
// ECDomainParameters dParams = null;
//
// if (params.isNamedCurve())
// {
// DERObjectIdentifier oid = (DERObjectIdentifier)params.getParameters();
// X9ECParameters ecP = X962NamedCurves.getByOID(oid);
//
// dParams = new ECDomainParameters(
// ecP.getCurve(),
// ecP.getG(),
// ecP.getN(),
// ecP.getH(),
// ecP.getSeed());
// }
// else
// {
// X9ECParameters ecP = new X9ECParameters(
// (ASN1Sequence)params.getParameters());
// dParams = new ECDomainParameters(
// ecP.getCurve(),
// ecP.getG(),
// ecP.getN(),
// ecP.getH(),
// ecP.getSeed());
// }
//
// ECPrivateKeyStructure ec = new ECPrivateKeyStructure((ASN1Sequence)keyInfo.getPrivateKey());
//
// return new ECPrivateKeyParameters(ec.getKey(), dParams);
// }
// END android-removed
else
{
throw new RuntimeException("algorithm identifier in key not recognised");
}