List of usage examples for org.bouncycastle.mail.smime SMIMEEnvelopedGenerator addRecipientInfoGenerator
public void addRecipientInfoGenerator(RecipientInfoGenerator recipientInfoGen) throws IllegalArgumentException
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(//from w w w.ja va 2 s .c o m "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/*from w ww .j a v a 2 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/* ww w . j a va 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 www .j a v a 2 s . co m*/ * @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/*ww w .ja va2 s. co m*/ */ 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/* ww w . j av a2 s.c o 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);//from ww w . j a v a2s. com 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
private static SMIMEEnvelopedGenerator prepareGenerator(X509Certificate certificate) throws CertificateEncodingException { JceKeyTransRecipientInfoGenerator infoGenerator = new JceKeyTransRecipientInfoGenerator(certificate); infoGenerator.setProvider(BouncyCastleProvider.PROVIDER_NAME); SMIMEEnvelopedGenerator generator = new SMIMEEnvelopedGenerator(); generator.addRecipientInfoGenerator(infoGenerator); return generator; }
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 ww. ja v a 2 s .co m ByteArrayOutputStream baos = new ByteArrayOutputStream(); encryptedPart.writeTo(baos); baos.close(); return baos.toByteArray(); }
From source file:org.votingsystem.signature.util.Encryptor.java
License:Open Source License
public static byte[] encryptMessage(byte[] text, X509Certificate receiverCert, Header... headers) throws Exception { MimeMessage mimeMessage = new MimeMessage(ContextVS.MAIL_SESSION); mimeMessage.setText(new String(text, "UTF-8")); // set the Date: header //mimeMessage.setSentDate(new Date()); if (headers != null) { for (Header header : headers) { if (header != null) mimeMessage.setHeader(header.getName(), header.getValue()); }/* w w w .ja v a 2s . c o m*/ } SMIMEEnvelopedGenerator encryptor = new SMIMEEnvelopedGenerator(); encryptor.addRecipientInfoGenerator( new JceKeyTransRecipientInfoGenerator(receiverCert).setProvider(ContextVS.PROVIDER)); /* Encrypt the message */ MimeBodyPart encryptedPart = encryptor.generate(mimeMessage, new JceCMSContentEncryptorBuilder(CMSAlgorithm.DES_EDE3_CBC).setProvider(ContextVS.PROVIDER) .build()); ByteArrayOutputStream baos = new ByteArrayOutputStream(); encryptedPart.writeTo(baos); baos.close(); return baos.toByteArray(); }