package com.l7tech.common.password;

import com.l7tech.util.ConfigFactory;
import java.io.IOException;
import java.io.OutputStream;
import java.security.MessageDigest;

public class CryptL7 {
   public static final int MIN_WORK_FACTOR;
   public static final int MAX_WORK_FACTOR;
   public static final int DEFAULT_WORK_FACTOR;
   public static final int MIN_HASH_OUTPUT_SIZE;
   private static final String[] b;

   public byte[] computeHash(byte[] var1, byte[] var2, int var3, CryptL7.Hasher var4) {
      try {
         if (var1 == null) {
            throw new NullPointerException(b[9]);
         }
      } catch (NullPointerException var19) {
         throw a(var19);
      }

      try {
         if (var2 == null) {
            throw new NullPointerException(b[3]);
         }
      } catch (NullPointerException var14) {
         throw a(var14);
      }

      try {
         if (var4 == null) {
            throw new NullPointerException(b[10]);
         }
      } catch (NullPointerException var18) {
         throw a(var18);
      }

      try {
         if (var3 < MIN_WORK_FACTOR) {
            throw new IllegalArgumentException(b[5]);
         }
      } catch (NullPointerException var13) {
         throw a(var13);
      }

      try {
         if (var3 > MAX_WORK_FACTOR) {
            throw new IllegalArgumentException(b[0]);
         }
      } catch (NullPointerException var17) {
         throw a(var17);
      }

      int var5 = var4.getOutputSizeInBytes();

      try {
         if (var5 < MIN_HASH_OUTPUT_SIZE) {
            throw new IllegalArgumentException(b[7]);
         }
      } catch (NullPointerException var16) {
         throw a(var16);
      }

      long var6 = this.getNumRoundsForWorkFactor(var3);
      byte[] var8 = var4.hash(var2);
      byte[][] var9 = new byte[16][];
      var9[0] = var4.hash(var1, var2);
      int var10 = 1;

      try {
         while (var10 < 16) {
            var9[var10] = var4.hash(var9[var10 - 1]);
            var10++;
         }
      } catch (NullPointerException var15) {
         throw a(var15);
      }

      byte[] var20 = var4.hash(var9[15]);

      for (long var11 = 0L; var11 < var6; var11++) {
         var20 = this.a(var4, var5, var8, var9, var20);
      }

      return var20;
   }

   public long getNumRoundsForWorkFactor(int var1) {
      try {
         if (var1 < 0) {
            throw new IllegalArgumentException(b[4]);
         }
      } catch (NullPointerException var2) {
         throw a(var2);
      }

      try {
         if (var1 > 30) {
            throw new IllegalArgumentException(b[8]);
         }
      } catch (NullPointerException var3) {
         throw a(var3);
      }

      return 1L << 2 * (var1 + 1);
   }

   public byte getDefaultWorkFactor() {
      return (byte)DEFAULT_WORK_FACTOR;
   }

