package com.l7tech.policy.assertion.xmlsec;

import com.l7tech.objectmodel.EntityHeader;
import com.l7tech.objectmodel.migration.Migration;
import com.l7tech.objectmodel.migration.MigrationMappingSelection;
import com.l7tech.objectmodel.migration.PropertyResolver;
import com.l7tech.policy.assertion.AssertionMetadata;
import com.l7tech.policy.assertion.AssertionNodeNameFactory;
import com.l7tech.policy.assertion.DefaultAssertionMetadata;
import com.l7tech.policy.assertion.IdentityTarget;
import com.l7tech.policy.assertion.IdentityTargetable;
import com.l7tech.policy.assertion.SetsVariables;
import com.l7tech.policy.assertion.TargetMessageType;
import com.l7tech.policy.assertion.UsesEntities;
import com.l7tech.policy.assertion.XpathBasedAssertion;
import com.l7tech.policy.assertion.XpathBasedAssertionFactory;
import com.l7tech.policy.variable.DataType;
import com.l7tech.policy.variable.VariableMetadata;
import com.l7tech.policy.wsp.TypeMapping;
import com.l7tech.policy.wsp.WspUpgradeUtilFrom21;
import com.l7tech.security.xml.SupportedDigestMethods;
import com.l7tech.xml.xpath.XpathExpression;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.jetbrains.annotations.Nullable;

public class RequireWssSignedElement extends XmlSecurityAssertionBase implements IdentityTargetable, SetsVariables, UsesEntities {
   public static final String VAR_SIGNATURE_ELEMENT;
   public static final String VAR_TOKEN_TYPE;
   public static final String VAR_TOKEN_ELEMENT;
   public static final String VAR_TOKEN_ATTRIBUTES;
   static final String baseName;
   static final AssertionNodeNameFactory policyNameFactory;
   private String variablePrefix;
   private String signedElementsVariable;
   private IdentityTarget identityTarget;
   private Set<String> acceptedDigests;
   static final long serialVersionUID = 9104906308113377878L;
   private static final String[] c;

   public RequireWssSignedElement() {
      this(compatOrigDefaultXpathValue());
   }

   public RequireWssSignedElement(XpathExpression var1) {
      super(TargetMessageType.REQUEST, false);
      this.setXpathExpression(var1);
      List var2 = SupportedDigestMethods.getAlgorithmIds();
      this.setAcceptedDigestAlgorithms(var2.toArray(new String[var2.size()]));
   }

   @Override
   public IdentityTarget getIdentityTarget() {
      return this.identityTarget;
   }

   @Override
   public void setIdentityTarget(IdentityTarget var1) {
      this.identityTarget = var1;
   }

   public String getVariablePrefix() {
      return this.variablePrefix;
   }

   public void setVariablePrefix(@Nullable String var1) {
      this.variablePrefix = var1;
   }

   public String getSignedElementsVariable() {
      return this.signedElementsVariable;
   }

   public void setSignedElementsVariable(String var1) {
      this.signedElementsVariable = var1;
   }

   public String[] getVariableSuffixes() {
      String[] var10000 = new String[4];
      String[] var1 = c;
      var10000[0] = var1[31];
      var10000[1] = var1[23];
      var10000[2] = var1[28];
      var10000[3] = var1[3];
      return var10000;
   }

   @Migration(mapName = MigrationMappingSelection.REQUIRED, export = false, resolver = PropertyResolver.Type.USERGROUP)
   @Override
   public EntityHeader[] getEntitiesUsed() {
      return this.identityTarget != null ? this.identityTarget.getEntitiesUsed() : new EntityHeader[0];
   }

   @Override
   public void replaceEntity(EntityHeader var1, EntityHeader var2) {
      if (this.identityTarget != null) {
         this.identityTarget.replaceEntity(var1, var2);
      }
   }

   public boolean acceptsDigest(String var1) {
      return this.acceptedDigests.contains(var1);
   }

   public void setAcceptedDigestAlgorithms(String[] var1) {
      if (var1 != null) {
         LinkedHashSet var2 = new LinkedHashSet();

         for (String var6 : var1) {
            var2.add(SupportedDigestMethods.fromAlgorithmId(var6).getIdentifier());
         }

         this.acceptedDigests = var2;
      }
   }

