package com.l7tech.security.prov.ncipher;

import com.l7tech.security.prov.GcmCipher;
import com.l7tech.util.ExceptionUtils;
import com.ncipher.nfast.connect.utils.Channel;
import com.ncipher.nfast.connect.utils.EasyConnection;
import com.ncipher.nfast.marshall.M_ACL;
import com.ncipher.nfast.marshall.M_AppData;
import com.ncipher.nfast.marshall.M_ByteBlock;
import com.ncipher.nfast.marshall.M_Cmd_Args_Import;
import com.ncipher.nfast.marshall.M_Cmd_Reply_Import;
import com.ncipher.nfast.marshall.M_Command;
import com.ncipher.nfast.marshall.M_IV;
import com.ncipher.nfast.marshall.M_KeyData;
import com.ncipher.nfast.marshall.M_KeyID;
import com.ncipher.nfast.marshall.M_KeyType_Data_Random;
import com.ncipher.nfast.marshall.M_Mech_IV_GenericGCM128;
import com.ncipher.nfast.marshall.M_ModuleID;
import com.ncipher.nfast.marshall.M_Reply;
import com.ncipher.provider.km.nCipherKM;
import java.io.Closeable;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.spec.AlgorithmParameterSpec;
import java.util.logging.Logger;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.spec.IvParameterSpec;

class a implements GcmCipher, Closeable {
   private static final Logger a;
   private final long b;
   private EasyConnection c;
   private M_KeyID d;
   private boolean e;
   private Channel f;
   private Key g;
   private static final String[] h;

   a(long var1) {
      this.b = var1;
   }

   @Override
   public void init(int var1, Key var2, AlgorithmParameterSpec var3) throws InvalidKeyException, InvalidAlgorithmParameterException {
      this.close();
      M_IV var4 = a(var3);
      byte var5;
      if (var1 == 1) {
         var5 = 1;
      } else {
         if (var1 != 2) {
            String[] var7 = h;
            throw new InvalidAlgorithmParameterException(var7[4] + var1);
         }

         var5 = 2;
      }

      this.a(var2);

      try {
         this.f = this.c.openChannel(var5, this.d, 179L, var4, false, false);
      } catch (Exception var8) {
         this.close();
         throw new InvalidAlgorithmParameterException(h[10] + ExceptionUtils.getMessage(var8), var8);
      }
   }

   @Override
   public byte[] update(byte[] var1, int var2, int var3) {
      try {
         if (this.f == null) {
            throw new IllegalStateException(h[9]);
         }
      } catch (Exception var6) {
         throw a(var6);
      }

      label28: {
         try {
            if (var2 == 0 && var3 == var1.length) {
               break label28;
            }
         } catch (Exception var7) {
            throw a(var7);
         }

         byte[] var4 = new byte[var3];
         System.arraycopy(var1, var2, var4, 0, var3);
         var1 = var4;
      }

      try {
         return this.f.update(var1, false, false);
      } catch (Exception var5) {
         throw new RuntimeException(h[12] + ExceptionUtils.getMessage(var5), var5);
      }
   }

   @Override
   public byte[] doFinal() throws IllegalBlockSizeException, BadPaddingException {
      try {
         if (this.f == null) {
            throw new IllegalStateException(h[3]);
         }
      } catch (Exception var8) {
         throw a(var8);
      }

      try {
         return this.f.update(new byte[0], true, false);
      } catch (Exception var6) {
         throw new RuntimeException(h[5] + ExceptionUtils.getMessage(var6), var6);
      } finally {
         this.close();
      }
   }

   private EasyConnection a() throws InvalidAlgorithmParameterException {
      try {
         if (this.c == null) {
            this.c = new EasyConnection(nCipherKM.getConnection());
         }
      } catch (InvalidAlgorithmParameterException var1) {
         throw a(var1);
      }

      return this.c;
   }

