/*
 * 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.LoggingAudit
 *  com.l7tech.objectmodel.Goid
 *  com.l7tech.security.cert.KeyUsageActivity
 *  com.l7tech.security.cert.KeyUsageChecker
 *  com.l7tech.security.cert.KeyUsageException
 *  com.l7tech.security.cert.TrustedCertManager$UnknownCertificateException
 *  com.l7tech.security.types.CertificateValidationResult
 *  com.l7tech.security.types.CertificateValidationType
 *  com.l7tech.util.ExceptionUtils
 *  org.jetbrains.annotations.Nullable
 */
package com.l7tech.server.transport.http;

import com.l7tech.common.io.CertUtils;
import com.l7tech.gateway.common.audit.Audit;
import com.l7tech.gateway.common.audit.LoggingAudit;
import com.l7tech.objectmodel.Goid;
import com.l7tech.security.cert.KeyUsageActivity;
import com.l7tech.security.cert.KeyUsageChecker;
import com.l7tech.security.cert.KeyUsageException;
import com.l7tech.security.cert.TrustedCertManager;
import com.l7tech.security.types.CertificateValidationResult;
import com.l7tech.security.types.CertificateValidationType;
import com.l7tech.server.identity.cert.TrustedCertServices;
import com.l7tech.server.security.cert.CertValidationProcessor;
import com.l7tech.util.ExceptionUtils;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.net.ssl.X509TrustManager;
import org.jetbrains.annotations.Nullable;

