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

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

Introduction

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

Prototype

public void addRecipientInfoGenerator(RecipientInfoGenerator recipientInfoGen) throws IllegalArgumentException 

Source Link

Document

add a recipientInfoGenerator.

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