diff options
Diffstat (limited to 'libraries/spongycastle/mail/src/main/java/org/spongycastle/mail/smime/examples/ReadEncryptedMail.java')
-rw-r--r-- | libraries/spongycastle/mail/src/main/java/org/spongycastle/mail/smime/examples/ReadEncryptedMail.java | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/libraries/spongycastle/mail/src/main/java/org/spongycastle/mail/smime/examples/ReadEncryptedMail.java b/libraries/spongycastle/mail/src/main/java/org/spongycastle/mail/smime/examples/ReadEncryptedMail.java new file mode 100644 index 000000000..a180994f9 --- /dev/null +++ b/libraries/spongycastle/mail/src/main/java/org/spongycastle/mail/smime/examples/ReadEncryptedMail.java @@ -0,0 +1,94 @@ +package org.bouncycastle.mail.smime.examples; + +import java.io.FileInputStream; +import java.security.KeyStore; +import java.security.PrivateKey; +import java.security.cert.X509Certificate; +import java.util.Enumeration; +import java.util.Properties; + +import javax.mail.Session; +import javax.mail.internet.MimeBodyPart; +import javax.mail.internet.MimeMessage; + +import org.bouncycastle.cms.RecipientId; +import org.bouncycastle.cms.RecipientInformation; +import org.bouncycastle.cms.RecipientInformationStore; +import org.bouncycastle.cms.jcajce.JceKeyTransEnvelopedRecipient; +import org.bouncycastle.cms.jcajce.JceKeyTransRecipientId; +import org.bouncycastle.mail.smime.SMIMEEnveloped; +import org.bouncycastle.mail.smime.SMIMEUtil; + +/** + * a simple example that reads an encrypted email. + * <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. + */ +public class ReadEncryptedMail +{ + public static void main( + String args[]) + throws Exception + { + if (args.length != 2) + { + System.err.println("usage: ReadEncryptedMail pkcs12Keystore password"); + System.exit(0); + } + + // + // Open the key store + // + KeyStore ks = KeyStore.getInstance("PKCS12", "BC"); + + ks.load(new FileInputStream(args[0]), args[1].toCharArray()); + + Enumeration e = ks.aliases(); + String keyAlias = null; + + while (e.hasMoreElements()) + { + String alias = (String)e.nextElement(); + + if (ks.isKeyEntry(alias)) + { + keyAlias = alias; + } + } + + if (keyAlias == null) + { + System.err.println("can't find a private key!"); + System.exit(0); + } + + // + // find the certificate for the private key and generate a + // suitable recipient identifier. + // + X509Certificate cert = (X509Certificate)ks.getCertificate(keyAlias); + RecipientId recId = new JceKeyTransRecipientId(cert); + + // + // Get a Session object with the default properties. + // + Properties props = System.getProperties(); + + Session session = Session.getDefaultInstance(props, null); + + MimeMessage msg = new MimeMessage(session, new FileInputStream("encrypted.message")); + + SMIMEEnveloped m = new SMIMEEnveloped(msg); + + RecipientInformationStore recipients = m.getRecipientInfos(); + RecipientInformation recipient = recipients.get(recId); + + MimeBodyPart res = SMIMEUtil.toMimeBodyPart(recipient.getContent(new JceKeyTransEnvelopedRecipient((PrivateKey)ks.getKey(keyAlias, null)).setProvider("BC"))); + + System.out.println("Message Contents"); + System.out.println("----------------"); + System.out.println(res.getContent()); + } +} |