Example usage for org.bouncycastle.mail.smime SMIMEEnvelopedGenerator generate

List of usage examples for org.bouncycastle.mail.smime SMIMEEnvelopedGenerator generate

Introduction

In this page you can find the example usage for org.bouncycastle.mail.smime SMIMEEnvelopedGenerator generate.

Prototype

public MimeBodyPart generate(MimeMessage message, OutputEncryptor encryptor) throws SMIMEException 

Source Link

Document

generate an enveloped object that contains an SMIME Enveloped object using the given provider from the contents of the passed in message

Usage

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();
}