   byte[] a(CryptL7.Hasher param1, int param2, byte[] param3, byte[][] param4, byte[] param5) {
      // $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:
      // 000: new com/l7tech/util/PoolByteArrayOutputStream
      // 003: dup
      // 004: iload 2
      // 005: bipush 2
      // 006: imul
      // 007: invokespecial com/l7tech/util/PoolByteArrayOutputStream.<init> (I)V
      // 00a: astore 6
      // 00c: bipush 0
      // 00d: istore 7
      // 00f: iload 7
      // 011: iload 2
      // 012: if_icmpge 16e
      // 015: aload 5
      // 017: iload 7
      // 019: baload
      // 01a: sipush 255
      // 01d: iand
      // 01e: istore 8
      // 020: getstatic com/l7tech/common/password/CryptL7.a Z
      // 023: ifne 04d
      // 026: iload 8
      // 028: iflt 041
      // 02b: goto 032
      // 02e: invokestatic com/l7tech/common/password/CryptL7.a (Ljava/lang/NullPointerException;)Ljava/lang/NullPointerException;
      // 031: athrow
      // 032: iload 8
      // 034: sipush 256
      // 037: if_icmplt 04d
      // 03a: goto 041
      // 03d: invokestatic com/l7tech/common/password/CryptL7.a (Ljava/lang/NullPointerException;)Ljava/lang/NullPointerException;
      // 040: athrow
      // 041: new java/lang/AssertionError
      // 044: dup
      // 045: invokespecial java/lang/AssertionError.<init> ()V
      // 048: athrow
      // 049: invokestatic com/l7tech/common/password/CryptL7.a (Ljava/lang/NullPointerException;)Ljava/lang/NullPointerException;
      // 04c: athrow
      // 04d: iload 8
      // 04f: bipush 6
      // 051: ishr
      // 052: istore 9
      // 054: getstatic com/l7tech/common/password/CryptL7.a Z
      // 057: ifne 07f
      // 05a: iload 9
      // 05c: iflt 073
      // 05f: goto 066
      // 062: invokestatic com/l7tech/common/password/CryptL7.a (Ljava/lang/NullPointerException;)Ljava/lang/NullPointerException;
      // 065: athrow
      // 066: iload 9
      // 068: bipush 4
      // 069: if_icmplt 07f
      // 06c: goto 073
      // 06f: invokestatic com/l7tech/common/password/CryptL7.a (Ljava/lang/NullPointerException;)Ljava/lang/NullPointerException;
      // 072: athrow
      // 073: new java/lang/AssertionError
      // 076: dup
      // 077: invokespecial java/lang/AssertionError.<init> ()V
      // 07a: athrow
      // 07b: invokestatic com/l7tech/common/password/CryptL7.a (Ljava/lang/NullPointerException;)Ljava/lang/NullPointerException;
      // 07e: athrow
      // 07f: iload 8
      // 081: bipush 56
      // 083: iand
      // 084: bipush 3
      // 085: ishr
      // 086: istore 10
      // 088: getstatic com/l7tech/common/password/CryptL7.a Z
      // 08b: ifne 0b4
      // 08e: iload 10
      // 090: iflt 0a8
      // 093: goto 09a
      // 096: invokestatic com/l7tech/common/password/CryptL7.a (Ljava/lang/NullPointerException;)Ljava/lang/NullPointerException;
      // 099: athrow
      // 09a: iload 10
      // 09c: bipush 8
      // 09e: if_icmplt 0b4
      // 0a1: goto 0a8
      // 0a4: invokestatic com/l7tech/common/password/CryptL7.a (Ljava/lang/NullPointerException;)Ljava/lang/NullPointerException;
      // 0a7: athrow
      // 0a8: new java/lang/AssertionError
      // 0ab: dup
      // 0ac: invokespecial java/lang/AssertionError.<init> ()V
      // 0af: athrow
      // 0b0: invokestatic com/l7tech/common/password/CryptL7.a (Ljava/lang/NullPointerException;)Ljava/lang/NullPointerException;
      // 0b3: athrow
      // 0b4: iload 8
      // 0b6: bipush 7
      // 0b8: iand
      // 0b9: istore 11
      // 0bb: getstatic com/l7tech/common/password/CryptL7.a Z
      // 0be: ifne 0e7
      // 0c1: iload 11
      // 0c3: iflt 0db
      // 0c6: goto 0cd
      // 0c9: invokestatic com/l7tech/common/password/CryptL7.a (Ljava/lang/NullPointerException;)Ljava/lang/NullPointerException;
      // 0cc: athrow
      // 0cd: iload 11
      // 0cf: bipush 8
      // 0d1: if_icmplt 0e7
      // 0d4: goto 0db
      // 0d7: invokestatic com/l7tech/common/password/CryptL7.a (Ljava/lang/NullPointerException;)Ljava/lang/NullPointerException;
      // 0da: athrow
      // 0db: new java/lang/AssertionError
      // 0de: dup
      // 0df: invokespecial java/lang/AssertionError.<init> ()V
      // 0e2: athrow
      // 0e3: invokestatic com/l7tech/common/password/CryptL7.a (Ljava/lang/NullPointerException;)Ljava/lang/NullPointerException;
      // 0e6: athrow
      // 0e7: aload 4
      // 0e9: iload 10
      // 0eb: aaload
      // 0ec: iload 7
      // 0ee: baload
      // 0ef: sipush 255
      // 0f2: iand
      // 0f3: istore 12
      // 0f5: aload 4
      // 0f7: iload 11
      // 0f9: bipush 8
      // 0fb: iadd
      // 0fc: aaload
      // 0fd: iload 7
      // 0ff: baload
      // 100: sipush 255
      // 103: iand
      // 104: istore 13
      // 106: iload 9
      // 108: tableswitch 81 0 3 32 44 54 68
      // 128: iload 12
      // 12a: aload 3
      // 12b: iload 7
      // 12d: baload
      // 12e: ixor
      // 12f: istore 14
      // 131: goto 161
      // 134: iload 12
      // 136: iload 13
      // 138: ixor
      // 139: istore 14
      // 13b: goto 161
      // 13e: iload 12
      // 140: iload 13
      // 142: iadd
      // 143: sipush 255
      // 146: iand
      // 147: istore 14
      // 149: goto 161
      // 14c: iload 13
      // 14e: aload 5
      // 150: iload 7
      // 152: baload
      // 153: ixor
      // 154: istore 14
      // 156: goto 161
      // 159: new java/lang/IllegalStateException
      // 15c: dup
      // 15d: invokespecial java/lang/IllegalStateException.<init> ()V
      // 160: athrow
      // 161: aload 6
      // 163: iload 14
      // 165: invokestatic com/l7tech/common/password/CryptL7.a (Ljava/io/OutputStream;I)V
      // 168: iinc 7 1
      // 16b: goto 00f
      // 16e: aload 6
      // 170: aload 5
      // 172: invokestatic com/l7tech/common/password/CryptL7.a (Ljava/io/OutputStream;[B)V
      // 175: aload 4
      // 177: bipush 1
      // 178: aload 4
      // 17a: bipush 0
      // 17b: bipush 15
      // 17d: invokestatic java/lang/System.arraycopy (Ljava/lang/Object;ILjava/lang/Object;II)V
      // 180: aload 4
      // 182: bipush 15
      // 184: aload 5
      // 186: aastore
      // 187: aload 1
      // 188: bipush 1
      // 189: anewarray 23
      // 18c: dup
      // 18d: bipush 0
      // 18e: aload 6
      // 190: invokevirtual com/l7tech/util/PoolByteArrayOutputStream.toByteArray ()[B
      // 193: aastore
      // 194: invokeinterface com/l7tech/common/password/CryptL7$Hasher.hash ([[B)[B 2
      // 199: astore 7
      // 19b: aload 6
      // 19d: invokevirtual com/l7tech/util/PoolByteArrayOutputStream.close ()V
      // 1a0: aload 7
      // 1a2: areturn
      // 1a3: astore 15
      // 1a5: aload 6
      // 1a7: invokevirtual com/l7tech/util/PoolByteArrayOutputStream.close ()V
      // 1aa: aload 15
      // 1ac: athrow
      // try (96 -> 106): 106 java/lang/NullPointerException
      // try (91 -> 99): 100 java/lang/NullPointerException
      // try (89 -> 93): 94 java/lang/NullPointerException
      // try (73 -> 83): 83 java/lang/NullPointerException
      // try (68 -> 76): 77 java/lang/NullPointerException
      // try (66 -> 70): 71 java/lang/NullPointerException
      // try (48 -> 58): 58 java/lang/NullPointerException
      // try (43 -> 51): 52 java/lang/NullPointerException
      // try (41 -> 45): 46 java/lang/NullPointerException
      // try (25 -> 35): 35 java/lang/NullPointerException
      // try (20 -> 28): 29 java/lang/NullPointerException
      // try (18 -> 22): 23 java/lang/NullPointerException
      // try (7 -> 186): 190 null
      // try (190 -> 191): 190 null
   }

