package com.l7tech.policy.assertion.xmlsec;

import com.l7tech.objectmodel.ExternalEntityHeader;
import com.l7tech.objectmodel.migration.Migration;
import com.l7tech.objectmodel.migration.MigrationMappingSelection;
import com.l7tech.objectmodel.migration.PropertyResolver;
import com.l7tech.policy.assertion.Assertion;
import com.l7tech.policy.assertion.AssertionMetadata;
import com.l7tech.policy.assertion.DefaultAssertionMetadata;
import com.l7tech.policy.assertion.SetsVariables;
import com.l7tech.policy.assertion.UsesVariables;
import com.l7tech.policy.assertion.VariableUseSupport;
import com.l7tech.policy.variable.DataType;
import com.l7tech.policy.variable.VariableMetadata;
import com.l7tech.policy.wsp.Java5EnumTypeMapping;
import com.l7tech.policy.wsp.SimpleTypeMappingFinder;
import com.l7tech.util.Functions;
import com.l7tech.util.Functions.Unary;
import java.util.Arrays;

public class LookupTrustedCertificateAssertion extends Assertion implements SetsVariables, UsesVariables {
   private static final String META_INITIALIZED;
   private String trustedCertificateName;
   private String certSubjectKeyIdentifier;
   private String certThumbprintSha1;
   private String certIssuerDn;
   private String certSerialNumber;
   private String certSubjectDn;
   private boolean allowMultipleCertificates = true;
   private String variableName;
   private LookupTrustedCertificateAssertion.LookupType lookupType;
   static final long serialVersionUID = -3819754104412411776L;
   private static final String[] b;

   public LookupTrustedCertificateAssertion() {
      this.variableName = b[4];
      this.lookupType = LookupTrustedCertificateAssertion.LookupType.TRUSTED_CERT_NAME;
   }

   public String getTrustedCertificateName() {
      return this.trustedCertificateName;
   }

   public void setTrustedCertificateName(String var1) {
      this.trustedCertificateName = var1;
   }

   public String getCertSubjectKeyIdentifier() {
      return this.certSubjectKeyIdentifier;
   }

   public void setCertSubjectKeyIdentifier(String var1) {
      this.certSubjectKeyIdentifier = var1;
   }

   public String getCertThumbprintSha1() {
      return this.certThumbprintSha1;
   }

   public void setCertThumbprintSha1(String var1) {
      this.certThumbprintSha1 = var1;
   }

   public String getCertIssuerDn() {
      return this.certIssuerDn;
   }

   public void setCertIssuerDn(String var1) {
      this.certIssuerDn = var1;
   }

   public String getCertSerialNumber() {
      return this.certSerialNumber;
   }

   public void setCertSerialNumber(String var1) {
      this.certSerialNumber = var1;
   }

   public String getCertSubjectDn() {
      return this.certSubjectDn;
   }

   public void setCertSubjectDn(String var1) {
      this.certSubjectDn = var1;
   }

   public LookupTrustedCertificateAssertion.LookupType getLookupType() {
      return this.lookupType;
   }

   public void setLookupType(LookupTrustedCertificateAssertion.LookupType var1) {
      this.lookupType = var1;
   }

   public boolean isAllowMultipleCertificates() {
      return this.allowMultipleCertificates;
   }

   public void setAllowMultipleCertificates(boolean var1) {
      this.allowMultipleCertificates = var1;
   }

   public String getVariableName() {
      return this.variableName;
   }

   public void setVariableName(String var1) {
      this.variableName = var1;
   }

   @Override
   public VariableMetadata[] getVariablesSet() {
      return new VariableMetadata[]{new VariableMetadata(this.variableName, false, true, this.variableName, true, DataType.CERTIFICATE)};
   }