public class SslClientTrustManager
implements X509TrustManager {
    private final Logger a = Logger.getLogger(this.getClass().getName());
    private final TrustedCertServices b;
    private final CertValidationProcessor c;
    private final CertValidationProcessor.Facility d;
    @Nullable
    private final Set<Goid> e;
    private static final String[] f;

    public SslClientTrustManager(TrustedCertServices trustedCertServices, CertValidationProcessor certValidationProcessor, CertValidationProcessor.Facility facility) {
        this(trustedCertServices, certValidationProcessor, facility, null);
    }

    public SslClientTrustManager(TrustedCertServices trustedCertServices, CertValidationProcessor certValidationProcessor, CertValidationProcessor.Facility facility, @Nullable Set<Goid> set) {
        if (trustedCertServices == null) {
            String[] stringArray = f;
            throw new IllegalArgumentException(stringArray[8]);
        }
        try {
            if (certValidationProcessor == null) {
                throw new IllegalArgumentException(f[4]);
            }
        }
        catch (IllegalArgumentException illegalArgumentException) {
            throw SslClientTrustManager.a(illegalArgumentException);
        }
        try {
            if (facility == null) {
                throw new IllegalArgumentException(f[1]);
            }
        }
        catch (IllegalArgumentException illegalArgumentException) {
            throw SslClientTrustManager.a(illegalArgumentException);
        }
        this.b = trustedCertServices;
        this.c = certValidationProcessor;
        this.d = facility;
        this.e = set;
    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return new X509Certificate[0];
    }

    @Override
    public void checkClientTrusted(X509Certificate[] x509CertificateArray, String string) throws CertificateException {
        throw new UnsupportedOperationException(f[9]);
    }

    /*
     * Loose catch block
     */
    @Override
    public void checkServerTrusted(X509Certificate[] x509CertificateArray, String string) throws CertificateException {
        block20: {
            try {
                if (!CertUtils.isValid((X509Certificate)x509CertificateArray[0])) {
                    throw new CertificateException(f[7] + x509CertificateArray[0].getSubjectDN().getName());
                }
            }
            catch (TrustedCertManager.UnknownCertificateException unknownCertificateException) {
                throw SslClientTrustManager.a((Exception)((Object)unknownCertificateException));
            }
            boolean bl2 = false;
            try {
                this.b.checkSslTrust(x509CertificateArray, this.e);
            }
            catch (TrustedCertManager.UnknownCertificateException unknownCertificateException) {
                if (this.e == null) {
                    bl2 = true;
                }
                throw unknownCertificateException;
            }
            try {
                String string2;
                block22: {
                    block21: {
                        block23: {
                            CertificateValidationResult certificateValidationResult = this.c.check(x509CertificateArray, CertificateValidationType.PATH_VALIDATION, null, this.d, (Audit)new LoggingAudit(this.a));
                            try {
                                if (x509CertificateArray.length > 0) {
                                    KeyUsageChecker.requireActivity((KeyUsageActivity)KeyUsageActivity.sslServerRemote, (X509Certificate)x509CertificateArray[0]);
                                }
                            }
                            catch (TrustedCertManager.UnknownCertificateException unknownCertificateException) {
                                throw SslClientTrustManager.a((Exception)((Object)unknownCertificateException));
                            }
                            try {
                                if (certificateValidationResult != CertificateValidationResult.OK) {
                                    throw new CertificateException(f[6] + CertUtils.getCertIdentifyingInformation((X509Certificate)x509CertificateArray[0]) + f[3]);
                                }
                            }
                            catch (TrustedCertManager.UnknownCertificateException unknownCertificateException) {
                                throw SslClientTrustManager.a((Exception)((Object)unknownCertificateException));
                            }
                            if (!bl2) break block20;
                            if (!this.a.isLoggable(Level.FINE)) break block20;
                            break block23;
                            catch (TrustedCertManager.UnknownCertificateException unknownCertificateException) {
                                throw SslClientTrustManager.a((Exception)((Object)unknownCertificateException));
                            }
                        }
                        try {
                            block24: {
                                if (x509CertificateArray.length >= 1) break block21;
                                break block24;
                                catch (TrustedCertManager.UnknownCertificateException unknownCertificateException) {
                                    throw SslClientTrustManager.a((Exception)((Object)unknownCertificateException));
                                }
                            }
                            string2 = null;
                            break block22;
                        }
                        catch (TrustedCertManager.UnknownCertificateException unknownCertificateException) {
                            throw SslClientTrustManager.a((Exception)((Object)unknownCertificateException));
                        }
                    }
                    string2 = x509CertificateArray[0].getSubjectDN().getName();
                }
                String string3 = string2;
                String[] stringArray = f;
                this.a.log(Level.FINE, stringArray[5], string3);
            }
            catch (KeyUsageException keyUsageException) {
                String[] stringArray = f;
                this.a.log(Level.INFO, stringArray[2] + CertUtils.getCertIdentifyingInformation((X509Certificate)x509CertificateArray[0]) + stringArray[0] + ExceptionUtils.getMessage((Throwable)keyUsageException), ExceptionUtils.getDebugException((Throwable)keyUsageException));
                throw keyUsageException;
            }
        }
    }

    public X509TrustManager createTrustManagerWithCustomTrustedCerts(Set<Goid> set) {
        return new SslClientTrustManager(this.b, this.c, this.d, set);
    }

    private static Exception a(Exception exception) {
        return exception;
    }

    /*
     * Unable to fully structure code
     */
    static {
        block10: {
            block9: {
                var5 = new String[10];
                var3_1 = 0;
                var2_2 = "li]\u0014w2\u001ez/nQHs\u0014`cu@@&\u0014a&c\u001ec6\u0017v sL_4]`&uST!]p&uQX5\u0014p\"s@\u0011\b3ls\rr7o\u0005G2\u0011z'fQX<\u00133\"iA\u001e<\u000f31bS^0\u001cg*hK\u00110\u0015v lL_4]u\"nIT7%r6\u000fgcQD]:\u0019r7nJ_s-a,d@B \u0012acnV\u0011!\u0018b6nWT7Ab\u0000130bWG6\u000f3 bWEs\nr0'LB \bv''Q^sZ487X\u0016t]q:'D\u00114\u0011|!fI]*]a&dJV=\u0014i&c\u0005r\u0012\rr6\u000fg*aLR2\tvc\\&r6\u000fg*aLR2\tvcb]A:\u000fv''JCs\u0013|7'\\T']e\"kLUi]";
                var4_3 = "li]\u0014w2\u001ez/nQHs\u0014`cu@@&\u0014a&c\u001ec6\u0017v sL_4]`&uST!]p&uQX5\u0014p\"s@\u0011\b3ls\rr7o\u0005G2\u0011z'fQX<\u00133\"iA\u001e<\u000f31bS^0\u001cg*hK\u00110\u0015v lL_4]u\"nIT7%r6\u000fgcQD]:\u0019r7nJ_s-a,d@B \u0012acnV\u0011!\u0018b6nWT7Ab\u0000130bWG6\u000f3 bWEs\nr0'LB \bv''Q^sZ487X\u0016t]q:'D\u00114\u0011|!fI]*]a&dJV=\u0014i&c\u0005r\u0012\rr6\u000fg*aLR2\tvc\\&r6\u000fg*aLR2\tvcb]A:\u000fv''JCs\u0013|7'\\T']e\"kLUi]".length();
                var1_4 = 3;
                var0_5 = -1;
lbl7:
                // 2 sources

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

                while (true) {
                    var5[var3_1++] = SslClientTrustManager.a(v0, SslClientTrustManager.a(v2));
                    if ((var0_5 += var1_4) < var4_3) {
                        var1_4 = var2_2.charAt(var0_5);
                        ** continue;
                    }
                    var2_2 = ";\u007fV>i<\u001fONF?iy(\n\u007fU$~<\bOdPmo<\n\u001adQ(y@;eJ>=-\t\u001a~Wmp8\u0015\u000ejF?=:\u001a\u0001-L#q [\rh\u00038n<\u001fOkL?=6\u000e\u001boL8s=[<^om~6\u0015\u0001h@9t6\u0015\u001c";
                    var4_3 = ";\u007fV>i<\u001fONF?iy(\n\u007fU$~<\bOdPmo<\n\u001adQ(y@;eJ>=-\t\u001a~Wmp8\u0015\u000ejF?=:\u001a\u0001-L#q [\rh\u00038n<\u001fOkL?=6\u000e\u001boL8s=[<^om~6\u0015\u0001h@9t6\u0015\u001c".length();
                    var1_4 = 33;
                    var0_5 = -1;
lbl22:
                    // 2 sources

                    while (true) {
                        v0 = 116;
                        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++] = SslClientTrustManager.a(v0, SslClientTrustManager.a(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;
            }
        }
        SslClientTrustManager.f = var5;
    }

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

    /*
     * Handled impossible loop by duplicating code
     * Enabled aggressive block sorting
     */
    private static String a(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 -> 27;
                    case 1 -> 121;
                    case 2 -> 87;
                    case 3 -> 57;
                    case 4 -> 105;
                    case 5 -> 45;
                    default -> 15;
                })));
                ++n3;
                n4 = n4;
            } while (n4 > n3);
        }
        return new String(cArray2).intern();
    }
}