   @Override
   public void close() {
      // $VF: Couldn't be decompiled
      // 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!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 0
      // 01: getfield com/l7tech/security/prov/ncipher/a.c Lcom/ncipher/nfast/connect/utils/EasyConnection;
      // 04: ifnull 5b
      // 07: aload 0
      // 08: getfield com/l7tech/security/prov/ncipher/a.d Lcom/ncipher/nfast/marshall/M_KeyID;
      // 0b: ifnull 56
      // 0e: goto 15
      // 11: invokestatic com/l7tech/security/prov/ncipher/a.a (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 14: athrow
      // 15: aload 0
      // 16: getfield com/l7tech/security/prov/ncipher/a.e Z
      // 19: ifeq 56
      // 1c: goto 23
      // 1f: invokestatic com/l7tech/security/prov/ncipher/a.a (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 22: athrow
      // 23: aload 0
      // 24: getfield com/l7tech/security/prov/ncipher/a.c Lcom/ncipher/nfast/connect/utils/EasyConnection;
      // 27: aload 0
      // 28: getfield com/l7tech/security/prov/ncipher/a.d Lcom/ncipher/nfast/marshall/M_KeyID;
      // 2b: invokevirtual com/ncipher/nfast/connect/utils/EasyConnection.destroy (Lcom/ncipher/nfast/marshall/M_KeyID;)V
      // 2e: goto 4c
      // 31: astore 1
      // 32: getstatic com/l7tech/security/prov/ncipher/a.a Ljava/util/logging/Logger;
      // 35: getstatic java/util/logging/Level.WARNING Ljava/util/logging/Level;
      // 38: aload 1
      // 39: invokestatic com/l7tech/util/ExceptionUtils.getMessage (Ljava/lang/Throwable;)Ljava/lang/String;
      // 3c: getstatic com/l7tech/security/prov/ncipher/a.h [Ljava/lang/String;
      // 3f: bipush 13
      // 41: aaload
      // 42: swap
      // 43: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
      // 48: aload 1
      // 49: invokevirtual java/util/logging/Logger.log (Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V
      // 4c: aload 0
      // 4d: aconst_null
      // 4e: putfield com/l7tech/security/prov/ncipher/a.d Lcom/ncipher/nfast/marshall/M_KeyID;
      // 51: aload 0
      // 52: bipush 0
      // 53: putfield com/l7tech/security/prov/ncipher/a.e Z
      // 56: aload 0
      // 57: aconst_null
      // 58: putfield com/l7tech/security/prov/ncipher/a.c Lcom/ncipher/nfast/connect/utils/EasyConnection;
      // 5b: aload 0
      // 5c: aconst_null
      // 5d: putfield com/l7tech/security/prov/ncipher/a.g Ljava/security/Key;
      // 60: return
      // try (3 -> 12): 13 java/lang/Throwable
      // try (0 -> 6): 7 java/lang/Throwable
      // try (15 -> 20): 21 java/lang/Throwable
   }

   private static M_IV a(AlgorithmParameterSpec var0) throws InvalidAlgorithmParameterException {
      try {
         if (!(var0 instanceof IvParameterSpec)) {
            throw new InvalidAlgorithmParameterException(h[1]);
         }
      } catch (InvalidAlgorithmParameterException var6) {
         throw a(var6);
      }

      IvParameterSpec var1 = (IvParameterSpec)var0;
      byte[] var2 = var1.getIV();

      try {
         if (var2 == null) {
            throw new InvalidAlgorithmParameterException(h[7]);
         }
      } catch (InvalidAlgorithmParameterException var4) {
         throw a(var4);
      }

      try {
         if (var2.length != 12) {
            throw new InvalidAlgorithmParameterException(h[11]);
         }
      } catch (InvalidAlgorithmParameterException var5) {
         throw a(var5);
      }

      M_Mech_IV_GenericGCM128 var3 = new M_Mech_IV_GenericGCM128(new M_ByteBlock(var2), new M_ByteBlock(new byte[0]), 16L);
      return new M_IV(179L, var3);
   }

