Author: bago
Date: Thu Mar 31 15:12:10 2011
New Revision: 1087332
URL: http://svn.apache.org/viewvc?rev=1087332&view=rev
Log:
Added forceCRLF parameter (default to true) to DKIMSign and DKIMVerify mailets
(JDKIM-28)
Modified:
james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMSign.java
james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMVerify.java
james/jdkim/trunk/mailets/src/test/java/org/apache/james/jdkim/mailets/DKIMSignTest.java
Modified:
james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMSign.java
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMSign.java?rev=1087332&r1=1087331&r2=1087332&view=diff
==============================================================================
---
james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMSign.java
(original)
+++
james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMSign.java
Thu Mar 31 15:12:10 2011
@@ -21,6 +21,7 @@ package org.apache.james.jdkim.mailets;
import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.io.OutputStream;
import java.security.GeneralSecurityException;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
@@ -43,6 +44,8 @@ import org.apache.james.jdkim.exceptions
import org.apache.mailet.Mail;
import org.apache.mailet.base.GenericMailet;
+import com.sun.mail.util.CRLFOutputStream;
+
/**
* This mailet sign a message using the DKIM protocol
* If the privateKey is encoded using a password then you can pass
@@ -73,14 +76,15 @@ import org.apache.mailet.base.GenericMai
* </mailet>
* </code></pre>
*
- * @version CVS $Revision: 713949 $ $Date: 2008-11-14 08:40:21 +0100 (ven, 14
- * nov 2008) $
- * @since 2.2.0
+ * By default the mailet assume that Javamail will convert LF to CRLF when
sending
+ * so will compute the hash using converted newlines. If you don't want this
+ * behaviout then set forceCRLF attribute to false.
*/
public class DKIMSign extends GenericMailet {
private String signatureTemplate;
private PrivateKey privateKey;
+ private boolean forceCRLF;
/**
* @return the signatureTemplate
@@ -100,6 +104,7 @@ public class DKIMSign extends GenericMai
signatureTemplate = getInitParameter("signatureTemplate");
String privateKeyString = getInitParameter("privateKey");
String privateKeyPassword = getInitParameter("privateKeyPassword",
null);
+ forceCRLF = getInitParameter("forceCRLF", true);
try {
PKCS8Key pkcs8 = new PKCS8Key(new ByteArrayInputStream(
privateKeyString.getBytes()),
@@ -129,8 +134,9 @@ public class DKIMSign extends GenericMai
MimeMessage message = mail.getMessage();
Headers headers = new MimeMessageHeaders(message);
try {
- message.writeTo(new HeaderSkippingOutputStream(bhj
- .getOutputStream()));
+ OutputStream os = new
HeaderSkippingOutputStream(bhj.getOutputStream());
+ if (forceCRLF) os = new CRLFOutputStream(os);
+ message.writeTo(os);
bhj.getOutputStream().close();
} catch (IOException e) {
throw new MessagingException("Exception calculating bodyhash: "
Modified:
james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMVerify.java
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMVerify.java?rev=1087332&r1=1087331&r2=1087332&view=diff
==============================================================================
---
james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMVerify.java
(original)
+++
james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMVerify.java
Thu Mar 31 15:12:10 2011
@@ -20,6 +20,7 @@
package org.apache.james.jdkim.mailets;
import java.io.IOException;
+import java.io.OutputStream;
import java.util.List;
import javax.mail.MessagingException;
@@ -33,6 +34,8 @@ import org.apache.james.jdkim.exceptions
import org.apache.mailet.Mail;
import org.apache.mailet.base.GenericMailet;
+import com.sun.mail.util.CRLFOutputStream;
+
/**
* This mailet verify a message using the DKIM protocol
*
@@ -41,22 +44,28 @@ import org.apache.mailet.base.GenericMai
* <mailet match="All" class="DKIMVerify">
* </mailet>
* </code></pre>
+ *
+ * By default the mailet assume that Javamail will use LF instead of CRLF
+ * so it will verify the hash using converted newlines. If you don't want this
+ * behaviout then set forceCRLF attribute to false.
*/
public class DKIMVerify extends GenericMailet {
public static final String DKIM_AUTH_RESULT_ATTRIBUTE = "jDKIM.AUTHRESULT";
protected DKIMVerifier verifier = null;
+ private boolean forceCRLF;
@Override
public void init() throws MessagingException {
verifier = new DKIMVerifier();
+ forceCRLF = getInitParameter("forceCRLF", true);
}
public void service(Mail mail) throws MessagingException {
try {
MimeMessage message = mail.getMessage();
- List<SignatureRecord> res = verify(verifier, message);
+ List<SignatureRecord> res = verify(verifier, message, forceCRLF);
if (res == null || res.isEmpty()) {
// neutral
mail.setAttribute(DKIM_AUTH_RESULT_ATTRIBUTE, "neutral (no
signatures)");
@@ -79,14 +88,16 @@ public class DKIMVerify extends GenericM
}
- protected static List<SignatureRecord> verify(DKIMVerifier verifier,
MimeMessage message)
+ protected static List<SignatureRecord> verify(DKIMVerifier verifier,
MimeMessage message, boolean forceCRLF)
throws MessagingException, FailException {
Headers headers = new MimeMessageHeaders(message);
BodyHasher bh = verifier.newBodyHasher(headers);
try {
if (bh != null) {
- message.writeTo(new HeaderSkippingOutputStream(bh
- .getOutputStream()));
+ OutputStream os = new HeaderSkippingOutputStream(bh
+ .getOutputStream());
+ if (forceCRLF) os = new CRLFOutputStream(os);
+ message.writeTo(os);
bh.getOutputStream().close();
}
Modified:
james/jdkim/trunk/mailets/src/test/java/org/apache/james/jdkim/mailets/DKIMSignTest.java
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/mailets/src/test/java/org/apache/james/jdkim/mailets/DKIMSignTest.java?rev=1087332&r1=1087331&r2=1087332&view=diff
==============================================================================
---
james/jdkim/trunk/mailets/src/test/java/org/apache/james/jdkim/mailets/DKIMSignTest.java
(original)
+++
james/jdkim/trunk/mailets/src/test/java/org/apache/james/jdkim/mailets/DKIMSignTest.java
Thu Mar 31 15:12:10 2011
@@ -103,7 +103,7 @@ public class DKIMSignTest extends TestCa
private List<SignatureRecord> verify(ByteArrayOutputStream rawMessage,
MockPublicKeyRecordRetriever
mockPublicKeyRecordRetriever)
throws MessagingException, FailException {
- List<SignatureRecord> signs = DKIMVerify.verify(new
DKIMVerifier(mockPublicKeyRecordRetriever), new
MimeMessage(Session.getDefaultInstance(new Properties()), new
ByteArrayInputStream(rawMessage.toByteArray())));
+ List<SignatureRecord> signs = DKIMVerify.verify(new
DKIMVerifier(mockPublicKeyRecordRetriever), new
MimeMessage(Session.getDefaultInstance(new Properties()), new
ByteArrayInputStream(rawMessage.toByteArray())), true);
assertNotNull(signs);
assertEquals(1, signs.size());
return signs;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]