111 lines
6.8 KiB
Java
111 lines
6.8 KiB
Java
package org.bouncycastle.crypto.util;
|
|
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.math.BigInteger;
|
|
import org.bouncycastle.asn1.ASN1Encodable;
|
|
import org.bouncycastle.asn1.ASN1InputStream;
|
|
import org.bouncycastle.asn1.ASN1Integer;
|
|
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
|
|
import org.bouncycastle.asn1.ASN1Primitive;
|
|
import org.bouncycastle.asn1.DEROctetString;
|
|
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.RSAPublicKey;
|
|
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
|
|
import org.bouncycastle.asn1.x509.DSAParameter;
|
|
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
|
|
import org.bouncycastle.asn1.x509.X509ObjectIdentifiers;
|
|
import org.bouncycastle.asn1.x9.DHPublicKey;
|
|
import org.bouncycastle.asn1.x9.DomainParameters;
|
|
import org.bouncycastle.asn1.x9.ECNamedCurveTable;
|
|
import org.bouncycastle.asn1.x9.ValidationParams;
|
|
import org.bouncycastle.asn1.x9.X962Parameters;
|
|
import org.bouncycastle.asn1.x9.X9ECParameters;
|
|
import org.bouncycastle.asn1.x9.X9ECPoint;
|
|
import org.bouncycastle.asn1.x9.X9ObjectIdentifiers;
|
|
import org.bouncycastle.crypto.ec.CustomNamedCurves;
|
|
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
|
|
import org.bouncycastle.crypto.params.DHParameters;
|
|
import org.bouncycastle.crypto.params.DHPublicKeyParameters;
|
|
import org.bouncycastle.crypto.params.DHValidationParameters;
|
|
import org.bouncycastle.crypto.params.DSAParameters;
|
|
import org.bouncycastle.crypto.params.DSAPublicKeyParameters;
|
|
import org.bouncycastle.crypto.params.ECDomainParameters;
|
|
import org.bouncycastle.crypto.params.ECNamedDomainParameters;
|
|
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
|
|
import org.bouncycastle.crypto.params.ElGamalParameters;
|
|
import org.bouncycastle.crypto.params.ElGamalPublicKeyParameters;
|
|
import org.bouncycastle.crypto.params.RSAKeyParameters;
|
|
|
|
/* loaded from: classes6.dex */
|
|
public class PublicKeyFactory {
|
|
public static AsymmetricKeyParameter createKey(byte[] bArr) throws IOException {
|
|
return createKey(SubjectPublicKeyInfo.getInstance(ASN1Primitive.fromByteArray(bArr)));
|
|
}
|
|
|
|
public static AsymmetricKeyParameter createKey(SubjectPublicKeyInfo subjectPublicKeyInfo) throws IOException {
|
|
X9ECParameters x9ECParameters;
|
|
ECDomainParameters eCDomainParameters;
|
|
AlgorithmIdentifier algorithm = subjectPublicKeyInfo.getAlgorithm();
|
|
if (algorithm.getAlgorithm().equals(PKCSObjectIdentifiers.rsaEncryption) || algorithm.getAlgorithm().equals(X509ObjectIdentifiers.id_ea_rsa)) {
|
|
RSAPublicKey rSAPublicKey = RSAPublicKey.getInstance(subjectPublicKeyInfo.parsePublicKey());
|
|
return new RSAKeyParameters(false, rSAPublicKey.getModulus(), rSAPublicKey.getPublicExponent());
|
|
}
|
|
DSAParameters dSAParameters = null;
|
|
if (algorithm.getAlgorithm().equals(X9ObjectIdentifiers.dhpublicnumber)) {
|
|
BigInteger y = DHPublicKey.getInstance(subjectPublicKeyInfo.parsePublicKey()).getY();
|
|
DomainParameters domainParameters = DomainParameters.getInstance(algorithm.getParameters());
|
|
BigInteger p = domainParameters.getP();
|
|
BigInteger g = domainParameters.getG();
|
|
BigInteger q = domainParameters.getQ();
|
|
BigInteger j = domainParameters.getJ() != null ? domainParameters.getJ() : null;
|
|
ValidationParams validationParams = domainParameters.getValidationParams();
|
|
return new DHPublicKeyParameters(y, new DHParameters(p, g, q, j, validationParams != null ? new DHValidationParameters(validationParams.getSeed(), validationParams.getPgenCounter().intValue()) : null));
|
|
}
|
|
if (algorithm.getAlgorithm().equals(PKCSObjectIdentifiers.dhKeyAgreement)) {
|
|
DHParameter dHParameter = DHParameter.getInstance(algorithm.getParameters());
|
|
ASN1Integer aSN1Integer = (ASN1Integer) subjectPublicKeyInfo.parsePublicKey();
|
|
BigInteger l = dHParameter.getL();
|
|
return new DHPublicKeyParameters(aSN1Integer.getValue(), new DHParameters(dHParameter.getP(), dHParameter.getG(), null, l != null ? l.intValue() : 0));
|
|
}
|
|
if (algorithm.getAlgorithm().equals(OIWObjectIdentifiers.elGamalAlgorithm)) {
|
|
ElGamalParameter elGamalParameter = ElGamalParameter.getInstance(algorithm.getParameters());
|
|
return new ElGamalPublicKeyParameters(((ASN1Integer) subjectPublicKeyInfo.parsePublicKey()).getValue(), new ElGamalParameters(elGamalParameter.getP(), elGamalParameter.getG()));
|
|
}
|
|
if (algorithm.getAlgorithm().equals(X9ObjectIdentifiers.id_dsa) || algorithm.getAlgorithm().equals(OIWObjectIdentifiers.dsaWithSHA1)) {
|
|
ASN1Integer aSN1Integer2 = (ASN1Integer) subjectPublicKeyInfo.parsePublicKey();
|
|
ASN1Encodable parameters = algorithm.getParameters();
|
|
if (parameters != null) {
|
|
DSAParameter dSAParameter = DSAParameter.getInstance(parameters.toASN1Primitive());
|
|
dSAParameters = new DSAParameters(dSAParameter.getP(), dSAParameter.getQ(), dSAParameter.getG());
|
|
}
|
|
return new DSAPublicKeyParameters(aSN1Integer2.getValue(), dSAParameters);
|
|
}
|
|
if (!algorithm.getAlgorithm().equals(X9ObjectIdentifiers.id_ecPublicKey)) {
|
|
throw new RuntimeException("algorithm identifier in key not recognised");
|
|
}
|
|
X962Parameters x962Parameters = X962Parameters.getInstance(algorithm.getParameters());
|
|
boolean isNamedCurve = x962Parameters.isNamedCurve();
|
|
ASN1Primitive parameters2 = x962Parameters.getParameters();
|
|
if (isNamedCurve) {
|
|
ASN1ObjectIdentifier aSN1ObjectIdentifier = (ASN1ObjectIdentifier) parameters2;
|
|
x9ECParameters = CustomNamedCurves.getByOID(aSN1ObjectIdentifier);
|
|
if (x9ECParameters == null) {
|
|
x9ECParameters = ECNamedCurveTable.getByOID(aSN1ObjectIdentifier);
|
|
}
|
|
eCDomainParameters = new ECNamedDomainParameters(aSN1ObjectIdentifier, x9ECParameters.getCurve(), x9ECParameters.getG(), x9ECParameters.getN(), x9ECParameters.getH(), x9ECParameters.getSeed());
|
|
} else {
|
|
x9ECParameters = X9ECParameters.getInstance(parameters2);
|
|
eCDomainParameters = new ECDomainParameters(x9ECParameters.getCurve(), x9ECParameters.getG(), x9ECParameters.getN(), x9ECParameters.getH(), x9ECParameters.getSeed());
|
|
}
|
|
return new ECPublicKeyParameters(new X9ECPoint(x9ECParameters.getCurve(), new DEROctetString(subjectPublicKeyInfo.getPublicKeyData().getBytes())).getPoint(), eCDomainParameters);
|
|
}
|
|
|
|
public static AsymmetricKeyParameter createKey(InputStream inputStream) throws IOException {
|
|
return createKey(SubjectPublicKeyInfo.getInstance(new ASN1InputStream(inputStream).readObject()));
|
|
}
|
|
}
|