FileDocCategorySizeDatePackage
PrivateKeyFactory.javaAPI DocAndroid 1.5 API6323Wed May 06 22:41:06 BST 2009org.bouncycastle.crypto.util

PrivateKeyFactory

public class PrivateKeyFactory extends Object
Factory for creating private key objects from PKCS8 PrivateKeyInfo objects.

Fields Summary
Constructors Summary
Methods Summary
public static org.bouncycastle.crypto.params.AsymmetricKeyParametercreateKey(org.bouncycastle.asn1.pkcs.PrivateKeyInfo keyInfo)
Create a private key parameter from the passed in PKCS8 PrivateKeyInfo object.

param
keyInfo the PrivateKeyInfo object containing the key material
return
a suitable private key parameter
throws
IOException on an error decoding the key

        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");
        }