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");