/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.l7tech.common.io.CertUtils
 *  com.l7tech.identity.AuthenticationException
 *  com.l7tech.identity.BadCredentialsException
 *  com.l7tech.identity.MissingCredentialsException
 *  com.l7tech.identity.User
 *  com.l7tech.identity.cert.ClientCertManager
 *  com.l7tech.identity.fed.FederatedUser
 *  com.l7tech.identity.fed.X509Config
 *  com.l7tech.objectmodel.FindException
 *  com.l7tech.policy.assertion.credential.LoginCredentials
 *  com.l7tech.security.cert.CertVerifier
 *  com.l7tech.security.cert.TrustedCert
 *  com.l7tech.security.cert.TrustedCert$TrustedFor
 *  com.l7tech.util.ConfigFactory
 */
package com.l7tech.server.identity.fed;

import com.l7tech.common.io.CertUtils;
import com.l7tech.identity.AuthenticationException;
import com.l7tech.identity.BadCredentialsException;
import com.l7tech.identity.MissingCredentialsException;
import com.l7tech.identity.User;
import com.l7tech.identity.cert.ClientCertManager;
import com.l7tech.identity.fed.FederatedUser;
import com.l7tech.identity.fed.X509Config;
import com.l7tech.objectmodel.FindException;
import com.l7tech.policy.assertion.credential.LoginCredentials;
import com.l7tech.security.cert.CertVerifier;
import com.l7tech.security.cert.TrustedCert;
import com.l7tech.server.audit.Auditor;
import com.l7tech.server.identity.cert.TrustedCertServices;
import com.l7tech.server.identity.fed.FederatedIdentityProvider;
import com.l7tech.server.identity.fed.a;
import com.l7tech.server.security.cert.CertValidationProcessor;
import com.l7tech.util.ConfigFactory;
import java.security.cert.X509Certificate;
import java.util.Collection;
import java.util.EnumSet;
import java.util.Set;
import java.util.logging.Logger;

