package com.l7tech.external.assertions.gatewaygraphql.server.data;

import com.fasterxml.jackson.annotation.JsonIncludeProperties;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.l7tech.common.io.CertUtils;
import com.l7tech.external.assertions.gatewaygraphql.server.input.BundleEntityMappingInput;
import com.l7tech.external.assertions.gatewaygraphql.server.input.EntityInput;
import com.l7tech.external.assertions.gatewaygraphql.server.input.EntityPropertyInput;
import com.l7tech.external.assertions.gatewaygraphql.server.input.EntityRefInput;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.finder.SsgKeyEntryFinder;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.helper.SsgKeyUsageHelper;
import com.l7tech.external.assertions.gatewaygraphql.server.util.Util;
import com.l7tech.gateway.common.security.SpecialKeyType;
import com.l7tech.gateway.common.security.keystore.SsgKeyEntry;
import com.l7tech.security.keys.PemUtils;
import com.l7tech.server.DefaultKey;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.HexUtils;
import graphql.schema.DataFetchingEnvironment;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.UnrecoverableKeyException;
import java.security.KeyStore.PasswordProtection;
import java.security.KeyStore.PrivateKeyEntry;
import java.security.cert.CertificateEncodingException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.security.interfaces.ECPublicKey;
import java.security.interfaces.RSAPublicKey;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
import lombok.Generated;

public class KeyDTO extends EntityDTO<SsgKeyEntry> {
   @Generated
   private static final Logger a;
   private String b;
   private String c;
   protected List<String> certChain;
   protected List<KeyDTO.KeyUsageType> usageTypes;
   private static final String[] e;

   public KeyDTO(SsgKeyEntry var1, DefaultKey var2) {
      this(var1, null, SsgKeyUsageHelper.findDesignatedKeyUsages(var1, var2));
   }

   public KeyDTO(SsgKeyEntry var1, List<String> var2, List<KeyDTO.KeyUsageType> var3) {
      super(var1);
      this.certChain = var2;
      this.usageTypes = var3;
   }

   @Override
   protected Object createWrapperObject() {
      return new KeyDTO.SsgKeyEntryWrapper(this.entity, this.certChain, this.usageTypes);
   }

   public String getKeystoreId() {
      return toGoidString(this.entity.getKeystoreId());
   }

   public String getAlias() {
      return this.entity.getAlias();
   }

   @Override
   public String getGoid() {
      return this.entity.getId();
   }

   public String getSubjectDn() {
      return this.entity.getSubjectDN();
   }

   public String getKeyType() {
      return this.entity.getPublic().getAlgorithm();
   }

   public List<KeyDTO.KeyUsageType> getUsageTypes() {
      return asNullableList(this.usageTypes);
   }

   public List<String> getCertChain() {
      if (this.certChain == null) {
         try {
            ArrayList var1 = new ArrayList();
            X509Certificate[] var2 = this.entity.getCertificateChain();

            for (X509Certificate var6 : var2) {
               var1.add(CertUtils.encodeAsPEM(var6));
            }

            this.certChain = var1;
         } catch (CertificateEncodingException | IOException var7) {
            a.log(Level.INFO, ExceptionUtils.getDebugException(var7), () -> e[3] + ExceptionUtils.getMessageWithCause(var7));
         }
      }

      return this.certChain;
   }

   public List<EntityProperty> getCertProperties() {
      try {
         X509Certificate[] var1 = this.entity.getCertificateChain();

         try {
            if (var1 == null || var1.length <= 0) {
               return null;
            }
         } catch (CertificateEncodingException var3) {
            throw a(var3);
         }

         X509Certificate var2 = var1[0];
         return CertUtils.getCertProperties(var2)
            .stream()
            .map(
               var2x -> {
                  if (CertUtils.CERT_PROP_NOTBEFORE_DATE.equals(var2x.getKey())) {
                     return new EntityProperty((String)var2x.getKey(), this.a(var2.getNotBefore()));
                  } else {
                     return CertUtils.CERT_PROP_NOTAFTER_DATE.equals(var2x.getKey())
                        ? new EntityProperty((String)var2x.getKey(), this.a(var2.getNotAfter()))
                        : new EntityProperty((String)var2x.getKey(), (String)var2x.getValue());
                  }
               }
            )
            .collect(Collectors.toList());
      } catch (CertificateEncodingException var4) {
         a.log(Level.INFO, ExceptionUtils.getDebugException(var4), () -> e[6] + ExceptionUtils.getMessageWithCause(var4));
         return null;
      }
   }

   private String a(Date var1) {
      return var1 != null ? var1.toInstant().atZone(ZoneId.systemDefault()).toString() : e[9];
   }

