package com.l7tech.server.transport.tls;

import com.l7tech.common.io.SingleCertX509KeyManager;
import com.l7tech.common.io.SslSocketUtil;
import com.l7tech.gateway.common.security.keystore.SsgKeyEntry;
import com.l7tech.gateway.common.transport.SsgConnector;
import com.l7tech.security.prov.JceProvider;
import com.l7tech.server.transport.ListenerException;
import com.l7tech.server.transport.TransportModule;
import com.l7tech.util.ArrayUtils;
import com.l7tech.util.CachedCallable;
import com.l7tech.util.ConfigFactory;
import com.l7tech.util.InetAddressUtil;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.security.GeneralSecurityException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Provider;
import java.security.UnrecoverableKeyException;
import java.util.Arrays;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLParameters;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;

public class SsgConnectorSslHelper {
   protected static final Logger logger;
   public static final String SYSPROP_ACCEPTED_ISSUERS_CACHE_TIMEOUT;
   private static final Pattern a;
   private final TransportModule b;
   private final SsgConnector c;
   private final SSLContext d;
   private final SSLServerSocketFactory e;
   private final SSLSocketFactory f;
   private final String[] g;
   private final String[] h;
   private final boolean i;
   private static final String[] j;

   public SsgConnectorSslHelper(TransportModule param1, SsgConnector param2) throws ListenerException, GeneralSecurityException {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 000: aload 0
      // 001: invokespecial java/lang/Object.<init> ()V
      // 004: aload 1
      // 005: ifnonnull 01a
      // 008: new java/lang/IllegalArgumentException
      // 00b: dup
      // 00c: getstatic com/l7tech/server/transport/tls/SsgConnectorSslHelper.j [Ljava/lang/String;
      // 00f: astore 14
      // 011: aload 14
      // 013: bipush 19
      // 015: aaload
      // 016: invokespecial java/lang/IllegalArgumentException.<init> (Ljava/lang/String;)V
      // 019: athrow
      // 01a: aload 2
      // 01b: ifnonnull 030
      // 01e: new java/lang/IllegalArgumentException
      // 021: dup
      // 022: getstatic com/l7tech/server/transport/tls/SsgConnectorSslHelper.j [Ljava/lang/String;
      // 025: bipush 17
      // 027: aaload
      // 028: invokespecial java/lang/IllegalArgumentException.<init> (Ljava/lang/String;)V
      // 02b: athrow
      // 02c: invokestatic com/l7tech/server/transport/tls/SsgConnectorSslHelper.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 02f: athrow
      // 030: aload 0
      // 031: aload 1
      // 032: putfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.b Lcom/l7tech/server/transport/TransportModule;
      // 035: aload 0
      // 036: aload 2
      // 037: putfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.c Lcom/l7tech/gateway/common/transport/SsgConnector;
      // 03a: aload 0
      // 03b: aload 0
      // 03c: getfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.c Lcom/l7tech/gateway/common/transport/SsgConnector;
      // 03f: invokevirtual com/l7tech/server/transport/tls/SsgConnectorSslHelper.getDesiredTlsVersions (Lcom/l7tech/gateway/common/transport/SsgConnector;)Ljava/util/Set;
      // 042: astore 3
      // 043: aload 0
      // 044: aload 0
      // 045: getfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.c Lcom/l7tech/gateway/common/transport/SsgConnector;
      // 048: aload 3
      // 049: invokestatic com/l7tech/server/transport/tls/SsgConnectorSslHelper.a (Lcom/l7tech/gateway/common/transport/SsgConnector;Ljava/util/Set;)Ljavax/net/ssl/SSLContext;
      // 04c: putfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.d Ljavax/net/ssl/SSLContext;
      // 04f: aload 1
      // 050: aload 0
      // 051: getfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.c Lcom/l7tech/gateway/common/transport/SsgConnector;
      // 054: invokevirtual com/l7tech/server/transport/TransportModule.getKeyEntry (Lcom/l7tech/gateway/common/transport/SsgConnector;)Lcom/l7tech/gateway/common/security/keystore/SsgKeyEntry;
      // 057: astore 4
      // 059: aload 0
      // 05a: getfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.d Ljavax/net/ssl/SSLContext;
      // 05d: aload 0
      // 05e: aload 4
      // 060: invokevirtual com/l7tech/server/transport/tls/SsgConnectorSslHelper.getKeyManagers (Lcom/l7tech/gateway/common/security/keystore/SsgKeyEntry;)[Ljavax/net/ssl/KeyManager;
      // 063: aload 0
      // 064: invokevirtual com/l7tech/server/transport/tls/SsgConnectorSslHelper.getTrustManagers ()[Ljavax/net/ssl/TrustManager;
      // 067: invokestatic com/l7tech/security/prov/JceProvider.getInstance ()Lcom/l7tech/security/prov/JceProvider;
      // 06a: invokevirtual com/l7tech/security/prov/JceProvider.getSecureRandom ()Ljava/security/SecureRandom;
      // 06d: invokevirtual javax/net/ssl/SSLContext.init ([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;Ljava/security/SecureRandom;)V
      // 070: aload 0
      // 071: aload 0
      // 072: getfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.d Ljavax/net/ssl/SSLContext;
      // 075: invokevirtual javax/net/ssl/SSLContext.getServerSocketFactory ()Ljavax/net/ssl/SSLServerSocketFactory;
      // 078: putfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.e Ljavax/net/ssl/SSLServerSocketFactory;
      // 07b: aload 0
      // 07c: aload 0
      // 07d: getfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.d Ljavax/net/ssl/SSLContext;
      // 080: invokevirtual javax/net/ssl/SSLContext.getSocketFactory ()Ljavax/net/ssl/SSLSocketFactory;
      // 083: putfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.f Ljavax/net/ssl/SSLSocketFactory;
      // 086: getstatic com/l7tech/server/transport/tls/SsgConnectorSslHelper.logger Ljava/util/logging/Logger;
      // 089: aload 0
      // 08a: getfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.d Ljavax/net/ssl/SSLContext;
      // 08d: invokevirtual javax/net/ssl/SSLContext.getProvider ()Ljava/security/Provider;
      // 090: invokevirtual java/security/Provider.getName ()Ljava/lang/String;
      // 093: aload 2
      // 094: invokevirtual com/l7tech/gateway/common/transport/SsgConnector.getScheme ()Ljava/lang/String;
      // 097: aload 2
      // 098: invokevirtual com/l7tech/gateway/common/transport/SsgConnector.getPort ()I
      // 09b: istore 11
      // 09d: astore 12
      // 09f: astore 13
      // 0a1: getstatic com/l7tech/server/transport/tls/SsgConnectorSslHelper.j [Ljava/lang/String;
      // 0a4: astore 14
      // 0a6: aload 14
      // 0a8: bipush 20
      // 0aa: aaload
      // 0ab: aload 13
      // 0ad: aload 14
      // 0af: bipush 15
      // 0b1: aaload
      // 0b2: aload 12
      // 0b4: ldc "/"
      // 0b6: iload 11
      // 0b8: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001\u0001\u0001\u0001\u0001" ]
      // 0bd: invokevirtual java/util/logging/Logger.info (Ljava/lang/String;)V
      // 0c0: aload 0
      // 0c1: getstatic com/l7tech/gateway/common/transport/SsgConnector.PROP_TLS_SESSION_CACHE_SIZE Ljava/lang/String;
      // 0c4: bipush 0
      // 0c5: invokevirtual com/l7tech/server/transport/tls/SsgConnectorSslHelper.getIntProperty (Ljava/lang/String;I)I
      // 0c8: istore 5
      // 0ca: aload 0
      // 0cb: getstatic com/l7tech/gateway/common/transport/SsgConnector.PROP_TLS_SESSION_CACHE_TIMEOUT Ljava/lang/String;
      // 0ce: ldc 86400
      // 0d0: invokevirtual com/l7tech/server/transport/tls/SsgConnectorSslHelper.getIntProperty (Ljava/lang/String;I)I
      // 0d3: istore 6
      // 0d5: aload 0
      // 0d6: getfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.d Ljavax/net/ssl/SSLContext;
      // 0d9: invokevirtual javax/net/ssl/SSLContext.getServerSessionContext ()Ljavax/net/ssl/SSLSessionContext;
      // 0dc: astore 7
      // 0de: aload 7
      // 0e0: ifnull 0fc
      // 0e3: aload 7
      // 0e5: iload 5
      // 0e7: invokeinterface javax/net/ssl/SSLSessionContext.setSessionCacheSize (I)V 2
      // 0ec: aload 7
      // 0ee: iload 6
      // 0f0: invokeinterface javax/net/ssl/SSLSessionContext.setSessionTimeout (I)V 2
      // 0f5: goto 0fc
      // 0f8: invokestatic com/l7tech/server/transport/tls/SsgConnectorSslHelper.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0fb: athrow
      // 0fc: aload 2
      // 0fd: getstatic com/l7tech/gateway/common/transport/SsgConnector.PROP_TLS_CIPHERLIST Ljava/lang/String;
      // 100: invokevirtual com/l7tech/gateway/common/transport/SsgConnector.getProperty (Ljava/lang/String;)Ljava/lang/String;
      // 103: astore 8
      // 105: aload 8
      // 107: ifnull 12c
      // 10a: aload 8
      // 10c: invokevirtual java/lang/String.trim ()Ljava/lang/String;
      // 10f: invokevirtual java/lang/String.length ()I
      // 112: bipush 1
      // 113: if_icmplt 12c
      // 116: goto 11d
      // 119: invokestatic com/l7tech/server/transport/tls/SsgConnectorSslHelper.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 11c: athrow
      // 11d: getstatic com/l7tech/server/transport/tls/SsgConnectorSslHelper.a Ljava/util/regex/Pattern;
      // 120: aload 8
      // 122: invokevirtual java/util/regex/Pattern.split (Ljava/lang/CharSequence;)[Ljava/lang/String;
      // 125: goto 135
      // 128: invokestatic com/l7tech/server/transport/tls/SsgConnectorSslHelper.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 12b: athrow
      // 12c: getstatic com/l7tech/server/transport/tls/SsgConnectorSslHelper.a Ljava/util/regex/Pattern;
      // 12f: invokestatic com/l7tech/server/transport/http/DefaultHttpCiphers.getDefaultEnabledInboundCipherSuites ()Ljava/lang/String;
      // 132: invokevirtual java/util/regex/Pattern.split (Ljava/lang/CharSequence;)[Ljava/lang/String;
      // 135: astore 9
      // 137: aload 0
      // 138: aload 9
      // 13a: aload 0
      // 13b: getfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.e Ljavax/net/ssl/SSLServerSocketFactory;
      // 13e: invokevirtual javax/net/ssl/SSLServerSocketFactory.getSupportedCipherSuites ()[Ljava/lang/String;
      // 141: invokestatic com/l7tech/util/ArrayUtils.intersection ([Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;
      // 144: putfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.h [Ljava/lang/String;
      // 147: aload 9
      // 149: ifnull 17a
      // 14c: aload 9
      // 14e: arraylength
      // 14f: ifle 17a
      // 152: goto 159
      // 155: invokestatic com/l7tech/server/transport/tls/SsgConnectorSslHelper.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 158: athrow
      // 159: aload 0
      // 15a: getfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.h [Ljava/lang/String;
      // 15d: arraylength
      // 15e: ifne 17a
      // 161: goto 168
      // 164: invokestatic com/l7tech/server/transport/tls/SsgConnectorSslHelper.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 167: athrow
      // 168: new com/l7tech/server/transport/ListenerException
      // 16b: dup
      // 16c: getstatic com/l7tech/server/transport/tls/SsgConnectorSslHelper.j [Ljava/lang/String;
      // 16f: bipush 10
      // 171: aaload
      // 172: invokespecial com/l7tech/server/transport/ListenerException.<init> (Ljava/lang/String;)V
      // 175: athrow
      // 176: invokestatic com/l7tech/server/transport/tls/SsgConnectorSslHelper.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 179: athrow
      // 17a: aload 0
      // 17b: aload 0
      // 17c: getstatic com/l7tech/gateway/common/transport/SsgConnector.PROP_TLS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION Ljava/lang/String;
      // 17f: getstatic com/l7tech/server/transport/tls/SsgConnectorSslHelper.j [Ljava/lang/String;
      // 182: astore 14
      // 184: aload 14
      // 186: bipush 18
      // 188: aaload
      // 189: invokevirtual com/l7tech/server/transport/tls/SsgConnectorSslHelper.getStringProperty (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
      // 18c: invokestatic java/lang/Boolean.valueOf (Ljava/lang/String;)Ljava/lang/Boolean;
      // 18f: invokevirtual java/lang/Boolean.booleanValue ()Z
      // 192: putfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.i Z
      // 195: aload 0
      // 196: aload 0
      // 197: aload 0
      // 198: getfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.e Ljavax/net/ssl/SSLServerSocketFactory;
      // 19b: aload 3
      // 19c: aload 0
      // 19d: getfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.h [Ljava/lang/String;
      // 1a0: aload 0
      // 1a1: getfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.c Lcom/l7tech/gateway/common/transport/SsgConnector;
      // 1a4: invokevirtual com/l7tech/gateway/common/transport/SsgConnector.getClientAuth ()I
      // 1a7: aload 0
      // 1a8: invokevirtual com/l7tech/server/transport/tls/SsgConnectorSslHelper.useCipherSuitesOrder ()Z
      // 1ab: invokevirtual com/l7tech/server/transport/tls/SsgConnectorSslHelper.a (Ljavax/net/ssl/SSLServerSocketFactory;Ljava/util/Set;[Ljava/lang/String;IZ)[Ljava/lang/String;
      // 1ae: putfield com/l7tech/server/transport/tls/SsgConnectorSslHelper.g [Ljava/lang/String;
      // 1b1: goto 1d0
      // 1b4: astore 10
      // 1b6: new com/l7tech/server/transport/ListenerException
      // 1b9: dup
      // 1ba: aload 10
      // 1bc: invokestatic com/l7tech/util/ExceptionUtils.getMessage (Ljava/lang/Throwable;)Ljava/lang/String;
      // 1bf: getstatic com/l7tech/server/transport/tls/SsgConnectorSslHelper.j [Ljava/lang/String;
      // 1c2: bipush 1
      // 1c3: aaload
      // 1c4: swap
      // 1c5: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
      // 1ca: aload 10
      // 1cc: invokespecial com/l7tech/server/transport/ListenerException.<init> (Ljava/lang/String;Ljava/lang/Throwable;)V
      // 1cf: athrow
      // 1d0: return
      // try (156 -> 170): 170 java/io/IOException
      // try (150 -> 160): 161 java/io/IOException
      // try (141 -> 153): 154 java/io/IOException
      // try (123 -> 135): 135 java/io/IOException
      // try (121 -> 128): 129 java/io/IOException
      // try (106 -> 114): 115 java/io/IOException
      // try (13 -> 22): 22 java/io/IOException
      // try (184 -> 198): 199 java/io/IOException
   }