class c
extends a {
    private static final boolean a;
    private static final Logger b;
    private static final String[] d;

    c(FederatedIdentityProvider federatedIdentityProvider, TrustedCertServices trustedCertServices, ClientCertManager clientCertManager, CertValidationProcessor certValidationProcessor, Auditor auditor, Set set) {
        super(federatedIdentityProvider, trustedCertServices, clientCertManager, certValidationProcessor, auditor, set);
    }

    User a(LoginCredentials loginCredentials) throws AuthenticationException, FindException {
        FederatedUser federatedUser;
        String string;
        X509Certificate x509Certificate;
        block18: {
            block17: {
                try {
                    if (!this.providerConfig.isX509Supported()) {
                        throw new BadCredentialsException(d[9]);
                    }
                }
                catch (AuthenticationException authenticationException) {
                    throw c.b((Exception)((Object)authenticationException));
                }
                X509Config x509Config = this.providerConfig.getX509Config();
                try {
                    if (x509Config == null) {
                        throw new AuthenticationException(d[7]);
                    }
                }
                catch (AuthenticationException authenticationException) {
                    throw c.b((Exception)((Object)authenticationException));
                }
                x509Certificate = loginCredentials.getClientCert();
                try {
                    if (x509Certificate == null) {
                        throw new MissingCredentialsException(d[0]);
                    }
                }
                catch (AuthenticationException authenticationException) {
                    throw c.b((Exception)((Object)authenticationException));
                }
                string = CertUtils.getSubjectDN((X509Certificate)x509Certificate);
                String string2 = CertUtils.getIssuerDN((X509Certificate)x509Certificate);
                try {
                    if (!this.certOidSet.isEmpty()) {
                        this.a(x509Certificate, string2);
                    }
                }
                catch (AuthenticationException authenticationException) {
                    throw c.b((Exception)((Object)authenticationException));
                }
                federatedUser = this.getUserManager().findBySubjectDN(string);
                try {
                    try {
                        if (federatedUser != null) break block17;
                        if (!this.certOidSet.isEmpty()) break block18;
                    }
                    catch (AuthenticationException authenticationException) {
                        throw c.b((Exception)((Object)authenticationException));
                    }
                    b.fine(d[8] + string + d[2]);
                    return null;
                }
                catch (AuthenticationException authenticationException) {
                    throw c.b((Exception)((Object)authenticationException));
                }
            }
            this.checkCertificateMatch(federatedUser, x509Certificate);
        }
        this.validateCertificate(x509Certificate, true);
        if (federatedUser == null) {
            federatedUser = new FederatedUser(this.providerConfig.getGoid(), null);
            federatedUser.setSubjectDn(string);
        }
        return federatedUser;
    }

    private void a(X509Certificate x509Certificate, String string) throws FindException, AuthenticationException {
        X509Certificate x509Certificate2;
        Collection<TrustedCert> collection = this.trustedCertServices.getCertsBySubjectDnFiltered(string, true, EnumSet.of(TrustedCert.TrustedFor.SIGNING_CLIENT_CERTS), this.certOidSet);
        try {
            if (collection.isEmpty()) {
                throw new BadCredentialsException(d[5] + string + d[6]);
            }
        }
        catch (FindException findException) {
            throw c.b((Exception)((Object)findException));
        }
        if (!a) {
            for (TrustedCert trustedCert : collection) {
                x509Certificate2 = trustedCert.getCertificate();
                boolean bl2 = x509Certificate2.getSubjectX500Principal().equals(x509Certificate2.getIssuerX500Principal());
                try {
                    try {
                        if (!bl2 || !CertUtils.certsAreEqual((X509Certificate)x509Certificate2, (X509Certificate)x509Certificate)) continue;
                    }
                    catch (FindException findException) {
                        throw c.b((Exception)((Object)findException));
                    }
                    throw new BadCredentialsException(d[1]);
                }
                catch (FindException findException) {
                    throw c.b((Exception)((Object)findException));
                }
            }
        }
        for (TrustedCert trustedCert : collection) {
            x509Certificate2 = trustedCert.getCertificate();
            try {
                if (!CertVerifier.isVerified((X509Certificate)x509Certificate, (X509Certificate)x509Certificate2)) continue;
                return;
            }
            catch (FindException findException) {
                throw c.b((Exception)((Object)findException));
            }
        }
        throw new BadCredentialsException(d[4]);
    }

    /*
     * Unable to fully structure code
     */
    static {
        block10: {
            block9: {
                var5 = new String[10];
                var3_1 = 0;
                var2_2 = "\u001f\u007fQN0-1%>^\u001b++2.wE\u000b\u007f /9zZ\u0000+*<0m\u001f\u001a7\")|wQ\r3699>^N<&/(wY\u0007<\")9\\\tp^\f3&}(q\u001f\u000f*759pK\u0007<\")9>\\\u000b-74:w\\\u000f+&g|lZ\u001f*&.(>\\\u000b-74:w\\\u000f+&}5m\u001fF,&1:>L\u00078-887\u001f\u001a-6.({[N<&/(wY\u0007<\")9L{>\\\u0001*/9||ZN9,(2z\u0013N>-9|hV\u001c+6<0>X\u001c06-/>^\u001c:c33j\u001f\u001e:105jK\u000b;c*5jW\u0001*7}(lJ\u001d+&9|}Z\u001c+0\u0010r\u007fS\u000204\u000e9rY=6$39zy\tp^\f3&}(q\u001f\u000f*759pK\u0007<\")9>\\\u000b-74:w\\\u000f+&g|pPN2\")?vV\u00008c+=rV\n\u007f7/)mK\u000b;c>9lK\u00079*>=jZN++<(>V\u001d\u007f7/)mK\u000b;c;3l\u001f\u001d6$35pXN</49pKN<&/(wY\u0007<\")9m\b\u000fwX\u0000:1}{\u0010{>V\u001d\u007f-2(>K\u001c*0)9z \u00040\n^fc82\u007f]\u0002:'}>kKN1,)|}P\u00009*:)lZ\n";
                var4_3 = "\u001f\u007fQN0-1%>^\u001b++2.wE\u000b\u007f /9zZ\u0000+*<0m\u001f\u001a7\")|wQ\r3699>^N<&/(wY\u0007<\")9\\\tp^\f3&}(q\u001f\u000f*759pK\u0007<\")9>\\\u000b-74:w\\\u000f+&g|lZ\u001f*&.(>\\\u000b-74:w\\\u000f+&}5m\u001fF,&1:>L\u00078-887\u001f\u001a-6.({[N<&/(wY\u0007<\")9L{>\\\u0001*/9||ZN9,(2z\u0013N>-9|hV\u001c+6<0>X\u001c06-/>^\u001c:c33j\u001f\u001e:105jK\u000b;c*5jW\u0001*7}(lJ\u001d+&9|}Z\u001c+0\u0010r\u007fS\u000204\u000e9rY=6$39zy\tp^\f3&}(q\u001f\u000f*759pK\u0007<\")9>\\\u000b-74:w\\\u000f+&g|pPN2\")?vV\u00008c+=rV\n\u007f7/)mK\u000b;c>9lK\u00079*>=jZN++<(>V\u001d\u007f7/)mK\u000b;c;3l\u001f\u001d6$35pXN</49pKN<&/(wY\u0007<\")9m\b\u000fwX\u0000:1}{\u0010{>V\u001d\u007f-2(>K\u001c*0)9z \u00040\n^fc82\u007f]\u0002:'}>kKN1,)|}P\u00009*:)lZ\n".length();
                var1_4 = 57;
                var0_5 = -1;
lbl7:
                // 2 sources

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

                while (true) {
                    var5[var3_1++] = c.b(v0, c.b(v2));
                    if ((var0_5 += var1_4) < var4_3) {
                        var1_4 = var2_2.charAt(var0_5);
                        ** continue;
                    }
                    var2_2 = "C Nykvi\u007f.\u001aZj2Y~*\u001c\u001fy{xeo*q./,*EY'\u0007L.{hh!\u001aVzk,}=\u0001Igvi\u007fo\u0007L.|cyo\rP`tej:\u001cZj2xbo\u001dJ~bc\u007f;Ng '<4o\rMkvic;\u0007^ba";
                    var4_3 = "C Nykvi\u007f.\u001aZj2Y~*\u001c\u001fy{xeo*q./,*EY'\u0007L.{hh!\u001aVzk,}=\u0001Igvi\u007fo\u0007L.|cyo\rP`tej:\u001cZj2xbo\u001dJ~bc\u007f;Ng '<4o\rMkvic;\u0007^ba".length();
                    var1_4 = 29;
                    var0_5 = -1;
lbl22:
                    // 2 sources

                    while (true) {
                        v0 = 68;
                        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++] = c.b(v0, c.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;
            }
        }
        c.d = var5;
        c.a = ConfigFactory.getBooleanProperty((String)(c.class.getName() + c.d[3]), (boolean)false);
        c.b = Logger.getLogger(c.class.getName());
    }

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

    private static char[] b(String string) {
        char[] cArray = string.toCharArray();
        if (cArray.length < 2) {
            cArray = cArray;
            cArray[0] = (char)(cArray[0] ^ 0x48);
        }
        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 -> 73;
                    case 1 -> 11;
                    case 2 -> 42;
                    case 3 -> 123;
                    case 4 -> 74;
                    case 5 -> 86;
                    default -> 72;
                })));
                ++n3;
                n4 = n4;
            } while (n4 > n3);
        }
        return new String(cArray2).intern();
    }
}