   private void a(Key param1) throws InvalidKeyException, InvalidAlgorithmParameterException {
      // $VF: Couldn't be decompiled
      // 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!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 1
      // 01: instanceof com/ncipher/provider/nCKey
      // 04: ifeq 20
      // 07: aload 0
      // 08: bipush 0
      // 09: putfield com/l7tech/security/prov/ncipher/a.e Z
      // 0c: aload 0
      // 0d: aload 1
      // 0e: checkcast com/ncipher/provider/nCKey
      // 11: invokeinterface com/ncipher/provider/nCKey.getKeyID ()Lcom/ncipher/nfast/marshall/M_KeyID; 1
      // 16: putfield com/l7tech/security/prov/ncipher/a.d Lcom/ncipher/nfast/marshall/M_KeyID;
      // 19: goto 7e
      // 1c: invokestatic com/l7tech/security/prov/ncipher/a.a (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 1f: athrow
      // 20: aload 1
      // 21: instanceof javax/crypto/SecretKey
      // 24: ifeq 62
      // 27: aload 1
      // 28: invokeinterface java/security/Key.getEncoded ()[B 1
      // 2d: astore 2
      // 2e: aload 2
      // 2f: ifnull 3f
      // 32: aload 2
      // 33: arraylength
      // 34: bipush 1
      // 35: if_icmpge 51
      // 38: goto 3f
      // 3b: invokestatic com/l7tech/security/prov/ncipher/a.a (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 3e: athrow
      // 3f: new java/security/InvalidKeyException
      // 42: dup
      // 43: getstatic com/l7tech/security/prov/ncipher/a.h [Ljava/lang/String;
      // 46: bipush 6
      // 48: aaload
      // 49: invokespecial java/security/InvalidKeyException.<init> (Ljava/lang/String;)V
      // 4c: athrow
      // 4d: invokestatic com/l7tech/security/prov/ncipher/a.a (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 50: athrow
      // 51: aload 0
      // 52: bipush 1
      // 53: putfield com/l7tech/security/prov/ncipher/a.e Z
      // 56: aload 0
      // 57: aload 0
      // 58: aload 2
      // 59: invokevirtual com/l7tech/security/prov/ncipher/a.a ([B)Lcom/ncipher/nfast/marshall/M_KeyID;
      // 5c: putfield com/l7tech/security/prov/ncipher/a.d Lcom/ncipher/nfast/marshall/M_KeyID;
      // 5f: goto 7e
      // 62: new java/security/InvalidKeyException
      // 65: dup
      // 66: aload 1
      // 67: invokeinterface java/security/Key.getClass ()Ljava/lang/Class; 1
      // 6c: invokestatic java/lang/String.valueOf (Ljava/lang/Object;)Ljava/lang/String;
      // 6f: getstatic com/l7tech/security/prov/ncipher/a.h [Ljava/lang/String;
      // 72: bipush 2
      // 73: aaload
      // 74: swap
      // 75: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
      // 7a: invokespecial java/security/InvalidKeyException.<init> (Ljava/lang/String;)V
      // 7d: athrow
      // 7e: aload 0
      // 7f: aload 1
      // 80: putfield com/l7tech/security/prov/ncipher/a.g Ljava/security/Key;
      // 83: return
      // try (0 -> 12): 12 java/security/InvalidKeyException
      // try (20 -> 26): 27 java/security/InvalidKeyException
      // try (22 -> 36): 36 java/security/InvalidKeyException
   }

   private M_KeyID a(byte[] var1) throws InvalidAlgorithmParameterException, InvalidKeyException {
      try {
         if (this.d != null) {
            throw new IllegalStateException(h[8]);
         }
      } catch (Exception var9) {
         throw a(var9);
      }

      EasyConnection var2 = this.a();
      M_KeyType_Data_Random var3 = new M_KeyType_Data_Random(new M_ByteBlock(var1));
      M_KeyData var4 = new M_KeyData(30L, var3);
      M_ACL var5 = var2.makeSimpleACL(384L);
      M_Cmd_Args_Import var6 = new M_Cmd_Args_Import(new M_ModuleID(this.b), var4, var5, new M_AppData(new byte[64]));

      try {
         M_Reply var7 = var2.transactChecked(new M_Command(11L, 0L, var6));
         return ((M_Cmd_Reply_Import)var7.reply).key;
      } catch (Exception var8) {
         throw new InvalidKeyException(h[0] + ExceptionUtils.getMessage(var8), var8);
      }
   }

   @Override
   protected void finalize() throws Throwable {
      this.close();
      super.finalize();
   }

