package com.l7tech.external.assertions.gatewaymanagement.server;

import com.l7tech.common.io.CertGenParams;
import com.l7tech.common.io.CertUtils;
import com.l7tech.common.io.UnsupportedX509GeneralNameException;
import com.l7tech.gateway.api.impl.PrivateKeyGenerateCsrContext;
import com.l7tech.gateway.api.impl.PrivateKeyGenerateCsrResult;
import com.l7tech.gateway.common.security.keystore.SsgKeyEntry;
import com.l7tech.gateway.common.security.rbac.OperationType;
import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.ObjectModelException;
import com.l7tech.security.prov.CertificateRequest;
import com.l7tech.server.security.keystore.SsgKeyStore;
import com.l7tech.util.Eithers;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.Option;
import com.l7tech.util.Eithers.E2;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.KeyStoreException;
import java.security.SignatureException;
import java.util.List;
import java.util.Map;
import javax.security.auth.x500.X500Principal;

class cc
   implements ResourceFactorySupport.TransactionalCallback<E2<ResourceFactory.ResourceNotFoundException, ResourceFactory.InvalidResourceException, PrivateKeyGenerateCsrResult>> {
   final Map val$selectorMap;
   final PrivateKeyGenerateCsrContext val$resource;
   final PrivateKeyResourceFactory this$0;
   private static final String[] a;

   cc(PrivateKeyResourceFactory var1, Map var2, PrivateKeyGenerateCsrContext var3) {
      this.this$0 = var1;
      this.val$selectorMap = var2;
      this.val$resource = var3;
   }

   public E2<ResourceFactory.ResourceNotFoundException, ResourceFactory.InvalidResourceException, PrivateKeyGenerateCsrResult> execute() throws ObjectModelException {
      try {
         SsgKeyEntry var1 = this.this$0.a(this.this$0.a(this.val$selectorMap));
         this.this$0.checkPermittedForAnyEntity(OperationType.UPDATE, EntityType.SSG_KEY_ENTRY);
         String var3 = (String)Option.optional(this.val$resource.getDn()).orSome(var1.getSubjectDN());
         X500Principal var4 = new X500Principal(var3);

         byte[] var2;
         try {
            SsgKeyStore var5 = this.this$0.a(var1.getKeystoreId());
            Map var6 = this.val$resource.getProperties();
            Option var7 = this.this$0.getProperty(var6, PrivateKeyGenerateCsrContext.PROP_SIGNATURE_HASH, Option.none(), String.class);
            Option var8 = this.this$0.getProperty(var6, PrivateKeyGenerateCsrContext.PROP_SIGNATURE_ALGO, Option.none(), String.class);
            List var9 = (List)var6.get(PrivateKeyGenerateCsrContext.PROP_SANS);
            List var10 = CertUtils.extractX509GeneralNamesFromList(var9);
            String[] var13 = a;
            CertGenParams var11 = new CertGenParams(
               var4, var10, this.this$0.w.getIntProperty(var13[1], PrivateKeyResourceFactory.o), false, (String)var8.toNull()
            );
            var11.setHashAlgorithm((String)var7.toNull());
            CertificateRequest var12 = var5.makeCertificateSigningRequest(var1.getAlias(), var11);
            var2 = var12.getEncoded();
         } catch (SignatureException | IOException | KeyStoreException | InvalidKeyException var14) {
            throw new ResourceFactory.ResourceAccessException(ExceptionUtils.getMessage(var14), var14);
         } catch (IllegalArgumentException var15) {
            throw new ResourceFactory.InvalidResourceException(
               ResourceFactory.InvalidResourceException.ExceptionType.INVALID_VALUES, ExceptionUtils.getMessage(var15)
            );
         } catch (UnsupportedX509GeneralNameException var16) {
            throw new ResourceFactory.InvalidResourceException(ResourceFactory.InvalidResourceException.ExceptionType.UNEXPECTED_TYPE, a[0]);
         }

         PrivateKeyGenerateCsrResult var19 = new PrivateKeyGenerateCsrResult();
         var19.setCsrData(var2);
         return Eithers.right2(var19);
      } catch (ResourceFactory.ResourceNotFoundException var17) {
         return Eithers.left2_1(var17);
      } catch (ResourceFactory.InvalidResourceException var18) {
         return Eithers.left2_2(var18);
      }
   }

   static {
      String[] var5 = new String[2];
      int var3 = 0;
      String var2 = "[eCn\u0004p\u007f|\u007fU\u007fTSelaUx\u0000 Qb\u007fUi\u001aadg}U;:a}k+db\u0004e\u0019~`YcZcc|%T~\u0012aeb\u007fuc\u0004ibwJW~";
      int var4 = "[eCn\u0004p\u007f|\u007fU\u007fTSelaUx\u0000 Qb\u007fUi\u001aadg}U;:a}k+db\u0004e\u0019~`YcZcc|%T~\u0012aeb\u007fuc\u0004ibwJW~".length();
      char var1 = ')';
      int var0 = -1;

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

         var1 = var2.charAt(var0);
      }
   }

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

      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 -> 97;
            case 1 -> 100;
            case 2 -> 95;
            case 3 -> 116;
            case 4 -> 27;
            case 5 -> 111;
            default -> 127;
         });
      }

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