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 SMIMESender { 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) { // args = host, from, subject, to, content Security.addProvider(new DSTC()); //Security.insertProviderAt(new DSTC(), 2); //Security.addProvider(new com.dstc.security.keymanage.keystore.DSTC()); try { // Skapa ett mime-meddelande MimeMessage msg1 = setMessage(args[0], args[1], args[2], args[3], args[4]); System.out.println("DONE MAKING MIME 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 X509Certificate myCert = (X509Certificate)ks.getCertificate("pierre"); X509Certificate[] myCerts = {myCert}; System.out.println("DONE EXTRACTING CERTIFICATE"); // Signera SMIMESignature sig = new SMIMESignature(); sig.initSign("SHA-1", privKey, myCerts, true); sig.setMessage(msg1); MimeMessage msg2 = sig.sign(); System.out.println("DONE SIGNING"); // Kryptera - Pierre fuskar lite med init av rand så går det fortare :) SecureRandom rand = new SecureRandom(new Long(System.currentTimeMillis()).toString().getBytes()); SMIMECipher cipher = new SMIMECipher(); cipher.initEncrypt(rand, "RC2", myCerts); //cipher.initEncrypt(rand, "DESede", myCerts); cipher.setMessage(msg2); MimeMessage msg3 = cipher.encrypt(); System.out.println("DONE ENCRYPTING"); // Sänd Transport.send(msg3); System.out.println("DONE MAKING TRANSPORT"); } catch (Exception e) { e.printStackTrace(); } } private static MimeMessage setMessage(String host, String from, String subject, String to, String content) { try { // Skapa en session Properties props = new Properties(); props.put("mail.smtp.host", host); Session session = Session.getDefaultInstance(props, null); MimeMessage msg = new MimeMessage(Session.getDefaultInstance(null, null)); InternetHeaders hdrs = new InternetHeaders(); hdrs.addHeader("Content-Type", "text/plain; charset=us-ascii"); hdrs.addHeader("Content-Transfer-Encoding", "7bit"); MimeBodyPart part = new MimeBodyPart(hdrs, content.getBytes()); msg.setContent(part.getContent(), "text/plain"); msg.setHeader("Content-Type", "text/plain; charset=us-ascii"); msg.setHeader("Content-Transfer-Encoding", "7bit"); msg.setSubject(subject); msg.setFrom(new InternetAddress(from)); InternetAddress[] address = {new InternetAddress(to)}; msg.setRecipients(Message.RecipientType.TO, address); return msg; } catch (Exception e) { e.printStackTrace(); return null; } } }