aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/spongycastle/mail/src/main/java/org/spongycastle/mail/smime/examples/CreateLargeEncryptedMail.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/spongycastle/mail/src/main/java/org/spongycastle/mail/smime/examples/CreateLargeEncryptedMail.java')
-rw-r--r--libraries/spongycastle/mail/src/main/java/org/spongycastle/mail/smime/examples/CreateLargeEncryptedMail.java105
1 files changed, 105 insertions, 0 deletions
diff --git a/libraries/spongycastle/mail/src/main/java/org/spongycastle/mail/smime/examples/CreateLargeEncryptedMail.java b/libraries/spongycastle/mail/src/main/java/org/spongycastle/mail/smime/examples/CreateLargeEncryptedMail.java
new file mode 100644
index 000000000..5fc7663a9
--- /dev/null
+++ b/libraries/spongycastle/mail/src/main/java/org/spongycastle/mail/smime/examples/CreateLargeEncryptedMail.java
@@ -0,0 +1,105 @@
+package org.bouncycastle.mail.smime.examples;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.security.KeyStore;
+import java.security.cert.Certificate;
+import java.security.cert.X509Certificate;
+import java.util.Properties;
+
+import javax.activation.DataHandler;
+import javax.activation.FileDataSource;
+import javax.mail.Address;
+import javax.mail.Message;
+import javax.mail.Session;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+
+import org.bouncycastle.cms.CMSAlgorithm;
+import org.bouncycastle.cms.jcajce.JceCMSContentEncryptorBuilder;
+import org.bouncycastle.cms.jcajce.JceKeyTransRecipientInfoGenerator;
+import org.bouncycastle.mail.smime.SMIMEEnvelopedGenerator;
+
+/**
+ * a simple example that creates a single encrypted mail message.
+ * <p>
+ * The key store can be created using the class in
+ * org.bouncycastle.jce.examples.PKCS12Example - the program expects only one
+ * key to be present in the key file.
+ * <p>
+ * Note: while this means that both the private key is available to
+ * the program, the private key is retrieved from the keystore only for
+ * the purposes of locating the corresponding public key, in normal circumstances
+ * you would only be doing this with a certificate available.
+ */
+public class CreateLargeEncryptedMail
+{
+ public static void main(
+ String args[])
+ throws Exception
+ {
+ if (args.length != 3)
+ {
+ System.err.println("usage: CreateLargeEncryptedMail pkcs12Keystore password inputFile");
+ System.exit(0);
+ }
+
+ //
+ // Open the key store
+ //
+ KeyStore ks = KeyStore.getInstance("PKCS12", "BC");
+ String keyAlias = ExampleUtils.findKeyAlias(ks, args[0], args[1].toCharArray());
+
+ Certificate[] chain = ks.getCertificateChain(keyAlias);
+
+ //
+ // create the generator for creating an smime/encrypted message
+ //
+ SMIMEEnvelopedGenerator gen = new SMIMEEnvelopedGenerator();
+
+ gen.addRecipientInfoGenerator(new JceKeyTransRecipientInfoGenerator((X509Certificate)chain[0]).setProvider("BC"));
+
+ //
+ // create a subject key id - this has to be done the same way as
+ // it is done in the certificate associated with the private key
+ // version 3 only.
+ //
+ /*
+ MessageDigest dig = MessageDigest.getInstance("SHA1", "BC");
+
+ dig.update(cert.getPublicKey().getEncoded());
+
+ gen.addKeyTransRecipient(cert.getPublicKey(), dig.digest());
+ */
+
+ //
+ // create the base for our message
+ //
+ MimeBodyPart msg = new MimeBodyPart();
+
+ msg.setDataHandler(new DataHandler(new FileDataSource(new File(args[2]))));
+ msg.setHeader("Content-Type", "application/octet-stream");
+ msg.setHeader("Content-Transfer-Encoding", "binary");
+
+ MimeBodyPart mp = gen.generate(msg, new JceCMSContentEncryptorBuilder(CMSAlgorithm.RC2_CBC).setProvider("BC").build());
+
+ //
+ // Get a Session object and create the mail message
+ //
+ Properties props = System.getProperties();
+ Session session = Session.getDefaultInstance(props, null);
+
+ Address fromUser = new InternetAddress("\"Eric H. Echidna\"<eric@bouncycastle.org>");
+ Address toUser = new InternetAddress("example@bouncycastle.org");
+
+ MimeMessage body = new MimeMessage(session);
+ body.setFrom(fromUser);
+ body.setRecipient(Message.RecipientType.TO, toUser);
+ body.setSubject("example encrypted message");
+ body.setContent(mp.getContent(), mp.getContentType());
+ body.saveChanges();
+
+ body.writeTo(new FileOutputStream("encrypted.message"));
+ }
+}