   static void a(OutputStream var0, int var1) {
      try {
         var0.write(var1);
      } catch (IOException var3) {
         throw new RuntimeException(var3);
      }
   }

   static void a(OutputStream var0, byte[] var1) {
      try {
         var0.write(var1);
      } catch (IOException var3) {
         throw new RuntimeException(var3);
      }
   }

   static {
      String[] var5 = new String[12];
      int var3 = 0;
      String var2 = "^\u001aC\u0016^B_j\u0001^\u000f^MM)\u0001^\u0012^LWn\u001d$j\u001a\\S\u0012\u0013Jl\u0016YS=VGy\u0001}JPIWg=P\u000e\u0016kK}\u0005D\t-MDl j\u001a\\S\u0012\u0013Jl\u0016YS=VGy\u0001}JPI_q\"^\u000f\u0015b_j\u0001^\u000f\u0017HUB\u001c\u0012P\u001ed\u0000B\t^F[)\u0005C\u0012\bMZl\u0011\u0014G\u0010V\u001c\nMHlUF\u0012\fO\u001eo\u0014R\t\u0011V\u0016^\u001aC\u0016^B_j\u0001^\u000f^MM)\u0001^\u0012^HQ~$j\u001a\\S\u0012\u0013Jl\u0016YS=VGy\u0001}JP@[o\u0014D\u0011\nsQ{\u001ew\u001c\u001dPQ{%]\u001dT]\u0016EMa\u0010CZ\r\u0004Q|\u0001A\b\n\u0004M`\u000fT]\u0017W\u001e}\u001a^]\rI_e\u0019,^\u001aC\u0016^B_j\u0001^\u000f^PQfUY\u0014\u0019L\u001eo\u001aC]\nLWzUX\u0010\u000eH[d\u0010_\t\u001fPWf\u001b\u001bHUA\u001c\rWIf\u0007U]\u0013QM}US\u0018^TLf\u0003X\u0019\u001b@";
      int var4 = "^\u001aC\u0016^B_j\u0001^\u000f^MM)\u0001^\u0012^LWn\u001d$j\u001a\\S\u0012\u0013Jl\u0016YS=VGy\u0001}JPIWg=P\u000e\u0016kK}\u0005D\t-MDl j\u001a\\S\u0012\u0013Jl\u0016YS=VGy\u0001}JPI_q\"^\u000f\u0015b_j\u0001^\u000f\u0017HUB\u001c\u0012P\u001ed\u0000B\t^F[)\u0005C\u0012\bMZl\u0011\u0014G\u0010V\u001c\nMHlUF\u0012\fO\u001eo\u0014R\t\u0011V\u0016^\u001aC\u0016^B_j\u0001^\u000f^MM)\u0001^\u0012^HQ~$j\u001a\\S\u0012\u0013Jl\u0016YS=VGy\u0001}JP@[o\u0014D\u0011\nsQ{\u001ew\u001c\u001dPQ{%]\u001dT]\u0016EMa\u0010CZ\r\u0004Q|\u0001A\b\n\u0004M`\u000fT]\u0017W\u001e}\u001a^]\rI_e\u0019,^\u001aC\u0016^B_j\u0001^\u000f^PQfUY\u0014\u0019L\u001eo\u001aC]\nLWzUX\u0010\u000eH[d\u0010_\t\u001fPWf\u001b\u001bHUA\u001c\rWIf\u0007U]\u0013QM}US\u0018^TLf\u0003X\u0019\u001b@"
         .length();
      char var1 = 23;
      int var8 = -1;

      label39:
      while (true) {
         byte var10000 = 42;
         String var10001 = var2.substring(++var8, var8 + var1);
         byte var10002 = -1;

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

                     label26: {
                        try {
                           if (!CryptL7.class.desiredAssertionStatus()) {
                              var11 = true;
                              break label26;
                           }
                        } catch (NullPointerException var6) {
                           throw a(var6);
                        }

                        var11 = false;
                     }

                     a = var11;
                     String[] var9 = b;
                     MIN_WORK_FACTOR = ConfigFactory.getIntProperty(var9[11], 3);
                     MAX_WORK_FACTOR = ConfigFactory.getIntProperty(var9[2], 10);
                     DEFAULT_WORK_FACTOR = ConfigFactory.getIntProperty(var9[6], 4);
                     MIN_HASH_OUTPUT_SIZE = ConfigFactory.getIntProperty(var9[1], 16);
                     return;
                  }

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

                  var2 = "~co*;zmMcj>;f(]&';:}~V'b/ \\,je$%|Z oe\u000b`qO7K|f\u007faQ\u0014h9#Ti\\7h9";
                  var4 = "~co*;zmMcj>;f(]&';:}~V'b/ \\,je$%|Z oe\u000b`qO7K|f\u007faQ\u0014h9#Ti\\7h9".length();
                  var1 = 25;
                  var8 = -1;
            }