   public SSLContext getSslContext() {
      return this.d;
   }

   public boolean useCipherSuitesOrder() {
      return this.c.getBooleanProperty(SsgConnector.PROP_TLS_USE_CIPHERLIST_ORDER);
   }

   public SSLServerSocketFactory getSslServerSocketFactory() {
      return new d(this);
   }

   public SSLSocketFactory getSocketFactory() {
      SSLSocketFactory var1 = this.d.getSocketFactory();
      return new e(this, var1);
   }

   public SSLSocket wrapAndConfigureSocketForSsl(Socket var1, boolean var2) throws IOException {
      SocketAddress var3 = var1.getRemoteSocketAddress();

      String var10000;
      label31: {
         try {
            if (var3 instanceof InetSocketAddress) {
               var10000 = InetAddressUtil.getHost((InetSocketAddress)var3);
               break label31;
            }
         } catch (IOException var8) {
            throw a(var8);
         }

         var10000 = null;
      }

      String var4 = var10000;

      label23: {
         try {
            if (var3 instanceof InetSocketAddress) {
               var9 = ((InetSocketAddress)var3).getPort();
               break label23;
            }
         } catch (IOException var7) {
            throw a(var7);
         }

         var9 = 1;
      }

      int var5 = var9;
      SSLSocket var6 = (SSLSocket)this.f.createSocket(var1, var4, var5, true);
      this.configureSocket(var6, var2);
      return var6;
   }

