package com.l7tech.security.xml;

import com.l7tech.common.io.CertUtils;
import com.l7tech.security.cert.TrustedCert;
import com.l7tech.security.token.KerberosSigningSecurityToken;
import com.l7tech.util.ExceptionUtils;
import java.math.BigInteger;
import java.security.PrivateKey;
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.security.auth.x500.X500Principal;

public class SimpleSecurityTokenResolver implements SecurityTokenResolver {
   private static final Logger a;
   private final List<SimpleSecurityTokenResolver.Cert> b = new ArrayList<>();
   private final List<SimpleSecurityTokenResolver.MyKey> c = new ArrayList<>();
   private Map<String, byte[]> d = new HashMap<>();
   private Map<String, byte[]> e = new HashMap<>();
   private Map<String, KerberosSigningSecurityToken> f = new HashMap<>();
   private static final String[] g;

   public SimpleSecurityTokenResolver() {
   }

   public SimpleSecurityTokenResolver(X509Certificate[] var1) throws CertificateEncodingException {
      this(var1, null);
   }

   public SimpleSecurityTokenResolver(X509Certificate var1) throws CertificateEncodingException {
      this(new X509Certificate[]{var1});
   }

   public SimpleSecurityTokenResolver(X509Certificate var1, PrivateKey var2) {
      if (var1 != null) {
         try {
            this.addCerts(new X509Certificate[]{var1});
            if (var2 != null) {
               this.addPrivateKeys(new SignerInfo[]{new SignerInfo(var2, new X509Certificate[]{var1})});
            }
         } catch (NullPointerException var3) {
            throw a(var3);
         }
      }
   }

   public SimpleSecurityTokenResolver(X509Certificate[] var1, SignerInfo[] var2) {
      this.addCerts(var1);
      this.addPrivateKeys(var2);
   }

   public void addCerts(X509Certificate[] var1) {
      if (var1 != null) {
         for (X509Certificate var5 : var1) {
            this.addCert(var5);
         }
      }
   }

   public void addCert(X509Certificate var1) {
      try {
         if (var1 != null) {
            this.b.add(new SimpleSecurityTokenResolver.Cert(var1));
         }
      } catch (NullPointerException var2) {
         throw a(var2);
      }
   }

   public void addPrivateKeys(SignerInfo[] var1) {
      if (var1 != null) {
         for (SignerInfo var5 : var1) {
            this.addPrivateKey(var5);
         }
      }
   }

   public void addPrivateKey(SignerInfo param1) {
      // $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: ifnull 2b
      // 04: aload 1
      // 05: invokevirtual com/l7tech/security/xml/SignerInfo.getCertificate ()Ljava/security/cert/X509Certificate;
      // 08: ifnull 2b
      // 0b: goto 12
      // 0e: invokestatic com/l7tech/security/xml/SimpleSecurityTokenResolver.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 11: athrow
      // 12: aload 0
      // 13: getfield com/l7tech/security/xml/SimpleSecurityTokenResolver.c Ljava/util/List;
      // 16: new com/l7tech/security/xml/SimpleSecurityTokenResolver$MyKey
      // 19: dup
      // 1a: aload 1
      // 1b: invokespecial com/l7tech/security/xml/SimpleSecurityTokenResolver$MyKey.<init> (Lcom/l7tech/security/xml/SignerInfo;)V
      // 1e: invokeinterface java/util/List.add (Ljava/lang/Object;)Z 2
      // 23: pop
      // 24: goto 2b
      // 27: invokestatic com/l7tech/security/xml/SimpleSecurityTokenResolver.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 2a: athrow
      // 2b: return
      // try (0 -> 5): 6 java/lang/NullPointerException
      // try (2 -> 16): 17 java/lang/NullPointerException
   }

   @Override
   public X509Certificate lookup(String var1) {
      X509Certificate var2 = (X509Certificate)this.a(this.b, var1);

      try {
         if (var2 != null) {
            return var2;
         }
      } catch (NullPointerException var5) {
         throw a(var5);
      }

      SignerInfo var3 = this.lookupPrivateKeyByX509Thumbprint(var1);

      try {
         return var3 != null ? var3.getCertificateChain()[0] : null;
      } catch (NullPointerException var4) {
         throw a(var4);
      }
   }

