package com.l7tech.security.xml.transform;

import com.l7tech.common.mime.ContentTypeHeader;
import com.l7tech.common.mime.MimeHeaders;
import com.l7tech.common.mime.MimeUtil;
import com.l7tech.util.ResourceUtils;
import com.l7tech.util.SoapConstants;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.SequenceInputStream;
import java.security.InvalidAlgorithmParameterException;
import java.security.spec.AlgorithmParameterSpec;
import java.util.Map;
import javax.xml.crypto.Data;
import javax.xml.crypto.OctetStreamData;
import javax.xml.crypto.XMLCryptoContext;
import javax.xml.crypto.XMLStructure;
import javax.xml.crypto.dsig.TransformException;
import javax.xml.crypto.dsig.TransformService;
import javax.xml.crypto.dsig.spec.TransformParameterSpec;
import org.apache.jcp.xml.dsig.internal.dom.ApacheNodeSetData;
import org.apache.jcp.xml.dsig.internal.dom.ApacheOctetStreamData;
import org.apache.xml.security.signature.XMLSignatureInput;
import org.xml.sax.InputSource;

public class AttachmentContentOnlyTransform extends TransformService {
   public static final String TRANSFORM_URI;
   protected static final String VALUE_HEADER_CONTENT_TYPE;
   protected static final byte[] CRLF;
   private static final String[] m;

   @Override
   public void init(TransformParameterSpec var1) throws InvalidAlgorithmParameterException {
   }

   @Override
   public void marshalParams(XMLStructure var1, XMLCryptoContext var2) {
   }

   @Override
   public void init(XMLStructure var1, XMLCryptoContext var2) throws InvalidAlgorithmParameterException {
   }

   @Override
   public AlgorithmParameterSpec getParameterSpec() {
      return null;
   }

   @Override
   public Data transform(Data var1, XMLCryptoContext var2) throws TransformException {
      return this.transform(var1, var2, null);
   }

   @Override
   public Data transform(Data var1, XMLCryptoContext var2, OutputStream var3) throws TransformException {
      String var4 = ((ApacheOctetStreamData)var1).getURI();
      Map var5 = (Map)var2.get(SoapConstants.WSSE_ATTACHMENT_REFERENCE_MAP);
      InputSource var6 = (InputSource)var5.get(var4);

      try {
         if (var6 == null) {
            throw new TransformException(m[0]);
         }
      } catch (Exception var24) {
         throw b(var24);
      }

      InputStream var7 = var6.getByteStream();

      try {
         ByteArrayOutputStream var8 = new ByteArrayOutputStream(1024);
         MimeHeaders var9 = MimeUtil.parseHeaders(var7);
         this.processHeaders(var9, var8);
         ContentTypeHeader var10;
         if (var9.get(MimeUtil.CONTENT_TYPE) == null) {
            var10 = ContentTypeHeader.parseValue(m[2]);
         } else {
            var10 = var9.getContentType();
         }

         byte[] var11 = var8.toByteArray();
         var7 = new SequenceInputStream(new ByteArrayInputStream(var11), this.processBody(var10, var7));
         OutputStream var12 = var3;
         if (var12 == null) {
            var12 = new ByteArrayOutputStream();
         }

         byte[] var14 = new byte[8192];

         while (true) {
            int var13;
            int var10000 = var13 = var7.read(var14);

            try {
               if (var10000 == -1) {
                  return (Data)(var3 == null
                     ? new OctetStreamData(new ByteArrayInputStream(((ByteArrayOutputStream)var12).toByteArray()), var4, var10.getFullValue())
                     : new ApacheNodeSetData(new XMLSignatureInput((byte[])null)));
               }

               var12.write(var14, 0, var13);
            } catch (Exception var21) {
               throw b(var21);
            }
         }
      } catch (Exception var22) {
         throw new TransformException(var22);
      } finally {
         ResourceUtils.closeQuietly(var7);
      }
   }

   @Override
   public boolean isFeatureSupported(String var1) {
      throw new UnsupportedOperationException();
   }

   protected void processHeaders(MimeHeaders var1, OutputStream var2) throws IOException, TransformException {
   }

   protected InputStream processBody(ContentTypeHeader var1, InputStream var2) throws IOException {
      return new a(var1, var2);
   }

   static {
      String[] var5 = new String[3];
      int var3 = 0;
      String var2 = "DFQjkY]eG\u0010koY\u001ez\bCa`R\u001ce]Bm'S\u001b1I^(FH\tpKXebR\t1\\XzhI\u001ay\bq|s]\u001eyEUfs\u001c/tNUzbR\u001et\bDzfR\u000ewGBe=\u001c\tyM\u0010zbZ\u0018cM^kbX]P\\DidT\u0010tFD(o]\u000e1F_|'E\u0018e\bRmbR]bMUf\u001deMH|(L\u0011pA^3dT\u001cc[U|:\u001e\bb\u0005Q{dU\u00143\u001deMH|(L\u0011pA^3dT\u001cc[U|:\u001e\bb\u0005Q{dU\u00143";
      int var4 = "DFQjkY]eG\u0010koY\u001ez\bCa`R\u001ce]Bm'S\u001b1I^(FH\tpKXebR\t1\\XzhI\u001ay\bq|s]\u001eyEUfs\u001c/tNUzbR\u001et\bDzfR\u000ewGBe=\u001c\tyM\u0010zbZ\u0018cM^kbX]P\\DidT\u0010tFD(o]\u000e1F_|'E\u0018e\bRmbR]bMUf\u001deMH|(L\u0011pA^3dT\u001cc[U|:\u001e\bb\u0005Q{dU\u00143\u001deMH|(L\u0011pA^3dT\u001cc[U|:\u001e\bb\u0005Q{dU\u00143"
         .length();
      char var1 = 130;
      int var0 = -1;

      while (true) {
         String var10002 = a(67, c(var2.substring(++var0, var0 + var1)));
         byte var10001 = -1;
         var5[var3++] = var10002;
         if ((var0 += var1) >= var4) {
            m = var5;
            VALUE_HEADER_CONTENT_TYPE = m[1];
            TRANSFORM_URI = SoapConstants.TRANSFORM_ATTACHMENT_CONTENT;
            CRLF = new byte[]{13, 10};
            return;
         }

         var1 = var2.charAt(var0);
      }
   }

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

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

      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 -> 82;
            case 1 -> 107;
            case 2 -> 115;
            case 3 -> 75;
            case 4 -> 68;
            case 5 -> 127;
            default -> 62;
         });
      }

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