package com.l7tech.security.prov;

import com.l7tech.security.prov.bc.api.BCFipsProxy;
import com.l7tech.security.prov.bc.api.BCNonFipsProxy;
import com.l7tech.security.prov.bc.api.BCProxy;
import com.l7tech.util.ConfigFactory;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.Pair;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.security.Provider;
import java.security.ProviderException;
import java.security.Security;
import java.security.Provider.Service;
import java.util.Collection;
import java.util.Optional;
import java.util.ServiceLoader;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jetbrains.annotations.NotNull;

public final class ProviderUtil {
   private static final Logger a;
   public static final String BCFIPS_PROVIDER_NAME;
   public static final String RHEL_JDK_FIPS_ENABLED;
   private static final String[] b;

   private ProviderUtil() {
   }

   public static void configureProvider(Collection<Pair<String, String>> var0, Provider var1) {
      try {
         String[] var15 = b;
         Method var2 = Provider.class.getDeclaredMethod(var15[14], Service.class);
         var2.setAccessible(true);

         for (Pair var4 : var0) {
            String var5 = (String)var4.left;
            String var6 = (String)var4.right;
            Service var7 = var1.getService(var5, var6);

            try {
               if (var7 != null) {
                  a.fine(b[17] + var5 + "." + var6 + b[22]);
                  var2.invoke(var1, var7);
               }
            } catch (InvocationTargetException var9) {
               throw a(var9);
            }
         }
      } catch (InvocationTargetException var10) {
         Logger var17 = a;
         Level var19 = Level.WARNING;
         String var21 = ExceptionUtils.getMessage(var10);
         String[] var14 = b;
         var17.log(var19, var14[7] + var21 + var14[20], ExceptionUtils.getDebugException(var10));
      } catch (NoSuchMethodException var11) {
         Logger var16 = a;
         Level var18 = Level.WARNING;
         String var20 = ExceptionUtils.getMessage(var11);
         String[] var13 = b;
         var16.log(var18, var13[12] + var20 + var13[20], ExceptionUtils.getDebugException(var11));
      } catch (IllegalAccessException var12) {
         Logger var10000 = a;
         Level var10001 = Level.WARNING;
         String var10002 = ExceptionUtils.getMessage(var12);
         String[] var8 = b;
         var10000.log(var10001, var8[12] + var10002 + var8[20], ExceptionUtils.getDebugException(var12));
      }
   }

   public static void removeService(Collection<Pair<String, String>> var0, Provider var1) {
      for (Pair var3 : var0) {
         var1.remove((String)var3.left + "." + (String)var3.right);
      }
   }

   public static byte[] paddingDecryptionOutputUsingRsaEcbNoPadding(@NotNull byte[] var0, int var1) {
      try {
         if (var0 == null) {
            a(0);
         }
      } catch (IllegalArgumentException var4) {
         throw a(var4);
      }

      int var2 = var0.length;
      if (var2 < var1) {
         byte[] var3 = new byte[var1];
         System.arraycopy(var0, 0, var3, var1 - var2, var2);
         return var3;
      } else {
         return var0;
      }
   }

   public static void configureBcFipsProvider(@NotNull Provider var0) {
      try {
         if (var0 == null) {
            a(1);
         }
      } catch (IllegalArgumentException var8) {
         throw a(var8);
      }

      try {
         if (!b[1].equals(var0.getName())) {
            throw new IllegalArgumentException(b[9]);
         }
      } catch (IllegalArgumentException var7) {
         throw a(var7);
      }

      String[] var6 = b;
      boolean var1 = ConfigFactory.getBooleanProperty(var6[10], false);
      if (var1) {
         Security.addProvider(var0);
         a.log(Level.INFO, var6[18]);
         a.log(Level.FINEST, var6[4]);

         for (Provider var5 : Security.getProviders()) {
            a.log(Level.FINEST, var5.getName());
         }
      } else {
         var6 = b;
         Security.removeProvider(var6[3]);
         Security.insertProviderAt(var0, 1);
         a.log(Level.INFO, var6[2]);
      }
   }