   private <C extends SimpleSecurityTokenResolver.Cert> Object a(Collection<C> param1, String param2) {
      // $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: invokeinterface java/util/Collection.iterator ()Ljava/util/Iterator; 1
      // 06: astore 3
      // 07: aload 3
      // 08: invokeinterface java/util/Iterator.hasNext ()Z 1
      // 0d: ifeq 44
      // 10: aload 3
      // 11: invokeinterface java/util/Iterator.next ()Ljava/lang/Object; 1
      // 16: checkcast com/l7tech/security/xml/SimpleSecurityTokenResolver$Cert
      // 19: astore 4
      // 1b: aload 4
      // 1d: invokevirtual com/l7tech/security/xml/SimpleSecurityTokenResolver$Cert.getThumbprintSha1 ()Ljava/lang/String;
      // 20: astore 5
      // 22: aload 5
      // 24: ifnull 41
      // 27: aload 5
      // 29: aload 2
      // 2a: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 2d: ifeq 41
      // 30: goto 37
      // 33: invokestatic com/l7tech/security/xml/SimpleSecurityTokenResolver.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 36: athrow
      // 37: aload 4
      // 39: invokevirtual com/l7tech/security/xml/SimpleSecurityTokenResolver$Cert.getPayload ()Ljava/lang/Object;
      // 3c: areturn
      // 3d: invokestatic com/l7tech/security/xml/SimpleSecurityTokenResolver.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 40: athrow
      // 41: goto 07
      // 44: aconst_null
      // 45: areturn
      // try (13 -> 19): 20 java/lang/NullPointerException
      // try (15 -> 25): 25 java/lang/NullPointerException
   }

   @Override
   public X509Certificate lookupBySki(String var1) {
      X509Certificate var2 = (X509Certificate)this.b(this.b, var1);

      try {
         if (var2 != null) {
            return var2;
         }
      } catch (NullPointerException var5) {
         throw a(var5);
      }

      SignerInfo var3 = this.lookupPrivateKeyBySki(var1);

      try {
         return var3 != null ? var3.getCertificateChain()[0] : null;
      } catch (NullPointerException var4) {
         throw a(var4);
      }
   }

   private <C extends SimpleSecurityTokenResolver.Cert> Object b(Collection<C> param1, String param2) {
      // $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: invokeinterface java/util/Collection.iterator ()Ljava/util/Iterator; 1
      // 06: astore 3
      // 07: aload 3
      // 08: invokeinterface java/util/Iterator.hasNext ()Z 1
      // 0d: ifeq 44
      // 10: aload 3
      // 11: invokeinterface java/util/Iterator.next ()Ljava/lang/Object; 1
      // 16: checkcast com/l7tech/security/xml/SimpleSecurityTokenResolver$Cert
      // 19: astore 4
      // 1b: aload 4
      // 1d: invokevirtual com/l7tech/security/xml/SimpleSecurityTokenResolver$Cert.getSki ()Ljava/lang/String;
      // 20: astore 5
      // 22: aload 5
      // 24: ifnull 41
      // 27: aload 5
      // 29: aload 2
      // 2a: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 2d: ifeq 41
      // 30: goto 37
      // 33: invokestatic com/l7tech/security/xml/SimpleSecurityTokenResolver.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 36: athrow
      // 37: aload 4
      // 39: invokevirtual com/l7tech/security/xml/SimpleSecurityTokenResolver$Cert.getPayload ()Ljava/lang/Object;
      // 3c: areturn
      // 3d: invokestatic com/l7tech/security/xml/SimpleSecurityTokenResolver.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 40: athrow
      // 41: goto 07
      // 44: aconst_null
      // 45: areturn
      // try (13 -> 19): 20 java/lang/NullPointerException
      // try (15 -> 25): 25 java/lang/NullPointerException
   }

   @Override
   public X509Certificate lookupByKeyName(String var1) {
      X509Certificate var2 = (X509Certificate)this.c(this.b, var1);

      try {
         if (var2 != null) {
            return var2;
         }
      } catch (NullPointerException var5) {
         throw a(var5);
      }

      SignerInfo var3 = this.lookupPrivateKeyByKeyName(var1);

      try {
         return var3 != null ? var3.getCertificateChain()[0] : null;
      } catch (NullPointerException var4) {
         throw a(var4);
      }
   }

