Author: bago
Date: Sun Oct 11 10:19:13 2009
New Revision: 824049
URL: http://svn.apache.org/viewvc?rev=824049&view=rev
Log:
jDKIM refactoring: just looking for a better architecture/organization.
Added:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/BodyHasher.java
(with props)
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/Headers.java
(contents, props changed)
- copied, changed from r822372,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/Headers.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/PublicKeyRecord.java
(contents, props changed)
- copied, changed from r823845,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/PublicKeyRecord.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/PublicKeyRecordRetriever.java
(contents, props changed)
- copied, changed from r822477,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/PublicKeyRecordRetriever.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/SignatureRecord.java
(contents, props changed)
- copied, changed from r822372,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/SignatureRecord.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java
(contents, props changed)
- copied, changed from r822372,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/FailException.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java
(contents, props changed)
- copied, changed from r822372,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/PermFailException.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/TempFailException.java
(contents, props changed)
- copied, changed from r822372,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/TempFailException.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/BodyHasherImpl.java
(contents, props changed)
- copied, changed from r822372,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/BodyHashJob.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/DNSPublicKeyRecordRetriever.java
(contents, props changed)
- copied, changed from r823215,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DNSPublicKeyRecordRetriever.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/Message.java
(contents, props changed)
- copied, changed from r822477,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/Message.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/MultiplexingPublicKeyRecordRetriever.java
(contents, props changed)
- copied, changed from r822372,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetriever.java
Removed:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/BodyHashJob.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/CodecUtil.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DNSPublicKeyRecordRetriever.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/FailException.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/Headers.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/Message.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetriever.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/PermFailException.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/PublicKeyRecord.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/PublicKeyRecordRetriever.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/SignatureRecord.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/TempFailException.java
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/QPTest.java
Modified:
james/jdkim/trunk/mailets/src/main/java/org/apache/james/jdkim/mailets/DKIMSign.java
james/jdkim/trunk/mailets/src/test/java/org/apache/james/jdkim/mailets/DKIMSignTest.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMCommon.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMSigner.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/PublicKeyRecordImpl.java
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/SignatureRecordImpl.java
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/DKIMVerifierTest.java
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/FileBasedTest.java
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MessageTest.java
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MockPublicKeyRecordRetriever.java
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetrieverTest.java
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/PublicKeyRecordTest.java
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordImplTest.java
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordTest.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=824049&r1=824048&r2=824049&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
Sun Oct 11 10:19:13 2009
@@ -34,12 +34,11 @@
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
-import org.apache.james.jdkim.BodyHashJob;
-import org.apache.james.jdkim.DKIMCommon;
import org.apache.james.jdkim.DKIMSigner;
-import org.apache.james.jdkim.Headers;
-import org.apache.james.jdkim.PermFailException;
-import org.apache.james.jdkim.SignatureRecord;
+import org.apache.james.jdkim.api.BodyHasher;
+import org.apache.james.jdkim.api.Headers;
+import org.apache.james.jdkim.api.SignatureRecord;
+import org.apache.james.jdkim.exceptions.PermFailException;
import org.apache.mailet.Mail;
import org.apache.mailet.base.GenericMailet;
@@ -114,7 +113,7 @@
DKIMSigner signer = new DKIMSigner(signatureTemplate,
privateKey);
SignatureRecord signRecord =
signer.newSignatureRecord(signatureTemplate);
try {
- BodyHashJob bhj =
DKIMCommon.prepareBodyHashJob(signRecord, signatureTemplate);
+ BodyHasher bhj = signer.newBodyHasher(signRecord);
MimeMessage message = mail.getMessage();
Headers headers = new MimeMessageHeaders(message);
try {
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=824049&r1=824048&r2=824049&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
Sun Oct 11 10:19:13 2009
@@ -34,9 +34,9 @@
import junit.framework.TestCase;
import org.apache.james.jdkim.DKIMVerifier;
-import org.apache.james.jdkim.FailException;
import org.apache.james.jdkim.MockPublicKeyRecordRetriever;
-import org.apache.james.jdkim.PermFailException;
+import org.apache.james.jdkim.exceptions.FailException;
+import org.apache.james.jdkim.exceptions.PermFailException;
import org.apache.mailet.Mail;
import org.apache.mailet.Mailet;
import org.apache.mailet.base.test.FakeMail;
Modified:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMCommon.java
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMCommon.java?rev=824049&r1=824048&r2=824049&view=diff
==============================================================================
--- james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMCommon.java
(original)
+++ james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMCommon.java
Sun Oct 11 10:19:13 2009
@@ -22,8 +22,6 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import java.security.Signature;
import java.security.SignatureException;
import java.util.HashMap;
@@ -31,18 +29,14 @@
import java.util.List;
import java.util.Map;
-import org.apache.james.jdkim.canon.DebugOutputStream;
-import org.apache.james.jdkim.canon.DigestOutputStream;
-import org.apache.james.jdkim.canon.LimitedOutputStream;
-import org.apache.james.jdkim.canon.RelaxedBodyCanonicalizer;
-import org.apache.james.jdkim.canon.SimpleBodyCanonicalizer;
-import org.apache.james.jdkim.tagvalue.SignatureRecordImpl;
+import org.apache.james.jdkim.api.Headers;
+import org.apache.james.jdkim.api.SignatureRecord;
-public class DKIMCommon {
+public abstract class DKIMCommon {
private static final boolean DEEP_DEBUG = false;
- public static void updateSignature(Signature signature, boolean relaxed,
+ protected static void updateSignature(Signature signature, boolean
relaxed,
CharSequence header, String fv) throws
SignatureException {
if (relaxed) {
if (DEEP_DEBUG)
@@ -99,22 +93,6 @@
signatureStub);
}
- public SignatureRecord newSignatureRecord(String record) {
- return new SignatureRecordImpl(record);
- }
-
- static OutputStream prepareCanonicalizerOutputStream(int limit,
- boolean relaxedBody, OutputStream dout) {
- OutputStream out = dout;
- if (limit != -1)
- out = new LimitedOutputStream(out, limit);
- if (relaxedBody)
- out = new RelaxedBodyCanonicalizer(out);
- else
- out = new SimpleBodyCanonicalizer(out);
- return out;
- }
-
public static void streamCopy(InputStream bodyIs, OutputStream out)
throws IOException {
byte[] buffer = new byte[2048];
@@ -126,34 +104,4 @@
out.close();
}
- public static BodyHashJob prepareBodyHashJob(SignatureRecord sign,
- String f) throws NoSuchAlgorithmException {
- MessageDigest md =
MessageDigest.getInstance(sign.getHashAlgo().toString());
-
- BodyHashJob bhj = new BodyHashJob();
-
- int limit = sign.getBodyHashLimit();
-
- // TODO enhance this to use a lookup service.
- boolean relaxedBody = "relaxed".equals(sign
- .getBodyCanonicalisationMethod());
-
- DigestOutputStream dout = new DigestOutputStream(md);
-
- OutputStream out = dout;
- if (DEEP_DEBUG) out = new DebugOutputStream(out);
- out = DKIMCommon.prepareCanonicalizerOutputStream(limit,
- relaxedBody, out);
-
- bhj.setSignatureRecord(sign);
- bhj.setDigestOutputStream(dout);
- bhj.setOutputStream(out);
- bhj.setField(f);
- return bhj;
- }
-
- public DKIMCommon() {
- super();
- }
-
}
\ No newline at end of file
Modified:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMSigner.java
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMSigner.java?rev=824049&r1=824048&r2=824049&view=diff
==============================================================================
--- james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMSigner.java
(original)
+++ james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMSigner.java
Sun Oct 11 10:19:13 2009
@@ -32,6 +32,14 @@
import java.util.List;
import org.apache.commons.codec.binary.Base64;
+import org.apache.james.jdkim.api.BodyHasher;
+import org.apache.james.jdkim.api.Headers;
+import org.apache.james.jdkim.api.SignatureRecord;
+import org.apache.james.jdkim.exceptions.FailException;
+import org.apache.james.jdkim.exceptions.PermFailException;
+import org.apache.james.jdkim.impl.BodyHasherImpl;
+import org.apache.james.jdkim.impl.Message;
+import org.apache.james.jdkim.tagvalue.SignatureRecordImpl;
import org.apache.james.mime4j.MimeException;
public class DKIMSigner extends DKIMCommon {
@@ -43,7 +51,15 @@
this.privateKey = privateKey;
this.signatureRecordTemplate = signatureRecordTemplate;
}
-
+
+ public SignatureRecord newSignatureRecord(String record) {
+ return new SignatureRecordImpl(record);
+ }
+
+ public BodyHasher newBodyHasher(SignatureRecord signRecord) throws
NoSuchAlgorithmException {
+ return new BodyHasherImpl(signRecord);
+ }
+
public String sign(InputStream is)
throws IOException, FailException {
Message message;
@@ -64,7 +80,7 @@
*/
SignatureRecord srt =
newSignatureRecord(signatureRecordTemplate);
try {
- BodyHashJob bhj =
DKIMCommon.prepareBodyHashJob(srt, "DKIM-Signature: "+signatureRecordTemplate);
+ BodyHasher bhj = newBodyHasher(srt);
// simultaneous computation of all the hashes.
DKIMCommon.streamCopy(message.getBodyInputStream(), bhj.getOutputStream());
@@ -79,9 +95,9 @@
}
}
- public String sign(Headers message, BodyHashJob bhj)
+ public String sign(Headers message, BodyHasher bhj)
throws PermFailException {
- byte[] computedHash = bhj.getDigesterOutputStream().getDigest();
+ byte[] computedHash = bhj.getDigest();
String newField = "DKIM-Signature:
"+signatureRecordTemplate.replaceAll("bh=[^;]*", "bh="+new
String(Base64.encodeBase64(computedHash)));
List headers = bhj.getSignatureRecord().getHeaders();
Modified:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java?rev=824049&r1=824048&r2=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java
(original)
+++
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java
Sun Oct 11 10:19:13 2009
@@ -27,14 +27,28 @@
import java.security.Signature;
import java.security.SignatureException;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import org.apache.james.jdkim.api.BodyHasher;
+import org.apache.james.jdkim.api.Headers;
+import org.apache.james.jdkim.api.PublicKeyRecord;
+import org.apache.james.jdkim.api.PublicKeyRecordRetriever;
+import org.apache.james.jdkim.api.SignatureRecord;
import org.apache.james.jdkim.canon.CompoundOutputStream;
+import org.apache.james.jdkim.exceptions.FailException;
+import org.apache.james.jdkim.exceptions.PermFailException;
+import org.apache.james.jdkim.exceptions.TempFailException;
+import org.apache.james.jdkim.impl.BodyHasherImpl;
+import org.apache.james.jdkim.impl.DNSPublicKeyRecordRetriever;
+import org.apache.james.jdkim.impl.Message;
+import org.apache.james.jdkim.impl.MultiplexingPublicKeyRecordRetriever;
import org.apache.james.jdkim.tagvalue.PublicKeyRecordImpl;
+import org.apache.james.jdkim.tagvalue.SignatureRecordImpl;
import org.apache.james.mime4j.MimeException;
public class DKIMVerifier extends DKIMCommon {
@@ -49,11 +63,18 @@
this.publicKeyRecordRetriever = publicKeyRecordRetriever;
}
-
protected PublicKeyRecord newPublicKeyRecord(String record) {
return new PublicKeyRecordImpl(record);
}
+ public SignatureRecord newSignatureRecord(String record) {
+ return new SignatureRecordImpl(record);
+ }
+
+ public BodyHasher newBodyHasher(SignatureRecord signRecord) throws
NoSuchAlgorithmException {
+ return new BodyHasherImpl(signRecord);
+ }
+
protected PublicKeyRecordRetriever getPublicKeyRecordRetriever() throws
PermFailException {
return publicKeyRecordRetriever;
}
@@ -83,7 +104,7 @@
}
/**
- * @see
org.apache.james.jdkim.PublicKeyRecord#apply(org.apache.james.jdkim.SignatureRecord)
+ * @see
org.apache.james.jdkim.api.PublicKeyRecord#apply(org.apache.james.jdkim.api.SignatureRecord)
*/
public static void apply(PublicKeyRecord pkr, SignatureRecord sign) {
if
(!pkr.getGranularityPattern().matcher(sign.getIdentityLocalPart()).matches()) {
@@ -162,7 +183,7 @@
// For each DKIM-signature we prepare an hashjob.
// We calculate all hashes concurrently so to read
// the inputstream only once.
- List/* BodyHashJob */ bodyHashJobs = new LinkedList();
+ Map/* String, BodyHashJob */ bodyHashJobs = new
HashMap();
List/* OutputStream */ outputStreams = new LinkedList();
Map/* String, Exception */ signatureExceptions = new
Hashtable();
for (Iterator i = fields.iterator(); i.hasNext(); ) {
@@ -195,9 +216,9 @@
// we track all
canonicalizations+limit+bodyHash we
// see so to be able to check
all of them in a single stream run.
- BodyHashJob bhj =
DKIMCommon.prepareBodyHashJob(sign, fval);
+ BodyHasher bhj =
newBodyHasher(sign);
- bodyHashJobs.add(bhj);
+ bodyHashJobs.put(fval, bhj);
outputStreams.add(bhj.getOutputStream());
} else {
@@ -235,14 +256,15 @@
DKIMCommon.streamCopy(message.getBodyInputStream(), o);
List/* BodyHashJob */ verifiedSignatures = new
LinkedList();
- for (Iterator i = bodyHashJobs.iterator(); i.hasNext();
) {
- BodyHashJob bhj = (BodyHashJob) i.next();
+ for (Iterator i = bodyHashJobs.keySet().iterator();
i.hasNext(); ) {
+ String fval = (String) i.next();
+ BodyHasher bhj = (BodyHasher)
bodyHashJobs.get(fval);
- byte[] computedHash =
bhj.getDigesterOutputStream().getDigest();
+ byte[] computedHash = bhj.getDigest();
byte[] expectedBodyHash =
bhj.getSignatureRecord().getBodyHash();
if (!Arrays.equals(expectedBodyHash,
computedHash)) {
-
signatureExceptions.put(bhj.getField().toString(), new
PermFailException("Computed bodyhash is different from the expected one"));
+ signatureExceptions.put(fval, new
PermFailException("Computed bodyhash is different from the expected one"));
} else {
verifiedSignatures.add(bhj);
}
@@ -261,7 +283,7 @@
System.out.println("DKIM-Error:
"+((FailException) signatureExceptions.get(f)).getMessage()+" FIELD: "+f);
}
for (Iterator i =
verifiedSignatures.iterator(); i.hasNext(); ) {
- BodyHashJob bhj = (BodyHashJob)
i.next();
+ BodyHasher bhj = (BodyHasher) i.next();
System.out.println("DKIM-Pass:
"+bhj.getSignatureRecord());
}
}
Added:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/BodyHasher.java
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/BodyHasher.java?rev=824049&view=auto
==============================================================================
---
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/BodyHasher.java
(added)
+++
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/BodyHasher.java
Sun Oct 11 10:19:13 2009
@@ -0,0 +1,33 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.jdkim.api;
+
+import java.io.OutputStream;
+
+
+public interface BodyHasher {
+
+ public abstract OutputStream getOutputStream();
+
+ public abstract SignatureRecord getSignatureRecord();
+
+ public abstract byte[] getDigest();
+
+}
\ No newline at end of file
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/BodyHasher.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/BodyHasher.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/Headers.java
(from r822372,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/Headers.java)
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/Headers.java?p2=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/Headers.java&p1=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/Headers.java&r1=822372&r2=824049&rev=824049&view=diff
==============================================================================
--- james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/Headers.java
(original)
+++
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/Headers.java
Sun Oct 11 10:19:13 2009
@@ -17,7 +17,7 @@
* under the License. *
****************************************************************/
-package org.apache.james.jdkim;
+package org.apache.james.jdkim.api;
import java.util.List;
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/Headers.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/Headers.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/PublicKeyRecord.java
(from r823845,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/PublicKeyRecord.java)
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/PublicKeyRecord.java?p2=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/PublicKeyRecord.java&p1=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/PublicKeyRecord.java&r1=823845&r2=824049&rev=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/PublicKeyRecord.java
(original)
+++
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/PublicKeyRecord.java
Sun Oct 11 10:19:13 2009
@@ -17,7 +17,7 @@
* under the License. *
****************************************************************/
-package org.apache.james.jdkim;
+package org.apache.james.jdkim.api;
import java.security.PublicKey;
import java.util.List;
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/PublicKeyRecord.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/PublicKeyRecord.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/PublicKeyRecordRetriever.java
(from r822477,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/PublicKeyRecordRetriever.java)
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/PublicKeyRecordRetriever.java?p2=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/PublicKeyRecordRetriever.java&p1=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/PublicKeyRecordRetriever.java&r1=822477&r2=824049&rev=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/PublicKeyRecordRetriever.java
(original)
+++
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/PublicKeyRecordRetriever.java
Sun Oct 11 10:19:13 2009
@@ -17,10 +17,13 @@
* under the License. *
****************************************************************/
-package org.apache.james.jdkim;
+package org.apache.james.jdkim.api;
import java.util.List;
+import org.apache.james.jdkim.exceptions.PermFailException;
+import org.apache.james.jdkim.exceptions.TempFailException;
+
public interface PublicKeyRecordRetriever {
/**
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/PublicKeyRecordRetriever.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/PublicKeyRecordRetriever.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/SignatureRecord.java
(from r822372,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/SignatureRecord.java)
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/SignatureRecord.java?p2=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/SignatureRecord.java&p1=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/SignatureRecord.java&r1=822372&r2=824049&rev=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/SignatureRecord.java
(original)
+++
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/SignatureRecord.java
Sun Oct 11 10:19:13 2009
@@ -17,7 +17,7 @@
* under the License. *
****************************************************************/
-package org.apache.james.jdkim;
+package org.apache.james.jdkim.api;
import java.util.List;
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/SignatureRecord.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/api/SignatureRecord.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java
(from r822372,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/FailException.java)
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java?p2=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java&p1=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/FailException.java&r1=822372&r2=824049&rev=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/FailException.java
(original)
+++
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java
Sun Oct 11 10:19:13 2009
@@ -17,7 +17,7 @@
* under the License. *
****************************************************************/
-package org.apache.james.jdkim;
+package org.apache.james.jdkim.exceptions;
public class FailException extends Exception {
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java
(from r822372,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/PermFailException.java)
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java?p2=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java&p1=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/PermFailException.java&r1=822372&r2=824049&rev=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/PermFailException.java
(original)
+++
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java
Sun Oct 11 10:19:13 2009
@@ -17,7 +17,7 @@
* under the License. *
****************************************************************/
-package org.apache.james.jdkim;
+package org.apache.james.jdkim.exceptions;
public class PermFailException extends FailException {
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/TempFailException.java
(from r822372,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/TempFailException.java)
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/TempFailException.java?p2=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/TempFailException.java&p1=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/TempFailException.java&r1=822372&r2=824049&rev=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/TempFailException.java
(original)
+++
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/TempFailException.java
Sun Oct 11 10:19:13 2009
@@ -17,7 +17,7 @@
* under the License. *
****************************************************************/
-package org.apache.james.jdkim;
+package org.apache.james.jdkim.exceptions;
public class TempFailException extends FailException {
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/TempFailException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/exceptions/TempFailException.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/BodyHasherImpl.java
(from r822372,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/BodyHashJob.java)
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/BodyHasherImpl.java?p2=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/BodyHasherImpl.java&p1=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/BodyHashJob.java&r1=822372&r2=824049&rev=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/BodyHashJob.java
(original)
+++
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/BodyHasherImpl.java
Sun Oct 11 10:19:13 2009
@@ -17,30 +17,84 @@
* under the License. *
****************************************************************/
-package org.apache.james.jdkim;
+package org.apache.james.jdkim.impl;
import java.io.OutputStream;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import org.apache.james.jdkim.api.BodyHasher;
+import org.apache.james.jdkim.api.SignatureRecord;
+import org.apache.james.jdkim.canon.DebugOutputStream;
import org.apache.james.jdkim.canon.DigestOutputStream;
+import org.apache.james.jdkim.canon.LimitedOutputStream;
+import org.apache.james.jdkim.canon.RelaxedBodyCanonicalizer;
+import org.apache.james.jdkim.canon.SimpleBodyCanonicalizer;
-public class BodyHashJob {
+public class BodyHasherImpl implements BodyHasher {
+ private static final boolean DEEP_DEBUG = false;
private SignatureRecord sign;
private DigestOutputStream digesterOS;
private OutputStream out;
- private String field;
+ public BodyHasherImpl(SignatureRecord sign) throws
NoSuchAlgorithmException {
+ MessageDigest md =
MessageDigest.getInstance(sign.getHashAlgo().toString());
+
+ int limit = sign.getBodyHashLimit();
+
+ // TODO enhance this to use a lookup service.
+ boolean relaxedBody = "relaxed".equals(sign
+ .getBodyCanonicalisationMethod());
+
+ DigestOutputStream dout = new DigestOutputStream(md);
+
+ OutputStream out = dout;
+ if (DEEP_DEBUG) out = new DebugOutputStream(out);
+ out = prepareCanonicalizerOutputStream(limit,
+ relaxedBody, out);
+
+ setSignatureRecord(sign);
+ setDigestOutputStream(dout);
+ setOutputStream(out);
+ }
+
+ static OutputStream prepareCanonicalizerOutputStream(int limit,
+ boolean relaxedBody, OutputStream dout) {
+ OutputStream out = dout;
+ if (limit != -1)
+ out = new LimitedOutputStream(out, limit);
+ if (relaxedBody)
+ out = new RelaxedBodyCanonicalizer(out);
+ else
+ out = new SimpleBodyCanonicalizer(out);
+ return out;
+ }
+
+ /**
+ * @see org.apache.james.jdkim.api.BodyHasher#getOutputStream()
+ */
public OutputStream getOutputStream() {
return out;
}
+ /**
+ * @see org.apache.james.jdkim.api.BodyHasher#getSignatureRecord()
+ */
public SignatureRecord getSignatureRecord() {
return sign;
}
- public DigestOutputStream getDigesterOutputStream() {
+ private DigestOutputStream getDigesterOutputStream() {
return digesterOS;
}
+
+ /**
+ * @see org.apache.james.jdkim.api.BodyHasher#getDigest()
+ */
+ public byte[] getDigest() {
+ return getDigesterOutputStream().getDigest();
+ }
public void setSignatureRecord(SignatureRecord sign) {
this.sign = sign;
@@ -54,12 +108,4 @@
this.out = out;
}
- public void setField(String f) {
- this.field = f;
- }
-
- public String getField() {
- return this.field;
- }
-
}
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/BodyHasherImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/BodyHasherImpl.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/DNSPublicKeyRecordRetriever.java
(from r823215,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DNSPublicKeyRecordRetriever.java)
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/DNSPublicKeyRecordRetriever.java?p2=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/DNSPublicKeyRecordRetriever.java&p1=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DNSPublicKeyRecordRetriever.java&r1=823215&r2=824049&rev=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DNSPublicKeyRecordRetriever.java
(original)
+++
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/DNSPublicKeyRecordRetriever.java
Sun Oct 11 10:19:13 2009
@@ -17,12 +17,15 @@
* under the License. *
****************************************************************/
-package org.apache.james.jdkim;
+package org.apache.james.jdkim.impl;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import org.apache.james.jdkim.api.PublicKeyRecordRetriever;
+import org.apache.james.jdkim.exceptions.PermFailException;
+import org.apache.james.jdkim.exceptions.TempFailException;
import org.xbill.DNS.Lookup;
import org.xbill.DNS.Record;
import org.xbill.DNS.Resolver;
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/DNSPublicKeyRecordRetriever.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/DNSPublicKeyRecordRetriever.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/Message.java
(from r822477,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/Message.java)
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/Message.java?p2=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/Message.java&p1=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/Message.java&r1=822477&r2=824049&rev=824049&view=diff
==============================================================================
--- james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/Message.java
(original)
+++
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/Message.java
Sun Oct 11 10:19:13 2009
@@ -17,7 +17,7 @@
* under the License. *
****************************************************************/
-package org.apache.james.jdkim;
+package org.apache.james.jdkim.impl;
import java.io.IOException;
import java.io.InputStream;
@@ -28,6 +28,7 @@
import java.util.List;
import java.util.Map;
+import org.apache.james.jdkim.api.Headers;
import org.apache.james.mime4j.MimeException;
import org.apache.james.mime4j.io.EOLConvertingInputStream;
import org.apache.james.mime4j.parser.MimeEntityConfig;
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/Message.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/Message.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/MultiplexingPublicKeyRecordRetriever.java
(from r822372,
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetriever.java)
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/MultiplexingPublicKeyRecordRetriever.java?p2=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/MultiplexingPublicKeyRecordRetriever.java&p1=james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetriever.java&r1=822372&r2=824049&rev=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetriever.java
(original)
+++
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/MultiplexingPublicKeyRecordRetriever.java
Sun Oct 11 10:19:13 2009
@@ -17,12 +17,16 @@
* under the License. *
****************************************************************/
-package org.apache.james.jdkim;
+package org.apache.james.jdkim.impl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.james.jdkim.api.PublicKeyRecordRetriever;
+import org.apache.james.jdkim.exceptions.PermFailException;
+import org.apache.james.jdkim.exceptions.TempFailException;
+
public class MultiplexingPublicKeyRecordRetriever implements
PublicKeyRecordRetriever {
private Map/* String, PublicKeyRecordRetriever */ retrievers;
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/MultiplexingPublicKeyRecordRetriever.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/MultiplexingPublicKeyRecordRetriever.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/PublicKeyRecordImpl.java
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/PublicKeyRecordImpl.java?rev=824049&r1=824048&r2=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/PublicKeyRecordImpl.java
(original)
+++
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/PublicKeyRecordImpl.java
Sun Oct 11 10:19:13 2009
@@ -31,7 +31,7 @@
import java.util.regex.Pattern;
import org.apache.commons.codec.binary.Base64;
-import org.apache.james.jdkim.PublicKeyRecord;
+import org.apache.james.jdkim.api.PublicKeyRecord;
public class PublicKeyRecordImpl extends TagValue implements PublicKeyRecord {
@@ -73,7 +73,7 @@
}
/**
- * @see
org.apache.james.jdkim.PublicKeyRecord#isHashMethodSupported(java.lang.CharSequence)
+ * @see
org.apache.james.jdkim.api.PublicKeyRecord#isHashMethodSupported(java.lang.CharSequence)
*/
public boolean isHashMethodSupported(CharSequence hash) {
List hashes = getAcceptableHashMethods();
@@ -82,7 +82,7 @@
}
/**
- * @see
org.apache.james.jdkim.PublicKeyRecord#isKeyTypeSupported(java.lang.CharSequence)
+ * @see
org.apache.james.jdkim.api.PublicKeyRecord#isKeyTypeSupported(java.lang.CharSequence)
*/
public boolean isKeyTypeSupported(CharSequence hash) {
List hashes = getAcceptableKeyTypes();
@@ -90,14 +90,14 @@
}
/**
- * @see
org.apache.james.jdkim.PublicKeyRecord#getAcceptableHashMethods()
+ * @see
org.apache.james.jdkim.api.PublicKeyRecord#getAcceptableHashMethods()
*/
public List/* String */ getAcceptableHashMethods() {
if (ANY.equals(getValue("h"))) return null;
return stringToColonSeparatedList(getValue("h").toString(),
hyphenatedWordPattern);
}
/**
- * @see org.apache.james.jdkim.PublicKeyRecord#getAcceptableKeyTypes()
+ * @see
org.apache.james.jdkim.api.PublicKeyRecord#getAcceptableKeyTypes()
*/
public List/* String */ getAcceptableKeyTypes() {
return stringToColonSeparatedList(getValue("k").toString(),
hyphenatedWordPattern);
@@ -105,7 +105,7 @@
/**
- * @see org.apache.james.jdkim.PublicKeyRecord#getGranularityPattern()
+ * @see
org.apache.james.jdkim.api.PublicKeyRecord#getGranularityPattern()
*/
public Pattern getGranularityPattern() {
String g = getValue("g").toString();
@@ -148,7 +148,7 @@
/**
- * @see org.apache.james.jdkim.PublicKeyRecord#getPublicKey()
+ * @see org.apache.james.jdkim.api.PublicKeyRecord#getPublicKey()
*/
public PublicKey getPublicKey() {
try {
Modified:
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/SignatureRecordImpl.java
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/SignatureRecordImpl.java?rev=824049&r1=824048&r2=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/SignatureRecordImpl.java
(original)
+++
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/SignatureRecordImpl.java
Sun Oct 11 10:19:13 2009
@@ -19,13 +19,13 @@
package org.apache.james.jdkim.tagvalue;
+import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Pattern;
import org.apache.commons.codec.binary.Base64;
-import org.apache.james.jdkim.CodecUtil;
-import org.apache.james.jdkim.SignatureRecord;
+import org.apache.james.jdkim.api.SignatureRecord;
public class SignatureRecordImpl extends TagValue implements SignatureRecord {
@@ -54,7 +54,7 @@
}
/**
- * @see org.apache.james.jdkim.SignatureRecord#validate()
+ * @see org.apache.james.jdkim.api.SignatureRecord#validate()
*/
public void validate() throws IllegalStateException {
super.validate();
@@ -102,7 +102,7 @@
}
/**
- * @see org.apache.james.jdkim.SignatureRecord#getHeaders()
+ * @see org.apache.james.jdkim.api.SignatureRecord#getHeaders()
*/
public List/* CharSequence */ getHeaders() {
return stringToColonSeparatedList(getValue("h").toString(),
hdrNamePattern);
@@ -116,7 +116,7 @@
}
/**
- * @see org.apache.james.jdkim.SignatureRecord#getIdentityLocalPart()
+ * @see
org.apache.james.jdkim.api.SignatureRecord#getIdentityLocalPart()
*/
public CharSequence getIdentityLocalPart() {
String identity = getIdentity().toString();
@@ -125,11 +125,69 @@
}
public CharSequence getIdentity() {
- return CodecUtil.dkimQuotedPrintableDecode(getValue("i"));
+ return dkimQuotedPrintableDecode(getValue("i"));
}
+
+ public static String dkimQuotedPrintableDecode(CharSequence input)
throws IllegalArgumentException {
+ StringBuffer sb = new StringBuffer(input.length());
+ // TODO should we fail on WSP that is not part of FWS?
+ // the specification in 2.6 DKIM-Quoted-Printable is not
+ // clear
+ int state = 0;
+ int start = 0;
+ int d = 0;
+ boolean lastWasNL = false;
+ for (int i = 0; i < input.length(); i++) {
+ if (lastWasNL && input.charAt(i) != ' ' &&
input.charAt(i) != '\t' ) {
+ throw new IllegalArgumentException("Unexpected
LF not part of an FWS");
+ }
+ lastWasNL = false;
+ switch (state) {
+ case 0:
+ switch (input.charAt(i)) {
+ case ' ':
+ case '\t':
+ case '\r':
+ case '\n':
+ if ('\n' == input.charAt(i))
lastWasNL = true;
+ sb.append(input.subSequence(start, i));
+ start = i+1;
+ // ignoring whitespace by now.
+ break;
+ case '=':
+ sb.append(input.subSequence(start, i));
+ state = 1;
+ break;
+ }
+ break;
+ case 1:
+ case 2:
+ if (input.charAt(i) >= '0' && input.charAt(i)
<= '9' || input.charAt(i) >= 'A' && input.charAt(i) <= 'F') {
+ int v =
Arrays.binarySearch("0123456789ABCDEF".getBytes(), (byte) input.charAt(i));
+ if (state == 1) {
+ state = 2;
+ d = v;
+ } else {
+ d = d*16+v;
+ sb.append((char) d);
+ state = 0;
+ start = i+1;
+ }
+ } else {
+ throw new
IllegalArgumentException("Invalid input sequence at "+i);
+ }
+ }
+ }
+ if (state != 0) {
+ throw new IllegalArgumentException("Invalid quoted
printable termination");
+ }
+ sb.append(input.subSequence(start, input.length()));
+ return sb.toString();
+ }
+
/**
- * @see org.apache.james.jdkim.SignatureRecord#getHashKeyType()
+ * @see org.apache.james.jdkim.api.SignatureRecord#getHashKeyType()
*/
public CharSequence getHashKeyType() {
String a = getValue("a").toString();
@@ -140,7 +198,7 @@
}
/**
- * @see org.apache.james.jdkim.SignatureRecord#getHashMethod()
+ * @see org.apache.james.jdkim.api.SignatureRecord#getHashMethod()
*/
public CharSequence getHashMethod() {
String a = getValue("a").toString();
@@ -151,7 +209,7 @@
}
/**
- * @see org.apache.james.jdkim.SignatureRecord#getHashAlgo()
+ * @see org.apache.james.jdkim.api.SignatureRecord#getHashAlgo()
*/
public CharSequence getHashAlgo() {
String a = getValue("a").toString();
@@ -163,14 +221,14 @@
}
/**
- * @see org.apache.james.jdkim.SignatureRecord#getSelector()
+ * @see org.apache.james.jdkim.api.SignatureRecord#getSelector()
*/
public CharSequence getSelector() {
return getValue("s");
}
/**
- * @see org.apache.james.jdkim.SignatureRecord#getDToken()
+ * @see org.apache.james.jdkim.api.SignatureRecord#getDToken()
*/
public CharSequence getDToken() {
return getValue("d");
Modified:
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/DKIMVerifierTest.java
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/DKIMVerifierTest.java?rev=824049&r1=824048&r2=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/DKIMVerifierTest.java
(original)
+++
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/DKIMVerifierTest.java
Sun Oct 11 10:19:13 2009
@@ -19,6 +19,7 @@
package org.apache.james.jdkim;
+import org.apache.james.jdkim.api.PublicKeyRecord;
import org.apache.james.jdkim.tagvalue.PublicKeyRecordImpl;
import org.apache.james.jdkim.tagvalue.SignatureRecordImpl;
Modified:
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/FileBasedTest.java
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/FileBasedTest.java?rev=824049&r1=824048&r2=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/FileBasedTest.java
(original)
+++
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/FileBasedTest.java
Sun Oct 11 10:19:13 2009
@@ -19,6 +19,7 @@
package org.apache.james.jdkim;
+import org.apache.james.jdkim.exceptions.PermFailException;
import org.apache.james.mime4j.parser.MimeTokenStream;
import java.io.File;
Modified:
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MessageTest.java
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MessageTest.java?rev=824049&r1=824048&r2=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MessageTest.java
(original)
+++
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MessageTest.java
Sun Oct 11 10:19:13 2009
@@ -29,6 +29,7 @@
import junit.framework.TestCase;
+import org.apache.james.jdkim.impl.Message;
import org.apache.james.mime4j.MimeException;
public class MessageTest extends TestCase {
Modified:
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MockPublicKeyRecordRetriever.java
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MockPublicKeyRecordRetriever.java?rev=824049&r1=824048&r2=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MockPublicKeyRecordRetriever.java
(original)
+++
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MockPublicKeyRecordRetriever.java
Sun Oct 11 10:19:13 2009
@@ -24,6 +24,10 @@
import java.util.List;
import java.util.Map;
+import org.apache.james.jdkim.api.PublicKeyRecordRetriever;
+import org.apache.james.jdkim.exceptions.PermFailException;
+import org.apache.james.jdkim.exceptions.TempFailException;
+
/**
* This is a mock public key record retriever that store the "registry" in a
local map.
*/
Modified:
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetrieverTest.java
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetrieverTest.java?rev=824049&r1=824048&r2=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetrieverTest.java
(original)
+++
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetrieverTest.java
Sun Oct 11 10:19:13 2009
@@ -23,6 +23,12 @@
import java.util.Iterator;
import java.util.List;
+import org.apache.james.jdkim.api.PublicKeyRecordRetriever;
+import org.apache.james.jdkim.exceptions.FailException;
+import org.apache.james.jdkim.exceptions.PermFailException;
+import org.apache.james.jdkim.exceptions.TempFailException;
+import org.apache.james.jdkim.impl.MultiplexingPublicKeyRecordRetriever;
+
import junit.framework.TestCase;
public class MultiplexingPublicKeyRecordRetrieverTest extends TestCase {
Modified:
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/PublicKeyRecordTest.java
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/PublicKeyRecordTest.java?rev=824049&r1=824048&r2=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/PublicKeyRecordTest.java
(original)
+++
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/PublicKeyRecordTest.java
Sun Oct 11 10:19:13 2009
@@ -25,6 +25,7 @@
import java.util.List;
import java.util.regex.Pattern;
+import org.apache.james.jdkim.api.PublicKeyRecord;
import org.apache.james.jdkim.tagvalue.PublicKeyRecordImpl;
import junit.framework.TestCase;
Modified:
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordImplTest.java
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordImplTest.java?rev=824049&r1=824048&r2=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordImplTest.java
(original)
+++
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordImplTest.java
Sun Oct 11 10:19:13 2009
@@ -19,12 +19,82 @@
package org.apache.james.jdkim;
+import org.apache.james.jdkim.api.SignatureRecord;
import org.apache.james.jdkim.tagvalue.SignatureRecordImpl;
import junit.framework.TestCase;
public class SignatureRecordImplTest extends TestCase {
+ public void testQPDecode() {
+
assertEquals("",SignatureRecordImpl.dkimQuotedPrintableDecode(""));
+
assertEquals("@",SignatureRecordImpl.dkimQuotedPrintableDecode("=40"));
+
assertEquals("\r\n",SignatureRecordImpl.dkimQuotedPrintableDecode("=0D=0A"));
+
assertEquals("\0CIAO\0",SignatureRecordImpl.dkimQuotedPrintableDecode("=00CIAO=00"));
+
assertEquals("thisisatest",SignatureRecordImpl.dkimQuotedPrintableDecode("this\r\n\tis\r\n
a\r\n \t test"));
+ }
+
+ public void testQPWhiteSpaces() {
+
assertEquals("thisisatest",SignatureRecordImpl.dkimQuotedPrintableDecode("this
is a test"));
+
assertEquals("thisisatest",SignatureRecordImpl.dkimQuotedPrintableDecode("this\r\n
is a test"));
+ }
+
+ public void testQPInvalid() {
+ try {
+ SignatureRecordImpl.dkimQuotedPrintableDecode("=");
+ fail("invalid sequence parsed.");
+ } catch (IllegalArgumentException e) {
+ }
+ try {
+ SignatureRecordImpl.dkimQuotedPrintableDecode("==");
+ fail("invalid sequence parsed.");
+ } catch (IllegalArgumentException e) {
+ }
+ try {
+ SignatureRecordImpl.dkimQuotedPrintableDecode("=2 3");
+ fail("invalid sequence parsed.");
+ } catch (IllegalArgumentException e) {
+ }
+ try {
+ SignatureRecordImpl.dkimQuotedPrintableDecode("=3");
+ fail("invalid sequence parsed.");
+ } catch (IllegalArgumentException e) {
+ }
+ try {
+ SignatureRecordImpl.dkimQuotedPrintableDecode("=3a");
+ fail("invalid sequence parsed.");
+ } catch (IllegalArgumentException e) {
+ }
+ try {
+ SignatureRecordImpl.dkimQuotedPrintableDecode("==20");
+ fail("invalid sequence parsed.");
+ } catch (IllegalArgumentException e) {
+ }
+ try {
+ SignatureRecordImpl.dkimQuotedPrintableDecode("=20=");
+ fail("invalid sequence parsed.");
+ } catch (IllegalArgumentException e) {
+ }
+ try {
+ SignatureRecordImpl.dkimQuotedPrintableDecode("=3x");
+ fail("invalid sequence parsed.");
+ } catch (IllegalArgumentException e) {
+ }
+ try {
+
SignatureRecordImpl.dkimQuotedPrintableDecode("this\r\nis a test");
+ fail("invalid sequence parsed.");
+ } catch (IllegalArgumentException e) {
+ }
+ }
+
+ // TODO check bytes > 128
+ /*
+ public void test8bit() {
+
assertEquals("PROVA\144CIAO\144",Main.dkimQuotedPrintableDecode("PROVA=90CIAO=90"));
+ }
+ */
+
+
/* when we moved from Sun's Base64 to CommonsCodec the decoding changed
behaviour.
* it does no more fail on bad encoded data.
public void testWrongBase64Encoding() {
Modified:
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordTest.java
URL:
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordTest.java?rev=824049&r1=824048&r2=824049&view=diff
==============================================================================
---
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordTest.java
(original)
+++
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordTest.java
Sun Oct 11 10:19:13 2009
@@ -19,6 +19,7 @@
package org.apache.james.jdkim;
+import org.apache.james.jdkim.api.SignatureRecord;
import org.apache.james.jdkim.tagvalue.SignatureRecordImpl;
import junit.framework.TestCase;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]