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 <wcoll...@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");