X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Fcrypto%2FSMIME.java;h=de39f5a190793e267e16828f027d9cbcba86e220;hb=3238dff5b3beca228359b370bc104f48d6247632;hp=321a4df63a987af9f53193838af6839e68770b3f;hpb=aa5723dbb64ec8efa63909d39ff72364f0a5ee96;p=gigi.git diff --git a/src/org/cacert/gigi/crypto/SMIME.java b/src/org/cacert/gigi/crypto/SMIME.java index 321a4df6..de39f5a1 100644 --- a/src/org/cacert/gigi/crypto/SMIME.java +++ b/src/org/cacert/gigi/crypto/SMIME.java @@ -45,6 +45,7 @@ public class SMIME { } public static void smime(String contents, PrivateKey pKey, X509Certificate c, PrintWriter to) throws IOException, GeneralSecurityException { + contents = normalizeNewlinesToCRLF(contents); Signature signature = Signature.getInstance("SHA1WithRSA"); signature.initSign(pKey); @@ -75,25 +76,29 @@ public class SMIME { mimeEncode(contents, PEM.formatBase64(bOut.toByteArray()), to); } + private static String normalizeNewlinesToCRLF(String contents) { + return contents.replace("\r\n", "\r").replace("\r", "\n").replace("\n", "\r\n"); + } + private static Random r = new Random(); private static void mimeEncode(String contents, String signature, PrintWriter to) { String boundary = generateBoundary(contents, null); - to.println("MIME-Version: 1.0"); - to.println("Content-Type: multipart/signed; protocol=\"application/x-pkcs7-signature\"; micalg=\"sha1\"; boundary=\"" + boundary + "\""); - to.println(""); - to.println("This is an S/MIME signed message"); - to.println(""); - to.println("--" + boundary); - to.println(contents); - to.println("--" + boundary); - to.println("Content-Type: application/x-pkcs7-signature; name=\"smime.p7s\""); - to.println("Content-Transfer-Encoding: base64"); - to.println("Content-Disposition: attachment; filename=\"smime.p7s\""); - to.println(""); - to.println(signature); - to.println(); - to.println("--" + boundary + "--"); + to.print("MIME-Version: 1.0\r\n"); + to.print("Content-Type: multipart/signed; protocol=\"application/x-pkcs7-signature\"; micalg=\"sha1\"; boundary=\"" + boundary + "\"\r\n"); + to.print("\r\n"); + to.print("This is an S/MIME signed message\r\n"); + to.print("\r\n"); + to.print("--" + boundary + "\r\n"); + to.print(contents + "\r\n"); + to.print("--" + boundary + "\r\n"); + to.print("Content-Type: application/x-pkcs7-signature; name=\"smime.p7s\"\r\n"); + to.print("Content-Transfer-Encoding: base64\r\n"); + to.print("Content-Disposition: attachment; filename=\"smime.p7s\"\r\n"); + to.print("\r\n"); + to.print(signature + "\r\n"); + to.print("\r\n"); + to.print("--" + boundary + "--\r\n"); } private static String generateBoundary(String contents, String contents2) {