   public void configureServerSocket(SSLServerSocket var1) {
      a(var1, this.g, this.h, this.c.getClientAuth(), this.useCipherSuitesOrder());
   }

   public void configureSocket(SSLSocket var1, boolean var2) {
      var1.setUseClientMode(var2);
      var1.setEnabledCipherSuites(this.h);
      this.a(var1, this.useCipherSuitesOrder());
      var1.setEnabledProtocols(this.g);
      if (!var2) {
         int var3 = this.c.getClientAuth();

         try {
            if (2 == var3) {
               var1.setWantClientAuth(true);
               return;
            }
         } catch (IllegalArgumentException var5) {
            throw a(var5);
         }

         SSLSocket var10000;
         boolean var10001;
         label23: {
            try {
               var10000 = var1;
               if (0 != var3) {
                  var10001 = true;
                  break label23;
               }
            } catch (IllegalArgumentException var4) {
               throw a(var4);
            }

            var10001 = false;
         }

         var10000.setNeedClientAuth(var10001);
      }
   }

   public void configureSocket(SSLSocket var1) {
      var1.setEnabledCipherSuites(this.h);
      this.a(var1, this.useCipherSuitesOrder());
      var1.setEnabledProtocols(this.g);
      int var2 = this.c.getClientAuth();

      try {
         if (2 == var2) {
            var1.setWantClientAuth(true);
            return;
         }
      } catch (IllegalArgumentException var4) {
         throw a(var4);
      }

      SSLSocket var10000;
      boolean var10001;
      label22: {
         try {
            var10000 = var1;
            if (0 != var2) {
               var10001 = true;
               break label22;
            }
         } catch (IllegalArgumentException var3) {
            throw a(var3);
         }

         var10001 = false;
      }

      var10000.setNeedClientAuth(var10001);
   }