   public static BCNonFipsProxy loadBCProxy() {
      BCProxy var0 = loadInstalledBCProxy();

      try {
         if (!(var0 instanceof BCNonFipsProxy)) {
            throw new ProviderException(b[19] + var0);
         }
      } catch (IllegalArgumentException var1) {
         throw a(var1);
      }

      return (BCNonFipsProxy)var0;
   }

   public static BCFipsProxy loadBCFipsProxy() {
      BCProxy var0 = loadInstalledBCProxy();

      try {
         if (!(var0 instanceof BCFipsProxy)) {
            throw new ProviderException(b[21]);
         }
      } catch (IllegalArgumentException var1) {
         throw a(var1);
      }

      return (BCFipsProxy)var0;
   }

   public static BCProxy loadInstalledBCProxy() {
      ServiceLoader var0 = ServiceLoader.load(BCProxy.class);
      Optional var1 = var0.findFirst();

      try {
         if (var1.isEmpty()) {
            throw new ProviderException(b[5]);
         }
      } catch (IllegalArgumentException var2) {
         throw a(var2);
      }

      return (BCProxy)var1.get();
   }

   static {
      String[] var5 = new String[23];
      int var3 = 0;
      String var2 = "&]\u001f\u001a3}H;z\t?>mx1\\\u0006\u0016{*&\u000fZ'\u0016{*&\u000fZ<#Q\u0000\u0003\u007fkytU\u0003\u001c+)l&]\n\n-{y0\u0018\u001c\u001d0\u007fu0]\u001eA\u0006\u0016{*&\u000fZ!\u0012q<<\u007flr5Z\u0000\n;'<\u0000P\tO/{s\"Q\b\n-)s&\\\t\u001de \u0019Q\u001f\u001c6g{tz\u0003\u001a1je\u0017Y\u001f\u001b3l<0]\u001c\n1my:[\u0015A+$Y\b\u000b6g{\u0010]\u000f\u001d&yh=W\u0002 *}l!L9\u001c6g{\u0006K\r*<kR;h\r\u000b;`r3\u001c\u0011J\u001e\u0000-)\u007f;V\n\u00068|n=V\u000bO,ln\"Q\u000f\n,);%7W\u0001@3>h1[\u0004@,l\u007f!J\u0005\u001b&&l&W\u001a@\u000f{s\"Q\b\n-\\h=T'\u0012W\u0019\u0001;)i:]\u0014\u001f:jh1\\L\u001f-fj=\\\t\u001d\u007f}st[\u0003\u00019`{!J\tA%7W\u0001A3>h1[\u0004A,l\u007f!J\u0005\u001b&'n<]\u0000A9`l'\u0016\t\u0001>kp1\\\b$J\u0003\u00196my&\u001c\u0011J\u001e\u0000-)\u007f;V\n\u00068|n=V\u000bO,ln\"Q\u000f\n,);>\u0015J\u000b\u001a2lr \u0018\n\u0000-)\\\u001aW\u0018!*eptH\r\u001d>dy ]\u001eOx,os\u0018\u0003\t\u007f,oz\u001d\u001fO2|o \u0018\u0002\u0000+)~1\u0018\u0002\u001a3e\r&]\u0001\u0000)lO1J\u001a\u0006<l%7W\u0001A3>h1[\u0004A,l\u007f!J\u0005\u001b&'n<]\u0000A9`l'\u0016\t\u0001>kp1\\\u00177W\u0002\t6ni&].\f\u0019`l'h\u001e\u0000)`x1J\u0012\u0006]\u0001\u0000)`r3\u0018\u001f\n-\u007fu7]LHK\u0006p)#\u007fOU\u0004kL\u001c&zh1UL\u001f-fl1J\u0018\u0016\u007flr5Z\u0000\n;'<\u0016{*&\u000fZ<#Q\u0000\u0003\u007fkytT\t\u000e,}<$J\t\t:{n1\\L\u001f-fj=\\\t\u001dq)\u0003J\u0003\u00018)^;M\u0002\f&J}'L\u0000\n\u007fmy$]\u0002\u000b:g\u007f-\u0018\u001b\u000e,)p;Y\b\n;)\u0002s\u0016";
      int var4 = "&]\u001f\u001a3}H;z\t?>mx1\\\u0006\u0016{*&\u000fZ'\u0016{*&\u000fZ<#Q\u0000\u0003\u007fkytU\u0003\u001c+)l&]\n\n-{y0\u0018\u001c\u001d0\u007fu0]\u001eA\u0006\u0016{*&\u000fZ!\u0012q<<\u007flr5Z\u0000\n;'<\u0000P\tO/{s\"Q\b\n-)s&\\\t\u001de \u0019Q\u001f\u001c6g{tz\u0003\u001a1je\u0017Y\u001f\u001b3l<0]\u001c\n1my:[\u0015A+$Y\b\u000b6g{\u0010]\u000f\u001d&yh=W\u0002 *}l!L9\u001c6g{\u0006K\r*<kR;h\r\u000b;`r3\u001c\u0011J\u001e\u0000-)\u007f;V\n\u00068|n=V\u000bO,ln\"Q\u000f\n,);%7W\u0001@3>h1[\u0004@,l\u007f!J\u0005\u001b&&l&W\u001a@\u000f{s\"Q\b\n-\\h=T'\u0012W\u0019\u0001;)i:]\u0014\u001f:jh1\\L\u001f-fj=\\\t\u001d\u007f}st[\u0003\u00019`{!J\tA%7W\u0001A3>h1[\u0004A,l\u007f!J\u0005\u001b&'n<]\u0000A9`l'\u0016\t\u0001>kp1\\\b$J\u0003\u00196my&\u001c\u0011J\u001e\u0000-)\u007f;V\n\u00068|n=V\u000bO,ln\"Q\u000f\n,);>\u0015J\u000b\u001a2lr \u0018\n\u0000-)\\\u001aW\u0018!*eptH\r\u001d>dy ]\u001eOx,os\u0018\u0003\t\u007f,oz\u001d\u001fO2|o \u0018\u0002\u0000+)~1\u0018\u0002\u001a3e\r&]\u0001\u0000)lO1J\u001a\u0006<l%7W\u0001A3>h1[\u0004A,l\u007f!J\u0005\u001b&'n<]\u0000A9`l'\u0016\t\u0001>kp1\\\u00177W\u0002\t6ni&].\f\u0019`l'h\u001e\u0000)`x1J\u0012\u0006]\u0001\u0000)`r3\u0018\u001f\n-\u007fu7]LHK\u0006p)#\u007fOU\u0004kL\u001c&zh1UL\u001f-fl1J\u0018\u0016\u007flr5Z\u0000\n;'<\u0016{*&\u000fZ<#Q\u0000\u0003\u007fkytT\t\u000e,}<$J\t\t:{n1\\L\u001f-fj=\\\t\u001dq)\u0003J\u0003\u00018)^;M\u0002\f&J}'L\u0000\n\u007fmy$]\u0002\u000b:g\u007f-\u0018\u001b\u000e,)p;Y\b\n;)\u0002s\u0016"
         .length();
      char var1 = 16;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 87;
         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) {
                     b = var5;
                     String[] var9 = b;
                     BCFIPS_PROVIDER_NAME = b[3];
                     RHEL_JDK_FIPS_ENABLED = var9[15];
                     a = Logger.getLogger(ProviderUtil.class.getName());
                     return;
                  }

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

                  var2 = "I\bF^c/\u0000j\u0014G\\ev\u0005B7`\u0010d33n\tWUn5:+\t\\D 0,~\tW\u001e\u0002,I";
                  var4 = "I\bF^c/\u0000j\u0014G\\ev\u0005B7`\u0010d33n\tWUn5:+\t\\D 0,~\tW\u001e\u0002,I".length();
                  var1 = '\'';
                  var7 = -1;
            }

            var10000 = 8;
            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] ^ 75);
      }

      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 -> 3;
            case 1 -> 111;
            case 2 -> 59;
            case 3 -> 56;
            case 4 -> 8;
            case 5 -> 94;
            default -> 75;
         });
      }

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