package com.l7tech.common.password;

import com.l7tech.util.HexUtils;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.security.GeneralSecurityException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class PasswordEncoder {
   private static final Charset a;
   private static final SecureRandom b;
   private static final String[] c;

   private PasswordEncoder() {
   }

   public static String encodePassword(byte[] var0) {
      try {
         byte[] var1 = new byte[8];
         b.nextBytes(var1);
         String var2 = a(var1);
         Key var3 = a(var2);
         byte[] var4 = b(var2);
         byte[] var5 = a(var3, var4, var0);
         return var2 + "." + a(var5);
      } catch (GeneralSecurityException | IOException var6) {
         throw new RuntimeException(c[4] + var6.getMessage(), var6);
      }
   }

   public static byte[] decodePassword(String var0) throws IOException {
      try {
         String[] var7 = c;
         String[] var1 = var0.split(var7[9]);

         try {
            if (var1.length != 2) {
               throw new IOException(var7[0]);
            }
         } catch (GeneralSecurityException var10) {
            throw a(var10);
         }

         String var2 = var1[0];

         try {
            if (var2.length() < 1) {
               throw new IOException(c[11]);
            }
         } catch (GeneralSecurityException var9) {
            throw a(var9);
         }

         byte[] var3 = b(var2);
         String var4 = var1[1];
         byte[] var5 = c(var4);

         try {
            if (var5.length < 16) {
               throw new IOException(c[3]);
            }
         } catch (GeneralSecurityException var8) {
            throw a(var8);
         }

         Key var6 = a(var2);
         return b(var6, var3, var5);
      } catch (GeneralSecurityException var11) {
         throw new IOException(c[6] + var11.getMessage(), var11);
      }
   }

   static Key a(String var0) throws NoSuchAlgorithmException, UnsupportedEncodingException {
      String[] var3 = c;
      MessageDigest var1 = MessageDigest.getInstance(var3[7]);
      var1.update(var0.getBytes(a));
      var1.update(var3[10].getBytes(a));
      byte[] var2 = var1.digest();
      return new SecretKeySpec(var2, 0, 16, var3[5]);
   }

   private static byte[] b(String var0) throws NoSuchAlgorithmException, UnsupportedEncodingException {
      MessageDigest var1 = MessageDigest.getInstance(c[8]);
      var1.update(var0.getBytes(a));
      byte[] var2 = var1.digest();
      byte[] var3 = new byte[16];
      System.arraycopy(var2, 0, var3, 0, 16);
      return var3;
   }

   static String a(byte[] var0) {
      return HexUtils.encodeBase64Url(var0);
   }

   static byte[] c(String var0) throws IOException {
      return HexUtils.decodeBase64Url(var0);
   }

   static Cipher a() throws NoSuchPaddingException, NoSuchAlgorithmException {
      return Cipher.getInstance(c[2]);
   }

   static byte[] a(Key var0, byte[] var1, byte[] var2) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException {
      Cipher var3 = a();
      IvParameterSpec var4 = new IvParameterSpec(var1);
      var3.init(1, var0, var4, b);
      return var3.doFinal(var2);
   }

   static byte[] b(Key var0, byte[] var1, byte[] var2) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
      Cipher var3 = a();
      IvParameterSpec var4 = new IvParameterSpec(var1);
      var3.init(2, var0, var4);
      return var3.doFinal(var2);
   }

   static {
      String[] var5 = new String[12];
      int var3 = 0;
      String var2 = ",8\u0018tU\fXI&\u001ahB\u001eS\u001b2[\u007fX\r\u001c\u00079\u000f;R\u0006R\u001d7\u0012u\u0011\u001dK\u0006v\u001ftEDX\f:\u0012vX\u001dY\rv\u0018t\\\u0019S\u00073\u0015oB\n \u000546\tQ\tP{J\u0014(\u0013(4r+\u007fF\u00060Xb\\l\b2\u001fr_\u000e\u001d,8\u0018tU\fXI&\u001ahB\u001eS\u001b2[rBIH\u00069[hY\u0006N\u001d\u001b<8\u001ay]\f\u001c\u001d9[~_\nS\r3[kP\u001aO\u001e9\t\u007f\u000bI\u0003(\u0013(\u001b<8\u001ay]\f\u001c\u001d9[\u007fT\nS\r3[kP\u001aO\u001e9\t\u007f\u000bI\u0007:\u001e:6\u0004X\u000e\u0007:\u001e:6\u0004X\u000e\u00025x";
      int var4 = ",8\u0018tU\fXI&\u001ahB\u001eS\u001b2[\u007fX\r\u001c\u00079\u000f;R\u0006R\u001d7\u0012u\u0011\u001dK\u0006v\u001ftEDX\f:\u0012vX\u001dY\rv\u0018t\\\u0019S\u00073\u0015oB\n \u000546\tQ\tP{J\u0014(\u0013(4r+\u007fF\u00060Xb\\l\b2\u001fr_\u000e\u001d,8\u0018tU\fXI&\u001ahB\u001eS\u001b2[rBIH\u00069[hY\u0006N\u001d\u001b<8\u001ay]\f\u001c\u001d9[~_\nS\r3[kP\u001aO\u001e9\t\u007f\u000bI\u0003(\u0013(\u001b<8\u001ay]\f\u001c\u001d9[\u007fT\nS\r3[kP\u001aO\u001e9\t\u007f\u000bI\u0007:\u001e:6\u0004X\u000e\u0007:\u001e:6\u0004X\u000e\u00025x"
         .length();
      char var1 = '=';
      int var7 = -1;

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

         while (true) {
            String var8 = a(var10000, d(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     c = var5;
                     a = Charset.forName(c[1]);
                     b = new SecureRandom();
                     return;
                  }

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

                  var2 = "U#E\u0018QNOW'Z=\be:\u0019a\u0004\u0012\u001fbH(auU9\u0018A\u0015\u0004kW%\u000fS\u001eV\u007f\u00165\u0013J\u0005ErX3\u0018\u0004\u0010J;S;\fP\b\u0004hW:\b";
                  var4 = "U#E\u0018QNOW'Z=\be:\u0019a\u0004\u0012\u001fbH(auU9\u0018A\u0015\u0004kW%\u000fS\u001eV\u007f\u00165\u0013J\u0005ErX3\u0018\u0004\u0010J;S;\fP\b\u0004hW:\b"
                     .length();
                  var1 = 21;
                  var7 = -1;
            }

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

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

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

      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 -> 55;
            case 1 -> 8;
            case 2 -> 37;
            case 3 -> 69;
            case 4 -> 111;
            case 5 -> 55;
            default -> 98;
         });
      }

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