   private void a(SSLSocket var1, boolean var2) {
      SSLParameters var3 = var1.getSSLParameters();
      var3.setUseCipherSuitesOrder(var2);
      var1.setSSLParameters(var3);
   }

   public void startHandshake(SSLSocket var1) throws IOException {
      SSLSession var2 = var1.getSession();

      try {
         if (j[21].equals(var2.getCipherSuite())) {
            throw new IOException(j[5]);
         }
      } catch (IOException var4) {
         throw a(var4);
      }

      try {
         if (!this.i) {
            var1.setEnabledCipherSuites(new String[0]);
         }
      } catch (IOException var3) {
         throw a(var3);
      }
   }

   public static String getTlsProtocol(SsgConnector var0) {
      String var1 = var0.getProperty(SsgConnector.PROP_TLS_PROTOCOL);

      try {
         if (var1 != null && var1.trim().length() >= 1) {
            return var1;
         }
      } catch (IllegalArgumentException var2) {
         throw a(var2);
      }

      return j[2];
   }

   public SSLEngine createSSLEngine(String var1, int var2) {
      SSLEngine var10000;
      label42: {
         try {
            if (var1 == null) {
               var10000 = this.d.createSSLEngine();
               break label42;
            }
         } catch (IllegalArgumentException var6) {
            throw a(var6);
         }

         var10000 = this.d.createSSLEngine(var1, var2);
      }

      SSLEngine var3 = var10000;

      try {
         var3.setEnabledCipherSuites(this.h);
         var3.setEnabledProtocols(this.g);
         if (2 == this.c.getClientAuth()) {
            var3.setWantClientAuth(true);
            return new c(this, var3);
         }
      } catch (IllegalArgumentException var5) {
         throw a(var5);
      }

      boolean var10001;
      label27: {
         try {
            var10000 = var3;
            if (0 != this.c.getClientAuth()) {
               var10001 = true;
               break label27;
            }
         } catch (IllegalArgumentException var4) {
            throw a(var4);
         }

         var10001 = false;
      }

      var10000.setNeedClientAuth(var10001);
      return new c(this, var3);
   }

