package com.l7tech.server.security;

import com.l7tech.common.io.CertUtils;
import com.l7tech.gateway.common.audit.Audit;
import com.l7tech.policy.variable.NoSuchVariableException;
import com.l7tech.policy.variable.Syntax;
import com.l7tech.security.xml.XmlElementEncryptionConfig;
import com.l7tech.security.xml.XmlElementEncryptionResolvedConfig;
import com.l7tech.server.policy.variable.ExpandVariables;
import com.l7tech.util.ValidationUtils;
import java.io.IOException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map;
import org.jetbrains.annotations.NotNull;

public class XmlElementEncryptorConfigUtils {
   private static final String[] a;

   @NotNull
   public static XmlElementEncryptionResolvedConfig getXmlElementEncryptorConfig(
      @NotNull XmlElementEncryptionConfig var0, @NotNull Map<String, Object> var1, @NotNull Audit var2
   ) throws IOException, CertificateException, NoSuchVariableException, XmlElementEncryptorConfigUtils.InvalidResolvedValueException {
      try {
         if (var0 == null) {
            a(0);
         }
      } catch (IOException var12) {
         throw a(var12);
      }

      try {
         if (var1 == null) {
            a(1);
         }
      } catch (IOException var9) {
         throw a(var9);
      }

      try {
         if (var2 == null) {
            a(2);
         }
      } catch (IOException var11) {
         throw a(var11);
      }

      if (var0.getRecipientCertContextVariableName() != null) {
         Object var4 = ExpandVariables.processSingleVariableAsObject(Syntax.getVariableExpression(var0.getRecipientCertContextVariableName()), var1, var2);
         if (var4 instanceof String) {
            var3 = a(String.valueOf(var4));
         } else if (!(var4 instanceof X509Certificate var3)) {
            String var10002 = var0.getRecipientCertContextVariableName();
            String[] var7 = a;
            throw new NoSuchVariableException(var10002, var7[5]);
         }
      } else {
         var3 = a(var0.getRecipientCertificateBase64());
      }

      XmlElementEncryptionResolvedConfig var13 = new XmlElementEncryptionResolvedConfig(var3, var0.getXencAlgorithm(), var0.isEncryptContentsOnly());
      if (var0.isIncludeEncryptedDataTypeAttribute()) {
         String var5 = var0.getEncryptedDataTypeAttribute();
         String var6 = ExpandVariables.process(var5, var1, var2).trim();

         try {
            if (!ValidationUtils.isValidUri(var6)) {
               throw new XmlElementEncryptorConfigUtils.InvalidResolvedValueException(a[10] + var6 + "'");
            }
         } catch (IOException var10) {
            throw a(var10);
         }

         var13.setEncryptedDataTypeAttribute(var6);
      }

      String var14 = var0.getEncryptedKeyRecipientAttribute();
      if (var14 != null) {
         String var15 = ExpandVariables.process(var14, var1, var2);
         var13.setEncryptedKeyRecipientAttribute(var15);
      }

      try {
         if (var13 == null) {
            a(3);
         }

         return var13;
      } catch (IOException var8) {
         throw a(var8);
      }
   }

   private static X509Certificate a(String var0) throws IOException, CertificateException {
      return CertUtils.decodeFromPEM(var0, false);
   }

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

