You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2018/08/21 06:36:22 UTC

[camel] branch master updated: [CAMEL-12605] First cut at mime envelope entity (#2489)

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new ee42401  [CAMEL-12605] First cut at mime envelope entity (#2489)
ee42401 is described below

commit ee4240151a680db3b474303287b1fc18bfef53fe
Author: William Collins <wc...@redhat.com>
AuthorDate: Tue Aug 21 02:36:19 2018 -0400

    [CAMEL-12605] First cut at mime envelope entity (#2489)
---
 ...natureEntity.java => ApplicationPkcs7Mime.java} | 91 +++++++++-------------
 .../entity/ApplicationPkcs7SignatureEntity.java    |  7 +-
 .../component/as2/api/entity/EntityParser.java     |  2 +-
 3 files changed, 41 insertions(+), 59 deletions(-)

diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7SignatureEntity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7Mime.java
similarity index 53%
copy from components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7SignatureEntity.java
copy to components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7Mime.java
index 179d82b..88d70b6 100644
--- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7SignatureEntity.java
+++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7Mime.java
@@ -22,63 +22,53 @@ import java.io.OutputStream;
 
 import org.apache.camel.component.as2.api.AS2Charset;
 import org.apache.camel.component.as2.api.AS2Header;
-import org.apache.camel.component.as2.api.AS2MediaType;
 import org.apache.camel.component.as2.api.CanonicalOutputStream;
-import org.apache.camel.component.as2.api.util.EntityUtils;
 import org.apache.http.Header;
 import org.apache.http.HeaderIterator;
 import org.apache.http.HttpException;
 import org.apache.http.entity.ContentType;
+import org.apache.http.message.BasicNameValuePair;
 import org.apache.http.util.Args;
+import org.bouncycastle.cms.CMSEnvelopedData;
+import org.bouncycastle.cms.CMSEnvelopedDataGenerator;
 import org.bouncycastle.cms.CMSProcessableByteArray;
-import org.bouncycastle.cms.CMSSignedData;
-import org.bouncycastle.cms.CMSSignedDataGenerator;
 import org.bouncycastle.cms.CMSTypedData;
-
-public class ApplicationPkcs7SignatureEntity extends MimeEntity {
-
-    private static final String CONTENT_DISPOSITION = "attachment; filename=\"smime.p7s\"";
-
-    private static final String CONTENT_DESCRIPTION = "S/MIME Cryptographic Signature";
-
-    private byte[] signature;
-
-    public ApplicationPkcs7SignatureEntity(MimeEntity data, CMSSignedDataGenerator signer, String charset, String contentTransferEncoding, boolean isMainBody) throws HttpException {
-        Args.notNull(data, "Data");
-        Args.notNull(signer, "Signer");
-
-        ContentType contentType = ContentType.parse(EntityUtils.appendParameter(AS2MediaType.APPLICATION_PKCS7_SIGNATURE, "charset",  charset));
-        setContentType(contentType.toString());
-        setContentTransferEncoding(contentTransferEncoding);
+import org.bouncycastle.operator.OutputEncryptor;
+
+public class ApplicationPkcs7Mime extends MimeEntity {
+    
+    private static final String CONTENT_DISPOSITION = "attachment; filename=\"smime.p7m\"";
+    
+    private byte[] encryptedData;
+    
+    public ApplicationPkcs7Mime(MimeEntity entity2Encrypt,
+                                CMSEnvelopedDataGenerator dataGenerator,
+                                OutputEncryptor encryptor,
+                                String encryptedContentTransferEncoding,
+                                boolean isMainBody)
+            throws HttpException {
+        setContentType(ContentType.create("application/pkcs7-mime", new BasicNameValuePair("smime-type", "enveloped-datat"),
+                new BasicNameValuePair("name", "smime.p7m")));
+        setContentTransferEncoding(encryptedContentTransferEncoding);
         addHeader(AS2Header.CONTENT_DISPOSITION, CONTENT_DISPOSITION);
-        addHeader(AS2Header.CONTENT_DESCRIPTION, CONTENT_DESCRIPTION);
         setMainBody(isMainBody);
         try {
-            this.signature = createSignature(data, signer);
+            this.encryptedData = createEncryptedData(entity2Encrypt, dataGenerator, encryptor);
         } catch (Exception e) {
-            throw new HttpException("Failed to create signed data", e);
+            throw new HttpException("Failed to create encrypted data");
         }
     }
-
-    public ApplicationPkcs7SignatureEntity(String charset,
-                                           String contentTransferEncoding,
-                                           byte[] signature,
-                                           boolean isMainBody)
-            throws HttpException {
-        this.signature = signature;
-        ContentType contentType = ContentType
-                .parse(EntityUtils.appendParameter(AS2MediaType.APPLICATION_PKCS7_SIGNATURE, "charset", charset));
-        setContentType(contentType.toString());
-        setContentTransferEncoding(contentTransferEncoding);
+    
+    public ApplicationPkcs7Mime(byte[] encryptedData, String encryptedContentTransferEncoding, boolean isMainBody) {
+        this.encryptedData = Args.notNull(encryptedData, "encryptedData");
+        
+        setContentType(ContentType.create("application/pkcs7-mime", new BasicNameValuePair("smime-type", "enveloped-datat"),
+                new BasicNameValuePair("name", "smime.p7m")));
+        setContentTransferEncoding(encryptedContentTransferEncoding);
         addHeader(AS2Header.CONTENT_DISPOSITION, CONTENT_DISPOSITION);
-        addHeader(AS2Header.CONTENT_DESCRIPTION, CONTENT_DESCRIPTION);
         setMainBody(isMainBody);
     }
-
-    public byte[] getSignature() {
-        return signature;
-    }
-
+    
     @Override
     public void writeTo(OutputStream outstream) throws IOException {
         NoCloseOutputStream ncos = new NoCloseOutputStream(outstream);
@@ -97,29 +87,20 @@ public class ApplicationPkcs7SignatureEntity extends MimeEntity {
                                               // 5.1.1
             }
         }
-
-        // Write out signed data.
-        String transferEncoding = getContentTransferEncoding() == null ? null : getContentTransferEncoding().getValue();
-        try (OutputStream transferEncodedStream = EntityUtils.encode(ncos, transferEncoding)) {
-
-            transferEncodedStream.write(signature);
-        } catch (Exception e) {
-            throw new IOException("Failed to write to output stream", e);
-        }
+        
     }
-
-    private byte[] createSignature(MimeEntity data, CMSSignedDataGenerator signer) throws Exception {
+    
+    private byte[] createEncryptedData(MimeEntity entity2Encrypt, CMSEnvelopedDataGenerator dataGenerator, OutputEncryptor encryptor) throws Exception {
         try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
-            data.writeTo(bos);
+            entity2Encrypt.writeTo(bos);
             bos.flush();
 
             CMSTypedData contentData = new CMSProcessableByteArray(bos.toByteArray());
-            CMSSignedData  signedData = signer.generate(contentData, false);
-            return signedData.getEncoded();
+            CMSEnvelopedData  envelopedData = dataGenerator.generate(contentData, encryptor);
+            return envelopedData.getEncoded();
         } catch (Exception e) {
             throw new Exception("", e);
         }
-
     }
 
 }
diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7SignatureEntity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7SignatureEntity.java
index 179d82b..30f0c95 100644
--- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7SignatureEntity.java
+++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7SignatureEntity.java
@@ -60,12 +60,13 @@ public class ApplicationPkcs7SignatureEntity extends MimeEntity {
         }
     }
 
-    public ApplicationPkcs7SignatureEntity(String charset,
+    public ApplicationPkcs7SignatureEntity(byte[] signature,
+                                           String charset,
                                            String contentTransferEncoding,
-                                           byte[] signature,
                                            boolean isMainBody)
             throws HttpException {
-        this.signature = signature;
+        this.signature = Args.notNull(signature, "signature");
+        
         ContentType contentType = ContentType
                 .parse(EntityUtils.appendParameter(AS2MediaType.APPLICATION_PKCS7_SIGNATURE, "charset", charset));
         setContentType(contentType.toString());
diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/EntityParser.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/EntityParser.java
index e4e74e0..4e86d14 100644
--- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/EntityParser.java
+++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/EntityParser.java
@@ -752,7 +752,7 @@ public final class EntityParser {
 
             String charsetName = charset.toString();
             ApplicationPkcs7SignatureEntity applicationPkcs7SignatureEntity = new ApplicationPkcs7SignatureEntity(
-                    charsetName, contentTransferEncoding, signature, false);
+                    signature, charsetName, contentTransferEncoding, false);
             return applicationPkcs7SignatureEntity;
         } catch (Exception e) {
             ParseException parseException = new ParseException("failed to parse PKCS7 Signature entity");