   public String[] getEnabledCiphers() {
      return Arrays.copyOf(this.h, this.h.length);
   }

   public String[] getEnabledTlsVersions() {
      return Arrays.copyOf(this.g, this.g.length);
   }

   private static SSLContext a(SsgConnector var0, Set<String> var1) throws NoSuchProviderException, NoSuchAlgorithmException {
      String var2 = getTlsProtocol(var0);
      String var3 = var0.getProperty(SsgConnector.PROP_TLS_PROTOCOL_PROVIDER);

      try {
         if (var3 != null) {
            logger.log(Level.FINE, j[13] + var3);
            return SSLContext.getInstance(var2, var3);
         }
      } catch (NoSuchProviderException var7) {
         throw a(var7);
      }

      try {
         if (logger.isLoggable(Level.FINE)) {
            logger.log(Level.FINE, j[0] + var0.getGoid() + j[16] + var1);
         }
      } catch (NoSuchProviderException var11) {
         throw a(var11);
      }

      String var4 = JceProvider.SERVICE_TLS10;

      label65: {
         label75: {
            try {
               if (var1 == null) {
                  break label65;
               }

               if (var1.contains(j[3])) {
                  break label75;
               }
            } catch (NoSuchProviderException var10) {
               throw a(var10);
            }

            try {
               if (!var1.contains(j[22]) && !var1.contains(j[4])) {
                  break label65;
               }
            } catch (NoSuchProviderException var9) {
               throw a(var9);
            }

            var4 = JceProvider.SERVICE_TLS12;
            break label65;
         }

         var4 = JceProvider.SERVICE_TLS13;
      }

      Provider var5 = JceProvider.getInstance().getProviderFor(var4);

      try {
         if (var5 == null) {
            logger.log(Level.FINE, j[14]);
            return SSLContext.getInstance(var2);
         }
      } catch (NoSuchProviderException var6) {
         throw a(var6);
      }

      try {
         if (logger.isLoggable(Level.FINE)) {
            logger.log(Level.FINE, j[6] + var4 + j[9] + var5.getName());
         }
      } catch (NoSuchProviderException var8) {
         throw a(var8);
      }

      return SSLContext.getInstance(var2, var5);
   }

   protected String getStringProperty(String var1, String var2) {
      String var3 = this.c.getProperty(var1);

      try {
         if (var3 != null) {
            return var3;
         }
      } catch (IllegalArgumentException var4) {
         throw a(var4);
      }

      return var2;
   }