   static {
      String[] var5 = new String[11];
      int var3 = 0;
      String var2 = "/V0uEE\u0017<z#l\u001c>R6DIK>5R/yJS>7T0eTS\u0014+t-rBN\u001c\t+V5_KI\u001d0P9:X/3H\u0010\u000f<T*3WB\t/R03WB\u0018,E+h]\b#4[\u0007pAJ\u001e7C\u0007rGU\u0002)C-ngH\u0015?^%IPN\u0017*\u00058B&uPd\u000bR!uTN\u001e7Cb\u007fAU\u000f0Q+\u007fES\u001eyA#nMF\u00195RbkET[7R+hLB\tyV,<|\u0012K`t'nPN\u001d0T#hA\u0007\u00156Eb}\u0004T\u000f+^,{\u0004N\u0015yg\u0007Q\u0004H\tyu#oA\nMm\u0017$sVJ\u001a-\u0019\u001c>R6DIK>5R/yJS>7T0eTS\u0014+t-rBN\u001c*\u0019y-hjR\u00175\u0017/yPO\u0014=\u0017go\n\u0002\byZ7oP\u0007\u00156CbnAS\u000e+YbrQK\u0017>\u0018E%iIB\u0015-\u0017$sV\u0007;\u0017X6RQK\u0017yG#nEJ\u001e-R0<\u0003\u0002\b~\u0017-z\u0004\u0002\bw\u00121<IR\b-\u0017,sP\u0007\u0019<\u0017,iHK";
      int var4 = "/V0uEE\u0017<z#l\u001c>R6DIK>5R/yJS>7T0eTS\u0014+t-rBN\u001c\t+V5_KI\u001d0P9:X/3H\u0010\u000f<T*3WB\t/R03WB\u0018,E+h]\b#4[\u0007pAJ\u001e7C\u0007rGU\u0002)C-ngH\u0015?^%IPN\u0017*\u00058B&uPd\u000bR!uTN\u001e7Cb\u007fAU\u000f0Q+\u007fES\u001eyA#nMF\u00195RbkET[7R+hLB\tyV,<|\u0012K`t'nPN\u001d0T#hA\u0007\u00156Eb}\u0004T\u000f+^,{\u0004N\u0015yg\u0007Q\u0004H\tyu#oA\nMm\u0017$sVJ\u001a-\u0019\u001c>R6DIK>5R/yJS>7T0eTS\u0014+t-rBN\u001c*\u0019y-hjR\u00175\u0017/yPO\u0014=\u0017go\n\u0002\byZ7oP\u0007\u00156CbnAS\u000e+YbrQK\u0017>\u0018E%iIB\u0015-\u0017$sV\u0007;\u0017X6RQK\u0017yG#nEJ\u001e-R0<\u0003\u0002\b~\u0017-z\u0004\u0002\bw\u00121<IR\b-\u0017,sP\u0007\u0019<\u0017,iHK"
         .length();
      char var1 = 11;
      int var7 = -1;

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

         while (true) {
            String var8 = a(var10000, b(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     a = var5;
                     return;
                  }

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

                  var2 = "c\u0001vj\u0011IVe\rsj\u000e\u001bPv\u000bij\u000e\u001bAu\u001cr1\u0004Qzm\u0002^)\u0018\u0013Gn\u001a^+\u001e\f[p\u001at7>\u0011Lf\u0007|\u0010\t\u0017Ns6T\u0017k ]\u001fVt\u001cr'\b\nG \bt7];Lc\u001cb5\t\u001bFD\u000fo$]\u0017Q \u0000t1]\u001f\u0002v\u000fw,\u0019^wR'!eZ";
                  var4 = "c\u0001vj\u0011IVe\rsj\u000e\u001bPv\u000bij\u000e\u001bAu\u001cr1\u0004Qzm\u0002^)\u0018\u0013Gn\u001a^+\u001e\f[p\u001at7>\u0011Lf\u0007|\u0010\t\u0017Ns6T\u0017k ]\u001fVt\u001cr'\b\nG \bt7];Lc\u001cb5\t\u001bFD\u000fo$]\u0017Q \u0000t1]\u001f\u0002v\u000fw,\u0019^wR'!eZ"
                     .length();
                  var1 = '9';
                  var7 = -1;
            }

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

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

      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 -> 55;
            case 1 -> 89;
            case 2 -> 44;
            case 3 -> 114;
            case 4 -> 74;
            case 5 -> 73;
            default -> 21;
         });
      }

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

   public static class InvalidResolvedValueException extends Exception {
      static final long serialVersionUID = 7444295500499955151L;

      public InvalidResolvedValueException(String var1) {
         super(var1);
      }
   }
}