   private <C extends SimpleSecurityTokenResolver.Cert> Object c(Collection<C> var1, String var2) {
      for (SimpleSecurityTokenResolver.Cert var4 : var1) {
         String var5 = var4.getSubjectDn();

         try {
            if (CertUtils.isEqualDN(var2, var5)) {
               return var4.getPayload();
            }
         } catch (NullPointerException var6) {
            throw a(var6);
         }
      }

      return null;
   }

   @Override
   public X509Certificate lookupByIssuerAndSerial(X500Principal var1, BigInteger var2) {
      X509Certificate var3 = (X509Certificate)this.a(this.b, var1, var2);

      try {
         if (var3 != null) {
            return var3;
         }
      } catch (NullPointerException var6) {
         throw a(var6);
      }

      SignerInfo var4 = (SignerInfo)this.a(this.c, var1, var2);

      try {
         return var4 != null ? var4.getCertificateChain()[0] : null;
      } catch (NullPointerException var5) {
         throw a(var5);
      }
   }

   private <C extends SimpleSecurityTokenResolver.Cert> Object a(Collection<C> param1, X500Principal param2, BigInteger param3) {
      // $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: invokeinterface java/util/Collection.iterator ()Ljava/util/Iterator; 1
      // 06: astore 4
      // 08: aload 4
      // 0a: invokeinterface java/util/Iterator.hasNext ()Z 1
      // 0f: ifeq 51
      // 12: aload 4
      // 14: invokeinterface java/util/Iterator.next ()Ljava/lang/Object; 1
      // 19: checkcast com/l7tech/security/xml/SimpleSecurityTokenResolver$Cert
      // 1c: astore 5
      // 1e: aload 5
      // 20: invokevirtual com/l7tech/security/xml/SimpleSecurityTokenResolver$Cert.getCertificate ()Ljava/security/cert/X509Certificate;
      // 23: astore 6
      // 25: aload 6
      // 27: invokevirtual java/security/cert/X509Certificate.getIssuerX500Principal ()Ljavax/security/auth/x500/X500Principal;
      // 2a: aload 2
      // 2b: invokevirtual javax/security/auth/x500/X500Principal.equals (Ljava/lang/Object;)Z
      // 2e: ifeq 4e
      // 31: aload 6
      // 33: invokevirtual java/security/cert/X509Certificate.getSerialNumber ()Ljava/math/BigInteger;
      // 36: aload 3
      // 37: invokevirtual java/math/BigInteger.equals (Ljava/lang/Object;)Z
      // 3a: ifeq 4e
      // 3d: goto 44
      // 40: invokestatic com/l7tech/security/xml/SimpleSecurityTokenResolver.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 43: athrow
      // 44: aload 5
      // 46: invokevirtual com/l7tech/security/xml/SimpleSecurityTokenResolver$Cert.getPayload ()Ljava/lang/Object;
      // 49: areturn
      // 4a: invokestatic com/l7tech/security/xml/SimpleSecurityTokenResolver.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 4d: athrow
      // 4e: goto 08
      // 51: aconst_null
      // 52: areturn
      // try (13 -> 23): 24 java/lang/NullPointerException
      // try (18 -> 29): 29 java/lang/NullPointerException
   }

   @Override
   public SignerInfo lookupPrivateKeyByCert(X509Certificate var1) {
      try {
         String var5 = CertUtils.getThumbprintSHA1(var1);
         return this.lookupPrivateKeyByX509Thumbprint(var5);
      } catch (CertificateEncodingException var4) {
         CertificateEncodingException var2 = var4;

         try {
            if (a.isLoggable(Level.FINE)) {
               a.log(Level.FINE, g[2] + ExceptionUtils.getMessage(var2), var2);
            }

            return null;
         } catch (CertificateEncodingException var3) {
            throw a(var3);
         }
      }
   }

   @Override
   public SignerInfo lookupPrivateKeyByX509Thumbprint(String var1) {
      return (SignerInfo)this.a(this.c, var1);
   }