   protected int getIntProperty(String var1, int var2) {
      try {
         return Integer.parseInt(this.getStringProperty(var1, Integer.toString(var2)));
      } catch (NumberFormatException var5) {
         Logger var10000 = logger;
         String var10001 = String.valueOf(this.c.getGoid());
         String[] var4 = j;
         var10000.warning(var4[23] + var10001 + var4[24] + var1);
         return var2;
      }
   }

   // $VF: Could not verify finally blocks. A semaphore variable has been added to preserve control flow.
   // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
   private String[] a(SSLServerSocketFactory var1, Set<String> var2, String[] var3, int var4, boolean var5) throws IOException {
      SSLServerSocket var6 = (SSLServerSocket)var1.createServerSocket();
      String[] var7 = ArrayUtils.intersection(var2.toArray(new String[var2.size()]), var6.getSupportedProtocols());
      a(var6, var7, var3, var4, var5);
      boolean var15 = false /* VF: Semaphore variable */;

      label64: {
         try {
            var15 = true;
            var6.setSoTimeout(1);
            var6.accept();
            var15 = false;
            break label64;
         } catch (SSLException var18) {
            this.b.reportMisconfiguredConnector(this.c.getGoid());
            throw new IOException(var18);
         } catch (Exception var19) {
            var15 = false;
         } finally {
            if (var15) {
               try {
                  if (!var6.isClosed()) {
                     var6.close();
                  }
               } catch (SSLException var17) {
                  throw a(var17);
               }
            }
         }

         try {
            if (!var6.isClosed()) {
               var6.close();
            }

            return var7;
         } catch (SSLException var16) {
            throw a(var16);
         }
      }

      if (!var6.isClosed()) {
         var6.close();
      }

      return var7;
   }

   private static void a(SSLServerSocket var0, String[] var1, String[] var2, int var3, boolean var4) {
      var0.setEnabledCipherSuites(var2);
      SSLParameters var5 = var0.getSSLParameters();

      try {
         var5.setUseCipherSuitesOrder(var4);
         var0.setSSLParameters(var5);
         var0.setEnabledProtocols(var1);
         if (2 == var3) {
            var0.setWantClientAuth(true);
            return;
         }
      } catch (IllegalArgumentException var7) {
         throw a(var7);
      }

      SSLServerSocket var10000;
      boolean var10001;
      label22: {
         try {
            var10000 = var0;
            if (0 != var3) {
               var10001 = true;
               break label22;
            }
         } catch (IllegalArgumentException var6) {
            throw a(var6);
         }

         var10001 = false;
      }

      var10000.setNeedClientAuth(var10001);
   }

   public String[] getEnabledProtocols() {
      return this.g;
   }

   public KeyManager[] getKeyManagers() throws ListenerException, UnrecoverableKeyException {
      return this.getKeyManagers(this.b.getKeyEntry(this.c));
   }

   public KeyManager[] getKeyManagers(SsgKeyEntry var1) throws UnrecoverableKeyException {
      return new KeyManager[]{new SingleCertX509KeyManager(var1.getCertificateChain(), var1.getPrivateKey())};
   }

   public TrustManager[] getTrustManagers() {
      String var2 = ClientTrustingTrustManager.getConfiguredIssuerCerts(this.b.getServerConfig());
      ClientTrustingTrustManager var1;
      if (var2 != null) {
         var1 = new ClientTrustingTrustManager(ClientTrustingTrustManager.parseIssuerCerts(var2));
      } else {
         long var3 = ConfigFactory.getLongProperty(j[12], 79103L);
         var1 = new ClientTrustingTrustManager(new CachedCallable(var3, new b(this)));
      }

      var1.getAcceptedIssuers();
      return new TrustManager[]{var1};
   }

   protected Set<String> getDesiredTlsVersions(SsgConnector var1) {
      String var3 = var1.getProperty(SsgConnector.PROP_TLS_OVERRIDE_PROTOCOLS);

      String var2;
      label38: {
         label37: {
            try {
               if (var3 != null && var3.trim().length() > 0) {
                  break label37;
               }
            } catch (IllegalArgumentException var6) {
               throw a(var6);
            }

            var2 = var1.getProperty(SsgConnector.PROP_TLS_PROTOCOLS);
            if (var2 == null) {
               var2 = j[7];
            }
            break label38;
         }

         var2 = var3;
      }

      String[] var4 = SslSocketUtil.filterSelectedTLSVersion(var2, SslSocketUtil.DEFAULT_SUPPORTED_TLS_VERSIONS);

      try {
         if (var4.length == 0) {
            return SslSocketUtil.DEFAULT_SUPPORTED_TLS_VERSIONS;
         }
      } catch (IllegalArgumentException var5) {
         throw a(var5);
      }

      return Arrays.stream(var4).collect(Collectors.toSet());
   }

