List of usage examples for org.bouncycastle.mail.smime SMIMEEnvelopedGenerator generate
public MimeBodyPart generate(MimeMessage message, OutputEncryptor encryptor) throws SMIMEException
From source file:br.ufpb.dicomflow.integrationAPI.mail.AbstractMailSender.java
License:Open Source License
private Message signAndEcrypt(Message message, X509Certificate signCert, X509Certificate encryptCert, PrivateKey privateKey) throws Exception { MailcapCommandMap mailcap = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); mailcap.addMailcap(//www. j a v a 2 s. com "application/pkcs7-signature;; x-java-content-handler=org.bouncycastle.mail.smime.handlers.pkcs7_signature"); mailcap.addMailcap( "application/pkcs7-mime;; x-java-content-handler=org.bouncycastle.mail.smime.handlers.pkcs7_mime"); mailcap.addMailcap( "application/x-pkcs7-signature;; x-java-content-handler=org.bouncycastle.mail.smime.handlers.x_pkcs7_signature"); mailcap.addMailcap( "application/x-pkcs7-mime;; x-java-content-handler=org.bouncycastle.mail.smime.handlers.x_pkcs7_mime"); mailcap.addMailcap( "multipart/signed;; x-java-content-handler=org.bouncycastle.mail.smime.handlers.multipart_signed"); CommandMap.setDefaultCommandMap(mailcap); /* Create the Signer - SMIMESignedGenerator */ SMIMECapabilityVector capabilities = new SMIMECapabilityVector(); capabilities.addCapability(SMIMECapability.dES_EDE3_CBC); capabilities.addCapability(SMIMECapability.rC2_CBC, 128); capabilities.addCapability(SMIMECapability.dES_CBC); ASN1EncodableVector attributes = new ASN1EncodableVector(); attributes.add(new SMIMEEncryptionKeyPreferenceAttribute( new IssuerAndSerialNumber(new X500Name(((X509Certificate) signCert).getIssuerDN().getName()), ((X509Certificate) signCert).getSerialNumber()))); attributes.add(new SMIMECapabilitiesAttribute(capabilities)); SMIMESignedGenerator signer = new SMIMESignedGenerator(); signer.addSignerInfoGenerator(new JcaSimpleSignerInfoGeneratorBuilder() .setSignedAttributeGenerator(new AttributeTable(attributes)) .build("DSA".equals(privateKey.getAlgorithm()) ? "SHA1withDSA" : "MD5withRSA", privateKey, signCert)); /* Add the list of certs to the generator */ List certList = new ArrayList(); certList.add(signCert); Store certs = new JcaCertStore(certList); signer.addCertificates(certs); /* Sign the message */ MimeMultipart mm = signer.generate((MimeMessage) message); MimeMessage signedMessage = new MimeMessage(message.getSession()); /* Set all original MIME headers in the signed message */ Enumeration headers = ((MimeMessage) message).getAllHeaderLines(); while (headers.hasMoreElements()) { signedMessage.addHeaderLine((String) headers.nextElement()); } /* Set the content of the signed message */ signedMessage.setContent(mm); signedMessage.saveChanges(); /* Create the encrypter - SMIMEEnvelopedGenerator */ SMIMEEnvelopedGenerator encrypter = new SMIMEEnvelopedGenerator(); encrypter.addRecipientInfoGenerator(new JceKeyTransRecipientInfoGenerator(encryptCert)); /* Encrypt the message */ MimeBodyPart encryptedPart = encrypter.generate(signedMessage, new JceCMSContentEncryptorBuilder(CMSAlgorithm.RC2_CBC).build()); /* * Create a new MimeMessage that contains the encrypted and signed * content */ ByteArrayOutputStream out = new ByteArrayOutputStream(); encryptedPart.writeTo(out); MimeMessage encryptedMessage = new MimeMessage(message.getSession(), new ByteArrayInputStream(out.toByteArray())); /* Set all original MIME headers in the encrypted message */ headers = ((MimeMessage) message).getAllHeaderLines(); while (headers.hasMoreElements()) { String headerLine = (String) headers.nextElement(); /* * Make sure not to override any content-* headers from the * original message */ if (!Strings.toLowerCase(headerLine).startsWith("content-")) { encryptedMessage.addHeaderLine(headerLine); } } return encryptedMessage; }
From source file:com.zotoh.crypto.CryptoUte.java
License:Open Source License
/** * @param cert/* w ww. j ava2 s . c o m*/ * @param algo * @param bp * @return * @throws NoSuchAlgorithmException * @throws CertificateEncodingException * @throws GeneralSecurityException */ public static MimeBodyPart smimeEncrypt(Certificate cert, EncryptionAlgo algo, BodyPart bp) throws NoSuchAlgorithmException, CertificateEncodingException, GeneralSecurityException { tstArgIsType("body-part", bp, MimeBodyPart.class); tstObjArg("cert", cert); tstObjArg("algo", algo); SMIMEEnvelopedGenerator gen = new SMIMEEnvelopedGenerator(); Provider prov = Crypto.getInstance().getProvider(); RecipientInfoGenerator g; try { g = new JceKeyTransRecipientInfoGenerator((X509Certificate) cert).setProvider(prov); gen.addRecipientInfoGenerator(g); return gen.generate((MimeBodyPart) bp, new JceCMSContentEncryptorBuilder(algo.getOID()).setProvider(prov).build()); } catch (OperatorCreationException e) { throw new GeneralSecurityException(e); } catch (CMSException e) { throw new GeneralSecurityException(e); } catch (SMIMEException e) { throw new GeneralSecurityException(e); } }
From source file:com.zotoh.crypto.CryptoUte.java
License:Open Source License
/** * @param cert//from w w w . j ava 2 s. c o m * @param algo * @param msg * @return * @throws Exception */ public static MimeBodyPart smimeEncrypt(Certificate cert, EncryptionAlgo algo, MimeMessage msg) throws Exception { tstObjArg("mime-message", msg); tstObjArg("cert", cert); tstObjArg("algo", algo); SMIMEEnvelopedGenerator gen = new SMIMEEnvelopedGenerator(); Provider prov = Crypto.getInstance().getProvider(); RecipientInfoGenerator g = new JceKeyTransRecipientInfoGenerator((X509Certificate) cert).setProvider(prov); gen.addRecipientInfoGenerator(g); return gen.generate(msg, new JceCMSContentEncryptorBuilder(algo.getOID()).setProvider(prov).build()); }
From source file:com.zotoh.crypto.CryptoUte.java
License:Open Source License
/** * @param cert//from w ww . j a v a 2 s.com * @param algo * @param mp * @return * @throws MessagingException * @throws NoSuchAlgorithmException * @throws NoSuchProviderException * @throws GeneralSecurityException * @throws CertificateEncodingException */ public static MimeBodyPart smimeEncrypt(Certificate cert, EncryptionAlgo algo, Multipart mp) throws MessagingException, NoSuchAlgorithmException, NoSuchProviderException, GeneralSecurityException, CertificateEncodingException { tstObjArg("multi-part", mp); tstObjArg("cert", cert); tstObjArg("algo", algo); try { SMIMEEnvelopedGenerator gen = new SMIMEEnvelopedGenerator(); Provider prov = Crypto.getInstance().getProvider(); RecipientInfoGenerator g = new JceKeyTransRecipientInfoGenerator((X509Certificate) cert) .setProvider(prov); gen.addRecipientInfoGenerator(g); MimeMessage mm = newMimeMsg(); mm.setContent(mp); return gen.generate(mm, new JceCMSContentEncryptorBuilder(algo.getOID()).setProvider(prov).build()); } catch (OperatorCreationException e) { throw new GeneralSecurityException(e); } catch (SMIMEException e) { throw new GeneralSecurityException(e); } catch (CMSException e) { throw new GeneralSecurityException(e); } }
From source file:de.mendelson.util.security.BCCryptoHelper.java
/** * @param algorith a algorith alias name, e.g. "3des", wil be translated * into the right IOD number internal/*from w w w.j av a2 s . com*/ */ public MimeBodyPart encrypt(MimeMessage part, Certificate cert, String algorithm) throws Exception { X509Certificate x509Cert = castCertificate(cert); String encAlgOID = this.convertAlgorithmNameToOID(algorithm); SMIMEEnvelopedGenerator generator = new SMIMEEnvelopedGenerator(); generator.addRecipientInfoGenerator(new JceKeyTransRecipientInfoGenerator(x509Cert).setProvider("BC")); if (part == null) { throw new GeneralSecurityException("encrypt: Part is absent"); } MimeBodyPart encData = generator.generate(part, new JceCMSContentEncryptorBuilder(new ASN1ObjectIdentifier(encAlgOID)).setProvider("BC").build()); return encData; }
From source file:de.mendelson.util.security.BCCryptoHelper.java
/** * @param algorith a algorith alias name, e.g. "3des", will be translated * into the right IOD number internal// w ww.ja va2 s.co m */ public MimeBodyPart encrypt(MimeBodyPart part, Certificate cert, String algorithm) throws Exception { X509Certificate x509Cert = castCertificate(cert); String encAlgOID = this.convertAlgorithmNameToOID(algorithm); SMIMEEnvelopedGenerator generator = new SMIMEEnvelopedGenerator(); generator.addRecipientInfoGenerator(new JceKeyTransRecipientInfoGenerator(x509Cert).setProvider("BC")); if (part == null) { throw new GeneralSecurityException("encrypt: Part is absent"); } MimeBodyPart encData = generator.generate(part, new JceCMSContentEncryptorBuilder(new ASN1ObjectIdentifier(encAlgOID)).setProvider("BC").build()); return encData; }
From source file:mitm.common.security.smime.SMIMEBuilderImplTest.java
License:Open Source License
@Test public void testEncryptSignedQuotedPrintableSoftBreaksDirectBC() throws Exception { MimeMessage message = loadMessage("qp-soft-breaks-signed.eml"); SMIMEEnvelopedGenerator envelopedGenerator = new SMIMEEnvelopedGenerator(); JceKeyTransRecipientInfoGenerator infoGenerator = new JceKeyTransRecipientInfoGenerator( encryptionCertificate);/* w w w. j a va 2 s . c om*/ envelopedGenerator.addRecipientInfoGenerator(infoGenerator); JceCMSContentEncryptorBuilder encryptorBuilder = new JceCMSContentEncryptorBuilder( new ASN1ObjectIdentifier("1.2.840.113549.3.7"), 0).setProvider("BC"); MimeBodyPart bodyPart = envelopedGenerator.generate(message, encryptorBuilder.build()); MimeMessage newMessage = new MimeMessage(MailSession.getDefaultSession()); newMessage.setContent(bodyPart.getContent(), bodyPart.getContentType()); newMessage.saveChanges(); File file = new File(tempDir, "testEncryptSignedQuotedPrintableSoftBreaksDirectBC.eml"); FileOutputStream output = new FileOutputStream(file); MailUtils.writeMessage(newMessage, output); newMessage = MailUtils.loadMessage(file); assertEquals(SMIMEHeader.Type.ENCRYPTED, SMIMEHeader.getSMIMEContentType(newMessage)); File opensslOutputFileSigned = new File(tempDir, "testEncryptSignedQuotedPrintableSoftBreaksDirectBC-openssl-signed.eml"); decryptMessage(file, privateKeyEntry.getPrivateKey(), opensslOutputFileSigned); newMessage = MailUtils.loadMessage(opensslOutputFileSigned); assertTrue(newMessage.isMimeType("multipart/signed")); File opensslOutputFile = new File(tempDir, "testEncryptSignedQuotedPrintableSoftBreaksDirectBC-openssl.eml"); verifyMessage(opensslOutputFileSigned, rootCertificate, opensslOutputFile); newMessage = MailUtils.loadMessage(opensslOutputFile); assertTrue(newMessage.isMimeType("text/plain")); assertEquals(SMIMEHeader.Type.NO_SMIME, SMIMEHeader.getSMIMEContentType(newMessage)); }
From source file:net.markenwerk.utils.mail.smime.SmimeUtil.java
License:Open Source License
/** * Encrypts a MIME message and yields a new S/MIME encrypted MIME message. * //from ww w .ja v a 2s . c om * @param session * The {@link Session} that is used in conjunction with the * original {@link MimeMessage}. * @param mimeMessage * The original {@link MimeMessage} to be encrypted. * @param certificate * The {@link X509Certificate} used to obtain the * {@link PublicKey} to encrypt the original message with. * @return The new S/MIME encrypted {@link MimeMessage}. */ public static MimeMessage encrypt(Session session, MimeMessage mimeMessage, X509Certificate certificate) { try { MimeMessage encryptedMimeMessage = new MimeMessage(session); copyHeaders(mimeMessage, encryptedMimeMessage); SMIMEEnvelopedGenerator generator = prepareGenerator(certificate); OutputEncryptor encryptor = prepareEncryptor(); MimeBodyPart encryptedMimeBodyPart = generator.generate(mimeMessage, encryptor); copyContent(encryptedMimeBodyPart, encryptedMimeMessage); copyHeaders(encryptedMimeBodyPart, encryptedMimeMessage); encryptedMimeMessage.saveChanges(); return encryptedMimeMessage; } catch (Exception e) { throw handledException(e); } }
From source file:net.markenwerk.utils.mail.smime.SmimeUtil.java
License:Open Source License
/** * Encrypts a MIME body part and yields a new S/MIME encrypted MIME body * part./*from w w w . j a v a 2 s. co m*/ * * @param mimeBodyPart * The original {@link MimeBodyPart} to be encrypted. * @param certificate * The {@link X509Certificate} used to obtain the * {@link PublicKey} to encrypt the original body part with. * @return The new S/MIME encrypted {@link MimeBodyPart}. */ public static MimeBodyPart encrypt(MimeBodyPart mimeBodyPart, X509Certificate certificate) { try { SMIMEEnvelopedGenerator generator = prepareGenerator(certificate); OutputEncryptor encryptor = prepareEncryptor(); MimeBodyPart encryptedMimeBodyPart = generator.generate(mimeBodyPart, encryptor); return encryptedMimeBodyPart; } catch (Exception e) { throw handledException(e); } }
From source file:org.votingsystem.signature.util.Encryptor.java
License:Open Source License
public byte[] encryptMessage(byte[] bytesToEncrypt, PublicKey publicKey) throws Exception { MimeBodyPart mimeMessage = new MimeBodyPart(); mimeMessage.setText(new String(bytesToEncrypt)); //mimeMessage.setSentDate(new Date());// set the Date: header SMIMEEnvelopedGenerator encryptor = new SMIMEEnvelopedGenerator(); encryptor.addRecipientInfoGenerator( new JceKeyTransRecipientInfoGenerator("".getBytes(), publicKey).setProvider(ContextVS.PROVIDER)); /* Encrypt the message */ MimeBodyPart encryptedPart = encryptor.generate(mimeMessage, new JceCMSContentEncryptorBuilder(CMSAlgorithm.DES_EDE3_CBC).setProvider(ContextVS.PROVIDER) .build());//from w w w.j ava 2 s . com ByteArrayOutputStream baos = new ByteArrayOutputStream(); encryptedPart.writeTo(baos); baos.close(); return baos.toByteArray(); }