            var10000 = 28;
            var10001 = var2.substring(++var8, var8 + var1);
            var10002 = 0;
         }
      }
   }

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

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

      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 -> 35;
            case 1 -> 95;
            case 2 -> 27;
            case 3 -> 87;
            case 4 -> 84;
            case 5 -> 14;
            default -> 20;
         });
      }

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

   public interface Hasher {
      int getOutputSizeInBytes();

      byte[] hash(byte[]... var1);
   }

   public static class SingleThreadedJceMessageDigestHasher implements CryptL7.Hasher {
      private final MessageDigest a;
      private final int b;
      private static final String[] c;

      public SingleThreadedJceMessageDigestHasher(MessageDigest var1) {
         this(var1, 0);
      }

      public SingleThreadedJceMessageDigestHasher(MessageDigest var1, int var2) {
         if (var1 == null) {
            String[] var3 = c;
            throw new NullPointerException(var3[0]);
         }

         CryptL7.SingleThreadedJceMessageDigestHasher var10000;
         int var10001;
         label26: {
            try {
               this.a = var1;
               var10000 = this;
               if (var2 != 0) {
                  var10001 = var2;
                  break label26;
               }
            } catch (NullPointerException var5) {
               throw a(var5);
            }

            var10001 = var1.getDigestLength();
         }

         try {
            var10000.b = var10001;
            if (this.b < 1) {
               throw new IllegalArgumentException(c[1]);
            }
         } catch (NullPointerException var4) {
            throw a(var4);
         }
      }

      @Override
      public int getOutputSizeInBytes() {
         return this.b;
      }

      @Override
      public byte[] hash(byte[]... var1) {
         this.a.reset();

         for (byte[] var5 : var1) {
            this.a.update(var5);
         }

         return this.a.digest();
      }

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

      static {
         String[] var5 = new String[2];
         int var3 = 0;
         String var2 = "G\u001fqJa PaZxFu6Br\u001fQZa'\u0011dZ\u001c_`<Go[YK&SQ]M~6\u0011rP\u001cKw'TtRUAwsUoXY\\fs^sKLZfsBoEY";
         int var4 = "G\u001fqJa PaZxFu6Br\u001fQZa'\u0011dZ\u001c_`<Go[YK&SQ]M~6\u0011rP\u001cKw'TtRUAwsUoXY\\fs^sKLZfsBoEY".length();
         char var1 = ' ';
         int var0 = -1;

         while (true) {
            String var10002 = a(4, a(var2.substring(++var0, var0 + var1)));
            byte var10001 = -1;
            var5[var3++] = var10002;
            if ((var0 += var1) >= var4) {
               c = var5;
               return;
            }

            var1 = var2.charAt(var0);
         }
      }

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

         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 -> 2;
               case 1 -> 59;
               case 2 -> 56;
               case 3 -> 43;
               case 4 -> 22;
               case 5 -> 87;
               default -> 53;
            });
         }

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