   static {
      String[] var5 = new String[14];
      int var3 = 0;
      String var2 = "\u0004B\u001a?\u000f\u000fg%C[4\u000e\u001a(#X[\u001c&9g\"U\u00160\u0006\u001e58O[6\u0006\u0013g8B\u000f2C\u0004\u00048\\\u00138\u0011J44_\b4\f\u0004}q\u001c\u0002\\\u001e>C\u00072\"X[?\u0006J\u000e'|\u001a/\u0002\u0007\"%I\t\u000e\u0013\u000f$R\u0004B\u001a?\u000f\u000fg%C[4\u000e\u001a(#X[.\u001a\u0007*4X\t4\u0000J,4U[4\r\u001e(qB84\u0013\u0002\"#\f\b8\u0010\u0019.>B[pNJ,4U[4\u0010J(7\f\u000e3\u0010\u001f7!C\t)\u0006\u000eg%U\u000b8C\u000f\u001fC\u000f}\n\u0004.%E\u001a1\n\u0010\"5\u0015\u0018B\r<\u000f\u0003#qO\u0012-\u000b\u000f5qA\u00149\u0006Pg-\u0014^\t2\u0011J09E\u00178C\u001a\"#J\u0014/\u000e\u0003)6\f:\u00180G\u0000\u0012a[*\n\u001e/qB84\u0013\u0002\"#\u0016[Y\u0004B\u001a?\u000f\u000fg%C[4\u000e\u001a(#X[.\u001a\u0007*4X\t4\u0000J,4U[4\r\u001e(qB84\u0013\u0002\"#\f\b8\u0010\u0019.>B[pNJ*8_\b4\r\rg>^[8\u000e\u001a3(\f\u001e3\u0000\u0005#4H[6\u0006\u0013g3U\u000f8\u0010\n\u0018z[4\u0010J)$@\u0017\u001c\u0010\f\u00108\u001aJ\u000e\u0015\f\u0012.C\u000b+#I\u001a9\u001aJ7#I\u000b<\u0011\u000f#\u000f\u001fC\u000f}\n\u0004.%E\u001a1\n\u0010\"59\u0004B\u001a?\u000f\u000fg%C[4\r\u000338M\u00174\u0019\u000fg?o\u0012-\u000b\u000f5qO\u0013<\r\u0004\"=\f\u001d2\u0011J\u0000\u0012a[8\r\t5(\\\u000f4\f\u0004}q\u0018\u0018z[0\u0016\u00193qN\u001e}RXg3U\u000f8\u0010J+>B\u001c";
      int var4 = "\u0004B\u001a?\u000f\u000fg%C[4\u000e\u001a(#X[\u001c&9g\"U\u00160\u0006\u001e58O[6\u0006\u0013g8B\u000f2C\u0004\u00048\\\u00138\u0011J44_\b4\f\u0004}q\u001c\u0002\\\u001e>C\u00072\"X[?\u0006J\u000e'|\u001a/\u0002\u0007\"%I\t\u000e\u0013\u000f$R\u0004B\u001a?\u000f\u000fg%C[4\u000e\u001a(#X[.\u001a\u0007*4X\t4\u0000J,4U[4\r\u001e(qB84\u0013\u0002\"#\f\b8\u0010\u0019.>B[pNJ,4U[4\u0010J(7\f\u000e3\u0010\u001f7!C\t)\u0006\u000eg%U\u000b8C\u000f\u001fC\u000f}\n\u0004.%E\u001a1\n\u0010\"5\u0015\u0018B\r<\u000f\u0003#qO\u0012-\u000b\u000f5qA\u00149\u0006Pg-\u0014^\t2\u0011J09E\u00178C\u001a\"#J\u0014/\u000e\u0003)6\f:\u00180G\u0000\u0012a[*\n\u001e/qB84\u0013\u0002\"#\u0016[Y\u0004B\u001a?\u000f\u000fg%C[4\u000e\u001a(#X[.\u001a\u0007*4X\t4\u0000J,4U[4\r\u001e(qB84\u0013\u0002\"#\f\b8\u0010\u0019.>B[pNJ*8_\b4\r\rg>^[8\u000e\u001a3(\f\u001e3\u0000\u0005#4H[6\u0006\u0013g3U\u000f8\u0010\n\u0018z[4\u0010J)$@\u0017\u001c\u0010\f\u00108\u001aJ\u000e\u0015\f\u0012.C\u000b+#I\u001a9\u001aJ7#I\u000b<\u0011\u000f#\u000f\u001fC\u000f}\n\u0004.%E\u001a1\n\u0010\"59\u0004B\u001a?\u000f\u000fg%C[4\r\u000338M\u00174\u0019\u000fg?o\u0012-\u000b\u000f5qO\u0013<\r\u0004\"=\f\u001d2\u0011J\u0000\u0012a[8\r\t5(\\\u000f4\f\u0004}q\u0018\u0018z[0\u0016\u00193qN\u001e}RXg3U\u000f8\u0010J+>B\u001c"
         .length();
      char var1 = '9';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 113;
         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) {
                     h = var5;
                     a = Logger.getLogger(a.class.getName());
                     return;
                  }

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

                  var2 = "\"h?\u0004'|\u0006\u000fs!\u000eu,\u0014\u0015|\"\u001985\u001f\u0000:\f.\u0006q6$Wm\u001c<(\u0019Gt\u000e\u0002%4\u0014\u0015 m\"2t,\t99Q\u0013um\u000f0/\u0005\u0015u4K;\u001f\u0018\u0017r(\u0019u7\u0014\u001e:\u0004/o|";
                  var4 = "\"h?\u0004'|\u0006\u000fs!\u000eu,\u0014\u0015|\"\u001985\u001f\u0000:\f.\u0006q6$Wm\u001c<(\u0019Gt\u000e\u0002%4\u0014\u0015 m\"2t,\t99Q\u0013um\u000f0/\u0005\u0015u4K;\u001f\u0018\u0017r(\u0019u7\u0014\u001e:\u0004/o|"
                     .length();
                  var1 = '-';
                  var7 = -1;
            }

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

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

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

      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 -> 32;
            case 1 -> 93;
            case 2 -> 10;
            case 3 -> 44;
            case 4 -> 18;
            case 5 -> 27;
            default -> 54;
         });
      }

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