   @Migration(
      mapName = MigrationMappingSelection.NONE,
      mapValue = MigrationMappingSelection.REQUIRED,
      export = false,
      valueType = ExternalEntityHeader.ValueType.TEXT_ARRAY,
      resolver = PropertyResolver.Type.SERVER_VARIABLE
   )
   @Override
   public String[] getVariablesUsed() {
      return VariableUseSupport.expressions(
            this.trustedCertificateName, this.certSubjectKeyIdentifier, this.certSubjectDn, this.certThumbprintSha1, this.certIssuerDn, this.certSerialNumber
         )
         .asArray();
   }

   @Override
   public AssertionMetadata meta() {
      DefaultAssertionMetadata var1 = this.defaultMeta();
      if (Boolean.TRUE.equals(var1.get(META_INITIALIZED))) {
         return var1;
      }

      String[] var2 = b;
      var1.put(var2[7], var2[11]);
      var1.put(var2[5], var2[2]);
      var1.put(var2[9], var2[0]);
      var1.put(var2[8], var2[10]);
      var1.put(var2[12], var2[15]);
      var1.put(var2[13], new String[]{var2[14]});
      var1.put(var2[16], new SimpleTypeMappingFinder(Arrays.asList(new Java5EnumTypeMapping(LookupTrustedCertificateAssertion.LookupType.class, var2[3]))));
      var1.put(var2[6], new k(this, var1));
      var1.put(META_INITIALIZED, Boolean.TRUE);
      return var1;
   }

   static {
      String[] var5 = new String[17];
      int var3 = 0;
      String var2 = "_vq\t\u0002]\r\u007frw\u0018Kw\u000bsxv\rKk\u0016scf\u000f\u001fR\u0001o\u00142~f\t\n_\u0005hrJ\u0013\u0002O\r}\u007fj\u0007\u000e_\u0097P|l\u0016KN\u0014<pf\u000f\u001fR\u0002upb\t\u000eHDz|q]\u0007Z\u0010ya#\b\u0018^Du}#\r\u0004W\r\u007fj-]Kx\u0005r3o\u0012\u0004PDic#\t\u0019N\u0017hvg]\b^\u0016hze\u0014\bZ\u0010y`#\u001f\u0012\u001b\u0007yaw]\u0005Z\ty?#\u0012\u0019\u001b\u0005rj#\u001e\u000eI\u0010<qz]8p-03W\u0015\u001eV\u0006laj\u0013\u001fh,]\"/]\"H\u0017ivqR8^\u0016uroQKT\u0016<WMS\bov`\b\u0019R\u0010e\f\u007fvq\t\u0002]\r\u007frw\u0018\u0018\u000bxvp\u001e\u0019R\u0014hzl\u0013\u0015l|o\u0014\bB*swf3\nV\u0001Zr`\t\u0004I\u001d\to{l\u000f\u001fu\u0005qv\u0015l|o\u0014\bB%xej\u001e\u000ex\b}`p\u0013\nV\u0001\u0014lal\r\u000eI\u0010uvp<\bO\rs}M\u001c\u0006^\u0004}fw\u0012\u0013P|l\u0016Kn\u0014<Pf\u000f\u001fR\u0002upb\t\u000e\u0019lal\r\u000eI\u0010uvp8\u000fR\u0010sa@\u0011\nH\u0017rrn\u0018\u000elro\u0018\u001fO\u0001Z|o\u0019\u000eI\u0017\u000bd~o.\u000eX\u0011nzw\u0004";
      int var4 = "_vq\t\u0002]\r\u007frw\u0018Kw\u000bsxv\rKk\u0016scf\u000f\u001fR\u0001o\u00142~f\t\n_\u0005hrJ\u0013\u0002O\r}\u007fj\u0007\u000e_\u0097P|l\u0016KN\u0014<pf\u000f\u001fR\u0002upb\t\u000eHDz|q]\u0007Z\u0010ya#\b\u0018^Du}#\r\u0004W\r\u007fj-]Kx\u0005r3o\u0012\u0004PDic#\t\u0019N\u0017hvg]\b^\u0016hze\u0014\bZ\u0010y`#\u001f\u0012\u001b\u0007yaw]\u0005Z\ty?#\u0012\u0019\u001b\u0005rj#\u001e\u000eI\u0010<qz]8p-03W\u0015\u001eV\u0006laj\u0013\u001fh,]\"/]\"H\u0017ivqR8^\u0016uroQKT\u0016<WMS\bov`\b\u0019R\u0010e\f\u007fvq\t\u0002]\r\u007frw\u0018\u0018\u000bxvp\u001e\u0019R\u0014hzl\u0013\u0015l|o\u0014\bB*swf3\nV\u0001Zr`\t\u0004I\u001d\to{l\u000f\u001fu\u0005qv\u0015l|o\u0014\bB%xej\u001e\u000ex\b}`p\u0013\nV\u0001\u0014lal\r\u000eI\u0010uvp<\bO\rs}M\u001c\u0006^\u0004}fw\u0012\u0013P|l\u0016Kn\u0014<Pf\u000f\u001fR\u0002upb\t\u000e\u0019lal\r\u000eI\u0010uvp8\u000fR\u0010sa@\u0011\nH\u0017rrn\u0018\u000elro\u0018\u001fO\u0001Z|o\u0019\u000eI\u0017\u000bd~o.\u000eX\u0011nzw\u0004"
         .length();
      char var1 = 29;
      int var7 = -1;

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

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

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

                  var2 = "mn|A\u0015\u001e\u0002kbyA\u001aF\u0018}n}\nWY\u0017`d}\u001cWe\u0019ajd\u001f-[\u0003}ut\u000b:L\u0004zhw\u0006\u001aH\u0002k@b\u001c\u001c[\u0002gn\u007f?\u000bF\u0006kse\u0006\u001cZ2g`}\u0000\u001e\u0010yra<\fK\u0002wqt)\u0010G\u0012ks";
                  var4 = "mn|A\u0015\u001e\u0002kbyA\u001aF\u0018}n}\nWY\u0017`d}\u001cWe\u0019ajd\u001f-[\u0003}ut\u000b:L\u0004zhw\u0006\u001aH\u0002k@b\u001c\u001c[\u0002gn\u007f?\u000bF\u0006kse\u0006\u001cZ2g`}\u0000\u001e\u0010yra<\fK\u0002wqt)\u0010G\u0012ks"
                     .length();
                  var1 = 'K';
                  var7 = -1;
            }

