⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 privatekeyfactory.java

📁 bouncycastle 是一个JAVA安全提供者
💻 JAVA
字号:
package org.bouncycastle.crypto.util;import java.io.IOException;import org.bouncycastle.asn1.ASN1Sequence;import org.bouncycastle.asn1.DERInteger;import org.bouncycastle.asn1.DERObject;import org.bouncycastle.asn1.DERObjectIdentifier;import org.bouncycastle.asn1.oiw.ElGamalParameter;import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;import org.bouncycastle.asn1.pkcs.DHParameter;import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;import org.bouncycastle.asn1.pkcs.RSAPrivateKeyStructure;import org.bouncycastle.asn1.sec.ECPrivateKeyStructure;import org.bouncycastle.asn1.x509.AlgorithmIdentifier;import org.bouncycastle.asn1.x509.DSAParameter;import org.bouncycastle.asn1.x9.X962NamedCurves;import org.bouncycastle.asn1.x9.X962Parameters;import org.bouncycastle.asn1.x9.X9ECParameters;import org.bouncycastle.asn1.x9.X9ObjectIdentifiers;import org.bouncycastle.crypto.params.AsymmetricKeyParameter;import org.bouncycastle.crypto.params.DHParameters;import org.bouncycastle.crypto.params.DHPrivateKeyParameters;import org.bouncycastle.crypto.params.DSAParameters;import org.bouncycastle.crypto.params.DSAPrivateKeyParameters;import org.bouncycastle.crypto.params.ECDomainParameters;import org.bouncycastle.crypto.params.ECPrivateKeyParameters;import org.bouncycastle.crypto.params.ElGamalParameters;import org.bouncycastle.crypto.params.ElGamalPrivateKeyParameters;import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters;/** * Factory for creating private key objects from PKCS8 PrivateKeyInfo objects. */public class PrivateKeyFactory{    /**     * 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     */    public static AsymmetricKeyParameter createKey(        PrivateKeyInfo    keyInfo)        throws IOException    {        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()));        }        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()));        }        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()));        }        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);        }        else        {            throw new RuntimeException("algorithm identifier in key not recognised");        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -