package com.l7tech.policy.assertion.xmlsec;

import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.Goid;
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.MessageTargetableAssertion;
import com.l7tech.policy.assertion.PrivateKeyable;
import com.l7tech.policy.assertion.PrivateKeyableSupport;
import com.l7tech.policy.assertion.TargetMessageType;
import com.l7tech.policy.assertion.annotation.RequiresSOAP;
import com.l7tech.policy.wsp.Java5EnumTypeMapping;
import com.l7tech.policy.wsp.SimpleTypeMappingFinder;
import com.l7tech.security.xml.KeyReference;
import com.l7tech.util.GoidUpgradeMapper;
import com.l7tech.util.TimeUnit;
import java.util.Collections;

@RequiresSOAP(wss = true)
public class AddWssTimestamp extends MessageTargetableAssertion implements WssDecorationConfig, PrivateKeyable {
   public static final int DEFAULT_EXPIRY_TIME;
   private static final String META_INITIALIZED;
   private static final String assertionName;
   private static final AssertionNodeNameFactory policyNameFactory;
   private long expiryMillis;
   private TimeUnit timeUnit = TimeUnit.MINUTES;
   private String keyReference = KeyReference.BST.getName();
   private boolean protectTokens = false;
   private XmlSecurityRecipientContext recipientContext = XmlSecurityRecipientContext.getLocalRecipient();
   private boolean signatureRequired = true;
   private PrivateKeyableSupport privatekeyableSupport = new PrivateKeyableSupport();
   private AddWssTimestamp.Resolution resolution;
   private String digestAlgorithmName;
   static final long serialVersionUID = 3662076622849438939L;
   private static final String[] b;

   public AddWssTimestamp() {
      super(TargetMessageType.RESPONSE, true);
   }

   public static AddWssTimestamp newInstance() {
      AddWssTimestamp var0 = new AddWssTimestamp();
      var0.setExpiryMilliseconds(DEFAULT_EXPIRY_TIME);
      return var0;
   }

   public void copyFrom(AddWssTimestamp var1) {
      super.copyFrom(var1);
      this.expiryMillis = var1.expiryMillis;
      this.timeUnit = var1.timeUnit;
      this.keyReference = var1.keyReference;
      this.recipientContext = var1.recipientContext;
      this.signatureRequired = var1.signatureRequired;
      this.privatekeyableSupport.copyFrom(var1.privatekeyableSupport);
      this.protectTokens = var1.protectTokens;
      this.resolution = var1.resolution;
   }

   public boolean isSignatureRequired() {
      return this.signatureRequired;
   }

   public void setSignatureRequired(boolean var1) {
      this.signatureRequired = var1;
   }

   public long getExpiryMilliseconds() {
      return this.expiryMillis;
   }

   public void setExpiryMilliseconds(long var1) {
      this.expiryMillis = var1;
   }

   @Deprecated
   public void setExpiryMilliseconds(int var1) {
      this.expiryMillis = var1;
   }

   public TimeUnit getTimeUnit() {
      return this.timeUnit;
   }

   public void setTimeUnit(TimeUnit var1) {
      this.timeUnit = var1;
   }

   public AddWssTimestamp.Resolution getResolution() {
      return this.resolution;
   }

   public void setResolution(AddWssTimestamp.Resolution var1) {
      this.resolution = var1;
   }

   @Override
   public XmlSecurityRecipientContext getRecipientContext() {
      return this.recipientContext;
   }

   @Override
   public void setRecipientContext(XmlSecurityRecipientContext var1) {
      if (var1 == null) {
         var1 = XmlSecurityRecipientContext.getLocalRecipient();
      }

      this.recipientContext = var1;
   }

   @Override
   public String getKeyReference() {
      return this.keyReference;
   }

   @Override
   public void setKeyReference(String var1) {
      this.keyReference = var1;
   }

   @Override
   public boolean isProtectTokens() {
      return this.protectTokens;
   }

   @Override
   public void setProtectTokens(boolean var1) {
      this.protectTokens = var1;
   }

   @Override
   public boolean isUsingProtectTokens() {
      return false;
   }

   @Override
   public String getDigestAlgorithmName() {
      return this.digestAlgorithmName;
   }

   @Override
   public void setDigestAlgorithmName(String var1) {
      this.digestAlgorithmName = var1;
   }

   @Override
   public String getKeyAlias() {
      return this.privatekeyableSupport.getKeyAlias();
   }

   @Override
   public void setKeyAlias(String var1) {
      this.privatekeyableSupport.setKeyAlias(var1);
   }

   @Migration(mapName = MigrationMappingSelection.REQUIRED, export = false, resolver = PropertyResolver.Type.SSGKEY)
   @Override
   public Goid getNonDefaultKeystoreId() {
      return this.privatekeyableSupport.getNonDefaultKeystoreId();
   }

   @Override
   public void setNonDefaultKeystoreId(Goid var1) {
      this.privatekeyableSupport.setNonDefaultKeystoreId(var1);
   }