            var10000 = 115;
            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] ^ 5);
      }

      return var10000;
   }

   private static String b(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 -> 125;
            case 1 -> 114;
            case 2 -> 98;
            case 3 -> 28;
            case 4 -> 10;
            case 5 -> 90;
            default -> 5;
         });
      }

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

   public enum LookupType {
      TRUSTED_CERT_NAME,
      CERT_SKI,
      CERT_THUMBPRINT_SHA1,
      CERT_ISSUER_SERIAL,
      CERT_SUBJECT_DN;

      private final String what;
      private final String how;
      private final Unary<String, LookupTrustedCertificateAssertion> paramExtractor;

      LookupType(String var3, String var4, Unary<String, LookupTrustedCertificateAssertion> var5) {
         this.paramExtractor = var5;
         this.how = var4;
         this.what = var3;
      }

      public String getWhat() {
         return this.what;
      }

      public String getHow() {
         return this.how;
      }

      public Unary<String, LookupTrustedCertificateAssertion> getParamExtractor() {
         return this.paramExtractor;
      }

      private static Unary<String, LookupTrustedCertificateAssertion> forField(String var0) {
         return Functions.propertyTransform(LookupTrustedCertificateAssertion.class, var0);
      }

      private static Unary<String, LookupTrustedCertificateAssertion> forIssuerSerialFields() {
         return new l();
      }

      // $VF: Failed to inline enum fields
      // 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!)
      static {
         String[] var0 = new String[17];
         int var4 = 0;
         String var3 = "\"SbcI\f~4[rgD\u0011x5Ic\u007fWi\u000e2cR]s;BA]UN6\u0011r\u0016\u0015dEDb=R\"sBC\u007f>_\u0002wDRX9[\u0004\u0004/w]R\u000b\"sBC\u007f>_\u0002wDR\u000b\"sBC\u007f>_\u0002wDR\u000f\"SbcI\u000bc#\\utB\u0007r/\u0012\"SbcI\u0011e2CueI\u000bs3_q{\u00135dEDb=RAUUEb1P\buQCs\u0012\u0002sBCB0C\ft@E\u007f6B2~Q\u0006\u00115DedB\u001dr>UueB\u0007x [u\u000e5~EZt(D\bxDd^\u0019\u0007\r\u0002sBCE-T\u000bsSCR6\u0018\u0002sBCE-T\u000bsSC]=O(rUYb1P\bsB\u0017(eCBs*\u0016%X\u001fds*_\u0000z\u0010yc5T\u0004d";
         int var5 = "\"SbcI\f~4[rgD\u0011x5Ic\u007fWi\u000e2cR]s;BA]UN6\u0011r\u0016\u0015dEDb=R\"sBC\u007f>_\u0002wDRX9[\u0004\u0004/w]R\u000b\"sBC\u007f>_\u0002wDR\u000b\"sBC\u007f>_\u0002wDR\u000f\"SbcI\u000bc#\\utB\u0007r/\u0012\"SbcI\u0011e2CueI\u000bs3_q{\u00135dEDb=RAUUEb1P\buQCs\u0012\u0002sBCB0C\ft@E\u007f6B2~Q\u0006\u00115DedB\u001dr>UueB\u0007x [u\u000e5~EZt(D\bxDd^\u0019\u0007\r\u0002sBCE-T\u000bsSCR6\u0018\u0002sBCE-T\u000bsSC]=O(rUYb1P\bsB\u0017(eCBs*\u0016%X\u001fds*_\u0000z\u0010yc5T\u0004d"
            .length();
         char var2 = 20;
         int var7 = -1;

         label25:
         while (true) {
            byte var10000 = 14;
            String var10001 = var3.substring(++var7, var7 + var2);
            byte var10002 = -1;

            while (true) {
               String var8 = a(var10000, a(var10001));
               switch (var10002) {
                  case 0:
                     var0[var4++] = var8;
                     if ((var7 += var2) >= var5) {
                        TRUSTED_CERT_NAME = new LookupTrustedCertificateAssertion.LookupType(var0[8], var0[3], forField(var0[2]));
                        CERT_SKI = new LookupTrustedCertificateAssertion.LookupType(var0[4], var0[1], forField(var0[13]));
                        CERT_THUMBPRINT_SHA1 = new LookupTrustedCertificateAssertion.LookupType(var0[5], var0[11], forField(var0[9]));
                        CERT_ISSUER_SERIAL = new LookupTrustedCertificateAssertion.LookupType(var0[5], var0[14], forIssuerSerialFields());
                        CERT_SUBJECT_DN = new LookupTrustedCertificateAssertion.LookupType(var0[5], var0[15], forField(var0[12]));
                        return;
                     }

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

                     var3 = "o>\u000f\u0000.f\u001f\u001c\u000f#\b\u007f\u000e?>\u0014V u";
                     var5 = "o>\u000f\u0000.f\u001f\u001c\u000f#\b\u007f\u000e?>\u0014V u".length();
                     var2 = '\n';
                     var7 = -1;
               }

               var10000 = 83;
               var10001 = var3.substring(++var7, var7 + var2);
               var10002 = 0;
            }
         }
      }

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

         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 -> 111;
               case 1 -> 24;
               case 2 -> 62;
               case 3 -> 57;
               case 4 -> 24;
               case 5 -> 86;
               default -> 56;
            });
         }

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