/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.l7tech.common.io.CertUtils
 *  com.l7tech.gateway.common.audit.Audit
 *  com.l7tech.gateway.common.audit.AuditDetailMessage
 *  com.l7tech.gateway.common.audit.SystemMessages
 *  com.l7tech.security.cert.KeyUsageActivity
 *  com.l7tech.security.cert.KeyUsageChecker
 *  com.l7tech.security.types.CertificateValidationResult
 *  com.l7tech.util.ExceptionUtils
 *  org.bouncycastle.asn1.x509.AuthorityKeyIdentifier
 */
package com.l7tech.server.security.cert;

import com.l7tech.common.io.CertUtils;
import com.l7tech.gateway.common.audit.Audit;
import com.l7tech.gateway.common.audit.AuditDetailMessage;
import com.l7tech.gateway.common.audit.SystemMessages;
import com.l7tech.security.cert.KeyUsageActivity;
import com.l7tech.security.cert.KeyUsageChecker;
import com.l7tech.security.types.CertificateValidationResult;
import com.l7tech.server.security.cert.CertValidationProcessor;
import com.l7tech.server.security.cert.CrlCache;
import com.l7tech.server.security.cert.RevocationCheckerFactory;
import com.l7tech.server.security.cert.q;
import com.l7tech.util.ExceptionUtils;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.cert.CRLException;
import java.security.cert.X509CRL;
import java.security.cert.X509Certificate;
import java.util.logging.Level;
import java.util.regex.Pattern;
import javax.security.auth.x500.X500Principal;
import org.bouncycastle.asn1.x509.AuthorityKeyIdentifier;