   static {
      String[] var5 = new String[25];
      int var3 = 0;
      String var2 = "?Wz,Nd\u001e\u0013J4A)Vu GbJ\bW4-[b\u0004\\T}1_b\u0004\\H{0_'\u001d\u0015L|b_o\u000f\\Kd'Hn\f\u0015]pbxT&\\[{,Mn\r\tJu6Bh\u0004F\u0018\u0003(tG\u0007(tG4\u001a)Y\u0007(tG4\u001a)XL/kXbCf\u0004\u0018K|#@bJ\u001aY}.NcD\\{}2Cb\u0018\\Ka+_bJ\u0015V4\u0011xKJ\u000f]g1Bh\u0004\\QgbxT&#vA\u000egX=5l\\\u001deR&0gZ\u0017gK&=L`'Fw\u001e\u0015Vsb_hJ\u001fJq#_bJ/kX\u0001Di\u001e\u0019@`b^t\u0003\u0012_4\u0007(tG4\u001a)X4\u001fWylG0\u001e\u0019[|l_u\u000b\u0012Kd-YsD\bTglJd\t\u0019H`'ON\u0019\u000fMq0XD\u000b\u001fPq\u0016Bj\u000f\u0013M`\u0010\\Hf-]n\u000e\u0019J4,Jj\u000f\u0018\u0018\u0090)Vu GbJ\bW4-[b\u0004\\T}1_b\u0004\\H{0_'\u001d\u0015L|b_o\u000f\\Kd'Hn\f\u0015]pbxT&\\[{,Mn\r\tJu6Bh\u0004F\u0018Z-EbJ\u0013^46CbJ\u000f]x'Hs\u000f\u0018\u0018w+[o\u000f\u000e\u0018g7Bs\u000f\u000f\u0018u0N'\u0019\tHd-Ys\u000f\u0018\u0018v;\u000bs\u0002\u0019\u0018a,Ob\u0018\u0010A},L'>0k42Yh\u001c\u0015\\q0\u0007 K>nwt@4\u001fWylG0\u001e\u0019[|l_u\u000b\u0012Kd-YsD\bTglJd\t\u0019H`'ON\u0019\u000fMq0XD\u000b\u001fPq\u0016Bj\u000f\u0013M`<=L`'Fw\u001e\u0015Vsb_hJ\u001fJq#_bJ/kX\u0001Di\u001e\u0019@`b^t\u0003\u0012_4!^t\u001e\u0013U42Yh\u001c\u0015\\q0\u000bi\u000b\u0011]pb6=L`'Fw\u001e\u0015Vsb_hJ\u001fJq#_bJ/kX\u0001Di\u001e\u0019@`b^t\u0003\u0012_4&Na\u000b\tT`b[u\u0005\nQp'Y\u0011\\^{0\u000bk\u0003\u000fLq,\u000bw\u0005\u000eL4\u000f\\lX\u0011\u000bq\u000f\u000eK}-EtP\\\u001b\u001dV4\u0011X`)\u0013Vz'Hs\u0005\u000e\u0018}1\u000bu\u000f\rM}0Nc\u0005\u001aYx1N\u001b\bJu,Xw\u0005\u000eLY-Or\u0006\u0019\u0018}1\u000bu\u000f\rM}0Nc\u0013)K},L'>0k42Yh\u001c\u0015\\q0\u000b\u0017/kX\u001deR&0gC\u000b\u007fO52mX\u000etI?0t\u0007(tG4\u001a)[";
      int var4 = "?Wz,Nd\u001e\u0013J4A)Vu GbJ\bW4-[b\u0004\\T}1_b\u0004\\H{0_'\u001d\u0015L|b_o\u000f\\Kd'Hn\f\u0015]pbxT&\\[{,Mn\r\tJu6Bh\u0004F\u0018\u0003(tG\u0007(tG4\u001a)Y\u0007(tG4\u001a)XL/kXbCf\u0004\u0018K|#@bJ\u001aY}.NcD\\{}2Cb\u0018\\Ka+_bJ\u0015V4\u0011xKJ\u000f]g1Bh\u0004\\QgbxT&#vA\u000egX=5l\\\u001deR&0gZ\u0017gK&=L`'Fw\u001e\u0015Vsb_hJ\u001fJq#_bJ/kX\u0001Di\u001e\u0019@`b^t\u0003\u0012_4\u0007(tG4\u001a)X4\u001fWylG0\u001e\u0019[|l_u\u000b\u0012Kd-YsD\bTglJd\t\u0019H`'ON\u0019\u000fMq0XD\u000b\u001fPq\u0016Bj\u000f\u0013M`\u0010\\Hf-]n\u000e\u0019J4,Jj\u000f\u0018\u0018\u0090)Vu GbJ\bW4-[b\u0004\\T}1_b\u0004\\H{0_'\u001d\u0015L|b_o\u000f\\Kd'Hn\f\u0015]pbxT&\\[{,Mn\r\tJu6Bh\u0004F\u0018Z-EbJ\u0013^46CbJ\u000f]x'Hs\u000f\u0018\u0018w+[o\u000f\u000e\u0018g7Bs\u000f\u000f\u0018u0N'\u0019\tHd-Ys\u000f\u0018\u0018v;\u000bs\u0002\u0019\u0018a,Ob\u0018\u0010A},L'>0k42Yh\u001c\u0015\\q0\u0007 K>nwt@4\u001fWylG0\u001e\u0019[|l_u\u000b\u0012Kd-YsD\bTglJd\t\u0019H`'ON\u0019\u000fMq0XD\u000b\u001fPq\u0016Bj\u000f\u0013M`<=L`'Fw\u001e\u0015Vsb_hJ\u001fJq#_bJ/kX\u0001Di\u001e\u0019@`b^t\u0003\u0012_4!^t\u001e\u0013U42Yh\u001c\u0015\\q0\u000bi\u000b\u0011]pb6=L`'Fw\u001e\u0015Vsb_hJ\u001fJq#_bJ/kX\u0001Di\u001e\u0019@`b^t\u0003\u0012_4&Na\u000b\tT`b[u\u0005\nQp'Y\u0011\\^{0\u000bk\u0003\u000fLq,\u000bw\u0005\u000eL4\u000f\\lX\u0011\u000bq\u000f\u000eK}-EtP\\\u001b\u001dV4\u0011X`)\u0013Vz'Hs\u0005\u000e\u0018}1\u000bu\u000f\rM}0Nc\u0005\u001aYx1N\u001b\bJu,Xw\u0005\u000eLY-Or\u0006\u0019\u0018}1\u000bu\u000f\rM}0Nc\u0013)K},L'>0k42Yh\u001c\u0015\\q0\u000b\u0017/kX\u001deR&0gC\u000b\u007fO52mX\u000etI?0t\u0007(tG4\u001a)["
         .length();
      char var1 = '\n';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 125;
         String var10001 = var2.substring(++var7, var7 + var1);
         byte var10002 = -1;

         while (true) {
            String var8 = a(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     j = var5;
                     SYSPROP_ACCEPTED_ISSUERS_CACHE_TIMEOUT = j[8];
                     logger = Logger.getLogger(SsgConnectorSslHelper.class.getName());
                     a = Pattern.compile(j[11]);
                     return;
                  }

                  var1 = var2.charAt(var7);
                  break;
               default:
                  var5[var3++] = var8;
                  if ((var7 += var1) < var4) {
                     var1 = var2.charAt(var7);
                     continue label24;
                  }

                  var2 = "\u001ev[\roE?2k\u0015\u0013xI;8kA\u001a*K>.m\u0015\u0001o\u0006%(tP\u0011cEk;vGCiI%3|V\u0017eTk2pQC\u0002g9";
                  var4 = "\u001ev[\roE?2k\u0015\u0013xI;8kA\u001a*K>.m\u0015\u0001o\u0006%(tP\u0011cEk;vGCiI%3|V\u0017eTk2pQC\u0002g9".length();
                  var1 = '5';
                  var7 = -1;
            }

            var10000 = 92;
            var10001 = var2.substring(++var7, var7 + var1);
            var10002 = 0;
         }
      }
   }

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

   private static char[] a(String var0) {
      char[] var10000 = var0.toCharArray();
      if (var10000.length < 2) {
         var10000[0] = (char)(var10000[0] ^ 23);
      }

      return var10000;
   }

   private static String a(int var0, char[] var1) {
      int var10003 = var1.length;
      int var10002 = var0;
      char[] var10001 = var1;
      int var10000 = var10003;

      for (int var2 = 0; var10000 > var2; var2++) {
         var10001[var2] = (char)(var10001[var2] ^ var10002 ^ switch (var2 % 7) {
            case 0 -> 1;
            case 1 -> 69;
            case 2 -> 105;
            case 3 -> 63;
            case 4 -> 86;
            case 5 -> 122;
            default -> 23;
         });
      }

      return new String(var10001).intern();
   }
}