   @Override
   public SignerInfo lookupPrivateKeyBySki(String var1) {
      return (SignerInfo)this.b(this.c, var1);
   }

   @Override
   public SignerInfo lookupPrivateKeyByKeyName(String var1) {
      return (SignerInfo)this.c(this.c, var1);
   }

   @Override
   public SignerInfo lookupPrivateKeyByIssuerAndSerial(X500Principal var1, BigInteger var2) {
      return (SignerInfo)this.a(this.c, var1, var2);
   }

   public Map getEncryptedKeys() {
      return this.d;
   }

   public void setEncryptedKeys(Map<String, byte[]> var1) {
      try {
         if (var1 == null) {
            throw new NullPointerException();
         }
      } catch (NullPointerException var2) {
         throw a(var2);
      }

      this.d = var1;
   }

   public Map getKerberosTokens() {
      return this.f;
   }

   public void setKerberosTokens(Map<String, KerberosSigningSecurityToken> var1) {
      try {
         if (var1 == null) {
            throw new NullPointerException();
         }
      } catch (NullPointerException var2) {
         throw a(var2);
      }

      this.f = var1;
   }

   @Override
   public byte[] getSecretKeyByEncryptedKeySha1(String var1) {
      return this.d.get(var1);
   }

   @Override
   public void putSecretKeyByEncryptedKeySha1(String var1, byte[] var2) {
      this.d.put(var1, var2);
   }

   @Override
   public KerberosSigningSecurityToken getKerberosTokenBySha1(String var1) {
      return this.f.get(var1);
   }

   @Override
   public byte[] getSecretKeyByTokenIdentifier(String var1, String var2) {
      return this.e.get(var1 + g[1] + var2);
   }

   @Override
   public void putSecretKeyByTokenIdentifier(String var1, String var2, byte[] var3) {
      this.e.put(var1 + g[0] + var2, var3);
   }

   static {
      String[] var5 = new String[3];
      int var3 = 0;
      String var2 = "\rK\u0002\rK$~\u0016_r\u001dR9PQS|\u000bW.\u001a\u0014_~\u0000_2SQRx\u001dO>Q\u0018R|\u001b^m\u0017";
      int var4 = "\rK\u0002\rK$~\u0016_r\u001dR9PQS|\u000bW.\u001a\u0014_~\u0000_2SQRx\u001dO>Q\u0018R|\u001b^m\u0017".length();
      char var1 = 2;
      int var0 = -1;

      while (true) {
         String var10002 = a(123, a(var2.substring(++var0, var0 + var1)));
         byte var10001 = -1;
         var5[var3++] = var10002;
         if ((var0 += var1) >= var4) {
            g = var5;
            a = Logger.getLogger(SimpleSecurityTokenResolver.class.getName());
            return;
         }

         var1 = var2.charAt(var0);
      }
   }

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

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

      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 -> 76;
            case 1 -> 10;
            case 2 -> 74;
            case 3 -> 102;
            case 4 -> 20;
            case 5 -> 64;
            default -> 44;
         });
      }

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

   private static class Cert extends TrustedCert {
      static final long serialVersionUID = 3770656656927092138L;
      private static final String d;

      public Cert(X509Certificate var1) {
         if (var1 == null) {
            throw new NullPointerException(d);
         }

         this.setCertificate(var1);
      }

      public Object getPayload() {
         return this.getCertificate();
      }

      static {
         String var10002 = d(106, d("\u0010r\u0002pi'k7;\u0002to6\"8!Ag~\"w8 \u0004q"));
         byte var10001 = -1;
         d = var10002;
      }

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

         return var10000;
      }

      private static String d(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 -> 59;
               case 1 -> 56;
               case 2 -> 11;
               case 3 -> 127;
               case 4 -> 113;
               case 5 -> 57;
               default -> 104;
            });
         }

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

   private static class MyKey extends SimpleSecurityTokenResolver.Cert {
      private final SignerInfo signerInfo;
      static final long serialVersionUID = 7027485925101234213L;

      public MyKey(SignerInfo var1) {
         super(var1.getCertificateChain()[0]);
         this.signerInfo = var1;
      }

      @Override
      public Object getPayload() {
         return this.signerInfo;
      }
   }
}