final class r
extends q {
    private final CrlCache f;
    private static final String[] g;

    private r(String string, Pattern pattern, boolean bl2, X509Certificate[] x509CertificateArray, CrlCache crlCache, CertValidationProcessor certValidationProcessor) {
        super(string, pattern, bl2, x509CertificateArray, certValidationProcessor);
        this.f = crlCache;
    }

    /*
     * Could not resolve type clashes
     * Unable to fully structure code
     */
    @Override
    public CertificateValidationResult getRevocationStatus(X509Certificate var1_1, X509Certificate var2_2, Audit var3_3, CertificateValidationResult var4_4) {
        var5_5 = this.a(var1_1, var3_3);
        var6_6 = null;
        try {
            if (var5_5.isEmpty()) {
                return CertificateValidationResult.UNKNOWN;
            }
        }
        catch (IOException v0) {
            throw r.a(v0);
        }
        var7_7 = false;
        try {
            block27: {
                block28: {
                    block26: {
                        block29: {
                            var8_8 = null;
                            for (Object var10_12 : var5_5) {
                                try {
                                    var6_6 = var10_12;
                                    try {
                                        v1 = this.f;
                                        v2 = var6_6;
                                        v3 = this.getAllowIssuerSignature() != false ? var2_2 : null;
                                    }
                                    catch (IOException v4) {
                                        throw r.a(v4);
                                    }
                                    var8_8 = v1.getCrl(v2, v3, var3_3);
                                    var7_7 = true;
                                    break;
                                }
                                catch (IOException var11_13) {
                                    var3_3.logAndAudit((AuditDetailMessage)SystemMessages.CERTVAL_REV_CRL_INVALID, new String[]{var6_6, ExceptionUtils.getMessage((Throwable)var11_13)});
                                    var6_6 = null;
                                    var8_8 = null;
                                }
                                catch (CRLException var11_14) {
                                    var3_3.logAndAudit((AuditDetailMessage)SystemMessages.CERTVAL_REV_CRL_INVALID, new String[]{var6_6, ExceptionUtils.getMessage((Throwable)var11_14)});
                                    return CertificateValidationResult.UNKNOWN;
                                }
                            }
                            if (!var7_7) {
                                return var4_4;
                            }
                            var9_11 = CertUtils.getDN((X500Principal)var8_8.getIssuerX500Principal());
                            if (!var8_8.getIssuerX500Principal().equals(var1_1.getIssuerX500Principal())) {
                                var3_3.logAndAudit((AuditDetailMessage)SystemMessages.CERTVAL_CRL_SCOPE, new String[]{var1_1.getSubjectDN().toString(), var6_6});
                                return CertificateValidationResult.UNKNOWN;
                            }
                            var10_12 = this.getCertValidationProcessor();
                            var12_16 = CertUtils.getAKI((X509CRL)var8_8);
                            if (var12_16 == null) break block28;
                            var13_17 = CertUtils.getAKIKeyIdentifier((AuthorityKeyIdentifier)var12_16);
                            if (var13_17 == null) break block29;
                            var11_15 = var10_12.getCertificateBySKI((String)var13_17);
                            if (var11_15 == null) {
                                v5 = new String[2];
                                v5[0] = this.what();
                                var16_18 = r.g;
                                v5[1] = var16_18[6] + (String)var13_17;
                                var3_3.logAndAudit((AuditDetailMessage)SystemMessages.CERTVAL_REV_ISSUER_NOT_FOUND, v5);
                                return CertificateValidationResult.REVOKED;
                            }
                            break block27;
                        }
                        var14_21 = CertUtils.getAKIAuthorityCertIssuer((AuthorityKeyIdentifier)var12_16);
                        var15_23 = CertUtils.getAKIAuthorityCertSerialNumber((AuthorityKeyIdentifier)var12_16);
                        if (var14_21 == null) ** GOTO lbl62
                        try {
                            block30: {
                                if (var15_23 != null) break block26;
                                break block30;
                                catch (IOException v6) {
                                    throw r.a(v6);
                                }
                            }
                            throw new CRLException(r.g[1]);
                        }
                        catch (IOException v7) {
                            throw r.a(v7);
                        }
                    }
                    var11_15 = var10_12.getCertificateByIssuerDnAndSerial(var14_21, var15_23);
                    ** if (var11_15 != null) goto lbl-1000
lbl-1000:
                    // 1 sources

                    {
                        v8 = new String[2];
                        v8[0] = this.what();
                        var16_19 = r.g;
                        v8[1] = var16_19[4] + var14_21 + var16_19[5] + String.valueOf(var15_23);
                        var3_3.logAndAudit((AuditDetailMessage)SystemMessages.CERTVAL_REV_ISSUER_NOT_FOUND, v8);
                        return CertificateValidationResult.REVOKED;
                    }
lbl-1000:
                    // 1 sources

                    {
                        break block27;
                    }
                }
                var11_15 = var10_12.getCertificateBySubjectDn(var9_11);
                if (var11_15 == null) {
                    var3_3.logAndAudit((AuditDetailMessage)SystemMessages.CERTVAL_REV_ISSUER_NOT_FOUND, new String[]{this.what(), var9_11});
                    return CertificateValidationResult.REVOKED;
                }
            }
            if ((var13_17 = this.getAuthorizedSigner(var2_2, new X509Certificate[]{var11_15}, var3_3, null)) != null) {
                try {
                    KeyUsageChecker.requireActivity((KeyUsageActivity)KeyUsageActivity.verifyCrl, (X509Certificate)var13_17);
                    var8_8.verify(var13_17.getPublicKey());
                }
                catch (Exception var14_22) {
                    var16_20 = r.g;
                    RevocationCheckerFactory.a.log(Level.WARNING, var16_20[0], new Object[]{var9_11, var14_22.getMessage()});
                    return CertificateValidationResult.REVOKED;
                }
            } else {
                throw new CRLException(r.g[2]);
            }
            if (var8_8.isRevoked(var1_1)) {
                var3_3.logAndAudit((AuditDetailMessage)SystemMessages.CERTVAL_REV_REVOKED, new String[]{var1_1.getSubjectDN().toString()});
                return CertificateValidationResult.REVOKED;
            }
            var3_3.logAndAudit((AuditDetailMessage)SystemMessages.CERTVAL_REV_NOT_REVOKED, new String[]{var1_1.getSubjectDN().toString()});
            return CertificateValidationResult.OK;
        }
        catch (GeneralSecurityException var8_9) {
            var3_3.logAndAudit((AuditDetailMessage)SystemMessages.CERTVAL_REV_CRL_INVALID, new String[]{var6_6, ExceptionUtils.getMessage((Throwable)var8_9)});
            return CertificateValidationResult.REVOKED;
        }
        catch (IOException var8_10) {
            var3_3.logAndAudit((AuditDetailMessage)SystemMessages.CERTVAL_REV_RETRIEVAL_FAILED, new String[]{this.what(), var6_6, ExceptionUtils.getMessage((Throwable)var8_10)}, (Throwable)var8_10);
            return CertificateValidationResult.REVOKED;
        }
    }

    @Override
    protected String what() {
        return g[3];
    }

    @Override
    protected String[] getUrlsFromCert(X509Certificate x509Certificate, Audit audit) throws IOException {
        return this.f.getCrlUrlsFromCertificate(x509Certificate, audit);
    }

    private static IOException a(IOException iOException) {
        return iOException;
    }

    /*
     * Unable to fully structure code
     */
    static {
        block10: {
            block9: {
                var5 = new String[7];
                var3_1 = 0;
                var2_2 = ".xZ,8\u001b-\u0019iA*0R!\u001e=k\u0017\u0012R=\u0011zF$*\u0007<\u001d=N$7\u001e+\u001c=\u000f>n\u000ftXf\u00198L;Ode\u001f\u0007:\u0010rZ,*\u000bn3xQe\u0017\u0016+\u0016iA#7\u0017<Xp]6*R&\u0019kMe<\u001d:\u0010=Ie-\u0017<\u0011|De0\u0007#\u001axZe?\u001c*Xt[6+\u0017<XsI(;\\#6r\b$+\u0006&\u0017oA?;\u0016n\u000btO+;\u0000n\u001er]+:R(\u0017o\b\u0006\f>`\u0003;Od\t1n[0;\u0000\n6'";
                var4_3 = ".xZ,8\u001b-\u0019iA*0R!\u001e=k\u0017\u0012R=\u0011zF$*\u0007<\u001d=N$7\u001e+\u001c=\u000f>n\u000ftXf\u00198L;Ode\u001f\u0007:\u0010rZ,*\u000bn3xQe\u0017\u0016+\u0016iA#7\u0017<Xp]6*R&\u0019kMe<\u001d:\u0010=Ie-\u0017<\u0011|De0\u0007#\u001axZe?\u001c*Xt[6+\u0017<XsI(;\\#6r\b$+\u0006&\u0017oA?;\u0016n\u000btO+;\u0000n\u001er]+:R(\u0017o\b\u0006\f>`\u0003;Od\t1n[0;\u0000\n6'".length();
                var1_4 = 46;
                var0_5 = -1;
lbl7:
                // 2 sources

                while (true) {
                    v0 = 115;
                    v1 = ++var0_5;
                    v2 = var2_2.substring(v1, v1 + var1_4);
                    v3 = -1;
                    break block9;
                    break;
                }
lbl13:
                // 1 sources

                while (true) {
                    var5[var3_1++] = r.b(v0, r.b(v2));
                    if ((var0_5 += var1_4) < var4_3) {
                        var1_4 = var2_2.charAt(var0_5);
                        ** continue;
                    }
                    var2_2 = "\u0011\u001c\u001feeAp\u0010\u0004y\u00043-";
                    var4_3 = "\u0011\u001c\u001feeAp\u0010\u0004y\u00043-".length();
                    var1_4 = 8;
                    var0_5 = -1;
lbl22:
                    // 2 sources

                    while (true) {
                        v0 = 33;
                        v4 = ++var0_5;
                        v2 = var2_2.substring(v4, v4 + var1_4);
                        v3 = 0;
                        break block9;
                        break;
                    }
                    break;
                }
lbl28:
                // 1 sources

                while (true) {
                    var5[var3_1++] = r.b(v0, r.b(v2));
                    if ((var0_5 += var1_4) < var4_3) {
                        var1_4 = var2_2.charAt(var0_5);
                        ** continue;
                    }
                    break block10;
                    break;
                }
            }
            switch (v3) {
                default: {
                    ** continue;
                }
                ** case 0:
lbl39:
                // 1 sources

                ** continue;
            }
        }
        r.g = var5;
    }

    private static char[] b(String string) {
        char[] cArray = string.toCharArray();
        if (cArray.length < 2) {
            cArray = cArray;
            cArray[0] = (char)(cArray[0] ^ 0x3D);
        }
        return cArray;
    }

    /*
     * Handled impossible loop by duplicating code
     * Enabled aggressive block sorting
     */
    private static String b(int n2, char[] cArray) {
        char[] cArray2;
        block11: {
            int n3;
            int n4;
            int n5;
            block10: {
                n5 = n2;
                cArray2 = cArray;
                n4 = cArray.length;
                n3 = 0;
                if (!true) break block10;
                n4 = n4;
                if (n4 <= n3) break block11;
            }
            do {
                n5 = n5;
                cArray2 = cArray2;
                int n6 = n3;
                cArray2[n6] = (char)(cArray2[n6] ^ (n5 ^ (switch (n3 % 7) {
                    case 0 -> 11;
                    case 1 -> 110;
                    case 2 -> 91;
                    case 3 -> 54;
                    case 4 -> 45;
                    case 5 -> 1;
                    default -> 61;
                })));
                ++n3;
                n4 = n4;
            } while (n4 > n3);
        }
        return new String(cArray2).intern();
    }
}

