package com.l7tech.server.security;

import com.l7tech.common.io.SingleCertX509KeyManager;
import com.l7tech.gateway.common.security.keystore.SsgKeyEntry;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.server.DefaultKey;
import com.l7tech.server.security.keystore.SsgKeyStoreManager;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.UnrecoverableKeyException;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import org.jetbrains.annotations.Nullable;

public class SSLContextFactory {
   private final DefaultKey a;
   private final SsgKeyStoreManager b;
   private final TrustManager c;
   private final SecureRandom d;
   private static final String e;

   public SSLContextFactory(DefaultKey var1, SsgKeyStoreManager var2, TrustManager var3, SecureRandom var4) {
      this.a = var1;
      this.b = var2;
      this.c = var3;
      this.d = var4;
   }

   public SSLContext create(boolean var1, @Nullable String var2, @Nullable String var3) throws IOException, KeyStoreException, FindException, NoSuchAlgorithmException, KeyManagementException, UnrecoverableKeyException {
      SsgKeyEntry var4;
      if (!var1) {
         var4 = null;
      } else if (var2 == null) {
         var4 = this.a.getClientSslInfo();
      } else {
         Goid var5 = Goid.DEFAULT_GOID;
         if (var3 != null) {
            try {
               var5 = new Goid(var3);
            } catch (IllegalArgumentException var7) {
            }
         }

         var4 = this.b.lookupKeyByKeyAlias(var2, var5);
      }

      KeyManager[] var8;
      if (var4 != null) {
         var8 = new KeyManager[]{new SingleCertX509KeyManager(var4.getCertificateChain(), var4.getPrivate())};
      } else {
         var8 = new KeyManager[0];
      }

      SSLContext var6 = SSLContext.getInstance(e);
      var6.init(var8, new TrustManager[]{this.c}, this.d);
      return var6;
   }

   static {
      String var10002 = a(101, a("MEu"));
      byte var10001 = -1;
      e = var10002;
   }

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

      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 -> 124;
            case 1 -> 108;
            case 2 -> 67;
            case 3 -> 92;
            case 4 -> 96;
            case 5 -> 31;
            default -> 35;
         });
      }

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