PKIXAttrCertPathBuilderSpi.smali
.class public Lorg/spongycastle/jce/provider/PKIXAttrCertPathBuilderSpi;
.super Ljava/security/cert/CertPathBuilderSpi;
.source "PKIXAttrCertPathBuilderSpi.java"
# instance fields
.field private certPathException:Ljava/lang/Exception;
# direct methods
.method public constructor <init>()V
.registers 1
.prologue
.line 47
invoke-direct {p0}, Ljava/security/cert/CertPathBuilderSpi;-><init>()V
return-void
.end method
.method private build(Lorg/spongycastle/x509/X509AttributeCertificate;Ljava/security/cert/X509Certificate;Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;Ljava/util/List;)Ljava/security/cert/CertPathBuilderResult;
.registers 11
.prologue
const/4 v1, 0x0
.line 199
invoke-interface {p4, p2}, Ljava/util/List;->contains(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_9
move-object v0, v1
.line 331
:cond_8
:goto_8
return-object v0
.line 205
:cond_9
invoke-virtual {p3}, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;->getExcludedCerts()Ljava/util/Set;
move-result-object v0
invoke-interface {v0, p2}, Ljava/util/Set;->contains(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_15
move-object v0, v1
.line 207
goto :goto_8
.line 210
:cond_15
invoke-virtual {p3}, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;->getMaxPathLength()I
move-result v0
const/4 v2, -0x1
if-eq v0, v2, :cond_2a
.line 212
invoke-interface {p4}, Ljava/util/List;->size()I
move-result v0
add-int/lit8 v0, v0, -0x1
invoke-virtual {p3}, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;->getMaxPathLength()I
move-result v2
if-le v0, v2, :cond_2a
move-object v0, v1
.line 214
goto :goto_8
.line 218
:cond_2a
invoke-interface {p4, p2}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 226
:try_start_2d
const-string v0, "X.509"
const-string v2, "SC"
invoke-static {v0, v2}, Ljava/security/cert/CertificateFactory;->getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/cert/CertificateFactory;
move-result-object v0
.line 227
const-string v2, "RFC3281"
const-string v3, "SC"
invoke-static {v2, v3}, Ljava/security/cert/CertPathValidator;->getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/cert/CertPathValidator;
:try_end_3c
.catch Ljava/lang/Exception; {:try_start_2d .. :try_end_3c} :catch_70
move-result-object v2
.line 239
:try_start_3d
invoke-virtual {p3}, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;->getBaseParameters()Lorg/spongycastle/jcajce/PKIXExtendedParameters;
move-result-object v3
invoke-virtual {v3}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->getTrustAnchors()Ljava/util/Set;
move-result-object v3
.line 240
invoke-virtual {p3}, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;->getBaseParameters()Lorg/spongycastle/jcajce/PKIXExtendedParameters;
move-result-object v4
invoke-virtual {v4}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->getSigProvider()Ljava/lang/String;
move-result-object v4
.line 239
invoke-static {p2, v3, v4}, Lorg/spongycastle/jce/provider/CertPathValidatorUtilities;->findTrustAnchor(Ljava/security/cert/X509Certificate;Ljava/util/Set;Ljava/lang/String;)Ljava/security/cert/TrustAnchor;
:try_end_50
.catch Lorg/spongycastle/jce/provider/AnnotatedException; {:try_start_3d .. :try_end_50} :catch_82
move-result-object v3
if-eqz v3, :cond_9d
.line 246
:try_start_53
invoke-virtual {v0, p4}, Ljava/security/cert/CertificateFactory;->generateCertPath(Ljava/util/List;)Ljava/security/cert/CertPath;
:try_end_56
.catch Ljava/lang/Exception; {:try_start_53 .. :try_end_56} :catch_79
.catch Lorg/spongycastle/jce/provider/AnnotatedException; {:try_start_53 .. :try_end_56} :catch_82
move-result-object v3
.line 257
:try_start_57
invoke-virtual {v2, v3, p3}, Ljava/security/cert/CertPathValidator;->validate(Ljava/security/cert/CertPath;Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathValidatorResult;
move-result-object v0
check-cast v0, Ljava/security/cert/PKIXCertPathValidatorResult;
:try_end_5d
.catch Ljava/lang/Exception; {:try_start_57 .. :try_end_5d} :catch_94
.catch Lorg/spongycastle/jce/provider/AnnotatedException; {:try_start_57 .. :try_end_5d} :catch_82
.line 267
:try_start_5d
new-instance v2, Ljava/security/cert/PKIXCertPathBuilderResult;
.line 268
invoke-virtual {v0}, Ljava/security/cert/PKIXCertPathValidatorResult;->getTrustAnchor()Ljava/security/cert/TrustAnchor;
move-result-object v4
invoke-virtual {v0}, Ljava/security/cert/PKIXCertPathValidatorResult;->getPolicyTree()Ljava/security/cert/PolicyNode;
move-result-object v5
.line 269
invoke-virtual {v0}, Ljava/security/cert/PKIXCertPathValidatorResult;->getPublicKey()Ljava/security/PublicKey;
move-result-object v0
invoke-direct {v2, v3, v4, v5, v0}, Ljava/security/cert/PKIXCertPathBuilderResult;-><init>(Ljava/security/cert/CertPath;Ljava/security/cert/TrustAnchor;Ljava/security/cert/PolicyNode;Ljava/security/PublicKey;)V
:try_end_6e
.catch Lorg/spongycastle/jce/provider/AnnotatedException; {:try_start_5d .. :try_end_6e} :catch_82
move-object v0, v2
goto :goto_8
.line 232
:catch_70
move-exception v0
new-instance v0, Ljava/lang/RuntimeException;
const-string v1, "Exception creating support classes."
invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v0
.line 248
:catch_79
move-exception v0
.line 250
:try_start_7a
new-instance v2, Lorg/spongycastle/jce/provider/AnnotatedException;
const-string v3, "Certification path could not be constructed from certificate list."
invoke-direct {v2, v3, v0}, Lorg/spongycastle/jce/provider/AnnotatedException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v2
:try_end_82
.catch Lorg/spongycastle/jce/provider/AnnotatedException; {:try_start_7a .. :try_end_82} :catch_82
.line 322
:catch_82
move-exception v0
.line 324
new-instance v2, Lorg/spongycastle/jce/provider/AnnotatedException;
const-string v3, "No valid certification path could be build."
invoke-direct {v2, v3, v0}, Lorg/spongycastle/jce/provider/AnnotatedException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
iput-object v2, p0, Lorg/spongycastle/jce/provider/PKIXAttrCertPathBuilderSpi;->certPathException:Ljava/lang/Exception;
move-object v0, v1
.line 327
:goto_8d
if-nez v0, :cond_8
.line 329
invoke-interface {p4, p2}, Ljava/util/List;->remove(Ljava/lang/Object;)Z
goto/16 :goto_8
.line 260
:catch_94
move-exception v0
.line 262
:try_start_95
new-instance v2, Lorg/spongycastle/jce/provider/AnnotatedException;
const-string v3, "Certification path could not be validated."
invoke-direct {v2, v3, v0}, Lorg/spongycastle/jce/provider/AnnotatedException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v2
.line 274
:cond_9d
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
.line 276
invoke-virtual {p3}, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;->getBaseParameters()Lorg/spongycastle/jcajce/PKIXExtendedParameters;
move-result-object v2
invoke-virtual {v2}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->getCertificateStores()Ljava/util/List;
move-result-object v2
invoke-interface {v0, v2}, Ljava/util/List;->addAll(Ljava/util/Collection;)Z
:try_end_ad
.catch Lorg/spongycastle/jce/provider/AnnotatedException; {:try_start_95 .. :try_end_ad} :catch_82
.line 280
:try_start_ad
sget-object v2, Lorg/spongycastle/asn1/x509/Extension;->issuerAlternativeName:Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
invoke-virtual {v2}, Lorg/spongycastle/asn1/ASN1ObjectIdentifier;->getId()Ljava/lang/String;
move-result-object v2
invoke-virtual {p2, v2}, Ljava/security/cert/X509Certificate;->getExtensionValue(Ljava/lang/String;)[B
move-result-object v2
invoke-virtual {p3}, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;->getBaseParameters()Lorg/spongycastle/jcajce/PKIXExtendedParameters;
move-result-object v3
invoke-virtual {v3}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->getNamedCertificateStoreMap()Ljava/util/Map;
move-result-object v3
invoke-static {v2, v3}, Lorg/spongycastle/jce/provider/CertPathValidatorUtilities;->getAdditionalStoresFromAltNames([BLjava/util/Map;)Ljava/util/List;
move-result-object v2
invoke-interface {v0, v2}, Ljava/util/List;->addAll(Ljava/util/Collection;)Z
:try_end_c6
.catch Ljava/security/cert/CertificateParsingException; {:try_start_ad .. :try_end_c6} :catch_e8
.catch Lorg/spongycastle/jce/provider/AnnotatedException; {:try_start_ad .. :try_end_c6} :catch_82
.line 288
:try_start_c6
new-instance v2, Ljava/util/HashSet;
invoke-direct {v2}, Ljava/util/HashSet;-><init>()V
:try_end_cb
.catch Lorg/spongycastle/jce/provider/AnnotatedException; {:try_start_c6 .. :try_end_cb} :catch_82
.line 293
:try_start_cb
invoke-virtual {p3}, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;->getBaseParameters()Lorg/spongycastle/jcajce/PKIXExtendedParameters;
move-result-object v3
invoke-virtual {v3}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->getCertStores()Ljava/util/List;
move-result-object v3
invoke-static {p2, v3, v0}, Lorg/spongycastle/jce/provider/CertPathValidatorUtilities;->findIssuerCerts(Ljava/security/cert/X509Certificate;Ljava/util/List;Ljava/util/List;)Ljava/util/Collection;
move-result-object v0
invoke-interface {v2, v0}, Ljava/util/Collection;->addAll(Ljava/util/Collection;)Z
:try_end_da
.catch Lorg/spongycastle/jce/provider/AnnotatedException; {:try_start_cb .. :try_end_da} :catch_f1
.line 301
:try_start_da
invoke-interface {v2}, Ljava/util/Collection;->isEmpty()Z
move-result v0
if-eqz v0, :cond_fa
.line 303
new-instance v0, Lorg/spongycastle/jce/provider/AnnotatedException;
const-string v2, "No issuer certificate for certificate in certification path found."
invoke-direct {v0, v2}, Lorg/spongycastle/jce/provider/AnnotatedException;-><init>(Ljava/lang/String;)V
throw v0
.line 282
:catch_e8
move-exception v0
.line 284
new-instance v2, Lorg/spongycastle/jce/provider/AnnotatedException;
const-string v3, "No additional X.509 stores can be added from certificate locations."
invoke-direct {v2, v3, v0}, Lorg/spongycastle/jce/provider/AnnotatedException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v2
.line 295
:catch_f1
move-exception v0
.line 297
new-instance v2, Lorg/spongycastle/jce/provider/AnnotatedException;
const-string v3, "Cannot find issuer certificate for certificate in certification path."
invoke-direct {v2, v3, v0}, Lorg/spongycastle/jce/provider/AnnotatedException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v2
.line 306
:cond_fa
invoke-interface {v2}, Ljava/util/Collection;->iterator()Ljava/util/Iterator;
move-result-object v2
.line 308
:cond_fe
:goto_fe
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_11f
if-nez v1, :cond_11f
.line 310
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/security/cert/X509Certificate;
.line 313
invoke-virtual {v0}, Ljava/security/cert/X509Certificate;->getIssuerX500Principal()Ljavax/security/auth/x500/X500Principal;
move-result-object v3
.line 314
invoke-virtual {v0}, Ljava/security/cert/X509Certificate;->getSubjectX500Principal()Ljavax/security/auth/x500/X500Principal;
move-result-object v4
.line 313
invoke-virtual {v3, v4}, Ljavax/security/auth/x500/X500Principal;->equals(Ljava/lang/Object;)Z
move-result v3
if-nez v3, :cond_fe
.line 318
invoke-direct {p0, p1, v0, p3, p4}, Lorg/spongycastle/jce/provider/PKIXAttrCertPathBuilderSpi;->build(Lorg/spongycastle/x509/X509AttributeCertificate;Ljava/security/cert/X509Certificate;Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;Ljava/util/List;)Ljava/security/cert/CertPathBuilderResult;
:try_end_11d
.catch Lorg/spongycastle/jce/provider/AnnotatedException; {:try_start_da .. :try_end_11d} :catch_82
move-result-object v1
goto :goto_fe
:cond_11f
move-object v0, v1
.line 326
goto/16 :goto_8d
.end method
.method protected static findCertificates(Lorg/spongycastle/x509/X509AttributeCertStoreSelector;Ljava/util/List;)Ljava/util/Collection;
.registers 6
.prologue
.line 338
new-instance v1, Ljava/util/HashSet;
invoke-direct {v1}, Ljava/util/HashSet;-><init>()V
.line 339
invoke-interface {p1}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v2
.line 341
:cond_9
:goto_9
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_2a
.line 343
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
.line 345
instance-of v3, v0, Lorg/spongycastle/util/Store;
if-eqz v3, :cond_9
.line 347
check-cast v0, Lorg/spongycastle/util/Store;
.line 350
:try_start_19
invoke-interface {v0, p0}, Lorg/spongycastle/util/Store;->getMatches(Lorg/spongycastle/util/Selector;)Ljava/util/Collection;
move-result-object v0
invoke-interface {v1, v0}, Ljava/util/Set;->addAll(Ljava/util/Collection;)Z
:try_end_20
.catch Lorg/spongycastle/util/StoreException; {:try_start_19 .. :try_end_20} :catch_21
goto :goto_9
.line 352
:catch_21
move-exception v0
.line 354
new-instance v1, Lorg/spongycastle/jce/provider/AnnotatedException;
const-string v2, "Problem while picking certificates from X.509 store."
invoke-direct {v1, v2, v0}, Lorg/spongycastle/jce/provider/AnnotatedException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v1
.line 359
:cond_2a
return-object v1
.end method
# virtual methods
.method public engineBuild(Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathBuilderResult;
.registers 12
.prologue
.line 60
instance-of v0, p1, Ljava/security/cert/PKIXBuilderParameters;
if-nez v0, :cond_3d
instance-of v0, p1, Lorg/spongycastle/x509/ExtendedPKIXBuilderParameters;
if-nez v0, :cond_3d
instance-of v0, p1, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;
if-nez v0, :cond_3d
.line 64
new-instance v0, Ljava/security/InvalidAlgorithmParameterException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Parameters must be an instance of "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
const-class v2, Ljava/security/cert/PKIXBuilderParameters;
.line 66
invoke-virtual {v2}, Ljava/lang/Class;->getName()Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " or "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-class v2, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;
.line 67
invoke-virtual {v2}, Ljava/lang/Class;->getName()Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, "."
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v0
.line 71
:cond_3d
new-instance v1, Ljava/util/ArrayList;
invoke-direct {v1}, Ljava/util/ArrayList;-><init>()V
.line 74
instance-of v0, p1, Ljava/security/cert/PKIXBuilderParameters;
if-eqz v0, :cond_af
.line 76
new-instance v2, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters$Builder;
move-object v0, p1
check-cast v0, Ljava/security/cert/PKIXBuilderParameters;
invoke-direct {v2, v0}, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters$Builder;-><init>(Ljava/security/cert/PKIXBuilderParameters;)V
.line 78
instance-of v0, p1, Lorg/spongycastle/x509/ExtendedPKIXParameters;
if-eqz v0, :cond_190
.line 80
check-cast p1, Lorg/spongycastle/x509/ExtendedPKIXBuilderParameters;
.line 82
invoke-virtual {p1}, Lorg/spongycastle/x509/ExtendedPKIXBuilderParameters;->getExcludedCerts()Ljava/util/Set;
move-result-object v0
invoke-virtual {v2, v0}, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters$Builder;->addExcludedCerts(Ljava/util/Set;)Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters$Builder;
.line 83
invoke-virtual {p1}, Lorg/spongycastle/x509/ExtendedPKIXBuilderParameters;->getMaxPathLength()I
move-result v0
invoke-virtual {v2, v0}, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters$Builder;->setMaxPathLength(I)Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters$Builder;
.line 84
invoke-virtual {p1}, Lorg/spongycastle/x509/ExtendedPKIXBuilderParameters;->getStores()Ljava/util/List;
move-result-object v0
.line 87
:goto_66
invoke-virtual {v2}, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters$Builder;->build()Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;
move-result-object p1
move-object v1, v0
.line 96
:goto_6b
new-instance v4, Ljava/util/ArrayList;
invoke-direct {v4}, Ljava/util/ArrayList;-><init>()V
.line 101
invoke-virtual {p1}, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;->getBaseParameters()Lorg/spongycastle/jcajce/PKIXExtendedParameters;
move-result-object v0
invoke-virtual {v0}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->getTargetConstraints()Lorg/spongycastle/jcajce/PKIXCertStoreSelector;
move-result-object v0
.line 102
instance-of v2, v0, Lorg/spongycastle/x509/X509AttributeCertStoreSelector;
if-nez v2, :cond_b2
.line 104
new-instance v0, Ljava/security/cert/CertPathBuilderException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "TargetConstraints must be an instance of "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
const-class v2, Lorg/spongycastle/x509/X509AttributeCertStoreSelector;
.line 106
invoke-virtual {v2}, Ljava/lang/Class;->getName()Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " for "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
.line 107
invoke-virtual {p0}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/Class;->getName()Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " class."
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/security/cert/CertPathBuilderException;-><init>(Ljava/lang/String;)V
throw v0
.line 91
:cond_af
check-cast p1, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;
goto :goto_6b
.line 113
:cond_b2
:try_start_b2
check-cast v0, Lorg/spongycastle/x509/X509AttributeCertStoreSelector;
invoke-static {v0, v1}, Lorg/spongycastle/jce/provider/PKIXAttrCertPathBuilderSpi;->findCertificates(Lorg/spongycastle/x509/X509AttributeCertStoreSelector;Ljava/util/List;)Ljava/util/Collection;
:try_end_b7
.catch Lorg/spongycastle/jce/provider/AnnotatedException; {:try_start_b2 .. :try_end_b7} :catch_c6
move-result-object v0
.line 120
invoke-interface {v0}, Ljava/util/Collection;->isEmpty()Z
move-result v1
if-eqz v1, :cond_cf
.line 122
new-instance v0, Ljava/security/cert/CertPathBuilderException;
const-string v1, "No attribute certificate found matching targetContraints."
invoke-direct {v0, v1}, Ljava/security/cert/CertPathBuilderException;-><init>(Ljava/lang/String;)V
throw v0
.line 115
:catch_c6
move-exception v0
.line 117
new-instance v1, Lorg/spongycastle/jce/exception/ExtCertPathBuilderException;
const-string v2, "Error finding target attribute certificate."
invoke-direct {v1, v2, v0}, Lorg/spongycastle/jce/exception/ExtCertPathBuilderException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v1
.line 126
:cond_cf
const/4 v2, 0x0
.line 129
invoke-interface {v0}, Ljava/util/Collection;->iterator()Ljava/util/Iterator;
move-result-object v5
.line 130
:goto_d4
invoke-interface {v5}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_171
if-nez v2, :cond_171
.line 132
invoke-interface {v5}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
move-object v1, v0
check-cast v1, Lorg/spongycastle/x509/X509AttributeCertificate;
.line 134
new-instance v6, Lorg/spongycastle/x509/X509CertStoreSelector;
invoke-direct {v6}, Lorg/spongycastle/x509/X509CertStoreSelector;-><init>()V
.line 135
invoke-interface {v1}, Lorg/spongycastle/x509/X509AttributeCertificate;->getIssuer()Lorg/spongycastle/x509/AttributeCertificateIssuer;
move-result-object v0
invoke-virtual {v0}, Lorg/spongycastle/x509/AttributeCertificateIssuer;->getPrincipals()[Ljava/security/Principal;
move-result-object v7
.line 136
new-instance v8, Ljava/util/HashSet;
invoke-direct {v8}, Ljava/util/HashSet;-><init>()V
.line 137
const/4 v0, 0x0
move v3, v0
:goto_f7
array-length v0, v7
if-ge v3, v0, :cond_148
.line 141
:try_start_fa
aget-object v0, v7, v3
instance-of v0, v0, Ljavax/security/auth/x500/X500Principal;
if-eqz v0, :cond_10b
.line 143
aget-object v0, v7, v3
check-cast v0, Ljavax/security/auth/x500/X500Principal;
invoke-virtual {v0}, Ljavax/security/auth/x500/X500Principal;->getEncoded()[B
move-result-object v0
invoke-virtual {v6, v0}, Lorg/spongycastle/x509/X509CertStoreSelector;->setSubject([B)V
.line 145
:cond_10b
new-instance v0, Lorg/spongycastle/jcajce/PKIXCertStoreSelector$Builder;
invoke-direct {v0, v6}, Lorg/spongycastle/jcajce/PKIXCertStoreSelector$Builder;-><init>(Ljava/security/cert/CertSelector;)V
invoke-virtual {v0}, Lorg/spongycastle/jcajce/PKIXCertStoreSelector$Builder;->build()Lorg/spongycastle/jcajce/PKIXCertStoreSelector;
move-result-object v0
.line 146
invoke-virtual {p1}, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;->getBaseParameters()Lorg/spongycastle/jcajce/PKIXExtendedParameters;
move-result-object v9
invoke-virtual {v9}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->getCertStores()Ljava/util/List;
move-result-object v9
invoke-static {v0, v9}, Lorg/spongycastle/jce/provider/CertPathValidatorUtilities;->findCertificates(Lorg/spongycastle/jcajce/PKIXCertStoreSelector;Ljava/util/List;)Ljava/util/Collection;
move-result-object v9
invoke-interface {v8, v9}, Ljava/util/Set;->addAll(Ljava/util/Collection;)Z
.line 147
invoke-virtual {p1}, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;->getBaseParameters()Lorg/spongycastle/jcajce/PKIXExtendedParameters;
move-result-object v9
invoke-virtual {v9}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->getCertificateStores()Ljava/util/List;
move-result-object v9
invoke-static {v0, v9}, Lorg/spongycastle/jce/provider/CertPathValidatorUtilities;->findCertificates(Lorg/spongycastle/jcajce/PKIXCertStoreSelector;Ljava/util/List;)Ljava/util/Collection;
move-result-object v0
invoke-interface {v8, v0}, Ljava/util/Set;->addAll(Ljava/util/Collection;)Z
:try_end_132
.catch Lorg/spongycastle/jce/provider/AnnotatedException; {:try_start_fa .. :try_end_132} :catch_136
.catch Ljava/io/IOException; {:try_start_fa .. :try_end_132} :catch_13f
.line 137
add-int/lit8 v0, v3, 0x1
move v3, v0
goto :goto_f7
.line 149
:catch_136
move-exception v0
.line 151
new-instance v1, Lorg/spongycastle/jce/exception/ExtCertPathBuilderException;
const-string v2, "Public key certificate for attribute certificate cannot be searched."
invoke-direct {v1, v2, v0}, Lorg/spongycastle/jce/exception/ExtCertPathBuilderException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v1
.line 155
:catch_13f
move-exception v0
.line 157
new-instance v1, Lorg/spongycastle/jce/exception/ExtCertPathBuilderException;
const-string v2, "cannot encode X500Principal."
invoke-direct {v1, v2, v0}, Lorg/spongycastle/jce/exception/ExtCertPathBuilderException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v1
.line 162
:cond_148
invoke-interface {v8}, Ljava/util/Set;->isEmpty()Z
move-result v0
if-eqz v0, :cond_156
.line 164
new-instance v0, Ljava/security/cert/CertPathBuilderException;
const-string v1, "Public key certificate for attribute certificate cannot be found."
invoke-direct {v0, v1}, Ljava/security/cert/CertPathBuilderException;-><init>(Ljava/lang/String;)V
throw v0
.line 167
:cond_156
invoke-interface {v8}, Ljava/util/Set;->iterator()Ljava/util/Iterator;
move-result-object v3
move-object v0, v2
.line 168
:goto_15b
invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z
move-result v2
if-eqz v2, :cond_16e
if-nez v0, :cond_16e
.line 170
invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/security/cert/X509Certificate;
invoke-direct {p0, v1, v0, p1, v4}, Lorg/spongycastle/jce/provider/PKIXAttrCertPathBuilderSpi;->build(Lorg/spongycastle/x509/X509AttributeCertificate;Ljava/security/cert/X509Certificate;Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;Ljava/util/List;)Ljava/security/cert/CertPathBuilderResult;
move-result-object v0
goto :goto_15b
:cond_16e
move-object v2, v0
.line 172
goto/16 :goto_d4
.line 174
:cond_171
if-nez v2, :cond_181
iget-object v0, p0, Lorg/spongycastle/jce/provider/PKIXAttrCertPathBuilderSpi;->certPathException:Ljava/lang/Exception;
if-eqz v0, :cond_181
.line 176
new-instance v0, Lorg/spongycastle/jce/exception/ExtCertPathBuilderException;
const-string v1, "Possible certificate chain could not be validated."
iget-object v2, p0, Lorg/spongycastle/jce/provider/PKIXAttrCertPathBuilderSpi;->certPathException:Ljava/lang/Exception;
invoke-direct {v0, v1, v2}, Lorg/spongycastle/jce/exception/ExtCertPathBuilderException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v0
.line 181
:cond_181
if-nez v2, :cond_18f
iget-object v0, p0, Lorg/spongycastle/jce/provider/PKIXAttrCertPathBuilderSpi;->certPathException:Ljava/lang/Exception;
if-nez v0, :cond_18f
.line 183
new-instance v0, Ljava/security/cert/CertPathBuilderException;
const-string v1, "Unable to find certificate chain."
invoke-direct {v0, v1}, Ljava/security/cert/CertPathBuilderException;-><init>(Ljava/lang/String;)V
throw v0
.line 187
:cond_18f
return-object v2
:cond_190
move-object v0, v1
goto/16 :goto_66
.end method