import java.io.*; import java.util.*; import java.security.*; import java.security.cert.*; import javax.activation.*; import javax.mail.*; import javax.mail.internet.*; import com.dstc.security.smime.*; import com.dstc.security.provider.DSTC; public class SMIMEReceiver { private static final char[] ksPasswd = {'a', 'b', 'c', 'd', 'e', 'f'}; private static final char[] keyPasswd = {'f', 'e', 'd', 'c', 'b', 'a'}; public static void main(String[] args) { Security.addProvider(new DSTC()); try { // Hämta ett mime-meddelande MimeMessage msg1 = getMessage(args[0], args[1], args[2]); System.out.println("DONE GETTING MESSAGE"); // Läs in privata nyckeln - måste vara initierad med RSA KeyStore ks = KeyStore.getInstance("JKS"); BufferedInputStream bis = new BufferedInputStream(new FileInputStream("keystore")); ks.load(bis, ksPasswd); PrivateKey privKey = (PrivateKey) ks.getKey("pierre", keyPasswd); System.out.println("DONE LOADING KEY FROM KEYSTORE"); // Extrahera certifikatet och lägg in det som pålitligt (här kan det givetvis vara flera :), root-certifikatet finns på nätet X509Certificate myCert = (X509Certificate)ks.getCertificate("pierre"); Vector trustedCerts = new Vector(); trustedCerts.add(myCert); System.out.println("DONE ADDING TRUSTED CERTIFICATES"); // Dekryptera! SMIMECipher cipher = new SMIMECipher(); cipher.initDecrypt(privKey, myCert); cipher.setMessage(msg1); DecryptionResult decRes = cipher.decrypt(); MimeMessage msg2 = decRes.getMessage(); System.out.println("DONE DECRYPTING"); // Verifiera SMIMESignature sig = new SMIMESignature(); sig.initVerify(trustedCerts, null); sig.setMessage(msg2); VerificationResult res = sig.verify(); MimeMessage msg3 = res.getMessage(); System.out.println("DONE VERIFYING"); // Skriv ut System.out.println(msg3.getContent() + "\n"); } catch (Exception e) { e.printStackTrace(); } } private static MimeMessage getMessage(String host, String username, String password) { try { // Skapa en session Properties props = new Properties(); Session session = Session.getDefaultInstance(props, null); // Hämta affär :) Store store = session.getStore("pop3"); store.connect(host, username, password); // Hämta katalog Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); // Hämta meddelande Message messages[] = folder.getMessages(); // Stäng rubbet //folder.close(false); //store.close(); return (MimeMessage)messages[0]; } catch(Exception e) { e.printStackTrace(); return null; } } }