package com.l7tech.server.security.keystore;

import com.l7tech.common.io.CertGenParams;
import com.l7tech.gateway.common.security.keystore.SsgKeyEntry;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.NamedEntity;
import com.l7tech.objectmodel.ObjectNotFoundException;
import com.l7tech.security.prov.CertificateRequest;
import java.security.InvalidKeyException;
import java.security.KeyStoreException;
import java.security.SignatureException;
import java.util.List;
import org.jetbrains.annotations.NotNull;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

public interface SsgKeyFinder extends NamedEntity {
   Goid getGoid();

   SsgKeyFinder.SsgKeyStoreType getType();

   boolean isMutable();

   boolean isKeyExportSupported();

   SsgKeyStore getKeyStore();

   List<String> getAliases() throws KeyStoreException;

   @Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
   @NotNull
   SsgKeyEntry getCertificateChain(String var1) throws ObjectNotFoundException, KeyStoreException;

   @Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
   CertificateRequest makeCertificateSigningRequest(String var1, CertGenParams var2) throws InvalidKeyException, SignatureException, KeyStoreException;

   enum SsgKeyStoreType {
      OTHER,
      PKCS12_SOFTWARE,
      PKCS11_HARDWARE,
      LUNA_HARDWARE,
      NCIPHER_HARDWARE,
      GENERIC;

      // $VF: Failed to inline enum fields
      // 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!)
      static {
         String[] var0 = new String[6];
         int var4 = 0;
         String var3 = "\fVq]\tRX\u001d]y_\u0005@K\u0010P\r\u000e@vL\u001e_K\u0010QoL\u0013R\u000f\u0012^{^p%U\u0011Z~Y\u0016VX\u0007\u0007\u0005PvH\u0013^I";
         int var5 = "\fVq]\tRX\u001d]y_\u0005@K\u0010P\r\u000e@vL\u001e_K\u0010QoL\u0013R\u000f\u0012^{^p%U\u0011Z~Y\u0016VX\u0007\u0007\u0005PvH\u0013^I"
            .length();
         char var2 = 16;
         int var7 = -1;

         label25:
         while (true) {
            byte var10000 = 74;
            String var10001 = var3.substring(++var7, var7 + var2);
            byte var10002 = -1;

            while (true) {
               String var8 = a(var10000, a(var10001));
               switch (var10002) {
                  case 0:
                     var0[var4++] = var8;
                     if ((var7 += var2) >= var5) {
                        OTHER = new SsgKeyFinder.SsgKeyStoreType();
                        PKCS12_SOFTWARE = new SsgKeyFinder.SsgKeyStoreType();
                        PKCS11_HARDWARE = new SsgKeyFinder.SsgKeyStoreType();
                        LUNA_HARDWARE = new SsgKeyFinder.SsgKeyStoreType();
                        NCIPHER_HARDWARE = new SsgKeyFinder.SsgKeyStoreType();
                        GENERIC = new SsgKeyFinder.SsgKeyStoreType();
                        return;
                     }

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

                     var3 = "x4\u0005=f\u000fg+\u000e+\u0005S \u007f!\u001f<c#-r";
                     var5 = "x4\u0005=f\u000fg+\u000e+\u0005S \u007f!\u001f<c#-r".length();
                     var2 = 5;
                     var7 = -1;
               }

               var10000 = 63;
               var10001 = var3.substring(++var7, var7 + var2);
               var10002 = 0;
            }
         }
      }

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

         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 -> 8;
               case 1 -> 95;
               case 2 -> 114;
               case 3 -> 71;
               case 4 -> 11;
               case 5 -> 93;
               default -> 64;
            });
         }

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