208 lines
15 KiB
Java
208 lines
15 KiB
Java
package org.bouncycastle.jce.provider;
|
|
|
|
import java.security.InvalidAlgorithmParameterException;
|
|
import java.security.cert.CertPathBuilderException;
|
|
import java.security.cert.CertPathBuilderResult;
|
|
import java.security.cert.CertPathBuilderSpi;
|
|
import java.security.cert.CertPathParameters;
|
|
import java.security.cert.PKIXBuilderParameters;
|
|
import java.security.cert.X509Certificate;
|
|
import java.util.ArrayList;
|
|
import java.util.Collection;
|
|
import java.util.Iterator;
|
|
import org.bouncycastle.jcajce.PKIXCertStore;
|
|
import org.bouncycastle.jcajce.PKIXCertStoreSelector;
|
|
import org.bouncycastle.jcajce.PKIXExtendedBuilderParameters;
|
|
import org.bouncycastle.jcajce.PKIXExtendedParameters;
|
|
import org.bouncycastle.jce.exception.ExtCertPathBuilderException;
|
|
import org.bouncycastle.x509.ExtendedPKIXBuilderParameters;
|
|
import org.bouncycastle.x509.ExtendedPKIXParameters;
|
|
|
|
/* loaded from: classes6.dex */
|
|
public class PKIXCertPathBuilderSpi extends CertPathBuilderSpi {
|
|
private Exception certPathException;
|
|
|
|
@Override // java.security.cert.CertPathBuilderSpi
|
|
public CertPathBuilderResult engineBuild(CertPathParameters certPathParameters) throws CertPathBuilderException, InvalidAlgorithmParameterException {
|
|
PKIXExtendedBuilderParameters pKIXExtendedBuilderParameters;
|
|
Exception exc;
|
|
PKIXExtendedBuilderParameters.Builder builder;
|
|
if (certPathParameters instanceof PKIXBuilderParameters) {
|
|
PKIXBuilderParameters pKIXBuilderParameters = (PKIXBuilderParameters) certPathParameters;
|
|
PKIXExtendedParameters.Builder builder2 = new PKIXExtendedParameters.Builder(pKIXBuilderParameters);
|
|
if (certPathParameters instanceof ExtendedPKIXParameters) {
|
|
ExtendedPKIXBuilderParameters extendedPKIXBuilderParameters = (ExtendedPKIXBuilderParameters) certPathParameters;
|
|
Iterator it = extendedPKIXBuilderParameters.getAdditionalStores().iterator();
|
|
while (it.hasNext()) {
|
|
builder2.addCertificateStore((PKIXCertStore) it.next());
|
|
}
|
|
builder = new PKIXExtendedBuilderParameters.Builder(builder2.build());
|
|
builder.addExcludedCerts(extendedPKIXBuilderParameters.getExcludedCerts());
|
|
builder.setMaxPathLength(extendedPKIXBuilderParameters.getMaxPathLength());
|
|
} else {
|
|
builder = new PKIXExtendedBuilderParameters.Builder(pKIXBuilderParameters);
|
|
}
|
|
pKIXExtendedBuilderParameters = builder.build();
|
|
} else {
|
|
if (!(certPathParameters instanceof PKIXExtendedBuilderParameters)) {
|
|
StringBuilder sb = new StringBuilder("Parameters must be an instance of ");
|
|
sb.append(PKIXBuilderParameters.class.getName());
|
|
sb.append(" or ");
|
|
sb.append(PKIXExtendedBuilderParameters.class.getName());
|
|
sb.append(".");
|
|
throw new InvalidAlgorithmParameterException(sb.toString());
|
|
}
|
|
pKIXExtendedBuilderParameters = (PKIXExtendedBuilderParameters) certPathParameters;
|
|
}
|
|
ArrayList arrayList = new ArrayList();
|
|
PKIXCertStoreSelector targetConstraints = pKIXExtendedBuilderParameters.getBaseParameters().getTargetConstraints();
|
|
try {
|
|
Collection findCertificates = CertPathValidatorUtilities.findCertificates(targetConstraints, pKIXExtendedBuilderParameters.getBaseParameters().getCertificateStores());
|
|
findCertificates.addAll(CertPathValidatorUtilities.findCertificates(targetConstraints, pKIXExtendedBuilderParameters.getBaseParameters().getCertStores()));
|
|
if (findCertificates.isEmpty()) {
|
|
throw new CertPathBuilderException("No certificate found matching targetContraints.");
|
|
}
|
|
Iterator it2 = findCertificates.iterator();
|
|
CertPathBuilderResult certPathBuilderResult = null;
|
|
while (it2.hasNext() && certPathBuilderResult == null) {
|
|
certPathBuilderResult = build((X509Certificate) it2.next(), pKIXExtendedBuilderParameters, arrayList);
|
|
}
|
|
if (certPathBuilderResult == null && (exc = this.certPathException) != null) {
|
|
if (exc instanceof AnnotatedException) {
|
|
throw new CertPathBuilderException(this.certPathException.getMessage(), this.certPathException.getCause());
|
|
}
|
|
throw new CertPathBuilderException("Possible certificate chain could not be validated.", this.certPathException);
|
|
}
|
|
if (certPathBuilderResult == null && this.certPathException == null) {
|
|
throw new CertPathBuilderException("Unable to find certificate chain.");
|
|
}
|
|
return certPathBuilderResult;
|
|
} catch (AnnotatedException e) {
|
|
throw new ExtCertPathBuilderException("Error finding target certificate.", e);
|
|
}
|
|
}
|
|
|
|
/* JADX WARN: Removed duplicated region for block: B:34:0x00f1 */
|
|
/*
|
|
Code decompiled incorrectly, please refer to instructions dump.
|
|
To view partially-correct add '--show-bad-code' argument
|
|
*/
|
|
protected java.security.cert.CertPathBuilderResult build(java.security.cert.X509Certificate r6, org.bouncycastle.jcajce.PKIXExtendedBuilderParameters r7, java.util.List r8) {
|
|
/*
|
|
r5 = this;
|
|
boolean r0 = r8.contains(r6)
|
|
r1 = 0
|
|
if (r0 == 0) goto L8
|
|
return r1
|
|
L8:
|
|
java.util.Set r0 = r7.getExcludedCerts()
|
|
boolean r0 = r0.contains(r6)
|
|
if (r0 == 0) goto L13
|
|
return r1
|
|
L13:
|
|
int r0 = r7.getMaxPathLength()
|
|
r2 = -1
|
|
if (r0 == r2) goto L27
|
|
int r0 = r8.size()
|
|
int r0 = r0 + (-1)
|
|
int r2 = r7.getMaxPathLength()
|
|
if (r0 <= r2) goto L27
|
|
return r1
|
|
L27:
|
|
r8.add(r6)
|
|
org.bouncycastle.jcajce.provider.asymmetric.x509.CertificateFactory r0 = new org.bouncycastle.jcajce.provider.asymmetric.x509.CertificateFactory // Catch: java.lang.Exception -> Lf5
|
|
r0.<init>() // Catch: java.lang.Exception -> Lf5
|
|
org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi r2 = new org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi // Catch: java.lang.Exception -> Lf5
|
|
r2.<init>() // Catch: java.lang.Exception -> Lf5
|
|
org.bouncycastle.jcajce.PKIXExtendedParameters r3 = r7.getBaseParameters() // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.util.Set r3 = r3.getTrustAnchors() // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
org.bouncycastle.jcajce.PKIXExtendedParameters r4 = r7.getBaseParameters() // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.lang.String r4 = r4.getSigProvider() // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.security.cert.TrustAnchor r3 = org.bouncycastle.jce.provider.CertPathValidatorUtilities.findTrustAnchor(r6, r3, r4) // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
if (r3 == 0) goto L78
|
|
java.security.cert.CertPath r0 = r0.engineGenerateCertPath(r8) // Catch: java.lang.Exception -> L6f org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.security.cert.CertPathValidatorResult r7 = r2.engineValidate(r0, r7) // Catch: java.lang.Exception -> L66 org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.security.cert.PKIXCertPathValidatorResult r7 = (java.security.cert.PKIXCertPathValidatorResult) r7 // Catch: java.lang.Exception -> L66 org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.security.cert.PKIXCertPathBuilderResult r2 = new java.security.cert.PKIXCertPathBuilderResult // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.security.cert.TrustAnchor r3 = r7.getTrustAnchor() // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.security.cert.PolicyNode r4 = r7.getPolicyTree() // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.security.PublicKey r7 = r7.getPublicKey() // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
r2.<init>(r0, r3, r4, r7) // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
return r2
|
|
L66:
|
|
r7 = move-exception
|
|
org.bouncycastle.jce.provider.AnnotatedException r0 = new org.bouncycastle.jce.provider.AnnotatedException // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.lang.String r2 = "Certification path could not be validated."
|
|
r0.<init>(r2, r7) // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
throw r0 // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
L6f:
|
|
r7 = move-exception
|
|
org.bouncycastle.jce.provider.AnnotatedException r0 = new org.bouncycastle.jce.provider.AnnotatedException // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.lang.String r2 = "Certification path could not be constructed from certificate list."
|
|
r0.<init>(r2, r7) // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
throw r0 // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
L78:
|
|
java.util.ArrayList r0 = new java.util.ArrayList // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
r0.<init>() // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
org.bouncycastle.jcajce.PKIXExtendedParameters r2 = r7.getBaseParameters() // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.util.List r2 = r2.getCertificateStores() // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
r0.addAll(r2) // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
org.bouncycastle.asn1.ASN1ObjectIdentifier r2 = org.bouncycastle.asn1.x509.Extension.issuerAlternativeName // Catch: java.security.cert.CertificateParsingException -> Le3 org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.lang.String r2 = r2.getId() // Catch: java.security.cert.CertificateParsingException -> Le3 org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
byte[] r2 = r6.getExtensionValue(r2) // Catch: java.security.cert.CertificateParsingException -> Le3 org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
org.bouncycastle.jcajce.PKIXExtendedParameters r3 = r7.getBaseParameters() // Catch: java.security.cert.CertificateParsingException -> Le3 org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.util.Map r3 = r3.getNamedCertificateStoreMap() // Catch: java.security.cert.CertificateParsingException -> Le3 org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.util.List r2 = org.bouncycastle.jce.provider.CertPathValidatorUtilities.getAdditionalStoresFromAltNames(r2, r3) // Catch: java.security.cert.CertificateParsingException -> Le3 org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
r0.addAll(r2) // Catch: java.security.cert.CertificateParsingException -> Le3 org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.util.HashSet r2 = new java.util.HashSet // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
r2.<init>() // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
org.bouncycastle.jcajce.PKIXExtendedParameters r3 = r7.getBaseParameters() // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lda
|
|
java.util.List r3 = r3.getCertStores() // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lda
|
|
java.util.Collection r0 = org.bouncycastle.jce.provider.CertPathValidatorUtilities.findIssuerCerts(r6, r3, r0) // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lda
|
|
r2.addAll(r0) // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lda
|
|
boolean r0 = r2.isEmpty() // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
if (r0 != 0) goto Ld2
|
|
java.util.Iterator r0 = r2.iterator() // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
Lbf:
|
|
boolean r2 = r0.hasNext() // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
if (r2 == 0) goto Lef
|
|
if (r1 != 0) goto Lef
|
|
java.lang.Object r2 = r0.next() // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.security.cert.X509Certificate r2 = (java.security.cert.X509Certificate) r2 // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.security.cert.CertPathBuilderResult r1 = r5.build(r2, r7, r8) // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
goto Lbf
|
|
Ld2:
|
|
org.bouncycastle.jce.provider.AnnotatedException r7 = new org.bouncycastle.jce.provider.AnnotatedException // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.lang.String r0 = "No issuer certificate for certificate in certification path found."
|
|
r7.<init>(r0) // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
throw r7 // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
Lda:
|
|
r7 = move-exception
|
|
org.bouncycastle.jce.provider.AnnotatedException r0 = new org.bouncycastle.jce.provider.AnnotatedException // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.lang.String r2 = "Cannot find issuer certificate for certificate in certification path."
|
|
r0.<init>(r2, r7) // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
throw r0 // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
Le3:
|
|
r7 = move-exception
|
|
org.bouncycastle.jce.provider.AnnotatedException r0 = new org.bouncycastle.jce.provider.AnnotatedException // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
java.lang.String r2 = "No additional X.509 stores can be added from certificate locations."
|
|
r0.<init>(r2, r7) // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
throw r0 // Catch: org.bouncycastle.jce.provider.AnnotatedException -> Lec
|
|
Lec:
|
|
r7 = move-exception
|
|
r5.certPathException = r7
|
|
Lef:
|
|
if (r1 != 0) goto Lf4
|
|
r8.remove(r6)
|
|
Lf4:
|
|
return r1
|
|
Lf5:
|
|
java.lang.RuntimeException r6 = new java.lang.RuntimeException
|
|
java.lang.String r7 = "Exception creating support classes."
|
|
r6.<init>(r7)
|
|
throw r6
|
|
*/
|
|
throw new UnsupportedOperationException("Method not decompiled: org.bouncycastle.jce.provider.PKIXCertPathBuilderSpi.build(java.security.cert.X509Certificate, org.bouncycastle.jcajce.PKIXExtendedBuilderParameters, java.util.List):java.security.cert.CertPathBuilderResult");
|
|
}
|
|
}
|