   public String[] getAcceptedDigestAlgorithms() {
      return this.acceptedDigests == null ? new String[0] : this.acceptedDigests.toArray(new String[this.acceptedDigests.size()]);
   }

   @Override
   public AssertionMetadata meta() {
      DefaultAssertionMetadata var1 = this.defaultMeta();
      String[] var2 = c;
      var1.put(var2[11], var2[22]);
      var1.put(var2[29], var2[14]);
      var1.put(var2[13], new String[]{var2[1]});
      var1.put(var2[8], 100000);
      var1.put(var2[21], var2[16]);
      var1.put(var2[24], var2[2]);
      var1.put(var2[7], var2[17]);
      var1.put(var2[5], new XpathBasedAssertionFactory<>(RequireWssSignedElement.class));
      var1.put(var2[30], policyNameFactory);
      var1.put(var2[10], new t(this));
      var1.put(
         var2[25],
         new HashMap<String, TypeMapping>() {
            static final long serialVersionUID = 5568291130390366601L;

            {
               this.put(
                  WspUpgradeUtilFrom21.xmlRequestSecurityCompatibilityMapping.getExternalName(), WspUpgradeUtilFrom21.xmlRequestSecurityCompatibilityMapping
               );
            }
         }
      );
      var1.put(var2[6], var2[19]);
      var1.put(var2[27], var2[12]);
      var1.put(var2[9], Boolean.TRUE);
      var1.put(var2[0], var2[15]);
      return var1;
   }

   @Override
   protected XmlSecurityAssertionBase.VariablesSet doGetVariablesSet() {
      XmlSecurityAssertionBase.VariablesSet var1 = super.doGetVariablesSet();
      if (this.isSetVariables()) {
         VariableMetadata[] var10001 = new VariableMetadata[4];
         String[] var2 = c;
         var10001[0] = new VariableMetadata(this.prefixVariable(var2[32]), false, false, this.prefixVariable(var2[32]), false, DataType.ELEMENT);
         var10001[1] = new VariableMetadata(this.prefixVariable(var2[18]), false, false, this.prefixVariable(var2[18]), false);
         var10001[2] = new VariableMetadata(this.prefixVariable(var2[20]), false, false, this.prefixVariable(var2[20]), false, DataType.ELEMENT);
         var10001[3] = new VariableMetadata(this.prefixVariable(var2[26]), false, false, this.prefixVariable(var2[26]), false);
         var1.addVariables(var10001);
      }

      return var1;
   }

   @Override
   protected XpathBasedAssertion.VariablesUsed doGetVariablesUsed() {
      return super.doGetVariablesUsed().withVariables(this.signedElementsVariable);
   }

   private boolean isSetVariables() {
      return this.variablePrefix != null && this.variablePrefix.length() > 0;
   }

   private String prefixVariable(String var1) {
      return VariableMetadata.prefixName(this.variablePrefix, var1);
   }

