I've created a prototype, in Java that creates an s/mime file, and now I need to convert that to the equivalent of what the "binary" switch does when using openssl. The command in openssl is:
openssl smime -binary -sign -passin "pass:MyPassword" -signer cert.pem -inkey key.pem -in DocumentToSign.txt -out SignedDocument.der -outform DER What I have now in Java produces a PEM formatted s/mime file. Here is the Java code so fa using bouncy castle 1.4.7r: SMIMESignedGenerator gen = new SMIMESignedGenerator(); // Note: If I set the content transfer encoding to "binary" it only makes the main content binary and not the whole s/mime file. // gen.setContentTransferEncoding("binary"); Store certs = new JcaCertStore(certList); SignerInfoGenerator sig = new JcaSimpleSignerInfoGeneratorBuilder().setProvider("BC").build("SHA1WithRSA", signKP.getPrivate(), signCert); gen.addSignerInfoGenerator(sig); gen.addCertificates(certs); Properties props = System.getProperties(); Session session = Session.getDefaultInstance(props); MimeMessage body = new MimeMessage(session); MimeBodyPart part1 = new MimeBodyPart(); part1.setText(msgText); // msgText is the contents of a file to sign into an s/mime file. MimeMultipart mp = gen.generate(part1); body.setContent(mp, mp.getContentType()); body.saveChanges(); body.writeTo(System.out); // at this point I get a PEM looking s/mime file. What I want to do is encode the WHOLE s/mime set of bytes into binary the way the "binary" switch does on the "openssl smime binary" invocation does. Can anyone provide any help here? Is it just a matter of stripping CR and or LF bytes out of the file? Bart