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

PublicKeyFactory

public class PublicKeyFactory extends Object
Factory to create asymmetric public key parameters for asymmetric ciphers from range of ASN.1 encoded SubjectPublicKeyInfo objects.

Fields Summary
Constructors Summary
Methods Summary
public static org.bouncycastle.crypto.params.AsymmetricKeyParametercreateKey(org.bouncycastle.asn1.x509.SubjectPublicKeyInfo keyInfo)
Create a public key from the passed in SubjectPublicKeyInfo

param
keyInfo the SubjectPublicKeyInfo containing the key data
return
the appropriate key parameter
throws
IOException on an error decoding the key

        AlgorithmIdentifier     algId = keyInfo.getAlgorithmId();
        
        if (algId.getObjectId().equals(PKCSObjectIdentifiers.rsaEncryption)
            || algId.getObjectId().equals(X509ObjectIdentifiers.id_ea_rsa))
        {
            RSAPublicKeyStructure   pubKey = new RSAPublicKeyStructure((ASN1Sequence)keyInfo.getPublicKey());

            return new RSAKeyParameters(false, pubKey.getModulus(), pubKey.getPublicExponent());
        }
        else if (algId.getObjectId().equals(PKCSObjectIdentifiers.dhKeyAgreement)
                 || algId.getObjectId().equals(X9ObjectIdentifiers.dhpublicnumber))
        {
            DHParameter params = new DHParameter((ASN1Sequence)keyInfo.getAlgorithmId().getParameters());
            DERInteger  derY = (DERInteger)keyInfo.getPublicKey();
            
            return new DHPublicKeyParameters(derY.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          derY = (DERInteger)keyInfo.getPublicKey();
        //
        //     return new ElGamalPublicKeyParameters(derY.getValue(), new ElGamalParameters(params.getP(), params.getG()));
        // }
        // END android-removed
        else if (algId.getObjectId().equals(X9ObjectIdentifiers.id_dsa)
                 || algId.getObjectId().equals(OIWObjectIdentifiers.dsaWithSHA1))
        {
            DSAParameter    params = new DSAParameter((ASN1Sequence)keyInfo.getAlgorithmId().getParameters());
            DERInteger      derY = (DERInteger)keyInfo.getPublicKey();

            return new DSAPublicKeyParameters(derY.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());
        //     }
        //
        //     DERBitString    bits = keyInfo.getPublicKeyData();
        //     byte[]          data = bits.getBytes();
        //     ASN1OctetString key = new DEROctetString(data);
        //
        //     X9ECPoint       derQ = new X9ECPoint(dParams.getCurve(), key);
        //    
        //     return new ECPublicKeyParameters(derQ.getPoint(), dParams);
        // }
        // BEGIN android-removed
        else
        {
            throw new RuntimeException("algorithm identifier in key not recognised");
        }