   @Deprecated
   public void setNonDefaultKeystoreId(long var1) {
      this.privatekeyableSupport.setNonDefaultKeystoreId(GoidUpgradeMapper.mapOid(EntityType.SSG_KEYSTORE, var1));
   }

   @Override
   public boolean isUsesDefaultKeyStore() {
      return this.privatekeyableSupport.isUsesDefaultKeyStore();
   }

   @Override
   public void setUsesDefaultKeyStore(boolean var1) {
      this.privatekeyableSupport.setUsesDefaultKeyStore(var1);
   }

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

      String[] var3 = b;
      var1.put(var3[10], var3[5]);
      var1.put(var3[7], var3[0]);
      var1.put(var3[11], var3[12]);
      var1.put(var3[21], new String[]{var3[22]});
      var1.put(var3[13], 66000);
      var1.put(var3[17], new b(this));
      var1.put(var3[2], policyNameFactory);
      var1.put(var3[14], var3[8]);
      var1.put(var3[20], var3[16]);
      var1.put(var3[1], var3[18]);
      var1.put(var3[6], var3[9]);
      Java5EnumTypeMapping var2 = new Java5EnumTypeMapping(AddWssTimestamp.Resolution.class, var3[4]);
      var1.put(var3[15], new SimpleTypeMappingFinder(Collections.singleton(var2)));
      var1.put(META_INITIALIZED, Boolean.TRUE);
      return var1;
   }

   static {
      String[] var5 = new String[23];
      int var3 = 0;
      String var2 = "\u001ek\u000bV\u0017il6b\n\u0005\u0002(U//\u001b\u0019V=P:/\u0002\u0013\u0005:Y8jO\u0001\u001f=P\u007fn\u0001V\u00199L6`\u0001\u0017\u001aiK6h\u0001\u0017\u0002<J:!\u0014/}\u0000\u0006\u0013;L6j\u001c7\u0015=Q0a&\u0015\u0019'\u0015/`\u0003\u001f\u00150v0k\n8\u0017$]\u0019n\f\u0002\u0019;A\r\u001ek\u000bV\" U:|\u001b\u0017\u001b9\u000f-j\u001c\u0019\u001a<L6`\u0001 \u0017%M:\r\u001ek\u000bV\" U:|\u001b\u0017\u001b9\u0018/`\u0003\u001f\u00150n>c\u0006\u0012\u0017=W-L\u0003\u0017\u0005:V>b\n\u000b;j\u001c\u0015\u0004 H+f\u0000\u00189<`\u0002X\u001a~L:l\u0007X\u0015&V,`\u0003\u0013X([+f\u0000\u0018X\b\\;X\u001c\u0005\" U:|\u001b\u0017\u001b9h-`\u001f\u0013\u0004=Q:|.\u0015\u0002 W1=<`\u0002X\u001a~L:l\u0007X\u0006&T6l\u0016X\u0000(T6k\u000e\u0002\u0019;\u0016\u001ek\u000b!\u0005:l6b\n\u0005\u0002(U/N\u001c\u0005\u0013;L6`\u0001 \u0017%Q;n\u001b\u0019\u0004\u000f/n\u0003\u0013\u0002=]\u0011`\u000b\u00138(U:\u000f/n\u0003\u0013\u0002=]\u0011`\u000b\u0013?*W1.<`\u0002Y\u001a~L:l\u0007Y\u0015&V,`\u0003\u0013Y;],`\u001a\u0004\u0015,Kpw\u0002\u001a\u0013'[-v\u001f\u0002\u001f&Vqh\u0006\u0010\u0017/n\u0003\u0013\u0002=]\u0011`\u000b\u0013%&J+_\u001d\u001f\u0019;Q+v\u0019/}\u0000\u0006\u0013;L6j\u001c7\u0015=Q0a,\u001a\u0017:K1n\u0002\u0013\u0010(|\u001f%\u0003+L&\u007f\n0\u001f'\\:}\u0014\u000bf\u0002\u0013\u0005=Y2\u007fO&\u0004&H:}\u001b\u001f\u0013:\u0010>|\u001c\u0013\u0004=Q0a)\u0017\u0015=W-v(<`\u0002Y\u001a~L:l\u0007Y\u0015&V,`\u0003\u0013Y;],`\u001a\u0004\u0015,KpN\r\u0019\u0003=\ti!\b\u001f\u0010\u0014qb\n\u0002\u0017-Y+n&\u0018\u001f=Q>c\u0006\f\u0013-\u0014/}\u0000\u0006\u0013;L6j\u001c7\u0015=Q0a!\u0017\u001b,";
      int var4 = "\u001ek\u000bV\u0017il6b\n\u0005\u0002(U//\u001b\u0019V=P:/\u0002\u0013\u0005:Y8jO\u0001\u001f=P\u007fn\u0001V\u00199L6`\u0001\u0017\u001aiK6h\u0001\u0017\u0002<J:!\u0014/}\u0000\u0006\u0013;L6j\u001c7\u0015=Q0a&\u0015\u0019'\u0015/`\u0003\u001f\u00150v0k\n8\u0017$]\u0019n\f\u0002\u0019;A\r\u001ek\u000bV\" U:|\u001b\u0017\u001b9\u000f-j\u001c\u0019\u001a<L6`\u0001 \u0017%M:\r\u001ek\u000bV\" U:|\u001b\u0017\u001b9\u0018/`\u0003\u001f\u00150n>c\u0006\u0012\u0017=W-L\u0003\u0017\u0005:V>b\n\u000b;j\u001c\u0015\u0004 H+f\u0000\u00189<`\u0002X\u001a~L:l\u0007X\u0015&V,`\u0003\u0013X([+f\u0000\u0018X\b\\;X\u001c\u0005\" U:|\u001b\u0017\u001b9h-`\u001f\u0013\u0004=Q:|.\u0015\u0002 W1=<`\u0002X\u001a~L:l\u0007X\u0006&T6l\u0016X\u0000(T6k\u000e\u0002\u0019;\u0016\u001ek\u000b!\u0005:l6b\n\u0005\u0002(U/N\u001c\u0005\u0013;L6`\u0001 \u0017%Q;n\u001b\u0019\u0004\u000f/n\u0003\u0013\u0002=]\u0011`\u000b\u00138(U:\u000f/n\u0003\u0013\u0002=]\u0011`\u000b\u0013?*W1.<`\u0002Y\u001a~L:l\u0007Y\u0015&V,`\u0003\u0013Y;],`\u001a\u0004\u0015,Kpw\u0002\u001a\u0013'[-v\u001f\u0002\u001f&Vqh\u0006\u0010\u0017/n\u0003\u0013\u0002=]\u0011`\u000b\u0013%&J+_\u001d\u001f\u0019;Q+v\u0019/}\u0000\u0006\u0013;L6j\u001c7\u0015=Q0a,\u001a\u0017:K1n\u0002\u0013\u0010(|\u001f%\u0003+L&\u007f\n0\u001f'\\:}\u0014\u000bf\u0002\u0013\u0005=Y2\u007fO&\u0004&H:}\u001b\u001f\u0013:\u0010>|\u001c\u0013\u0004=Q0a)\u0017\u0015=W-v(<`\u0002Y\u001a~L:l\u0007Y\u0015&V,`\u0003\u0013Y;],`\u001a\u0004\u0015,KpN\r\u0019\u0003=\ti!\b\u001f\u0010\u0014qb\n\u0002\u0017-Y+n&\u0018\u001f=Q>c\u0006\f\u0013-\u0014/}\u0000\u0006\u0013;L6j\u001c7\u0015=Q0a!\u0017\u001b,"
         .length();
      char var1 = ':';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 61;
         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;
                     assertionName = b[3];
                     DEFAULT_EXPIRY_TIME = 5 * TimeUnit.MINUTES.getMultiplier();
                     META_INITIALIZED = AddWssTimestamp.class.getName() + b[19];
                     policyNameFactory = new c();
                     return;
                  }

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

                  var2 = "\u0010Q<,=\u0002b&_<-,\u0004t\u000b\u0018]<\u001a,\u0015r\u0012Y$0";
                  var4 = "\u0010Q<,=\u0002b&_<-,\u0004t\u000b\u0018]<\u001a,\u0015r\u0012Y$0".length();
                  var1 = 14;
                  var7 = -1;
            }

            var10000 = 2;
            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 -> 98;
            case 1 -> 50;
            case 2 -> 82;
            case 3 -> 75;
            case 4 -> 75;
            case 5 -> 116;
            default -> 5;
         });
      }

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

   public enum Resolution {
      NANOSECONDS,
      MILLISECONDS,
      SECONDS;

      // $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[3];
         int var4 = 0;
         String var3 = "\u0017Q\u001fK\u0010\u0012f\u000b\nU\u0012K\r\u0013v\u000bZ\u0018W\f\t]\u0010H\u0017\u0005p\u0007[\u0012@\r";
         int var5 = "\u0017Q\u001fK\u0010\u0012f\u000b\nU\u0012K\r\u0013v\u000bZ\u0018W\f\t]\u0010H\u0017\u0005p\u0007[\u0012@\r".length();
         char var2 = 7;
         int var1 = -1;

         while (true) {
            String var10002 = a(51, a(var3.substring(++var1, var1 + var2)));
            byte var10001 = -1;
            var0[var4++] = var10002;
            if ((var1 += var2) >= var5) {
               NANOSECONDS = new AddWssTimestamp.Resolution();
               MILLISECONDS = new AddWssTimestamp.Resolution();
               SECONDS = new AddWssTimestamp.Resolution();
               return;
            }

            var2 = var3.charAt(var1);
         }
      }

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

         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 -> 119;
               case 1 -> 39;
               case 2 -> 111;
               case 3 -> 55;
               case 4 -> 109;
               case 5 -> 101;
               default -> 6;
            });
         }

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