   public String getP12(DataFetchingEnvironment var1) {
      try {
         if (this.b != null || !this.entity.isPrivateKeyAvailableAndAccessible()) {
            return this.b;
         }
      } catch (KeyStoreException var4) {
         throw a(var4);
      }

      try {
         String var2 = (String)var1.getGraphQlContext().get(e[10]);
         this.b = this.a(this.entity, var2);
      } catch (KeyStoreException | UnrecoverableKeyException | IOException | NoSuchAlgorithmException | CertificateException var3) {
         a.log(Level.INFO, ExceptionUtils.getDebugException(var3), () -> e[1] + ExceptionUtils.getMessageWithCause(var3));
      }

      return this.b;
   }

   public String getPem(DataFetchingEnvironment var1) {
      try {
         if (this.c != null || !this.entity.isPrivateKeyAvailableAndAccessible()) {
            return this.c;
         }
      } catch (Exception var4) {
         throw a(var4);
      }

      try {
         this.c = PemUtils.doWriteKeyPair(this.entity.getPrivateKey(), (String)var1.getGraphQlContext().get(e[0]));
      } catch (Exception var3) {
         a.log(Level.INFO, ExceptionUtils.getDebugException(var3), () -> e[8] + ExceptionUtils.getMessageWithCause(var3));
      }

      return this.c;
   }

   public Integer getKeySize() {
      try {
         X509Certificate var1 = this.entity.getCertificateChain()[0];
         PublicKey var2 = var1.getPublicKey();
         String var3 = var2.getAlgorithm();

         label44: {
            try {
               if (e[5].equalsIgnoreCase(var3)) {
                  if (!(var2 instanceof RSAPublicKey)) {
                     return 0;
                  }
                  break label44;
               }
            } catch (Exception var6) {
               throw a(var6);
            }

            try {
               if (!e[4].equalsIgnoreCase(var3) || !(var2 instanceof ECPublicKey)) {
                  return 0;
               }
            } catch (Exception var5) {
               throw a(var5);
            }

            ECPublicKey var4 = (ECPublicKey)var2;
            return var4.getParams().getCurve().getField().getFieldSize();
         }

         RSAPublicKey var8 = (RSAPublicKey)var2;
         return var8.getModulus().bitLength();
      } catch (Exception var7) {
         a.log(Level.FINE, ExceptionUtils.getDebugException(var7), () -> e[2] + ExceptionUtils.getMessageWithCause(var7));
         return 0;
      }
   }

   private String a(SsgKeyEntry var1, String var2) throws KeyStoreException, UnrecoverableKeyException, CertificateException, IOException, NoSuchAlgorithmException {
      PrivateKeyEntry var3 = new PrivateKeyEntry(var1.getPrivateKey(), var1.getCertificateChain());
      KeyStore var4 = KeyStore.getInstance(e[7]);
      var4.load(null, var2.toCharArray());
      var4.setEntry(var1.getAlias(), var3, new PasswordProtection(var2.toCharArray()));

      try (ByteArrayOutputStream var5 = new ByteArrayOutputStream()) {
         var4.store(var5, var2.toCharArray());
         return HexUtils.encodeBase64(var5.toByteArray(), true);
      }
   }

   static {
      String[] var5 = new String[11];
      int var3 = 0;
      String var2 = "*Cn$%+J&Bc\t,:M<]e$=(['\u001aCh.,>];Hiv9)L _-$9/K=Cd8;{U*T-7/{N~\u001f7v\u001e\u001aCl40>\u001e;B-29/[=@d89{U*T-%5![u\r.\u001aCh.,>];Hiv9)L _-$9/K=Cd8;{]*_y?:2].Yhv?3_&C7v\u0002\nn\u0003\u001d~L3\u001aCh.,>];Hiv9)L _-$9/K=Cd8;{]*_y?:2].Yhv,)Q?H\u007f\"5>Mu\r\u0006\u001ffN\u0005mi'\u001aCh.,>];Hiv9)L _-$9/K=Cd8;{U*T-7/{N*@7v";
      int var4 = "*Cn$%+J&Bc\t,:M<]e$=(['\u001aCh.,>];Hiv9)L _-$9/K=Cd8;{U*T-7/{N~\u001f7v\u001e\u001aCl40>\u001e;B-29/[=@d89{U*T-%5![u\r.\u001aCh.,>];Hiv9)L _-$9/K=Cd8;{]*_y?:2].Yhv?3_&C7v\u0002\nn\u0003\u001d~L3\u001aCh.,>];Hiv9)L _-$9/K=Cd8;{]*_y?:2].Yhv,)Q?H\u007f\"5>Mu\r\u0006\u001ffN\u0005mi'\u001aCh.,>];Hiv9)L _-$9/K=Cd8;{U*T-7/{N*@7v"
         .length();
      char var1 = 21;
      int var7 = -1;

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

         while (true) {
            String var8 = b(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     e = var5;
                     a = Logger.getLogger(KeyDTO.class.getName());
                     return;
                  }

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

                  var2 = "?<r\u0015\u0014}P\u001a\u001b\u0015t\u0018|]7\u0012\u0004s\u0002c[\u001a\u0003\u0016e";
                  var4 = "?<r\u0015\u0014}P\u001a\u001b\u0015t\u0018|]7\u0012\u0004s\u0002c[\u001a\u0003\u0016e".length();
                  var1 = 3;
                  var7 = -1;
            }

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

   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] ^ 6);
      }

      return var10000;
   }

   private static String b(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 -> 119;
            case 1 -> 21;
            case 2 -> 53;
            case 3 -> 110;
            case 4 -> 100;
            case 5 -> 99;
            default -> 6;
         });
      }

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

   public static class KeyGenerateOptions {
      Integer a;
      String b;
      Integer c;
      String d;
      boolean e;
      boolean f;
      private static final String[] g;

      @Generated
      public Integer getRsaKeyBits() {
         return this.a;
      }

      @Generated
      public String getEcName() {
         return this.b;
      }

      @Generated
      public Integer getCertExpiry() {
         return this.c;
      }

      @Generated
      public String getSignatureHashAlg() {
         return this.d;
      }

      @Generated
      public boolean isUseRsaSsaPss() {
         return this.e;
      }

      @Generated
      public boolean isCertCACapable() {
         return this.f;
      }

      @Generated
      public void setRsaKeyBits(Integer var1) {
         this.a = var1;
      }

      @Generated
      public void setEcName(String var1) {
         this.b = var1;
      }

      @Generated
      public void setCertExpiry(Integer var1) {
         this.c = var1;
      }

      @Generated
      public void setSignatureHashAlg(String var1) {
         this.d = var1;
      }

      @Generated
      public void setUseRsaSsaPss(boolean var1) {
         this.e = var1;
      }

      @Generated
      public void setCertCACapable(boolean var1) {
         this.f = var1;
      }

      @Generated
      @Override
      public boolean equals(Object var1) {
         if (var1 == this) {
            return true;
         } else if (!(var1 instanceof KeyDTO.KeyGenerateOptions var2)) {
            return false;
         } else {
            if (!var2.canEqual(this)) {
               return false;
            }

            if (this.isUseRsaSsaPss() != var2.isUseRsaSsaPss()) {
               return false;
            }

            if (this.isCertCACapable() != var2.isCertCACapable()) {
               return false;
            }

            Integer var3 = this.getRsaKeyBits();
            Integer var4 = var2.getRsaKeyBits();
            if (var3 == null ? var4 == null : var3.equals(var4)) {
               Integer var5 = this.getCertExpiry();
               Integer var6 = var2.getCertExpiry();
               if (var5 == null ? var6 == null : var5.equals(var6)) {
                  String var7 = this.getEcName();
                  String var8 = var2.getEcName();
                  if (var7 == null ? var8 == null : var7.equals(var8)) {
                     String var9 = this.getSignatureHashAlg();
                     String var10 = var2.getSignatureHashAlg();
                     return var9 == null ? var10 == null : var9.equals(var10);
                  } else {
                     return false;
                  }
               } else {
                  return false;
               }
            } else {
               return false;
            }
         }
      }

      @Generated
      protected boolean canEqual(Object var1) {
         return var1 instanceof KeyDTO.KeyGenerateOptions;
      }

      @Generated
      @Override
      public int hashCode() {
         byte var1 = 59;
         int var2 = 1;
         var2 = var2 * 59 + (this.isUseRsaSsaPss() ? 79 : 97);
         var2 = var2 * 59 + (this.isCertCACapable() ? 79 : 97);
         Integer var3 = this.getRsaKeyBits();
         var2 = var2 * 59 + (var3 == null ? 43 : var3.hashCode());
         Integer var4 = this.getCertExpiry();
         var2 = var2 * 59 + (var4 == null ? 43 : var4.hashCode());
         String var5 = this.getEcName();
         var2 = var2 * 59 + (var5 == null ? 43 : var5.hashCode());
         String var6 = this.getSignatureHashAlg();
         return var2 * 59 + (var6 == null ? 43 : var6.hashCode());
      }

      @Generated
      @Override
      public String toString() {
         Integer var10000 = this.getRsaKeyBits();
         String var10001 = this.getEcName();
         Integer var10002 = this.getCertExpiry();
         String var10003 = this.getSignatureHashAlg();
         boolean var1 = this.isCertCACapable();
         boolean var2 = this.isUseRsaSsaPss();
         String var3 = var10003;
         Integer var4 = var10002;
         String var5 = var10001;
         Integer var6 = var10000;
         String[] var7 = g;
         return var7[0] + var6 + var7[2] + var5 + var7[1] + var4 + var7[3] + var3 + var7[4] + var2 + var7[5] + var1 + ")";
      }

      static {
         String[] var5 = new String[6];
         int var3 = 0;
         String var2 = "E\u0001Gx`T2E\u0001G{Quy|\u0005JY{khg\u000bPO\u001cioo/[Evrh}Y\r\"D]YFoYv\u0014WNM&\t\"D[_zzqkY\u0013\"DMUSu}z\u0011LY|zof%R[\t";
         int var4 = "E\u0001Gx`T2E\u0001G{Quy|\u0005JY{khg\u000bPO\u001cioo/[Evrh}Y\r\"D]YFoYv\u0014WNM&\t\"D[_zzqkY\u0013\"DMUSu}z\u0011LY|zof%R[\t".length();
         char var1 = '%';
         int var7 = -1;

         label24:
         while (true) {
            byte var10000 = 75;
            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) {
                        g = var5;
                        return;
                     }

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

                     var2 = "s\u0015\u001a\u001e\u0000\u0018>>f\u001c\f59>b\u0010s\u0015\f\b\u0017>\u000e\u001ev\u000e\u001d\u0004(!:\b";
                     var4 = "s\u0015\u001a\u001e\u0000\u0018>>f\u001c\f59>b\u0010s\u0015\f\b\u0017>\u000e\u001ev\u000e\u001d\u0004(!:\b".length();
                     var1 = 15;
                     var7 = -1;
               }

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

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

         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 -> 69;
               case 1 -> 47;
               case 2 -> 117;
               case 3 -> 119;
               case 4 -> 127;
               case 5 -> 80;
               default -> 87;
            });
         }

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

   public static class KeyInput extends EntityInput {
      String g;
      String h;
      String i;
      String j;
      String k;
      String l;
      List<KeyDTO.KeyUsageType> m;
      List<String> n;
      List<EntityPropertyInput> o;
      String p;
      Integer q;
      boolean r;
      KeyDTO.KeyGenerateOptions s;
      private static final String[] t;

      @Override
      public String getIdentityValue() {
         return this.h;
      }

      @Override
      public boolean matches(EntityMappingInstruction var1) {
         return super.matches(var1) && (Util.isEmpty(this.g) || this.g.equals(var1.getSourceString(t[5])));
      }

      public SsgKeyEntryFinder getFinder() {
         return (SsgKeyEntryFinder)this.getExecutionContext().getFinder();
      }

      @Generated
      public String getKeystoreId() {
         return this.g;
      }

      @Generated
      public String getAlias() {
         return this.h;
      }

      @Generated
      public String getP12() {
         return this.i;
      }

      @Generated
      public String getPem() {
         return this.j;
      }

      @Generated
      public String getSubjectDn() {
         return this.k;
      }

      @Generated
      public String getKeyType() {
         return this.l;
      }

      @Generated
      public List<KeyDTO.KeyUsageType> getUsageTypes() {
         return this.m;
      }

      @Generated
      public List<String> getCertChain() {
         return this.n;
      }

      @Generated
      public List<EntityPropertyInput> getCertProperties() {
         return this.o;
      }

      @Generated
      public String getChecksum() {
         return this.p;
      }

      @Generated
      public Integer getKeySize() {
         return this.q;
      }

      @Generated
      public boolean isTest() {
         return this.r;
      }

      @Generated
      public KeyDTO.KeyGenerateOptions getKeyGenerateOptions() {
         return this.s;
      }

      @Generated
      public void setKeystoreId(String var1) {
         this.g = var1;
      }

      @Generated
      public void setAlias(String var1) {
         this.h = var1;
      }

      @Generated
      public void setP12(String var1) {
         this.i = var1;
      }

      @Generated
      public void setPem(String var1) {
         this.j = var1;
      }

      @Generated
      public void setSubjectDn(String var1) {
         this.k = var1;
      }

      @Generated
      public void setKeyType(String var1) {
         this.l = var1;
      }

      @Generated
      public void setUsageTypes(List<KeyDTO.KeyUsageType> var1) {
         this.m = var1;
      }

      @Generated
      public void setCertChain(List<String> var1) {
         this.n = var1;
      }

      @Generated
      public void setCertProperties(List<EntityPropertyInput> var1) {
         this.o = var1;
      }

      @Generated
      public void setChecksum(String var1) {
         this.p = var1;
      }

      @Generated
      public void setKeySize(Integer var1) {
         this.q = var1;
      }

      @Generated
      public void setTest(boolean var1) {
         this.r = var1;
      }

      @Generated
      public void setKeyGenerateOptions(KeyDTO.KeyGenerateOptions var1) {
         this.s = var1;
      }

      @Generated
      @Override
      public String toString() {
         String var10000 = this.getKeystoreId();
         String var10001 = this.getAlias();
         String var10002 = this.getP12();
         String var10003 = this.getPem();
         String var10004 = this.getSubjectDn();
         String var10005 = this.getKeyType();
         String var10006 = String.valueOf(this.getUsageTypes());
         String var10007 = String.valueOf(this.getCertChain());
         String var10008 = String.valueOf(this.getCertProperties());
         String var10009 = this.getChecksum();
         Integer var10010 = this.getKeySize();
         String var1 = String.valueOf(this.getKeyGenerateOptions());
         boolean var2 = this.isTest();
         Integer var3 = var10010;
         String var4 = var10009;
         String var5 = var10008;
         String var6 = var10007;
         String var7 = var10006;
         String var8 = var10005;
         String var9 = var10004;
         String var10 = var10003;
         String var11 = var10002;
         String var12 = var10001;
         String var13 = var10000;
         String[] var14 = t;
         return var14[1]
            + var13
            + var14[3]
            + var12
            + var14[11]
            + var11
            + var14[9]
            + var10
            + var14[7]
            + var9
            + var14[6]
            + var8
            + var14[10]
            + var7
            + var14[8]
            + var6
            + var14[4]
            + var5
            + var14[0]
            + var4
            + var14[2]
            + var3
            + var14[12]
            + var2
            + var14[13]
            + var1
            + ")";
      }

      @Generated
      @Override
      public boolean equals(Object var1) {
         if (var1 == this) {
            return true;
         } else if (!(var1 instanceof KeyDTO.KeyInput var2)) {
            return false;
         } else {
            if (!var2.canEqual(this)) {
               return false;
            }

            if (!super.equals(var1)) {
               return false;
            }

            if (this.isTest() != var2.isTest()) {
               return false;
            }

            Integer var3 = this.getKeySize();
            Integer var4 = var2.getKeySize();
            if (var3 == null ? var4 == null : var3.equals(var4)) {
               String var5 = this.getKeystoreId();
               String var6 = var2.getKeystoreId();
               if (var5 == null ? var6 == null : var5.equals(var6)) {
                  String var7 = this.getAlias();
                  String var8 = var2.getAlias();
                  if (var7 == null ? var8 == null : var7.equals(var8)) {
                     String var9 = this.getP12();
                     String var10 = var2.getP12();
                     if (var9 == null ? var10 == null : var9.equals(var10)) {
                        String var11 = this.getPem();
                        String var12 = var2.getPem();
                        if (var11 == null ? var12 == null : var11.equals(var12)) {
                           String var13 = this.getSubjectDn();
                           String var14 = var2.getSubjectDn();
                           if (var13 == null ? var14 == null : var13.equals(var14)) {
                              String var15 = this.getKeyType();
                              String var16 = var2.getKeyType();
                              if (var15 == null ? var16 == null : var15.equals(var16)) {
                                 List var17 = this.getUsageTypes();
                                 List var18 = var2.getUsageTypes();
                                 if (var17 == null ? var18 == null : var17.equals(var18)) {
                                    List var19 = this.getCertChain();
                                    List var20 = var2.getCertChain();
                                    if (var19 == null ? var20 == null : var19.equals(var20)) {
                                       List var21 = this.getCertProperties();
                                       List var22 = var2.getCertProperties();
                                       if (var21 == null ? var22 == null : var21.equals(var22)) {
                                          String var23 = this.getChecksum();
                                          String var24 = var2.getChecksum();
                                          if (var23 == null ? var24 == null : var23.equals(var24)) {
                                             KeyDTO.KeyGenerateOptions var25 = this.getKeyGenerateOptions();
                                             KeyDTO.KeyGenerateOptions var26 = var2.getKeyGenerateOptions();
                                             return var25 == null ? var26 == null : var25.equals(var26);
                                          } else {
                                             return false;
                                          }
                                       } else {
                                          return false;
                                       }
                                    } else {
                                       return false;
                                    }
                                 } else {
                                    return false;
                                 }
                              } else {
                                 return false;
                              }
                           } else {
                              return false;
                           }
                        } else {
                           return false;
                        }
                     } else {
                        return false;
                     }
                  } else {
                     return false;
                  }
               } else {
                  return false;
               }
            } else {
               return false;
            }
         }
      }

      @Generated
      @Override
      protected boolean canEqual(Object var1) {
         return var1 instanceof KeyDTO.KeyInput;
      }

      @Generated
      @Override
      public int hashCode() {
         byte var1 = 59;
         int var2 = super.hashCode();
         var2 = var2 * 59 + (this.isTest() ? 79 : 97);
         Integer var3 = this.getKeySize();
         var2 = var2 * 59 + (var3 == null ? 43 : var3.hashCode());
         String var4 = this.getKeystoreId();
         var2 = var2 * 59 + (var4 == null ? 43 : var4.hashCode());
         String var5 = this.getAlias();
         var2 = var2 * 59 + (var5 == null ? 43 : var5.hashCode());
         String var6 = this.getP12();
         var2 = var2 * 59 + (var6 == null ? 43 : var6.hashCode());
         String var7 = this.getPem();
         var2 = var2 * 59 + (var7 == null ? 43 : var7.hashCode());
         String var8 = this.getSubjectDn();
         var2 = var2 * 59 + (var8 == null ? 43 : var8.hashCode());
         String var9 = this.getKeyType();
         var2 = var2 * 59 + (var9 == null ? 43 : var9.hashCode());
         List var10 = this.getUsageTypes();
         var2 = var2 * 59 + (var10 == null ? 43 : var10.hashCode());
         List var11 = this.getCertChain();
         var2 = var2 * 59 + (var11 == null ? 43 : var11.hashCode());
         List var12 = this.getCertProperties();
         var2 = var2 * 59 + (var12 == null ? 43 : var12.hashCode());
         String var13 = this.getChecksum();
         var2 = var2 * 59 + (var13 == null ? 43 : var13.hashCode());
         KeyDTO.KeyGenerateOptions var14 = this.getKeyGenerateOptions();
         return var2 * 59 + (var14 == null ? 43 : var14.hashCode());
      }

      static {
         String[] var5 = new String[14];
         int var3 = 0;
         String var2 = "x@\u0006Oi>''\u0015\b\u001a\u001b\u001f\u0005\u001ccX\u0012b\u001f\u0005\u001cnb-9 H\u000eBu.8;\u0012\u0000nh`\nx@\u000eBu\u000e%.\u0005X\bx@\u0004Ke<?i\u0011x@\u0006B~)\u001c&\u000f\u0015B~)%1\u0013X\n?\u0005\u001cTx2>1)\u0001\nx@\u000eBu\t5$\u0005X\fx@\u0016Rn7)7\u0014!I1\fx@\u0006B~)\u000f<\u0001\fI1\u0006x@\u0015Ba`\rx@\u0010Tm:)\u0000\u0019\u0015B\u007f`\u0006x@\u0015\u0016>`";
         int var4 = "x@\u0006Oi>''\u0015\b\u001a\u001b\u001f\u0005\u001ccX\u0012b\u001f\u0005\u001cnb-9 H\u000eBu.8;\u0012\u0000nh`\nx@\u000eBu\u000e%.\u0005X\bx@\u0004Ke<?i\u0011x@\u0006B~)\u001c&\u000f\u0015B~)%1\u0013X\n?\u0005\u001cTx2>1)\u0001\nx@\u000eBu\t5$\u0005X\fx@\u0016Rn7)7\u0014!I1\fx@\u0006B~)\u000f<\u0001\fI1\u0006x@\u0015Ba`\rx@\u0010Tm:)\u0000\u0019\u0015B\u007f`\u0006x@\u0015\u0016>`"
            .length();
         char var1 = 11;
         int var7 = -1;

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

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

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

                     var2 = "\u0016.\u007f,\u0011G\u001f\u0015\u0016.`,\u001btGTky(\u0016VmJzb&\f@\u001f";
                     var4 = "\u0016.\u007f,\u0011G\u001f\u0015\u0016.`,\u001btGTky(\u0016VmJzb&\f@\u001f".length();
                     var1 = 7;
                     var7 = -1;
               }

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

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

         return var10000;
      }

      private static String b(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 -> 122;
               case 1 -> 78;
               case 2 -> 75;
               case 3 -> 9;
               case 4 -> 34;
               case 5 -> 115;
               default -> 98;
            });
         }

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

   public static class KeyMappingInstructionInput extends BundleEntityMappingInput {
      private KeyDTO.KeyRefInput f;
      private static final String h;

      @Generated
      public KeyDTO.KeyRefInput getSource() {
         return this.f;
      }

      @Generated
      public void setSource(KeyDTO.KeyRefInput var1) {
         this.f = var1;
      }

      @Generated
      @Override
      public String toString() {
         return h + this.getSource() + ")";
      }

      @Generated
      @Override
      public boolean equals(Object var1) {
         if (var1 == this) {
            return true;
         } else if (!(var1 instanceof KeyDTO.KeyMappingInstructionInput var2)) {
            return false;
         } else {
            if (!var2.canEqual(this)) {
               return false;
            }

            KeyDTO.KeyRefInput var3 = this.getSource();
            KeyDTO.KeyRefInput var4 = var2.getSource();
            return var3 == null ? var4 == null : var3.equals(var4);
         }
      }

      @Generated
      @Override
      protected boolean canEqual(Object var1) {
         return var1 instanceof KeyDTO.KeyMappingInstructionInput;
      }

      @Generated
      @Override
      public int hashCode() {
         byte var1 = 59;
         byte var2 = 1;
         KeyDTO.KeyRefInput var3 = this.getSource();
         return var2 * 59 + (var3 == null ? 43 : var3.hashCode());
      }

      static {
         String var10002 = b(2, b("\u0017\u0010sWq\"S\u0017\u0010s^D\u001d\r5\u001bmZK\u001e\t.\u0000igL\u0002\u0013\u0015\u001bzfQE\u000e3\u0000xp@P"));
         byte var10001 = -1;
         h = var10002;
      }

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

         return var10000;
      }

      private static String b(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 -> 94;
               case 1 -> 119;
               case 2 -> 8;
               case 3 -> 17;
               case 4 -> 39;
               case 5 -> 111;
               default -> 127;
            });
         }

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

   public static class KeyPayload extends EntityMutationPayload<KeyDTO> {
      public KeyDTO getKey() {
         return this.getItem();
      }
   }

   public static class KeyRefInput extends EntityRefInput {
      private String c;
      private String d;
      private static final String[] e;

      @Generated
      public String getAlias() {
         return this.c;
      }

      @Generated
      public String getKeystoreId() {
         return this.d;
      }

      @Generated
      public void setAlias(String var1) {
         this.c = var1;
      }

      @Generated
      public void setKeystoreId(String var1) {
         this.d = var1;
      }

      @Generated
      @Override
      public String toString() {
         String var10000 = this.getAlias();
         String var10001 = this.getKeystoreId();
         String[] var1 = e;
         return var1[0] + var10000 + var1[1] + var10001 + ")";
      }

      @Generated
      @Override
      public boolean equals(Object var1) {
         if (var1 == this) {
            return true;
         } else if (!(var1 instanceof KeyDTO.KeyRefInput var2)) {
            return false;
         } else if (!var2.canEqual(this)) {
            return false;
         } else if (!super.equals(var1)) {
            return false;
         } else {
            String var3 = this.getAlias();
            String var4 = var2.getAlias();
            if (var3 == null ? var4 == null : var3.equals(var4)) {
               String var5 = this.getKeystoreId();
               String var6 = var2.getKeystoreId();
               return var5 == null ? var6 == null : var5.equals(var6);
            } else {
               return false;
            }
         }
      }

      @Generated
      @Override
      protected boolean canEqual(Object var1) {
         return var1 instanceof KeyDTO.KeyRefInput;
      }

      @Generated
      @Override
      public int hashCode() {
         byte var1 = 59;
         int var2 = super.hashCode();
         String var3 = this.getAlias();
         var2 = var2 * 59 + (var3 == null ? 43 : var3.hashCode());
         String var4 = this.getKeystoreId();
         return var2 * 59 + (var4 == null ? 43 : var4.hashCode());
      }

      static {
         String[] var5 = new String[2];
         int var3 = 0;
         String var2 = "C4t\rT,FC4t\u001be\u0005!f!x=(\u0002\u0004a0~t\r$qf,y\u0010\u001cg#h\u0000d^";
         int var4 = "C4t\rT,FC4t\u001be\u0005!f!x=(\u0002\u0004a0~t\r$qf,y\u0010\u001cg#h\u0000d^".length();
         char var1 = 25;
         int var0 = -1;

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

            var1 = var2.charAt(var0);
         }
      }

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

         return var10000;
      }

      private static String b(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 -> 42;
               case 1 -> 115;
               case 2 -> 47;
               case 3 -> 107;
               case 4 -> 34;
               case 5 -> 65;
               default -> 74;
            });
         }

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

   public enum KeyUsageType {
      SSL,
      SERVER_SSL,
      CLIENT_SSL,
      CA,
      AUDIT_VIEWER,
      AUDIT_SIGNING;

      private final SpecialKeyType internalValue;
      private final String cwpName;
      private static final String[] a;

      KeyUsageType(SpecialKeyType var3, String var4) {
         this.internalValue = var3;
         this.cwpName = var4;
      }

      public SpecialKeyType internalValue() {
         return this.internalValue;
      }

      public String internalClusterProperty() {
         return this.cwpName;
      }

      public String internalSystemProperty() {
         return a[1] + this.internalClusterProperty();
      }

      // $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[] var5 = new String[13];
         int var3 = 0;
         String var2 = "M1X|*y\u0012Cz@Z:\u007f\u0014u=FA7x\u0007\b5MF?e\u0012E;L\u00012!\u0014C7I\u0001-s\u0012P1S\u0001\u0018M1X|*y\u0012CzEJ8w\u0015J bNpw\fO5R\u0019M1X|*y\u0012CzEJ8w\u0015J r\\28\u0001J=@\\\u001fM1X|*y\u0012CzEJ8w\u0015J rJ,`\u0005T\u0007RCpw\fO5R\ne\u0018hj\u0010B?u\u0007m\u001aM1X|*y\u0012Cz@Z:\u007f\u0014p=DX;dNG8HN-\rg\u0001ef\nI3o\u0013of\u0010Q\nu\u0011sy\u001bD?u\u0007m\u001fM1X|*y\u0012CzEJ8w\u0015J bC7s\u000eR\u0007RCpw\fO5R\fg\u0001ef\nI6o\u0011vj\f";
         int var4 = "M1X|*y\u0012Cz@Z:\u007f\u0014u=FA7x\u0007\b5MF?e\u0012E;L\u00012!\u0014C7I\u0001-s\u0012P1S\u0001\u0018M1X|*y\u0012CzEJ8w\u0015J bNpw\fO5R\u0019M1X|*y\u0012CzEJ8w\u0015J r\\28\u0001J=@\\\u001fM1X|*y\u0012CzEJ8w\u0015J rJ,`\u0005T\u0007RCpw\fO5R\ne\u0018hj\u0010B?u\u0007m\u001aM1X|*y\u0012Cz@Z:\u007f\u0014p=DX;dNG8HN-\rg\u0001ef\nI3o\u0013of\u0010Q\nu\u0011sy\u001bD?u\u0007m\u001fM1X|*y\u0012CzEJ8w\u0015J bC7s\u000eR\u0007RCpw\fO5R\fg\u0001ef\nI6o\u0011vj\f"
            .length();
         char var1 = 27;
         int var7 = -1;

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

            while (true) {
               String var9 = a(var10000, a(var10001));
               switch (var10002) {
                  case 0:
                     var5[var3++] = var9;
                     if ((var7 += var1) >= var4) {
                        a = var5;
                        String[] var8 = a;
                        SSL = new KeyDTO.KeyUsageType(SpecialKeyType.SSL, var8[3]);
                        SERVER_SSL = new KeyDTO.KeyUsageType(SpecialKeyType.SERVER_SSL, var8[4]);
                        CLIENT_SSL = new KeyDTO.KeyUsageType(SpecialKeyType.CLIENT_SSL, var8[9]);
                        CA = new KeyDTO.KeyUsageType(SpecialKeyType.CA, var8[2]);
                        AUDIT_VIEWER = new KeyDTO.KeyUsageType(SpecialKeyType.AUDIT_VIEWER, var8[6]);
                        AUDIT_SIGNING = new KeyDTO.KeyUsageType(SpecialKeyType.AUDIT_SIGNING, var8[0]);
                        return;
                     }

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

                     var2 = "?M'\u0002/_";
                     var4 = "?M'\u0002/_".length();
                     var1 = 3;
                     var7 = -1;
               }

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

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

         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 -> 103;
               case 1 -> 21;
               case 2 -> 96;
               case 3 -> 110;
               case 4 -> 31;
               case 5 -> 87;
               default -> 33;
            });
         }

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

   public static class KeysPayload extends EntityMutationsPayload<KeyDTO> {
      public List<KeyDTO> getKeys() {
         return this.getItems();
      }
   }

   @JsonIncludeProperties({"alias", "certificateChain", "usageTypes"})
   @JsonPropertyOrder({"alias", "certificateChain", "usageTypes"})
   public static class SsgKeyEntryWrapper extends KeyDTO {
      @Generated
      private static final Logger d = Logger.getLogger(KeyDTO.SsgKeyEntryWrapper.class.getName());
      private static final String f;

      public SsgKeyEntryWrapper(SsgKeyEntry var1, List<String> var2, List<KeyDTO.KeyUsageType> var3) {
         super(var1, var2, var3);
      }

      public String getCertificateChain() {
         StringBuilder var1 = new StringBuilder();
         if (this.certChain == null) {
            X509Certificate[] var2 = this.entity.getCertificateChain();

            for (X509Certificate var6 : var2) {
               try {
                  var1.append(CertUtils.encodeAsPEM(var6.getEncoded()));
               } catch (CertificateEncodingException | IOException var8) {
                  d.log(Level.WARNING, f + var8.getMessage());
               }
            }
         } else {
            this.certChain.forEach(var1::append);
         }

         return var1.toString();
      }

      @Override
      protected Object createWrapperObject() {
         return null;
      }

      static {
         String var10002 = c(5, c("Y=D<H'g\t*E=K&cG(\u000b=A0~\t"));
         byte var10001 = -1;
         f = var10002;
      }

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

         return var10000;
      }

      private static String c(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 -> 44;
               case 1 -> 74;
               case 2 -> 46;
               case 3 -> 91;
               case 4 -> 33;
               case 5 -> 71;
               default -> 15;
            });
         }

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