PKIXCertPathValidatorSpi.smali
.class public Lorg/spongycastle/jce/provider/PKIXCertPathValidatorSpi;
.super Ljava/security/cert/CertPathValidatorSpi;
.source "PKIXCertPathValidatorSpi.java"
# instance fields
.field private final helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
# direct methods
.method public constructor <init>()V
.registers 2
.prologue
.line 43
invoke-direct {p0}, Ljava/security/cert/CertPathValidatorSpi;-><init>()V
.line 40
new-instance v0, Lorg/spongycastle/jcajce/util/BCJcaJceHelper;
invoke-direct {v0}, Lorg/spongycastle/jcajce/util/BCJcaJceHelper;-><init>()V
iput-object v0, p0, Lorg/spongycastle/jce/provider/PKIXCertPathValidatorSpi;->helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
.line 44
return-void
.end method
# virtual methods
.method public engineValidate(Ljava/security/cert/CertPath;Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathValidatorResult;
.registers 30
.prologue
.line 53
move-object/from16 v0, p2
instance-of v2, v0, Ljava/security/cert/PKIXParameters;
if-eqz v2, :cond_37
.line 55
new-instance v3, Lorg/spongycastle/jcajce/PKIXExtendedParameters$Builder;
move-object/from16 v2, p2
check-cast v2, Ljava/security/cert/PKIXParameters;
invoke-direct {v3, v2}, Lorg/spongycastle/jcajce/PKIXExtendedParameters$Builder;-><init>(Ljava/security/cert/PKIXParameters;)V
.line 57
move-object/from16 v0, p2
instance-of v2, v0, Lorg/spongycastle/x509/ExtendedPKIXParameters;
if-eqz v2, :cond_25
.line 59
check-cast p2, Lorg/spongycastle/x509/ExtendedPKIXParameters;
.line 61
invoke-virtual/range {p2 .. p2}, Lorg/spongycastle/x509/ExtendedPKIXParameters;->isUseDeltasEnabled()Z
move-result v2
invoke-virtual {v3, v2}, Lorg/spongycastle/jcajce/PKIXExtendedParameters$Builder;->setUseDeltasEnabled(Z)Lorg/spongycastle/jcajce/PKIXExtendedParameters$Builder;
.line 62
invoke-virtual/range {p2 .. p2}, Lorg/spongycastle/x509/ExtendedPKIXParameters;->getValidityModel()I
move-result v2
invoke-virtual {v3, v2}, Lorg/spongycastle/jcajce/PKIXExtendedParameters$Builder;->setValidityModel(I)Lorg/spongycastle/jcajce/PKIXExtendedParameters$Builder;
.line 65
:cond_25
invoke-virtual {v3}, Lorg/spongycastle/jcajce/PKIXExtendedParameters$Builder;->build()Lorg/spongycastle/jcajce/PKIXExtendedParameters;
move-result-object p2
.line 80
:goto_29
invoke-virtual/range {p2 .. p2}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->getTrustAnchors()Ljava/util/Set;
move-result-object v2
if-nez v2, :cond_6e
.line 82
new-instance v2, Ljava/security/InvalidAlgorithmParameterException;
const-string v3, "trustAnchors is null, this is not allowed for certification path validation."
invoke-direct {v2, v3}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v2
.line 67
:cond_37
move-object/from16 v0, p2
instance-of v2, v0, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;
if-eqz v2, :cond_44
.line 69
check-cast p2, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;
invoke-virtual/range {p2 .. p2}, Lorg/spongycastle/jcajce/PKIXExtendedBuilderParameters;->getBaseParameters()Lorg/spongycastle/jcajce/PKIXExtendedParameters;
move-result-object p2
goto :goto_29
.line 71
:cond_44
move-object/from16 v0, p2
instance-of v2, v0, Lorg/spongycastle/jcajce/PKIXExtendedParameters;
if-eqz v2, :cond_4d
.line 73
check-cast p2, Lorg/spongycastle/jcajce/PKIXExtendedParameters;
goto :goto_29
.line 77
:cond_4d
new-instance v2, Ljava/security/InvalidAlgorithmParameterException;
new-instance v3, Ljava/lang/StringBuilder;
const-string v4, "Parameters must be a "
invoke-direct {v3, v4}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
const-class v4, Ljava/security/cert/PKIXParameters;
invoke-virtual {v4}, Ljava/lang/Class;->getName()Ljava/lang/String;
move-result-object v4
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v3
const-string v4, " instance."
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v3
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3
invoke-direct {v2, v3}, Ljava/security/InvalidAlgorithmParameterException;-><init>(Ljava/lang/String;)V
throw v2
.line 93
:cond_6e
invoke-virtual/range {p1 .. p1}, Ljava/security/cert/CertPath;->getCertificates()Ljava/util/List;
move-result-object v20
.line 94
invoke-interface/range {v20 .. v20}, Ljava/util/List;->size()I
move-result v19
.line 96
invoke-interface/range {v20 .. v20}, Ljava/util/List;->isEmpty()Z
move-result v2
if-eqz v2, :cond_88
.line 98
new-instance v2, Ljava/security/cert/CertPathValidatorException;
const-string v3, "Certification path is empty."
const/4 v4, 0x0
const/4 v5, -0x1
move-object/from16 v0, p1
invoke-direct {v2, v3, v4, v0, v5}, Ljava/security/cert/CertPathValidatorException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Ljava/security/cert/CertPath;I)V
throw v2
.line 109
:cond_88
invoke-virtual/range {p2 .. p2}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->getInitialPolicies()Ljava/util/Set;
move-result-object v21
.line 117
:try_start_8c
invoke-interface/range {v20 .. v20}, Ljava/util/List;->size()I
move-result v2
add-int/lit8 v2, v2, -0x1
move-object/from16 v0, v20
invoke-interface {v0, v2}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v2
check-cast v2, Ljava/security/cert/X509Certificate;
.line 118
invoke-virtual/range {p2 .. p2}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->getTrustAnchors()Ljava/util/Set;
move-result-object v3
invoke-virtual/range {p2 .. p2}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->getSigProvider()Ljava/lang/String;
move-result-object v4
.line 117
invoke-static {v2, v3, v4}, Lorg/spongycastle/jce/provider/CertPathValidatorUtilities;->findTrustAnchor(Ljava/security/cert/X509Certificate;Ljava/util/Set;Ljava/lang/String;)Ljava/security/cert/TrustAnchor;
:try_end_a5
.catch Lorg/spongycastle/jce/provider/AnnotatedException; {:try_start_8c .. :try_end_a5} :catch_b4
move-result-object v22
.line 125
if-nez v22, :cond_c7
.line 127
new-instance v2, Ljava/security/cert/CertPathValidatorException;
const-string v3, "Trust anchor for certification path not found."
const/4 v4, 0x0
const/4 v5, -0x1
move-object/from16 v0, p1
invoke-direct {v2, v3, v4, v0, v5}, Ljava/security/cert/CertPathValidatorException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Ljava/security/cert/CertPath;I)V
throw v2
.line 120
:catch_b4
move-exception v2
.line 122
new-instance v3, Ljava/security/cert/CertPathValidatorException;
invoke-virtual {v2}, Lorg/spongycastle/jce/provider/AnnotatedException;->getMessage()Ljava/lang/String;
move-result-object v4
invoke-interface/range {v20 .. v20}, Ljava/util/List;->size()I
move-result v5
add-int/lit8 v5, v5, -0x1
move-object/from16 v0, p1
invoke-direct {v3, v4, v2, v0, v5}, Ljava/security/cert/CertPathValidatorException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Ljava/security/cert/CertPath;I)V
throw v3
.line 131
:cond_c7
new-instance v2, Lorg/spongycastle/jcajce/PKIXExtendedParameters$Builder;
move-object/from16 v0, p2
invoke-direct {v2, v0}, Lorg/spongycastle/jcajce/PKIXExtendedParameters$Builder;-><init>(Lorg/spongycastle/jcajce/PKIXExtendedParameters;)V
move-object/from16 v0, v22
invoke-virtual {v2, v0}, Lorg/spongycastle/jcajce/PKIXExtendedParameters$Builder;->setTrustAnchor(Ljava/security/cert/TrustAnchor;)Lorg/spongycastle/jcajce/PKIXExtendedParameters$Builder;
move-result-object v2
invoke-virtual {v2}, Lorg/spongycastle/jcajce/PKIXExtendedParameters$Builder;->build()Lorg/spongycastle/jcajce/PKIXExtendedParameters;
move-result-object v23
.line 148
add-int/lit8 v2, v19, 0x1
new-array v13, v2, [Ljava/util/ArrayList;
.line 149
const/4 v2, 0x0
:goto_dd
array-length v3, v13
if-ge v2, v3, :cond_ea
.line 151
new-instance v3, Ljava/util/ArrayList;
invoke-direct {v3}, Ljava/util/ArrayList;-><init>()V
aput-object v3, v13, v2
.line 149
add-int/lit8 v2, v2, 0x1
goto :goto_dd
.line 154
:cond_ea
new-instance v5, Ljava/util/HashSet;
invoke-direct {v5}, Ljava/util/HashSet;-><init>()V
.line 156
const-string v2, "2.5.29.32.0"
invoke-interface {v5, v2}, Ljava/util/Set;->add(Ljava/lang/Object;)Z
.line 158
new-instance v2, Lorg/spongycastle/jce/provider/PKIXPolicyNode;
new-instance v3, Ljava/util/ArrayList;
invoke-direct {v3}, Ljava/util/ArrayList;-><init>()V
const/4 v4, 0x0
const/4 v6, 0x0
new-instance v7, Ljava/util/HashSet;
invoke-direct {v7}, Ljava/util/HashSet;-><init>()V
const-string v8, "2.5.29.32.0"
const/4 v9, 0x0
invoke-direct/range {v2 .. v9}, Lorg/spongycastle/jce/provider/PKIXPolicyNode;-><init>(Ljava/util/List;ILjava/util/Set;Ljava/security/cert/PolicyNode;Ljava/util/Set;Ljava/lang/String;Z)V
.line 161
const/4 v3, 0x0
aget-object v3, v13, v3
invoke-interface {v3, v2}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 166
new-instance v24, Lorg/spongycastle/jce/provider/PKIXNameConstraintValidator;
invoke-direct/range {v24 .. v24}, Lorg/spongycastle/jce/provider/PKIXNameConstraintValidator;-><init>()V
.line 171
new-instance v11, Ljava/util/HashSet;
invoke-direct {v11}, Ljava/util/HashSet;-><init>()V
.line 173
invoke-virtual/range {v23 .. v23}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->isExplicitPolicyRequired()Z
move-result v3
if-eqz v3, :cond_16d
.line 175
const/4 v3, 0x0
move v4, v3
.line 187
:goto_120
invoke-virtual/range {v23 .. v23}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->isAnyPolicyInhibited()Z
move-result v3
if-eqz v3, :cond_171
.line 189
const/4 v3, 0x0
move v5, v3
.line 201
:goto_128
invoke-virtual/range {v23 .. v23}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->isPolicyMappingInhibited()Z
move-result v3
if-eqz v3, :cond_175
.line 203
const/4 v3, 0x0
move v6, v3
.line 216
:goto_130
invoke-virtual/range {v22 .. v22}, Ljava/security/cert/TrustAnchor;->getTrustedCert()Ljava/security/cert/X509Certificate;
move-result-object v8
.line 219
if-eqz v8, :cond_179
.line 221
:try_start_136
invoke-static {v8}, Lorg/spongycastle/jce/provider/PrincipalUtils;->getSubjectPrincipal(Ljava/security/cert/X509Certificate;)Lorg/spongycastle/asn1/x500/X500Name;
move-result-object v7
.line 222
invoke-virtual {v8}, Ljava/security/cert/X509Certificate;->getPublicKey()Ljava/security/PublicKey;
:try_end_13d
.catch Ljava/lang/IllegalArgumentException; {:try_start_136 .. :try_end_13d} :catch_182
move-result-object v9
.line 239
:goto_13e
:try_start_13e
invoke-static {v9}, Lorg/spongycastle/jce/provider/CertPathValidatorUtilities;->getAlgorithmIdentifier(Ljava/security/PublicKey;)Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;
:try_end_141
.catch Ljava/security/cert/CertPathValidatorException; {:try_start_13e .. :try_end_141} :catch_18e
move-result-object v3
.line 246
invoke-virtual {v3}, Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;->getAlgorithm()Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
.line 247
invoke-virtual {v3}, Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;->getParameters()Lorg/spongycastle/asn1/ASN1Encodable;
.line 258
invoke-virtual/range {v23 .. v23}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->getTargetConstraints()Lorg/spongycastle/jcajce/PKIXCertStoreSelector;
move-result-object v3
if-eqz v3, :cond_19a
.line 259
invoke-virtual/range {v23 .. v23}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->getTargetConstraints()Lorg/spongycastle/jcajce/PKIXCertStoreSelector;
move-result-object v10
const/4 v3, 0x0
move-object/from16 v0, v20
invoke-interface {v0, v3}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v3
check-cast v3, Ljava/security/cert/X509Certificate;
invoke-virtual {v10, v3}, Lorg/spongycastle/jcajce/PKIXCertStoreSelector;->match(Ljava/security/cert/Certificate;)Z
move-result v3
if-nez v3, :cond_19a
.line 261
new-instance v2, Lorg/spongycastle/jce/exception/ExtCertPathValidatorException;
const-string v3, "Target certificate in certification path does not match targetConstraints."
const/4 v4, 0x0
const/4 v5, 0x0
move-object/from16 v0, p1
invoke-direct {v2, v3, v4, v0, v5}, Lorg/spongycastle/jce/exception/ExtCertPathValidatorException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Ljava/security/cert/CertPath;I)V
throw v2
.line 179
:cond_16d
add-int/lit8 v3, v19, 0x1
move v4, v3
goto :goto_120
.line 193
:cond_171
add-int/lit8 v3, v19, 0x1
move v5, v3
goto :goto_128
.line 207
:cond_175
add-int/lit8 v3, v19, 0x1
move v6, v3
goto :goto_130
.line 226
:cond_179
:try_start_179
invoke-static/range {v22 .. v22}, Lorg/spongycastle/jce/provider/PrincipalUtils;->getCA(Ljava/security/cert/TrustAnchor;)Lorg/spongycastle/asn1/x500/X500Name;
move-result-object v7
.line 227
invoke-virtual/range {v22 .. v22}, Ljava/security/cert/TrustAnchor;->getCAPublicKey()Ljava/security/PublicKey;
:try_end_180
.catch Ljava/lang/IllegalArgumentException; {:try_start_179 .. :try_end_180} :catch_182
move-result-object v9
goto :goto_13e
.line 230
:catch_182
move-exception v2
.line 232
new-instance v3, Lorg/spongycastle/jce/exception/ExtCertPathValidatorException;
const-string v4, "Subject of trust anchor could not be (re)encoded."
const/4 v5, -0x1
move-object/from16 v0, p1
invoke-direct {v3, v4, v2, v0, v5}, Lorg/spongycastle/jce/exception/ExtCertPathValidatorException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Ljava/security/cert/CertPath;I)V
throw v3
.line 241
:catch_18e
move-exception v2
.line 243
new-instance v3, Lorg/spongycastle/jce/exception/ExtCertPathValidatorException;
const-string v4, "Algorithm identifier of public key of trust anchor could not be read."
const/4 v5, -0x1
move-object/from16 v0, p1
invoke-direct {v3, v4, v2, v0, v5}, Lorg/spongycastle/jce/exception/ExtCertPathValidatorException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Ljava/security/cert/CertPath;I)V
throw v3
.line 268
:cond_19a
invoke-virtual/range {v23 .. v23}, Lorg/spongycastle/jcajce/PKIXExtendedParameters;->getCertPathCheckers()Ljava/util/List;
move-result-object v25
.line 269
invoke-interface/range {v25 .. v25}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v10
.line 270
:goto_1a2
invoke-interface {v10}, Ljava/util/Iterator;->hasNext()Z
move-result v3
if-eqz v3, :cond_1b3
.line 272
invoke-interface {v10}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v3
check-cast v3, Ljava/security/cert/PKIXCertPathChecker;
const/4 v12, 0x0
invoke-virtual {v3, v12}, Ljava/security/cert/PKIXCertPathChecker;->init(Z)V
goto :goto_1a2
.line 275
:cond_1b3
const/4 v15, 0x0
.line 277
invoke-interface/range {v20 .. v20}, Ljava/util/List;->size()I
move-result v3
add-int/lit8 v3, v3, -0x1
move/from16 v16, v19
move/from16 v17, v6
move v14, v5
move/from16 v18, v4
move-object v12, v2
move-object v5, v9
move v4, v3
:goto_1c4
if-ltz v4, :cond_2ee
.line 284
sub-int v26, v19, v4
.line 292
move-object/from16 v0, v20
invoke-interface {v0, v4}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v2
move-object v15, v2
check-cast v15, Ljava/security/cert/X509Certificate;
.line 293
invoke-interface/range {v20 .. v20}, Ljava/util/List;->size()I
move-result v2
add-int/lit8 v2, v2, -0x1
if-ne v4, v2, :cond_21a
const/4 v6, 0x1
.line 299
:goto_1da
move-object/from16 v0, p0
iget-object v9, v0, Lorg/spongycastle/jce/provider/PKIXCertPathValidatorSpi;->helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
move-object/from16 v2, p1
move-object/from16 v3, v23
invoke-static/range {v2 .. v9}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->processCertA(Ljava/security/cert/CertPath;Lorg/spongycastle/jcajce/PKIXExtendedParameters;ILjava/security/PublicKey;ZLorg/spongycastle/asn1/x500/X500Name;Ljava/security/cert/X509Certificate;Lorg/spongycastle/jcajce/util/JcaJceHelper;)V
.line 302
move-object/from16 v0, p1
move-object/from16 v1, v24
invoke-static {v0, v4, v1}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->processCertBC(Ljava/security/cert/CertPath;ILorg/spongycastle/jce/provider/PKIXNameConstraintValidator;)V
move-object/from16 v9, p1
move v10, v4
.line 304
invoke-static/range {v9 .. v14}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->processCertD(Ljava/security/cert/CertPath;ILjava/util/Set;Lorg/spongycastle/jce/provider/PKIXPolicyNode;[Ljava/util/List;I)Lorg/spongycastle/jce/provider/PKIXPolicyNode;
move-result-object v2
.line 307
move-object/from16 v0, p1
invoke-static {v0, v4, v2}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->processCertE(Ljava/security/cert/CertPath;ILorg/spongycastle/jce/provider/PKIXPolicyNode;)Lorg/spongycastle/jce/provider/PKIXPolicyNode;
move-result-object v2
.line 309
move-object/from16 v0, p1
move/from16 v1, v18
invoke-static {v0, v4, v2, v1}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->processCertF(Ljava/security/cert/CertPath;ILorg/spongycastle/jce/provider/PKIXPolicyNode;I)V
.line 315
move/from16 v0, v26
move/from16 v1, v19
if-eq v0, v1, :cond_37f
.line 317
if-eqz v15, :cond_21c
invoke-virtual {v15}, Ljava/security/cert/X509Certificate;->getVersion()I
move-result v3
const/4 v5, 0x1
if-ne v3, v5, :cond_21c
.line 319
new-instance v2, Ljava/security/cert/CertPathValidatorException;
const-string v3, "Version 1 certificates can\'t be used as CA ones."
const/4 v5, 0x0
move-object/from16 v0, p1
invoke-direct {v2, v3, v5, v0, v4}, Ljava/security/cert/CertPathValidatorException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Ljava/security/cert/CertPath;I)V
throw v2
.line 293
:cond_21a
const/4 v6, 0x0
goto :goto_1da
.line 323
:cond_21c
move-object/from16 v0, p1
invoke-static {v0, v4}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->prepareNextCertA(Ljava/security/cert/CertPath;I)V
.line 325
move-object/from16 v0, p1
move/from16 v1, v17
invoke-static {v0, v4, v13, v2, v1}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->prepareCertB(Ljava/security/cert/CertPath;I[Ljava/util/List;Lorg/spongycastle/jce/provider/PKIXPolicyNode;I)Lorg/spongycastle/jce/provider/PKIXPolicyNode;
move-result-object v9
.line 328
move-object/from16 v0, p1
move-object/from16 v1, v24
invoke-static {v0, v4, v1}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->prepareNextCertG(Ljava/security/cert/CertPath;ILorg/spongycastle/jce/provider/PKIXNameConstraintValidator;)V
.line 331
move-object/from16 v0, p1
move/from16 v1, v18
invoke-static {v0, v4, v1}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->prepareNextCertH1(Ljava/security/cert/CertPath;II)I
move-result v2
.line 332
move-object/from16 v0, p1
move/from16 v1, v17
invoke-static {v0, v4, v1}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->prepareNextCertH2(Ljava/security/cert/CertPath;II)I
move-result v3
.line 333
move-object/from16 v0, p1
invoke-static {v0, v4, v14}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->prepareNextCertH3(Ljava/security/cert/CertPath;II)I
move-result v5
.line 338
move-object/from16 v0, p1
invoke-static {v0, v4, v2}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->prepareNextCertI1(Ljava/security/cert/CertPath;II)I
move-result v8
.line 339
move-object/from16 v0, p1
invoke-static {v0, v4, v3}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->prepareNextCertI2(Ljava/security/cert/CertPath;II)I
move-result v6
.line 342
move-object/from16 v0, p1
invoke-static {v0, v4, v5}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->prepareNextCertJ(Ljava/security/cert/CertPath;II)I
move-result v14
.line 345
move-object/from16 v0, p1
invoke-static {v0, v4}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->prepareNextCertK(Ljava/security/cert/CertPath;I)V
.line 348
move-object/from16 v0, p1
move/from16 v1, v16
invoke-static {v0, v4, v1}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->prepareNextCertL(Ljava/security/cert/CertPath;II)I
move-result v2
.line 351
move-object/from16 v0, p1
invoke-static {v0, v4, v2}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->prepareNextCertM(Ljava/security/cert/CertPath;II)I
move-result v3
.line 354
move-object/from16 v0, p1
invoke-static {v0, v4}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->prepareNextCertN(Ljava/security/cert/CertPath;I)V
.line 356
invoke-virtual {v15}, Ljava/security/cert/X509Certificate;->getCriticalExtensionOIDs()Ljava/util/Set;
move-result-object v5
.line 357
if-eqz v5, :cond_2dd
.line 359
new-instance v2, Ljava/util/HashSet;
invoke-direct {v2, v5}, Ljava/util/HashSet;-><init>(Ljava/util/Collection;)V
.line 362
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->KEY_USAGE:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 363
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->CERTIFICATE_POLICIES:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 364
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->POLICY_MAPPINGS:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 365
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->INHIBIT_ANY_POLICY:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 366
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->ISSUING_DISTRIBUTION_POINT:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 367
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->DELTA_CRL_INDICATOR:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 368
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->POLICY_CONSTRAINTS:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 369
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->BASIC_CONSTRAINTS:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 370
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->SUBJECT_ALTERNATIVE_NAME:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 371
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->NAME_CONSTRAINTS:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 379
:goto_2ad
move-object/from16 v0, p1
move-object/from16 v1, v25
invoke-static {v0, v4, v2, v1}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->prepareNextCertO(Ljava/security/cert/CertPath;ILjava/util/Set;Ljava/util/List;)V
.line 385
invoke-static {v15}, Lorg/spongycastle/jce/provider/PrincipalUtils;->getSubjectPrincipal(Ljava/security/cert/X509Certificate;)Lorg/spongycastle/asn1/x500/X500Name;
move-result-object v7
.line 390
:try_start_2b8
invoke-virtual/range {p1 .. p1}, Ljava/security/cert/CertPath;->getCertificates()Ljava/util/List;
move-result-object v2
move-object/from16 v0, p0
iget-object v5, v0, Lorg/spongycastle/jce/provider/PKIXCertPathValidatorSpi;->helper:Lorg/spongycastle/jcajce/util/JcaJceHelper;
invoke-static {v2, v4, v5}, Lorg/spongycastle/jce/provider/CertPathValidatorUtilities;->getNextWorkingKey(Ljava/util/List;ILorg/spongycastle/jcajce/util/JcaJceHelper;)Ljava/security/PublicKey;
:try_end_2c3
.catch Ljava/security/cert/CertPathValidatorException; {:try_start_2b8 .. :try_end_2c3} :catch_2e3
move-result-object v5
.line 397
invoke-static {v5}, Lorg/spongycastle/jce/provider/CertPathValidatorUtilities;->getAlgorithmIdentifier(Ljava/security/PublicKey;)Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;
move-result-object v2
.line 399
invoke-virtual {v2}, Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;->getAlgorithm()Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
.line 401
invoke-virtual {v2}, Lorg/spongycastle/asn1/x509/AlgorithmIdentifier;->getParameters()Lorg/spongycastle/asn1/ASN1Encodable;
move v2, v3
move v3, v6
move v6, v8
move-object v8, v15
.line 277
:goto_2d2
add-int/lit8 v4, v4, -0x1
move/from16 v16, v2
move/from16 v17, v3
move/from16 v18, v6
move-object v12, v9
goto/16 :goto_1c4
.line 375
:cond_2dd
new-instance v2, Ljava/util/HashSet;
invoke-direct {v2}, Ljava/util/HashSet;-><init>()V
goto :goto_2ad
.line 392
:catch_2e3
move-exception v2
.line 394
new-instance v3, Ljava/security/cert/CertPathValidatorException;
const-string v5, "Next working key could not be retrieved."
move-object/from16 v0, p1
invoke-direct {v3, v5, v2, v0, v4}, Ljava/security/cert/CertPathValidatorException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Ljava/security/cert/CertPath;I)V
throw v3
.line 409
:cond_2ee
move/from16 v0, v18
invoke-static {v0, v15}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->wrapupCertA(ILjava/security/cert/X509Certificate;)I
move-result v2
.line 411
add-int/lit8 v3, v4, 0x1
move-object/from16 v0, p1
invoke-static {v0, v3, v2}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->wrapupCertB(Ljava/security/cert/CertPath;II)I
move-result v3
.line 420
invoke-virtual {v15}, Ljava/security/cert/X509Certificate;->getCriticalExtensionOIDs()Ljava/util/Set;
move-result-object v5
.line 422
if-eqz v5, :cond_36e
.line 424
new-instance v2, Ljava/util/HashSet;
invoke-direct {v2, v5}, Ljava/util/HashSet;-><init>(Ljava/util/Collection;)V
.line 426
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->KEY_USAGE:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 427
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->CERTIFICATE_POLICIES:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 428
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->POLICY_MAPPINGS:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 429
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->INHIBIT_ANY_POLICY:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 430
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->ISSUING_DISTRIBUTION_POINT:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 431
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->DELTA_CRL_INDICATOR:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 432
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->POLICY_CONSTRAINTS:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 433
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->BASIC_CONSTRAINTS:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 434
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->SUBJECT_ALTERNATIVE_NAME:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 435
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->NAME_CONSTRAINTS:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 436
sget-object v5, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->CRL_DISTRIBUTION_POINTS:Ljava/lang/String;
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 437
sget-object v5, Lorg/spongycastle/asn1/x509/Extension;->extendedKeyUsage:Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
invoke-virtual {v5}, Lorg/spongycastle/asn1/ASN1ObjectIdentifier;->getId()Ljava/lang/String;
move-result-object v5
invoke-interface {v2, v5}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z
.line 444
:goto_347
add-int/lit8 v5, v4, 0x1
move-object/from16 v0, p1
move-object/from16 v1, v25
invoke-static {v0, v5, v1, v2}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->wrapupCertF(Ljava/security/cert/CertPath;ILjava/util/List;Ljava/util/Set;)V
.line 446
add-int/lit8 v8, v4, 0x1
move-object/from16 v5, p1
move-object/from16 v6, v23
move-object/from16 v7, v21
move-object v9, v13
move-object v10, v12
invoke-static/range {v5 .. v11}, Lorg/spongycastle/jce/provider/RFC3280CertPathUtilities;->wrapupCertG(Ljava/security/cert/CertPath;Lorg/spongycastle/jcajce/PKIXExtendedParameters;Ljava/util/Set;I[Ljava/util/List;Lorg/spongycastle/jce/provider/PKIXPolicyNode;Ljava/util/Set;)Lorg/spongycastle/jce/provider/PKIXPolicyNode;
move-result-object v2
.line 449
if-gtz v3, :cond_362
if-eqz v2, :cond_374
.line 451
:cond_362
new-instance v3, Ljava/security/cert/PKIXCertPathValidatorResult;
invoke-virtual {v15}, Ljava/security/cert/X509Certificate;->getPublicKey()Ljava/security/PublicKey;
move-result-object v4
move-object/from16 v0, v22
invoke-direct {v3, v0, v2, v4}, Ljava/security/cert/PKIXCertPathValidatorResult;-><init>(Ljava/security/cert/TrustAnchor;Ljava/security/cert/PolicyNode;Ljava/security/PublicKey;)V
return-object v3
.line 441
:cond_36e
new-instance v2, Ljava/util/HashSet;
invoke-direct {v2}, Ljava/util/HashSet;-><init>()V
goto :goto_347
.line 454
:cond_374
new-instance v2, Ljava/security/cert/CertPathValidatorException;
const-string v3, "Path processing failed on policy."
const/4 v5, 0x0
move-object/from16 v0, p1
invoke-direct {v2, v3, v5, v0, v4}, Ljava/security/cert/CertPathValidatorException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Ljava/security/cert/CertPath;I)V
throw v2
:cond_37f
move/from16 v3, v17
move/from16 v6, v18
move-object v9, v2
move/from16 v2, v16
goto/16 :goto_2d2
.end method