   static {
      String[] var5 = new String[33];
      int var3 = 0;
      String var2 = "\u001aO\u000b\u0016Q1\u0016\u000bL\u000e\u001bS</\u0018c\u000b\u001eA;.\u000bM\u0002\u000b\u0012M\u000b,W+5\u0018I\u0013\u0006=\tO\nQ^\u007f4\u000fC\u000fQQ'.\u0019O\u000b\u001a\u001c8!\u0004E\u000b\f\u001c\u00100\u000bT\u000f=S;%\u000ea\u0014\fW:4\u0003O\t/@'0\u000fR\u0013\u0016W;\u0004\u0003A\u000b\u0010U\u0010\u001eO\f\u001a\\f!\u001eT\u0015\u0016P=4\u000fS\u00168E\u0016\n[:%Js\u000e\u0018\\-$Je\u000b\u001a_-.\u001e\u0010\u000bS\u0014\u001a@<)\u0005N!\u001eQ</\u0018Y\u0018\tL\u000e\u001a\\<\u0001\u0019S\u0002\rF!/\u0004c\u000b\u001eA;.\u000bM\u0002\u000f\u001aA\u000b\u001aF<%$O\u0003\u001a{+/\u0004\u0017\u001aA\u000b\u001aF<%$O\u0003\u001aa'2\u001ep\u0015\u0016]:)\u001eY\f\u001fS\u0002\u001bp1\u0003\u0006I\u0002\u0011F\u001b\u001aO\u000b\u0016Q1\u0016\u000bL\u000e\u001bS</\u0018f\u000b\u001eU;\u0006\u000bC\u0013\u0010@1\t\u0019H\b\rF\u0006!\u0007E1\tO\nP^\u007f4\u000fC\u000fPB:/\u0012YH\rW;/\u001fR\u0004\u001aAg4\u0018E\u0002PJ%,\u000fN\u0004\rK84\u0003O\tQU!&\u000e\u001aA\u000b\u001aF<%,O\u000b\u001bW:35>H\u0002__-3\u0019A\u0000\u001a\u0012%5\u0019TG\u001c]&4\u000bI\t_]&%JO\u0015__'2\u000f\u0000\u0014\u0016U&%\u000e\u0000\u0002\u0013W%%\u0004T\u0014Q8\tO\nQ^\u007f4\u000fC\u000fQB',\u0003C\u001eQD),\u0003D\u0006\u000b]:n2P\u0006\u000bZ\n!\u0019E\u0003>A;%\u0018T\u000e\u0010\\\u001e!\u0006I\u0003\u001eF'2\u00199I\u0000\u0011W,`/L\u0002\u0012W&4Jp\u0015\u0010B-2\u001eI\u0002\f.\tO\nP^\u007f4\u000fC\u000fPQ'.\u0019O\u000b\u001a\u001d:%\u0019O\u0012\rQ-3EX\n\u0013W&#\u0018Y\u0017\u000b['.DG\u000e\u0019\n\u001eO\f\u001a\\f4\u0013P\u0002B\tO\nQ^\u007f4\u000fC\u000fQB:/\u0012YI\u000f]$)\tYI\u001eA;%\u0018T\u000e\u0010\\f8\u0007L\u0014\u001aQf\u0003\u0006I\u0002\u0011F\u001a%\u001bU\u0002\fF\u001f3\u0019i\t\u000bW/2\u0003T\u001e\r\u001eO\f\u001a\\f%\u0006E\n\u001a\\<\u0014\u001aR\b\u000fW:4\u0003E\u0014>Q<)\u0005N)\u001e_-\u00168E\u0016\n[:%Js\u000e\u0018\\-$Je\u000b\u001a_-.\u001e\n\u001eO\f\u001a\\f4\u0013P\u0002\u0019\u001aR\b\u000fW:4\u0003E\u0014:V!4\u0005R$\u0013S;3\u0004A\n\u001a\u0018\u001dS\u0017<]%0\u000bT\u000e\u001d[$)\u001eY*\u001eB8)\u0004G\u0014\u0010\u001eO\f\u001a\\f!\u001eT\u0015\u0016P=4\u000fS\u0019\tL\u000e\u001a\\<\u0001\u0019S\u0002\rF!/\u0004p\b\u0013[+9#C\b\u0011\r\u001eO\f\u001a\\f%\u0006E\n\u001a\\<\u000b\u000eE\u0014\u001c@!0\u001eI\b\u0011\u0015\u001aO\u000b\u0016Q1\u000e\u0005D\u00021S%%,A\u0004\u000b]:9";
      int var4 = "\u001aO\u000b\u0016Q1\u0016\u000bL\u000e\u001bS</\u0018c\u000b\u001eA;.\u000bM\u0002\u000b\u0012M\u000b,W+5\u0018I\u0013\u0006=\tO\nQ^\u007f4\u000fC\u000fQQ'.\u0019O\u000b\u001a\u001c8!\u0004E\u000b\f\u001c\u00100\u000bT\u000f=S;%\u000ea\u0014\fW:4\u0003O\t/@'0\u000fR\u0013\u0016W;\u0004\u0003A\u000b\u0010U\u0010\u001eO\f\u001a\\f!\u001eT\u0015\u0016P=4\u000fS\u00168E\u0016\n[:%Js\u000e\u0018\\-$Je\u000b\u001a_-.\u001e\u0010\u000bS\u0014\u001a@<)\u0005N!\u001eQ</\u0018Y\u0018\tL\u000e\u001a\\<\u0001\u0019S\u0002\rF!/\u0004c\u000b\u001eA;.\u000bM\u0002\u000f\u001aA\u000b\u001aF<%$O\u0003\u001a{+/\u0004\u0017\u001aA\u000b\u001aF<%$O\u0003\u001aa'2\u001ep\u0015\u0016]:)\u001eY\f\u001fS\u0002\u001bp1\u0003\u0006I\u0002\u0011F\u001b\u001aO\u000b\u0016Q1\u0016\u000bL\u000e\u001bS</\u0018f\u000b\u001eU;\u0006\u000bC\u0013\u0010@1\t\u0019H\b\rF\u0006!\u0007E1\tO\nP^\u007f4\u000fC\u000fPB:/\u0012YH\rW;/\u001fR\u0004\u001aAg4\u0018E\u0002PJ%,\u000fN\u0004\rK84\u0003O\tQU!&\u000e\u001aA\u000b\u001aF<%,O\u000b\u001bW:35>H\u0002__-3\u0019A\u0000\u001a\u0012%5\u0019TG\u001c]&4\u000bI\t_]&%JO\u0015__'2\u000f\u0000\u0014\u0016U&%\u000e\u0000\u0002\u0013W%%\u0004T\u0014Q8\tO\nQ^\u007f4\u000fC\u000fQB',\u0003C\u001eQD),\u0003D\u0006\u000b]:n2P\u0006\u000bZ\n!\u0019E\u0003>A;%\u0018T\u000e\u0010\\\u001e!\u0006I\u0003\u001eF'2\u00199I\u0000\u0011W,`/L\u0002\u0012W&4Jp\u0015\u0010B-2\u001eI\u0002\f.\tO\nP^\u007f4\u000fC\u000fPQ'.\u0019O\u000b\u001a\u001d:%\u0019O\u0012\rQ-3EX\n\u0013W&#\u0018Y\u0017\u000b['.DG\u000e\u0019\n\u001eO\f\u001a\\f4\u0013P\u0002B\tO\nQ^\u007f4\u000fC\u000fQB:/\u0012YI\u000f]$)\tYI\u001eA;%\u0018T\u000e\u0010\\f8\u0007L\u0014\u001aQf\u0003\u0006I\u0002\u0011F\u001a%\u001bU\u0002\fF\u001f3\u0019i\t\u000bW/2\u0003T\u001e\r\u001eO\f\u001a\\f%\u0006E\n\u001a\\<\u0014\u001aR\b\u000fW:4\u0003E\u0014>Q<)\u0005N)\u001e_-\u00168E\u0016\n[:%Js\u000e\u0018\\-$Je\u000b\u001a_-.\u001e\n\u001eO\f\u001a\\f4\u0013P\u0002\u0019\u001aR\b\u000fW:4\u0003E\u0014:V!4\u0005R$\u0013S;3\u0004A\n\u001a\u0018\u001dS\u0017<]%0\u000bT\u000e\u001d[$)\u001eY*\u001eB8)\u0004G\u0014\u0010\u001eO\f\u001a\\f!\u001eT\u0015\u0016P=4\u000fS\u0019\tL\u000e\u001a\\<\u0001\u0019S\u0002\rF!/\u0004p\b\u0013[+9#C\b\u0011\r\u001eO\f\u001a\\f%\u0006E\n\u001a\\<\u000b\u000eE\u0014\u001c@!0\u001eI\b\u0011\u0015\u001aO\u000b\u0016Q1\u000e\u0005D\u00021S%%,A\u0004\u000b]:9"
         .length();
      char var1 = 24;
      int var7 = -1;

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

         while (true) {
            String var8 = c(var10000, c(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     c = var5;
                     String[] var9 = c;
                     VAR_TOKEN_TYPE = c[18];
                     baseName = var9[4];
                     VAR_TOKEN_ELEMENT = var9[20];
                     VAR_TOKEN_ATTRIBUTES = var9[26];
                     VAR_SIGNATURE_ELEMENT = var9[32];
                     policyNameFactory = new s();
                     return;
                  }

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

                  var2 = "\fO\u0001\u0011T%7\u0007\fO\u0001\u0011T%7";
                  var4 = "\fO\u0001\u0011T%7\u0007\fO\u0001\u0011T%7".length();
                  var1 = 7;
                  var7 = -1;
            }

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

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

      return var10000;
   }

   private static String c(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 -> 23;
            case 1 -> 93;
            case 2 -> 26;
            case 3 -> 2;
            case 4 -> 79;
            case 5 -> 53;
            default -> 61;
         });
      }

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