package com.l7tech.server.identity;

import com.l7tech.identity.BadCredentialsException;
import com.l7tech.identity.MissingCredentialsException;
import com.l7tech.identity.User;
import com.l7tech.identity.internal.InternalUser;
import com.l7tech.identity.ldap.LdapUser;
import com.l7tech.policy.assertion.credential.LoginCredentials;
import com.l7tech.util.HexUtils;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

public class DigestAuthenticator {
   private static final Logger a;
   public static final String PARAM_USERNAME;
   public static final String PARAM_RESPONSE;
   public static final String PARAM_NONCE;
   public static final String PARAM_CNONCE;
   public static final String PARAM_QOP;
   public static final String PARAM_ALGORITHM;
   public static final String PARAM_NC;
   public static final String PARAM_URI;
   public static final String PARAM_OPAQUE;
   public static final String PARAM_METHOD;
   public static final String SCHEME;
   public static final String QOP_AUTH;
   public static final String QOP_AUTH_INT;
   public static final String ALGORITHM_MD5;
   private static final String[] b;

   public static AuthenticationResult authenticateDigestCredentials(LoginCredentials var0, User var1) throws MissingCredentialsException, BadCredentialsException {
      Object var2 = var0.getPayload();
      String var3 = null;
      if (var1 instanceof InternalUser) {
         var3 = ((InternalUser)var1).getHttpDigest();
      } else if (var1 instanceof LdapUser var4) {
         String var5 = var4.getPassword();
         if (var5 != null) {
            var3 = HexUtils.encodePasswd(var4.getLogin(), var5, HexUtils.REALM);
         }
      }

      try {
         if (var3 == null) {
            throw new BadCredentialsException(b[2]);
         }
      } catch (MissingCredentialsException var16) {
         throw a(var16);
      }

      char[] var18 = var0.getCredentials();
      Map var19 = (Map)var2;
      if (var19 == null) {
         String[] var25 = b;
         String var20 = var25[9];
         a.log(Level.SEVERE, var20);
         throw new MissingCredentialsException(var20);
      }

      String[] var15 = b;
      String var6 = (String)var19.get(var15[11]);
      String var7 = (String)var19.get(var15[13]);
      String var8 = (String)var19.get(var15[1]) + ":" + (String)var19.get(var15[23]);
      String var9 = HexUtils.encodeMd5Digest(HexUtils.getMd5Digest(var8.getBytes()));
      String var10;
      if (!var15[18].equals(var6)) {
         var10 = var3 + ":" + var7 + ":" + var9;
      } else {
         var15 = b;
         String var11 = (String)var19.get(var15[26]);
         String var12 = (String)var19.get(var15[5]);
         var10 = var3 + ":" + var7 + ":" + var11 + ":" + var12 + ":" + var6 + ":" + var9;
      }

      String var21 = HexUtils.encodeMd5Digest(HexUtils.getMd5Digest(var10.getBytes()));
      String var22 = new String(var18);
      String var13 = var0.getLogin();

      try {
         if (var22.equals(var21)) {
            a.info(b[22] + var13 + b[4]);
            return new AuthenticationResult(var1, var0.getSecurityTokens());
         }
      } catch (MissingCredentialsException var17) {
         throw a(var17);
      }

      var15 = b;
      String var14 = var15[0] + var13 + var15[17];
      a.warning(var14);
      throw new BadCredentialsException(var14);
   }

   static {
      String[] var5 = new String[27];
      int var3 = 0;
      String var2 = "qZwo\r\u0006ILfuBO>qZwo\rO;AZ2sB_tLHdx\rJtQZs\u007fANtTHanZD&@\ttr_\u000b0MNwnY\u000b5Q]zxC_=GHftBE\u0006`@ux^_4\u0004HgiEN:P@q|YN0\u0004Zg~NN'WOgqARtS@fu\rO=CLai\rH&AMwsYB5HZ<\u0006GG}sNN\u0002JJ\u0006KYslXN\u0003IM'FjF2YDL1W]2|X_<AGftNJ MF|=]J&EDwiHY'\u0004O}hCOtMG2QBL=Jj`xIN:P@sq^\u000b$EP~rLOu\bE\\fu\u0000B:P\u0003UFb\u0005JF|~H\u0005JF|~H\tEEur_B LD\u0004E\\fu\u0006ILfuBO\u0011\u0004OstAN0\u0004]}=@J GA<\u0004E\\fu\u0003Q[{\u0006GG}sNN\u0003UFb\u0005qZwo\r\u0003Q[{\bQZwoCJ9A";
      int var4 = "qZwo\r\u0006ILfuBO>qZwo\rO;AZ2sB_tLHdx\rJtQZs\u007fANtTHanZD&@\ttr_\u000b0MNwnY\u000b5Q]zxC_=GHftBE\u0006`@ux^_4\u0004HgiEN:P@q|YN0\u0004Zg~NN'WOgqARtS@fu\rO=CLai\rH&AMwsYB5HZ<\u0006GG}sNN\u0002JJ\u0006KYslXN\u0003IM'FjF2YDL1W]2|X_<AGftNJ MF|=]J&EDwiHY'\u0004O}hCOtMG2QBL=Jj`xIN:P@sq^\u000b$EP~rLOu\bE\\fu\u0000B:P\u0003UFb\u0005JF|~H\u0005JF|~H\tEEur_B LD\u0004E\\fu\u0006ILfuBO\u0011\u0004OstAN0\u0004]}=@J GA<\u0004E\\fu\u0003Q[{\u0006GG}sNN\u0003UFb\u0005qZwo\r\u0003Q[{\bQZwoCJ9A"
         .length();
      char var1 = 5;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 76;
         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) {
                     b = var5;
                     String[] var9 = b;
                     QOP_AUTH = b[15];
                     PARAM_NONCE = var9[12];
                     PARAM_METHOD = var9[16];
                     PARAM_QOP = var9[21];
                     PARAM_CNONCE = var9[20];
                     PARAM_URI = var9[19];
                     PARAM_NC = var9[6];
                     PARAM_ALGORITHM = var9[14];
                     SCHEME = var9[3];
                     ALGORITHM_MD5 = var9[8];
                     PARAM_USERNAME = var9[24];
                     PARAM_RESPONSE = var9[25];
                     PARAM_OPAQUE = var9[7];
                     QOP_AUTH_INT = var9[10];
                     a = Logger.getLogger(DigestAuthenticator.class.getName());
                     return;
                  }

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

                  var2 = "~dIEjm\u000fi\u0002bb";
                  var4 = "~dIEjm\u000fi\u0002bb".length();
                  var1 = '\b';
                  var7 = -1;
            }

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

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

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

      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 -> 104;
            case 1 -> 101;
            case 2 -> 94;
            case 3 -> 81;
            case 4 -> 97;
            case 5 -> 103;
            default -> 24;
         });
      }

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