You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ba...@apache.org on 2009/10/11 17:35:33 UTC
svn commit: r824090 [3/4] - in /james/jdkim/trunk: ./
mailets/src/main/java/org/apache/james/jdkim/mailets/
mailets/src/test/java/org/apache/james/jdkim/mailets/
main/src/main/java/org/apache/james/jdkim/
main/src/main/java/org/apache/james/jdkim/api/ ...
Modified: james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/TagValue.java
URL: http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/TagValue.java?rev=824090&r1=824089&r2=824090&view=diff
==============================================================================
--- james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/TagValue.java (original)
+++ james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/TagValue.java Sun Oct 11 15:35:32 2009
@@ -29,197 +29,237 @@
import java.util.regex.Pattern;
/**
- * This class handle a tag=value list string as defined by DKIM specification
- * It also supports mandatoryTags and default values as a commodity to subclasses.
+ * This class handle a tag=value list string as defined by DKIM specification It
+ * also supports mandatoryTags and default values as a commodity to subclasses.
*/
public class TagValue {
-
- private static final boolean DEBUG = false;
- protected static final boolean VALIDATION = true;
-
- private static Pattern tagPattern = Pattern.compile("^[A-Za-z][A-Za-z0-9_]*$");
- private static final String tval = "[^; \t\r\n]+";
- // validate value chars
- private static Pattern valuePattern = Pattern.compile("^("+tval+"((\r\n[\t ]|[\t ])+"+tval+")*)?$");
-
- // we may use a TreeMap because we may need to know original order.
- protected Map/* String, CharSequence */ tagValues;
-
- protected Set/* String */ mandatoryTags = new HashSet();
- protected Map/* String, CharSequence */ defaults = new HashMap();
-
-
- protected CharSequence trimFWS(CharSequence data, int tStart, int tStop, boolean trimWSP) {
- if (DEBUG) System.out.println("1["+data+"]"+tStart+"|"+tStop+"="+data.subSequence(tStart, tStop+1)+"]");
- // rimozione di FWS a inizio selezione
- while (tStart < tStop && (data.charAt(tStart) == ' ' || data.charAt(tStart) == '\t') ||
- (tStart < tStop - 2 && data.charAt(tStart) == '\r' && data.charAt(tStart+1) == '\n' && (data.charAt(tStart+2) == ' ' || data.charAt(tStart+2) == '\t'))) {
- if (data.charAt(tStart) == '\r') tStart += 3;
- else tStart++;
- }
-
- if (DEBUG) System.out.println("2["+data+"]"+tStart+"|"+tStop+"="+data.subSequence(tStart, tStop+1)+"]");
- // rimozione di FWS a fine selezione.
- while (tStart < tStop && (data.charAt(tStop) == ' ' || data.charAt(tStop) == '\t')) {
- tStop--;
- if ((tStart <= tStop-1 && data.charAt(tStop) == '\n' && data.charAt(tStop-1) == '\r') || (tStart < tStop && (data.charAt(tStop) == ' ' || data.charAt(tStop) == '\t'))) {
- if (data.charAt(tStop) == '\n') tStop -= 2;
- else tStop--;
- }
- }
-
- if (DEBUG) System.out.println("3["+data+"]"+tStart+"|"+tStop+"="+data.subSequence(tStart, tStop+1)+"]");
- if (trimWSP) {
- return trimWSP(data, tStart, tStop);
- } else {
- return data.subSequence(tStart, tStop+1);
- }
- }
-
- private CharSequence trimWSP(CharSequence data, int vStart, int vStop) {
- if (vStop < vStart-1) throw new IllegalArgumentException("Stop must be >= than start");
- while (vStart <= vStop && (data.charAt(vStart) == ' ' || data.charAt(vStart) == '\t')) vStart++;
- while (vStart <= vStop && (data.charAt(vStop) == ' ' || data.charAt(vStop) == '\t')) vStop--;
- return data.subSequence(vStart, vStop+1);
- }
-
- public TagValue(String data) {
- init();
- parse(data);
- }
-
- protected void init() {
- // extensions may override this to use TreeMaps in order to keep track of orders
- tagValues = new HashMap();
- }
-
- /**
- * subclasses have to make sure tagValues is initialized during init().
- * @param data the string to be parsed
- */
- protected void parse(String data) {
- for (int i = 0; i < data.length(); i++) {
- int equal = data.indexOf('=', i);
- if (equal == -1) {
- // TODO check whether this is correct or not
- // this allow FWS/WSP after the final ";"
- String rest = data.substring(i);
- if (rest.length() > 0 && trimFWS(rest, 0, rest.length()-1, true).length() > 0) {
- throw new IllegalStateException("Unexpected termination at position "+i+": "+data);
- }
- i = data.length();
- continue;
- }
- // we could start from "equals" but we start from "i" in
- // order to spot invalid values before validation.
- int next = data.indexOf(';', i);
- if (next == -1) {
- next = data.length();
- }
-
- if (equal > next) {
- throw new IllegalStateException("Found ';' before '=' in "+data);
- }
-
- CharSequence tag = trimFWS(data, i, equal-1, true).toString();
- if (VALIDATION && !tagPattern.matcher(tag).matches()) {
- throw new IllegalStateException("Syntax error in tag: "+tag);
- }
- String tagString = tag.toString();
- if (tagValues.containsKey(tagString)) {
- throw new IllegalStateException("Syntax error (duplicate tag): "+tag);
- }
-
- CharSequence value = trimFWS(data, equal+1, next-1, true);
- if (VALIDATION && !valuePattern.matcher(value).matches()) {
- throw new IllegalStateException("Syntax error in value: "+value);
- }
-
- tagValues.put(tagString, value);
- i = next;
- }
- }
-
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result
- + ((tagValues == null) ? 0 : tagValues.hashCode());
- return result;
- }
-
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- TagValue other = (TagValue) obj;
- if (tagValues == null) {
- if (other.tagValues != null)
- return false;
- } else if (!tagValues.equals(other.tagValues))
- return false;
- return true;
- }
-
- public Set getTags() {
- return tagValues.keySet();
- }
-
- protected CharSequence getValue(String key) {
- CharSequence val = (CharSequence) tagValues.get(key);
- if (val == null) return getDefault(key);
- else return val;
- }
-
- protected CharSequence getDefault(String key) {
- return (CharSequence) defaults.get(key);
- }
-
- public void validate() {
- // check mandatory fields
- for (Iterator i = mandatoryTags.iterator(); i.hasNext(); ) {
- String tag = (String) i.next();
- if (getValue(tag)==null) throw new IllegalStateException("Missing mandatory tag: "+tag);
- }
- }
-
- protected List stringToColonSeparatedList(String h, Pattern pattern) {
- List headers = new ArrayList();
- for (int i = 0; i < h.length(); i++) {
- int p = h.indexOf(':', i);
- if (p == -1) p = h.length();
- CharSequence cs = trimFWS(h, i, p-1, false);
- if (VALIDATION) {
- if (!pattern.matcher(cs).matches()) throw new IllegalStateException("Syntax error in field name: "+cs);
- }
- headers.add(cs);
- i = p;
- }
- return headers;
- }
-
- protected boolean isInListCaseInsensitive(CharSequence hash, List hashes) {
- for (Iterator i = hashes.iterator(); i.hasNext(); ) {
- CharSequence suppHash = (CharSequence) i.next();
- if (hash.toString().equalsIgnoreCase(suppHash.toString())) return true;
- }
- return false;
- }
-
- public String toString() {
- StringBuffer res = new StringBuffer();
- Set s = getTags();
- for (Iterator i = s.iterator(); i.hasNext(); ) {
- String tag = (String) i.next();
- res.append(tag);
- res.append("=");
- res.append(getValue(tag));
- res.append("; ");
- }
- return res.toString();
- }
+
+ private static final boolean DEBUG = false;
+ protected static final boolean VALIDATION = true;
+
+ private static Pattern tagPattern = Pattern
+ .compile("^[A-Za-z][A-Za-z0-9_]*$");
+ private static final String tval = "[^; \t\r\n]+";
+ // validate value chars
+ private static Pattern valuePattern = Pattern.compile("^(" + tval
+ + "((\r\n[\t ]|[\t ])+" + tval + ")*)?$");
+
+ // we may use a TreeMap because we may need to know original order.
+ protected Map/* String, CharSequence */tagValues;
+
+ protected Set/* String */mandatoryTags = new HashSet();
+ protected Map/* String, CharSequence */defaults = new HashMap();
+
+ protected CharSequence trimFWS(CharSequence data, int tStart, int tStop,
+ boolean trimWSP) {
+ if (DEBUG)
+ System.out.println("1[" + data + "]" + tStart + "|" + tStop + "="
+ + data.subSequence(tStart, tStop + 1) + "]");
+ // rimozione di FWS a inizio selezione
+ while (tStart < tStop
+ && (data.charAt(tStart) == ' ' || data.charAt(tStart) == '\t')
+ || (tStart < tStop - 2 && data.charAt(tStart) == '\r'
+ && data.charAt(tStart + 1) == '\n' && (data
+ .charAt(tStart + 2) == ' ' || data.charAt(tStart + 2) == '\t'))) {
+ if (data.charAt(tStart) == '\r')
+ tStart += 3;
+ else
+ tStart++;
+ }
+
+ if (DEBUG)
+ System.out.println("2[" + data + "]" + tStart + "|" + tStop + "="
+ + data.subSequence(tStart, tStop + 1) + "]");
+ // rimozione di FWS a fine selezione.
+ while (tStart < tStop
+ && (data.charAt(tStop) == ' ' || data.charAt(tStop) == '\t')) {
+ tStop--;
+ if ((tStart <= tStop - 1 && data.charAt(tStop) == '\n' && data
+ .charAt(tStop - 1) == '\r')
+ || (tStart < tStop && (data.charAt(tStop) == ' ' || data
+ .charAt(tStop) == '\t'))) {
+ if (data.charAt(tStop) == '\n')
+ tStop -= 2;
+ else
+ tStop--;
+ }
+ }
+
+ if (DEBUG)
+ System.out.println("3[" + data + "]" + tStart + "|" + tStop + "="
+ + data.subSequence(tStart, tStop + 1) + "]");
+ if (trimWSP) {
+ return trimWSP(data, tStart, tStop);
+ } else {
+ return data.subSequence(tStart, tStop + 1);
+ }
+ }
+
+ private CharSequence trimWSP(CharSequence data, int vStart, int vStop) {
+ if (vStop < vStart - 1)
+ throw new IllegalArgumentException("Stop must be >= than start");
+ while (vStart <= vStop
+ && (data.charAt(vStart) == ' ' || data.charAt(vStart) == '\t'))
+ vStart++;
+ while (vStart <= vStop
+ && (data.charAt(vStop) == ' ' || data.charAt(vStop) == '\t'))
+ vStop--;
+ return data.subSequence(vStart, vStop + 1);
+ }
+
+ public TagValue(String data) {
+ init();
+ parse(data);
+ }
+
+ protected void init() {
+ // extensions may override this to use TreeMaps in order to keep track
+ // of orders
+ tagValues = new HashMap();
+ }
+
+ /**
+ * subclasses have to make sure tagValues is initialized during init().
+ *
+ * @param data
+ * the string to be parsed
+ */
+ protected void parse(String data) {
+ for (int i = 0; i < data.length(); i++) {
+ int equal = data.indexOf('=', i);
+ if (equal == -1) {
+ // TODO check whether this is correct or not
+ // this allow FWS/WSP after the final ";"
+ String rest = data.substring(i);
+ if (rest.length() > 0
+ && trimFWS(rest, 0, rest.length() - 1, true).length() > 0) {
+ throw new IllegalStateException(
+ "Unexpected termination at position " + i + ": "
+ + data);
+ }
+ i = data.length();
+ continue;
+ }
+ // we could start from "equals" but we start from "i" in
+ // order to spot invalid values before validation.
+ int next = data.indexOf(';', i);
+ if (next == -1) {
+ next = data.length();
+ }
+
+ if (equal > next) {
+ throw new IllegalStateException("Found ';' before '=' in "
+ + data);
+ }
+
+ CharSequence tag = trimFWS(data, i, equal - 1, true).toString();
+ if (VALIDATION && !tagPattern.matcher(tag).matches()) {
+ throw new IllegalStateException("Syntax error in tag: " + tag);
+ }
+ String tagString = tag.toString();
+ if (tagValues.containsKey(tagString)) {
+ throw new IllegalStateException(
+ "Syntax error (duplicate tag): " + tag);
+ }
+
+ CharSequence value = trimFWS(data, equal + 1, next - 1, true);
+ if (VALIDATION && !valuePattern.matcher(value).matches()) {
+ throw new IllegalStateException("Syntax error in value: "
+ + value);
+ }
+
+ tagValues.put(tagString, value);
+ i = next;
+ }
+ }
+
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result
+ + ((tagValues == null) ? 0 : tagValues.hashCode());
+ return result;
+ }
+
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ TagValue other = (TagValue) obj;
+ if (tagValues == null) {
+ if (other.tagValues != null)
+ return false;
+ } else if (!tagValues.equals(other.tagValues))
+ return false;
+ return true;
+ }
+
+ public Set getTags() {
+ return tagValues.keySet();
+ }
+
+ protected CharSequence getValue(String key) {
+ CharSequence val = (CharSequence) tagValues.get(key);
+ if (val == null)
+ return getDefault(key);
+ else
+ return val;
+ }
+
+ protected CharSequence getDefault(String key) {
+ return (CharSequence) defaults.get(key);
+ }
+
+ public void validate() {
+ // check mandatory fields
+ for (Iterator i = mandatoryTags.iterator(); i.hasNext();) {
+ String tag = (String) i.next();
+ if (getValue(tag) == null)
+ throw new IllegalStateException("Missing mandatory tag: " + tag);
+ }
+ }
+
+ protected List stringToColonSeparatedList(String h, Pattern pattern) {
+ List headers = new ArrayList();
+ for (int i = 0; i < h.length(); i++) {
+ int p = h.indexOf(':', i);
+ if (p == -1)
+ p = h.length();
+ CharSequence cs = trimFWS(h, i, p - 1, false);
+ if (VALIDATION) {
+ if (!pattern.matcher(cs).matches())
+ throw new IllegalStateException(
+ "Syntax error in field name: " + cs);
+ }
+ headers.add(cs);
+ i = p;
+ }
+ return headers;
+ }
+
+ protected boolean isInListCaseInsensitive(CharSequence hash, List hashes) {
+ for (Iterator i = hashes.iterator(); i.hasNext();) {
+ CharSequence suppHash = (CharSequence) i.next();
+ if (hash.toString().equalsIgnoreCase(suppHash.toString()))
+ return true;
+ }
+ return false;
+ }
+
+ public String toString() {
+ StringBuffer res = new StringBuffer();
+ Set s = getTags();
+ for (Iterator i = s.iterator(); i.hasNext();) {
+ String tag = (String) i.next();
+ res.append(tag);
+ res.append("=");
+ res.append(getValue(tag));
+ res.append("; ");
+ }
+ return res.toString();
+ }
}
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=824090&r1=824089&r2=824090&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 15:35:32 2009
@@ -27,42 +27,74 @@
public class DKIMVerifierTest extends TestCase {
- public void testApply() {
- PublicKeyRecord pkr = new PublicKeyRecordImpl("k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
- pkr.validate();
- DKIMVerifier.apply(pkr, new SignatureRecordImpl("v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type; bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
- try {
- DKIMVerifier.apply(pkr, new SignatureRecordImpl("v=1; a=dsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type; bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
- fail("This is not a signature for that key");
- } catch (IllegalStateException e) {
- }
- pkr = new PublicKeyRecordImpl("k=rsa; t=y:s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
- pkr.validate();
- DKIMVerifier.apply(pkr, new SignatureRecordImpl("v=1; a=rsa-sha256; c=relaxed/relaxed; i=test@gmail.com; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type; bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
- try {
- DKIMVerifier.apply(pkr, new SignatureRecordImpl("v=1; a=rsa-sha256; c=relaxed/relaxed; i=test@subdomain.gmail.com; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type; bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
- fail("This is not a signature for that key");
- } catch (IllegalStateException e) {
- }
- pkr = new PublicKeyRecordImpl("k=rsa; g=test*; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
- pkr.validate();
- DKIMVerifier.apply(pkr, new SignatureRecordImpl("v=1; a=rsa-sha256; c=relaxed/relaxed; i=test@gmail.com; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type; bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
- try {
- DKIMVerifier.apply(pkr, new SignatureRecordImpl("v=1; a=rsa-sha256; c=relaxed/relaxed; i=bad@subdomain.gmail.com; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type; bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
- fail("This is not a signature for that key");
- } catch (IllegalStateException e) {
- }
- pkr = new PublicKeyRecordImpl("k=rsa; g=test*; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
- pkr.validate();
-
- pkr = new PublicKeyRecordImpl("k=rsa; h=sha1; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
- pkr.validate();
- try {
- DKIMVerifier.apply(pkr, new SignatureRecordImpl("v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type; bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
- fail("This hash method is not supported for that publick key");
- } catch (IllegalStateException e) {
- }
- }
+ public void testApply() {
+ PublicKeyRecord pkr = new PublicKeyRecordImpl(
+ "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+ pkr.validate();
+ DKIMVerifier
+ .apply(
+ pkr,
+ new SignatureRecordImpl(
+ "v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type; bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
+ try {
+ DKIMVerifier
+ .apply(
+ pkr,
+ new SignatureRecordImpl(
+ "v=1; a=dsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type; bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
+ fail("This is not a signature for that key");
+ } catch (IllegalStateException e) {
+ }
+ pkr = new PublicKeyRecordImpl(
+ "k=rsa; t=y:s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+ pkr.validate();
+ DKIMVerifier
+ .apply(
+ pkr,
+ new SignatureRecordImpl(
+ "v=1; a=rsa-sha256; c=relaxed/relaxed; i=test@gmail.com; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type; bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
+ try {
+ DKIMVerifier
+ .apply(
+ pkr,
+ new SignatureRecordImpl(
+ "v=1; a=rsa-sha256; c=relaxed/relaxed; i=test@subdomain.gmail.com; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type; bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
+ fail("This is not a signature for that key");
+ } catch (IllegalStateException e) {
+ }
+ pkr = new PublicKeyRecordImpl(
+ "k=rsa; g=test*; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+ pkr.validate();
+ DKIMVerifier
+ .apply(
+ pkr,
+ new SignatureRecordImpl(
+ "v=1; a=rsa-sha256; c=relaxed/relaxed; i=test@gmail.com; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type; bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
+ try {
+ DKIMVerifier
+ .apply(
+ pkr,
+ new SignatureRecordImpl(
+ "v=1; a=rsa-sha256; c=relaxed/relaxed; i=bad@subdomain.gmail.com; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type; bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
+ fail("This is not a signature for that key");
+ } catch (IllegalStateException e) {
+ }
+ pkr = new PublicKeyRecordImpl(
+ "k=rsa; g=test*; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+ pkr.validate();
+ pkr = new PublicKeyRecordImpl(
+ "k=rsa; h=sha1; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+ pkr.validate();
+ try {
+ DKIMVerifier
+ .apply(
+ pkr,
+ new SignatureRecordImpl(
+ "v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type; bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
+ fail("This hash method is not supported for that publick key");
+ } catch (IllegalStateException e) {
+ }
+ }
}
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=824090&r1=824089&r2=824090&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 15:35:32 2009
@@ -37,112 +37,251 @@
*/
public class FileBasedTest extends TestCase {
- private File file;
+ private File file;
- public FileBasedTest(String testName) {
- this(testName, FileBasedTestSuite.getFile(testName));
- }
-
- public FileBasedTest(String name, File testFile) {
- super(name);
- this.file = testFile;
- }
-
- protected void runTest() throws Throwable {
- MimeTokenStream stream = new MimeTokenStream();
- stream.setRecursionMode(MimeTokenStream.M_FLAT);
-
- InputStream is = new FileInputStream(file);
- // String msgoutFile = file.getAbsolutePath().substring(0,
- // file.getAbsolutePath().lastIndexOf('.')) + ".out";
-
- MockPublicKeyRecordRetriever pkr = new MockPublicKeyRecordRetriever();
- pkr
- .addRecord(
- "domk",
- "brainlounge.de",
- "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMxdtsTy8K7yEHt+7DB4XH70Rd6v7rp2qai7gM1meDzlrwDlMzUi0mQC+dMY+AzmCE1jLNXAr3JL6kT8vD7KQai8avwGQzmlU3d0Z7etqTj1ttJQZxUTPM18bM3wVqc6h3Dppqx7kY91Td50r9MXBbu+DkhL1+RCfcPQxEvEf74QIDAQAB");
- pkr
- .addRecord(
- "dkim",
- "paypal.it",
- "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD3j+gKW1qBM+psRHXAdR7tI9QcKW0Ii723AzyTO4nrVmuJoKWHLoEEQw/Nc4XF7iyhfadorjqZZ9f+qDXQiKPyLJyVXs0qLrnJQ9BWlQP0xIiz7CTcoHwEhJ1XwgUI/2V6bNghMrnK2yiR/Vqt5lV5kx4+n1656EefGuOTuNmIWwIDAQAB");
- pkr
- .addRecord(
- "default",
- "gfkresearch.com",
- "t=y; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAM26TUEN/IatWRhSiguj8RyDmeFRQJG8gaNjdaOOJ3AZuGeCG1W9NwlkgDv7UxUUx3AIkFbU/wsDFMe/RGItcK5vKEkUP0roJ1fCTtYsfTHhmnhXyJsmj0eDvbwDg6BzfwIDAQAB");
- pkr.addRecord("2007-00", "kitterman.com", "v=DKIM1; g=*; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCp9+s7hHTlMje842UBfd8nBYvX0I1CJzltQJ9bLGAKHbyCBTKei/dYuuDICKArbcVZ+05UbJzxU6cstPOaEoPM+FMD/lUiGpJYLYUuzRP7Pd82YHKoAZbYflGYTck2e7x8vB7l8WeEgRJ0cJdHm871HbQmv67LZiN+9donmjl93wIDAQAB;");
- pkr.addRecord("beta", "gmail.com", "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC69TURXN3oNfz+G/m3g5rt4P6nsKmVgU1D6cw2X6BnxKJNlQKm10f8tMx6P6bN7juTR1BeD8ubaGqtzm2rWK4LiMJqhoQcwQziGbK1zp/MkdXZEWMCflLY6oUITrivK7JNOLXtZbdxJG2y/RAHGswKKyVhSP9niRsZF/IBr5p8uQIDAQAB");
- pkr.addRecord("gamma", "gmail.com", "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
- pkr.addRecord("beta", "google.com", "k=rsa; t=y; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMs93oc95ObA7OEQEbqjIy6YvRj1u3yVGTzQ3wkwRQTWx1fhvNQenPNFklaL+Tw9XFYUc3f8eY0hs3WUNQ+t+I0CAwEAAQ==");
- pkr.addRecord("beta", "googlegroups.com", "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDs66DgKyXSlBvNCbi158TgsBzqh/n7GqCa2QwIORpNbndjlK8qaR9mb8gH9KG1S3ahZybrZT1N268dgF2VDWV14h1fpPMIj6KKoX6uzGomzIVdeGPmjZ7o3ZUaxHUWvwIEGlNv400xzBToSU44sXqQIwH5l08anWYw3sq9xBrI5wIDAQAB");
- pkr.addRecord("gamma", "googlemail.com", "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
- pkr.addRecord("s768", "t.contactlab.it", "k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAMUUS6qlVpzbGQ3SCsGwpuVlC6gtw+BXMkFhm+jd57GXPtwpbOgr+UaHlbq6OnFAgrHxVx55RrSsTxixw0t0ePGkdBHjE7fURGphf+Mr1gzhvvLO6j1f1/60zvQPyay5UQIDAQAB");
- pkr.addRecord("s768", "contactlab.it", "k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAMUUS6qlVpzbGQ3SCsGwpuVlC6gtw+BXMkFhm+jd57GXPtwpbOgr+UaHlbq6OnFAgrHxVx55RrSsTxixw0t0ePGkdBHjE7fURGphf+Mr1gzhvvLO6j1f1/60zvQPyay5UQIDAQAB");
- pkr.addRecord("emailroi", "mediapost.com", "g=; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC61RrUNTIcNbf/+f5Co2V37GMvPQdbUVyjgvLXrUKAXeJDwYVumAtE9BovuDZNYxcgG2oy7mkcZX/3rBF2SJX9Cp5yw0axuMpzkuzPQq26h+2+MLuvtJtfDIaHgNeEJOjMeq7s9RFQHRr9g26lkZQTRAob8YevaA9KHiNNyIaZuQIDAQAB;");
- pkr.addRecord("dkim_s1024", "aweber.com", "v=DKIM1; k=rsa; h=sha1; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRAeDcyfWZQQ9sv+qRMQVTda/9yyYMo9qdI+h3i4U68+rrEruEoxLaa0JJw6OwFXzQ9x9raHZjroHsySzzQbIiZLj9o4IoCqpt5v0xd45+ABhQM6DyzHZDgIFcMtYIzEjaKLzkVpNeS9qr8Cra7CLtSqCbdAjGyUgVLveHrxNP9wIDAQAB");
- pkr.addRecord("itunes", "new-music.itunes.com", "v=DKIM1; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMTdhQ9CBNvwYGPkggikcMqT90O4JAzPfxtPaeJ1CgfTlXk0GL3OTz1nfeN3w2ybTpIKYRLrW23Qppaunpb/3dMCAwEAAQ==;");
- pkr.addRecord("lima", "yahoogroups.com", "k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAL10WHRWMSb9Tnl+k4Kzpc18rDCTpDT1pbK0xwkdZIZkaP8NB75qa/S57xccZlIwbI22Ooy/IY+8WxQtvE2z4WLLNOf9hkMeicUH48TGkEoCAcaSjJz/b3NMrOy9l1U7gQIDAP//");
- pkr.addRecord("s1024", "yahoo.co.in", "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB; n=A 1024 bit key;");
- pkr.addRecord("k1", "adidasnewsletter.com", "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3VqSTEgEkHtfDiMCzoYtY1wjcArcmb+efQJfzX4zJA60IEA/NmOaHP8Gu02vscLbJWT/mwGlZwr2Q53g9VMQOyoODD5ju1EwJwlioVQ1W7xSjogMTz8yzmWhcMUzXQOu/iD+7sdJP0+k7pCumPMbxEeN33At7HxoYVCSkNdUB9QIDAQAB");
- pkr.addRecord("200505", "yahoo-email.com", "t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDaMFcW5fNoye1Xo7BT/lKCHThjn1QaVdcxoAy7Y1m2tXnR3X+qUxFRaoyReTVlxfO8vaIPSbJ2Pm6+sZkC0lH/6Ok+i0RDhtd7bq9oLFKclfMGQlphBB185c1zDKNTs7GyAyjSM7pEzx5Dai+YTE9/+GYhdbEWmGBS9TsXnTCKPQIDAQAB");
- pkr.addRecord("v1", "alerts.hp.com", "k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAPSCrSVhxHa6F3EpDjnw6xdpfTv8sNz5Plbl3b3Zqq9WVVg2j5+748EkwtvzQlA6TQuZIOrpSHJkP0nEyCR5GatNasOKPWFO47VSLFO9AJbsc34eGUUTF49bBIACiE4b9wIDAQAB");
- pkr.addRecord("v1", "rodale.delivery.net", "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWWvSsm60Wx178Y7pET3m/UZaof+qtRxZa8RXfyTIiGYMXJFwHgd3VrTLF6xmoCyRC1kfv3k7nPujkGFydBCoRK/vCN/1e4yHAsSwh/ElTO5dqylvP77PJyiaME582m4wXf095NBXJZlHUlXb7SWDdmCeU5uXfcR0EJU0eRewflQIDAQAB");
- pkr.addRecord("domk", "brainlounge.de", "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMxdtsTy8K7yEHt+7DB4XH70Rd6v7rp2qai7gM1meDzlrwDlMzUi0mQC+dMY+AzmCE1jLNXAr3JL6kT8vD7KQai8avwGQzmlU3d0Z7etqTj1ttJQZxUTPM18bM3wVqc6h3Dppqx7kY91Td50r9MXBbu+DkhL1+RCfcPQxEvEf74QIDAQAB");
- pkr.addRecord("spop", "newsletters.play.com", "g=; k=rsa; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOaOtP9KfyxvWET0yXoL2ugcas2SjoBZ+40oZ6/twAEtW224fcuvOFiNS+XpPq5LNW96NYAuxJPBlwLoYlHRUQkCAwEAAQ==");
- pkr.addRecord("ironport-dkim", "ironport.com", "p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJqzyi+tkPHw4hrcTSJBXTh3m2koCKP0+J6/r+yVVg7VoRKPz/tguE+M6fF0oqLk5Fci+tE8HFS3HLkl0au17CcCAwEAAQ==;");
- pkr.addRecord("smtp-out", "abv.bg", "g=*; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPShtI1XjhVGpVrKyBuFP5K0jqFqy5gC8GujqF9lTCN/Epg/kObBOORSVAZ0DRawBHyRWDcscPwK8MhzQb2ZjRKGGK1L6OqaDQL5y9o0f2dqtuwMzGqJyaIL4Wrs3v0YbqD1w4G6pq/5NxfPpKyKqAbiCTGrutCo/dQaRF/YjPnQIDAQAB");
- pkr.addRecord("rte02", "amazon.co.uk", "p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ8ZPV/qBm64HtL09YSynw1kPGlSPb0ZGiqcKuXfMh36SZhzj0ejzl4gktXsaA7P1G59gsxtl47q58aFkDV/sfMCAwEAAQ==;");
- pkr.addRecord("bnpparibas.com", "bnpparibas.com", "t=y; k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhANNNDEMXsk1tiHUpJyNQjjRvO2FtxvD0+JcRiugSUpHysjlKpU8mghN7U12veeN8msqyIen4XExVIIQiJ8xNM3RSaqijRdfvP/8BKHB8jvMyeK6WXJa/epUXvEbc1LDbqQIDAQAB;");
- pkr.addRecord("dkim", "paypal.it", "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD3j+gKW1qBM+psRHXAdR7tI9QcKW0Ii723AzyTO4nrVmuJoKWHLoEEQw/Nc4XF7iyhfadorjqZZ9f+qDXQiKPyLJyVXs0qLrnJQ9BWlQP0xIiz7CTcoHwEhJ1XwgUI/2V6bNghMrnK2yiR/Vqt5lV5kx4+n1656EefGuOTuNmIWwIDAQAB");
- pkr.addRecord("emarsys2007", "reply.ebay.it", "t=y; k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAN0+C5B9PA1ZtdxRvF5hmETzHwQ2NvEmpHILm4afsY16Gw2JVEmwGuXUmyAmbAdQjERKbll1mFQ+9oPcmpr4uwcPHRfE6b2s8V4YK7vofxKJjZ+3PK6jtP4FMHXso/C1+wIDAQAB;");
- pkr.addRecord("q1-2009b", "facebookmail.com", "k=rsa; t=s; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKrBYvYESXSgiYzKNufh9WG8cktn2yrmdqGs9uz8VL6Mz44GuX8xJAQjpmPObe6p2vfTMWeztKEudwY6ei7UcZMCAwEAAQ==");
- pkr.addRecord("spop", "em.fileplanet.com", "g=; k=rsa; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALsyVo5aJtEzBm5p3+7N/7d0HfczMgJnsqapraAgMe+K2ng9gWsXvAugwh1/OlhzkA69ZCFck47qSN/wGFDwEFUCAwEAAQ==");
- pkr.addRecord("default", "bouncemanager.it", "v=DKIM1; g=*; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDUekin7hdVzGRw3k0iKRyg0MSj1PeC94A7wzOT0L9cQW0fIEeIM07bmAwbc4MgXnScPGiZnhPDVNxO40YUNbR9JOc+EoESSErWUCHeNYm7dyPG1aVEvfUT+OKprEwFldAdSv9c/C92otFdlWd8lSTuYiE1qNHhQim+7kzdV7SEUQIDAQAB");
- pkr.addRecord("default", "gfkresearch.com", "t=y; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAM26TUEN/IatWRhSiguj8RyDmeFRQJG8gaNjdaOOJ3AZuGeCG1W9NwlkgDv7UxUUx3AIkFbU/wsDFMe/RGItcK5vKEkUP0roJ1fCTtYsfTHhmnhXyJsmj0eDvbwDg6BzfwIDAQAB");
- pkr.addRecord("key1", "listrak.com", "k=rsa; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAPM8yO1kwQBzUUq6PP0epEshX1Vm7ThUrCddHgCn3b0llq8NRvGw5eOQBKySYngTkYyd5M0fImghDxxDsAnC9DsCAwEAAQ==");
- pkr.addRecord("mail", "emailsadvertiser.com", "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrf8/zzjRv85obYOx6GQjjNba/ m9uNLWKA53vHJNm/y69jM8+3rJr5eAAEJWpt7czNVkrWzwztfYRvai5Bs2Yvv5hS WbKl6Zr93s7I1HBn7MjCFZFW/MWeqlIydj+D8Zyy6ASqb9dYjD8qcLnncUse72du 6fEdEo/CR++P9x6sxwIDAQAB");
- pkr.addRecord("proddkim", "linkedin.com", "v=DKIM1; t=y:s; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAM+u1MLWZz+wOnU/C53PqLT4ITdkq+TC1xkWcoRMXq2FVH1kvXRxtqfbL4k5vYh7JVQ6nPrS+ldEpIbJzVaxhP5Kggi4SNfdf8GdbpGXcJj6SHKRFb8Mryp0ilk2XecLcQIDAQAB;");
- pkr.addRecord("s1024", "yahoo.com", "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB; n=A 1024 bit key;");
- pkr.addRecord("pmta", "myspace.com", "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChRebhcm4h8BkIYHRxg1GlKLsDkwdrqkFJ8f88xHQ5Gf3NH4I4e06M3XQ+B4tWWK/rX0srwXFgrJPzKZK+x7gN89nmqyM+NNaM+Wm2C0GjTpx6639zK3bAAGYCm0L9lGD7PgDxpWok+YogH0Ml4acEwDw/cnhErAWAnX8doPliawIDAQAB");
-
- try {
- new DKIMVerifier(pkr).verify(is);
- if (getName().startsWith("FAIL_")) fail("Expected failure");
- } catch (PermFailException e) {
- e.printStackTrace();
- if (!getName().startsWith("FAIL_")) fail(e.getMessage());
- }
- }
-
- public static Test suite() throws IOException {
- return new FileBasedTestSuite();
- }
-
- static class FileBasedTestSuite extends TestSuite {
-
- private static final File TESTS_FOLDER = new File(
- "main\\src\\test\\resources\\org\\apache\\james\\jdkim\\corpus");
-
- public FileBasedTestSuite() throws IOException {
- super();
- File dir = TESTS_FOLDER;
- File[] files = dir.listFiles();
-
- if (files != null) for (int i = 0; i < files.length; i++) {
- File f = files[i];
- if (f.getName().toLowerCase().endsWith(".eml")) {
- addTest(new FileBasedTest(f.getName().substring(0,
- f.getName().length() - 4), f));
- }
- }
- }
-
- public static File getFile(String name) {
- return new File(TESTS_FOLDER.getAbsolutePath() + File.separator
- + name + ".eml");
- }
+ public FileBasedTest(String testName) {
+ this(testName, FileBasedTestSuite.getFile(testName));
+ }
+
+ public FileBasedTest(String name, File testFile) {
+ super(name);
+ this.file = testFile;
+ }
+
+ protected void runTest() throws Throwable {
+ MimeTokenStream stream = new MimeTokenStream();
+ stream.setRecursionMode(MimeTokenStream.M_FLAT);
+
+ InputStream is = new FileInputStream(file);
+ // String msgoutFile = file.getAbsolutePath().substring(0,
+ // file.getAbsolutePath().lastIndexOf('.')) + ".out";
+
+ MockPublicKeyRecordRetriever pkr = new MockPublicKeyRecordRetriever();
+ pkr
+ .addRecord(
+ "domk",
+ "brainlounge.de",
+ "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMxdtsTy8K7yEHt+7DB4XH70Rd6v7rp2qai7gM1meDzlrwDlMzUi0mQC+dMY+AzmCE1jLNXAr3JL6kT8vD7KQai8avwGQzmlU3d0Z7etqTj1ttJQZxUTPM18bM3wVqc6h3Dppqx7kY91Td50r9MXBbu+DkhL1+RCfcPQxEvEf74QIDAQAB");
+ pkr
+ .addRecord(
+ "dkim",
+ "paypal.it",
+ "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD3j+gKW1qBM+psRHXAdR7tI9QcKW0Ii723AzyTO4nrVmuJoKWHLoEEQw/Nc4XF7iyhfadorjqZZ9f+qDXQiKPyLJyVXs0qLrnJQ9BWlQP0xIiz7CTcoHwEhJ1XwgUI/2V6bNghMrnK2yiR/Vqt5lV5kx4+n1656EefGuOTuNmIWwIDAQAB");
+ pkr
+ .addRecord(
+ "default",
+ "gfkresearch.com",
+ "t=y; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAM26TUEN/IatWRhSiguj8RyDmeFRQJG8gaNjdaOOJ3AZuGeCG1W9NwlkgDv7UxUUx3AIkFbU/wsDFMe/RGItcK5vKEkUP0roJ1fCTtYsfTHhmnhXyJsmj0eDvbwDg6BzfwIDAQAB");
+ pkr
+ .addRecord(
+ "2007-00",
+ "kitterman.com",
+ "v=DKIM1; g=*; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCp9+s7hHTlMje842UBfd8nBYvX0I1CJzltQJ9bLGAKHbyCBTKei/dYuuDICKArbcVZ+05UbJzxU6cstPOaEoPM+FMD/lUiGpJYLYUuzRP7Pd82YHKoAZbYflGYTck2e7x8vB7l8WeEgRJ0cJdHm871HbQmv67LZiN+9donmjl93wIDAQAB;");
+ pkr
+ .addRecord(
+ "beta",
+ "gmail.com",
+ "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC69TURXN3oNfz+G/m3g5rt4P6nsKmVgU1D6cw2X6BnxKJNlQKm10f8tMx6P6bN7juTR1BeD8ubaGqtzm2rWK4LiMJqhoQcwQziGbK1zp/MkdXZEWMCflLY6oUITrivK7JNOLXtZbdxJG2y/RAHGswKKyVhSP9niRsZF/IBr5p8uQIDAQAB");
+ pkr
+ .addRecord(
+ "gamma",
+ "gmail.com",
+ "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+ pkr
+ .addRecord(
+ "beta",
+ "google.com",
+ "k=rsa; t=y; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMs93oc95ObA7OEQEbqjIy6YvRj1u3yVGTzQ3wkwRQTWx1fhvNQenPNFklaL+Tw9XFYUc3f8eY0hs3WUNQ+t+I0CAwEAAQ==");
+ pkr
+ .addRecord(
+ "beta",
+ "googlegroups.com",
+ "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDs66DgKyXSlBvNCbi158TgsBzqh/n7GqCa2QwIORpNbndjlK8qaR9mb8gH9KG1S3ahZybrZT1N268dgF2VDWV14h1fpPMIj6KKoX6uzGomzIVdeGPmjZ7o3ZUaxHUWvwIEGlNv400xzBToSU44sXqQIwH5l08anWYw3sq9xBrI5wIDAQAB");
+ pkr
+ .addRecord(
+ "gamma",
+ "googlemail.com",
+ "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+ pkr
+ .addRecord(
+ "s768",
+ "t.contactlab.it",
+ "k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAMUUS6qlVpzbGQ3SCsGwpuVlC6gtw+BXMkFhm+jd57GXPtwpbOgr+UaHlbq6OnFAgrHxVx55RrSsTxixw0t0ePGkdBHjE7fURGphf+Mr1gzhvvLO6j1f1/60zvQPyay5UQIDAQAB");
+ pkr
+ .addRecord(
+ "s768",
+ "contactlab.it",
+ "k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAMUUS6qlVpzbGQ3SCsGwpuVlC6gtw+BXMkFhm+jd57GXPtwpbOgr+UaHlbq6OnFAgrHxVx55RrSsTxixw0t0ePGkdBHjE7fURGphf+Mr1gzhvvLO6j1f1/60zvQPyay5UQIDAQAB");
+ pkr
+ .addRecord(
+ "emailroi",
+ "mediapost.com",
+ "g=; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC61RrUNTIcNbf/+f5Co2V37GMvPQdbUVyjgvLXrUKAXeJDwYVumAtE9BovuDZNYxcgG2oy7mkcZX/3rBF2SJX9Cp5yw0axuMpzkuzPQq26h+2+MLuvtJtfDIaHgNeEJOjMeq7s9RFQHRr9g26lkZQTRAob8YevaA9KHiNNyIaZuQIDAQAB;");
+ pkr
+ .addRecord(
+ "dkim_s1024",
+ "aweber.com",
+ "v=DKIM1; k=rsa; h=sha1; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRAeDcyfWZQQ9sv+qRMQVTda/9yyYMo9qdI+h3i4U68+rrEruEoxLaa0JJw6OwFXzQ9x9raHZjroHsySzzQbIiZLj9o4IoCqpt5v0xd45+ABhQM6DyzHZDgIFcMtYIzEjaKLzkVpNeS9qr8Cra7CLtSqCbdAjGyUgVLveHrxNP9wIDAQAB");
+ pkr
+ .addRecord(
+ "itunes",
+ "new-music.itunes.com",
+ "v=DKIM1; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMTdhQ9CBNvwYGPkggikcMqT90O4JAzPfxtPaeJ1CgfTlXk0GL3OTz1nfeN3w2ybTpIKYRLrW23Qppaunpb/3dMCAwEAAQ==;");
+ pkr
+ .addRecord(
+ "lima",
+ "yahoogroups.com",
+ "k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAL10WHRWMSb9Tnl+k4Kzpc18rDCTpDT1pbK0xwkdZIZkaP8NB75qa/S57xccZlIwbI22Ooy/IY+8WxQtvE2z4WLLNOf9hkMeicUH48TGkEoCAcaSjJz/b3NMrOy9l1U7gQIDAP//");
+ pkr
+ .addRecord(
+ "s1024",
+ "yahoo.co.in",
+ "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB; n=A 1024 bit key;");
+ pkr
+ .addRecord(
+ "k1",
+ "adidasnewsletter.com",
+ "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3VqSTEgEkHtfDiMCzoYtY1wjcArcmb+efQJfzX4zJA60IEA/NmOaHP8Gu02vscLbJWT/mwGlZwr2Q53g9VMQOyoODD5ju1EwJwlioVQ1W7xSjogMTz8yzmWhcMUzXQOu/iD+7sdJP0+k7pCumPMbxEeN33At7HxoYVCSkNdUB9QIDAQAB");
+ pkr
+ .addRecord(
+ "200505",
+ "yahoo-email.com",
+ "t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDaMFcW5fNoye1Xo7BT/lKCHThjn1QaVdcxoAy7Y1m2tXnR3X+qUxFRaoyReTVlxfO8vaIPSbJ2Pm6+sZkC0lH/6Ok+i0RDhtd7bq9oLFKclfMGQlphBB185c1zDKNTs7GyAyjSM7pEzx5Dai+YTE9/+GYhdbEWmGBS9TsXnTCKPQIDAQAB");
+ pkr
+ .addRecord(
+ "v1",
+ "alerts.hp.com",
+ "k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAPSCrSVhxHa6F3EpDjnw6xdpfTv8sNz5Plbl3b3Zqq9WVVg2j5+748EkwtvzQlA6TQuZIOrpSHJkP0nEyCR5GatNasOKPWFO47VSLFO9AJbsc34eGUUTF49bBIACiE4b9wIDAQAB");
+ pkr
+ .addRecord(
+ "v1",
+ "rodale.delivery.net",
+ "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWWvSsm60Wx178Y7pET3m/UZaof+qtRxZa8RXfyTIiGYMXJFwHgd3VrTLF6xmoCyRC1kfv3k7nPujkGFydBCoRK/vCN/1e4yHAsSwh/ElTO5dqylvP77PJyiaME582m4wXf095NBXJZlHUlXb7SWDdmCeU5uXfcR0EJU0eRewflQIDAQAB");
+ pkr
+ .addRecord(
+ "domk",
+ "brainlounge.de",
+ "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMxdtsTy8K7yEHt+7DB4XH70Rd6v7rp2qai7gM1meDzlrwDlMzUi0mQC+dMY+AzmCE1jLNXAr3JL6kT8vD7KQai8avwGQzmlU3d0Z7etqTj1ttJQZxUTPM18bM3wVqc6h3Dppqx7kY91Td50r9MXBbu+DkhL1+RCfcPQxEvEf74QIDAQAB");
+ pkr
+ .addRecord(
+ "spop",
+ "newsletters.play.com",
+ "g=; k=rsa; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOaOtP9KfyxvWET0yXoL2ugcas2SjoBZ+40oZ6/twAEtW224fcuvOFiNS+XpPq5LNW96NYAuxJPBlwLoYlHRUQkCAwEAAQ==");
+ pkr
+ .addRecord(
+ "ironport-dkim",
+ "ironport.com",
+ "p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJqzyi+tkPHw4hrcTSJBXTh3m2koCKP0+J6/r+yVVg7VoRKPz/tguE+M6fF0oqLk5Fci+tE8HFS3HLkl0au17CcCAwEAAQ==;");
+ pkr
+ .addRecord(
+ "smtp-out",
+ "abv.bg",
+ "g=*; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPShtI1XjhVGpVrKyBuFP5K0jqFqy5gC8GujqF9lTCN/Epg/kObBOORSVAZ0DRawBHyRWDcscPwK8MhzQb2ZjRKGGK1L6OqaDQL5y9o0f2dqtuwMzGqJyaIL4Wrs3v0YbqD1w4G6pq/5NxfPpKyKqAbiCTGrutCo/dQaRF/YjPnQIDAQAB");
+ pkr
+ .addRecord(
+ "rte02",
+ "amazon.co.uk",
+ "p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ8ZPV/qBm64HtL09YSynw1kPGlSPb0ZGiqcKuXfMh36SZhzj0ejzl4gktXsaA7P1G59gsxtl47q58aFkDV/sfMCAwEAAQ==;");
+ pkr
+ .addRecord(
+ "bnpparibas.com",
+ "bnpparibas.com",
+ "t=y; k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhANNNDEMXsk1tiHUpJyNQjjRvO2FtxvD0+JcRiugSUpHysjlKpU8mghN7U12veeN8msqyIen4XExVIIQiJ8xNM3RSaqijRdfvP/8BKHB8jvMyeK6WXJa/epUXvEbc1LDbqQIDAQAB;");
+ pkr
+ .addRecord(
+ "dkim",
+ "paypal.it",
+ "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD3j+gKW1qBM+psRHXAdR7tI9QcKW0Ii723AzyTO4nrVmuJoKWHLoEEQw/Nc4XF7iyhfadorjqZZ9f+qDXQiKPyLJyVXs0qLrnJQ9BWlQP0xIiz7CTcoHwEhJ1XwgUI/2V6bNghMrnK2yiR/Vqt5lV5kx4+n1656EefGuOTuNmIWwIDAQAB");
+ pkr
+ .addRecord(
+ "emarsys2007",
+ "reply.ebay.it",
+ "t=y; k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAN0+C5B9PA1ZtdxRvF5hmETzHwQ2NvEmpHILm4afsY16Gw2JVEmwGuXUmyAmbAdQjERKbll1mFQ+9oPcmpr4uwcPHRfE6b2s8V4YK7vofxKJjZ+3PK6jtP4FMHXso/C1+wIDAQAB;");
+ pkr
+ .addRecord(
+ "q1-2009b",
+ "facebookmail.com",
+ "k=rsa; t=s; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKrBYvYESXSgiYzKNufh9WG8cktn2yrmdqGs9uz8VL6Mz44GuX8xJAQjpmPObe6p2vfTMWeztKEudwY6ei7UcZMCAwEAAQ==");
+ pkr
+ .addRecord(
+ "spop",
+ "em.fileplanet.com",
+ "g=; k=rsa; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALsyVo5aJtEzBm5p3+7N/7d0HfczMgJnsqapraAgMe+K2ng9gWsXvAugwh1/OlhzkA69ZCFck47qSN/wGFDwEFUCAwEAAQ==");
+ pkr
+ .addRecord(
+ "default",
+ "bouncemanager.it",
+ "v=DKIM1; g=*; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDUekin7hdVzGRw3k0iKRyg0MSj1PeC94A7wzOT0L9cQW0fIEeIM07bmAwbc4MgXnScPGiZnhPDVNxO40YUNbR9JOc+EoESSErWUCHeNYm7dyPG1aVEvfUT+OKprEwFldAdSv9c/C92otFdlWd8lSTuYiE1qNHhQim+7kzdV7SEUQIDAQAB");
+ pkr
+ .addRecord(
+ "default",
+ "gfkresearch.com",
+ "t=y; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAM26TUEN/IatWRhSiguj8RyDmeFRQJG8gaNjdaOOJ3AZuGeCG1W9NwlkgDv7UxUUx3AIkFbU/wsDFMe/RGItcK5vKEkUP0roJ1fCTtYsfTHhmnhXyJsmj0eDvbwDg6BzfwIDAQAB");
+ pkr
+ .addRecord(
+ "key1",
+ "listrak.com",
+ "k=rsa; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAPM8yO1kwQBzUUq6PP0epEshX1Vm7ThUrCddHgCn3b0llq8NRvGw5eOQBKySYngTkYyd5M0fImghDxxDsAnC9DsCAwEAAQ==");
+ pkr
+ .addRecord(
+ "mail",
+ "emailsadvertiser.com",
+ "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrf8/zzjRv85obYOx6GQjjNba/ m9uNLWKA53vHJNm/y69jM8+3rJr5eAAEJWpt7czNVkrWzwztfYRvai5Bs2Yvv5hS WbKl6Zr93s7I1HBn7MjCFZFW/MWeqlIydj+D8Zyy6ASqb9dYjD8qcLnncUse72du 6fEdEo/CR++P9x6sxwIDAQAB");
+ pkr
+ .addRecord(
+ "proddkim",
+ "linkedin.com",
+ "v=DKIM1; t=y:s; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAM+u1MLWZz+wOnU/C53PqLT4ITdkq+TC1xkWcoRMXq2FVH1kvXRxtqfbL4k5vYh7JVQ6nPrS+ldEpIbJzVaxhP5Kggi4SNfdf8GdbpGXcJj6SHKRFb8Mryp0ilk2XecLcQIDAQAB;");
+ pkr
+ .addRecord(
+ "s1024",
+ "yahoo.com",
+ "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB; n=A 1024 bit key;");
+ pkr
+ .addRecord(
+ "pmta",
+ "myspace.com",
+ "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChRebhcm4h8BkIYHRxg1GlKLsDkwdrqkFJ8f88xHQ5Gf3NH4I4e06M3XQ+B4tWWK/rX0srwXFgrJPzKZK+x7gN89nmqyM+NNaM+Wm2C0GjTpx6639zK3bAAGYCm0L9lGD7PgDxpWok+YogH0Ml4acEwDw/cnhErAWAnX8doPliawIDAQAB");
+
+ try {
+ new DKIMVerifier(pkr).verify(is);
+ if (getName().startsWith("FAIL_"))
+ fail("Expected failure");
+ } catch (PermFailException e) {
+ e.printStackTrace();
+ if (!getName().startsWith("FAIL_"))
+ fail(e.getMessage());
+ }
+ }
+
+ public static Test suite() throws IOException {
+ return new FileBasedTestSuite();
+ }
+
+ static class FileBasedTestSuite extends TestSuite {
+
+ private static final File TESTS_FOLDER = new File(
+ "main\\src\\test\\resources\\org\\apache\\james\\jdkim\\corpus");
+
+ public FileBasedTestSuite() throws IOException {
+ super();
+ File dir = TESTS_FOLDER;
+ File[] files = dir.listFiles();
+
+ if (files != null)
+ for (int i = 0; i < files.length; i++) {
+ File f = files[i];
+ if (f.getName().toLowerCase().endsWith(".eml")) {
+ addTest(new FileBasedTest(f.getName().substring(0,
+ f.getName().length() - 4), f));
+ }
+ }
+ }
+
+ public static File getFile(String name) {
+ return new File(TESTS_FOLDER.getAbsolutePath() + File.separator
+ + name + ".eml");
+ }
- }
+ }
}
\ No newline at end of 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=824090&r1=824089&r2=824090&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 15:35:32 2009
@@ -34,87 +34,85 @@
public class MessageTest extends TestCase {
- public void testMessage() throws IOException, MimeException {
- String m = "";
- new Message(new ByteArrayInputStream(m.getBytes()));
- }
-
- public void testMessageInputStream() throws IOException, MimeException {
- String m = "Subject: test\r\n\r\nbody";
- new Message(new ByteArrayInputStream(m.getBytes()));
- }
-
- public void testGetBodyInputStream() throws IOException, MimeException {
- String text = "Subject: test\r\n\r\nbody";
- Message m = new Message(new ByteArrayInputStream(text.getBytes()));
- InputStream is = m.getBodyInputStream();
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- byte[] buff = new byte[200];
- int read;
- while ((read = is.read(buff)) > 0) {
- bos.write(buff, 0, read);
- }
- assertEquals("body", new String(bos.toByteArray()));
- }
-
- public void testAddField() throws MimeException {
- Message m = new Message();
- m.addField("Subject", "Subject: test\r\n");
- m.addField("Subject", "Subject: test2\r\n");
- List f = m.getFields("Subject");
- assertEquals(2, f.size());
- assertEquals("Subject: test\r\n", f.get(0));
- assertEquals("Subject: test2\r\n", f.get(1));
- }
-
- public void testGetFields() throws MimeException {
- Message m = new Message();
- m.addField("Subject", "Subject: test\r\n");
- m.addField("Subject", "Subject: test2\r\n");
- m.addField("From", "From: test2\r\n");
- List f = m.getFields();
- List expects = new LinkedList();
- expects.add("Subject: test\r\n");
- expects.add("Subject: test2\r\n");
- expects.add("From: test2\r\n");
- for (Iterator i = f.iterator(); i.hasNext(); ) {
- String field = (String) i.next();
- assertTrue(expects.remove(field));
- }
- assertEquals(0, expects.size());
- }
-
- /*
- public void testGetField() throws MimeException, IOException {
- String text = "Subject: test\r\n\r\nbody";
- Headers m = new Message(new ByteArrayInputStream(text.getBytes()));
- Field f = m.getField("Subject");
- assertEquals(" test", f.getBody());
- }
- */
-
- public void testGetFieldsString() throws MimeException {
- Message m = new Message();
- m.addField("Subject", "Subject: test\r\n");
- m.addField("subject", "subject: test2\r\n");
- m.addField("From", "From: test2\r\n");
- List f = m.getFields("Subject");
- List expects = new LinkedList();
- expects.add("Subject: test\r\n");
- expects.add("subject: test2\r\n");
- for (Iterator i = f.iterator(); i.hasNext(); ) {
- String field = (String) i.next();
- assertTrue(expects.remove(field));
- }
- assertEquals(0, expects.size());
- }
-
- public void testToString() throws MimeException {
- Message m = new Message();
- m.addField("Subject", "Subject: test\r\n");
- m.setBodyInputStream(new ByteArrayInputStream("body".getBytes()));
- String expected = "Subject: test\r\n\r\nbody";
- assertEquals(expected, m.toString());
- }
+ public void testMessage() throws IOException, MimeException {
+ String m = "";
+ new Message(new ByteArrayInputStream(m.getBytes()));
+ }
+
+ public void testMessageInputStream() throws IOException, MimeException {
+ String m = "Subject: test\r\n\r\nbody";
+ new Message(new ByteArrayInputStream(m.getBytes()));
+ }
+
+ public void testGetBodyInputStream() throws IOException, MimeException {
+ String text = "Subject: test\r\n\r\nbody";
+ Message m = new Message(new ByteArrayInputStream(text.getBytes()));
+ InputStream is = m.getBodyInputStream();
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ byte[] buff = new byte[200];
+ int read;
+ while ((read = is.read(buff)) > 0) {
+ bos.write(buff, 0, read);
+ }
+ assertEquals("body", new String(bos.toByteArray()));
+ }
+
+ public void testAddField() throws MimeException {
+ Message m = new Message();
+ m.addField("Subject", "Subject: test\r\n");
+ m.addField("Subject", "Subject: test2\r\n");
+ List f = m.getFields("Subject");
+ assertEquals(2, f.size());
+ assertEquals("Subject: test\r\n", f.get(0));
+ assertEquals("Subject: test2\r\n", f.get(1));
+ }
+
+ public void testGetFields() throws MimeException {
+ Message m = new Message();
+ m.addField("Subject", "Subject: test\r\n");
+ m.addField("Subject", "Subject: test2\r\n");
+ m.addField("From", "From: test2\r\n");
+ List f = m.getFields();
+ List expects = new LinkedList();
+ expects.add("Subject: test\r\n");
+ expects.add("Subject: test2\r\n");
+ expects.add("From: test2\r\n");
+ for (Iterator i = f.iterator(); i.hasNext();) {
+ String field = (String) i.next();
+ assertTrue(expects.remove(field));
+ }
+ assertEquals(0, expects.size());
+ }
+
+ /*
+ * public void testGetField() throws MimeException, IOException { String
+ * text = "Subject: test\r\n\r\nbody"; Headers m = new Message(new
+ * ByteArrayInputStream(text.getBytes())); Field f = m.getField("Subject");
+ * assertEquals(" test", f.getBody()); }
+ */
+
+ public void testGetFieldsString() throws MimeException {
+ Message m = new Message();
+ m.addField("Subject", "Subject: test\r\n");
+ m.addField("subject", "subject: test2\r\n");
+ m.addField("From", "From: test2\r\n");
+ List f = m.getFields("Subject");
+ List expects = new LinkedList();
+ expects.add("Subject: test\r\n");
+ expects.add("subject: test2\r\n");
+ for (Iterator i = f.iterator(); i.hasNext();) {
+ String field = (String) i.next();
+ assertTrue(expects.remove(field));
+ }
+ assertEquals(0, expects.size());
+ }
+
+ public void testToString() throws MimeException {
+ Message m = new Message();
+ m.addField("Subject", "Subject: test\r\n");
+ m.setBodyInputStream(new ByteArrayInputStream("body".getBytes()));
+ String expected = "Subject: test\r\n\r\nbody";
+ assertEquals(expected, m.toString());
+ }
}
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=824090&r1=824089&r2=824090&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 15:35:32 2009
@@ -29,40 +29,45 @@
import org.apache.james.jdkim.exceptions.TempFailException;
/**
- * This is a mock public key record retriever that store the "registry" in a local map.
+ * This is a mock public key record retriever that store the "registry" in a
+ * local map.
*/
-public class MockPublicKeyRecordRetriever implements
- PublicKeyRecordRetriever {
- private static final String _DOMAINKEY = "._domainkey.";
- private Map/* String, List<String> */ records = new HashMap();
-
- public void addRecord(String selector, String token, String record) {
- String key = selector+_DOMAINKEY+token;
- List l = (List) records.get(key);
- if (l == null) {
- l = new LinkedList();
- records.put(key, l);
- }
- if (record != null) {
- l.add(record);
- }
- }
-
- public MockPublicKeyRecordRetriever() {
-
- }
-
- public MockPublicKeyRecordRetriever(String record, CharSequence selector, CharSequence token) {
- addRecord(selector.toString(), token.toString(), record);
- }
-
- public List getRecords(CharSequence methodAndOptions, CharSequence selector, CharSequence token)
- throws TempFailException, PermFailException {
- if ("dns/txt".equals(methodAndOptions)) {
- String search = selector+_DOMAINKEY+token;
- List res = (List) records.get(search);
- if (res == null || res.size() > 0) return res;
- else throw new TempFailException("Timout or servfail");
- } else throw new PermFailException("Unsupported method");
- }
+public class MockPublicKeyRecordRetriever implements PublicKeyRecordRetriever {
+ private static final String _DOMAINKEY = "._domainkey.";
+ private Map/* String, List<String> */records = new HashMap();
+
+ public void addRecord(String selector, String token, String record) {
+ String key = selector + _DOMAINKEY + token;
+ List l = (List) records.get(key);
+ if (l == null) {
+ l = new LinkedList();
+ records.put(key, l);
+ }
+ if (record != null) {
+ l.add(record);
+ }
+ }
+
+ public MockPublicKeyRecordRetriever() {
+
+ }
+
+ public MockPublicKeyRecordRetriever(String record, CharSequence selector,
+ CharSequence token) {
+ addRecord(selector.toString(), token.toString(), record);
+ }
+
+ public List getRecords(CharSequence methodAndOptions,
+ CharSequence selector, CharSequence token)
+ throws TempFailException, PermFailException {
+ if ("dns/txt".equals(methodAndOptions)) {
+ String search = selector + _DOMAINKEY + token;
+ List res = (List) records.get(search);
+ if (res == null || res.size() > 0)
+ return res;
+ else
+ throw new TempFailException("Timout or servfail");
+ } else
+ throw new PermFailException("Unsupported method");
+ }
}
\ No newline at end of file
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=824090&r1=824089&r2=824090&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 15:35:32 2009
@@ -33,56 +33,59 @@
public class MultiplexingPublicKeyRecordRetrieverTest extends TestCase {
- private PublicKeyRecordRetriever myMethodRetriever = new PublicKeyRecordRetriever() {
+ private PublicKeyRecordRetriever myMethodRetriever = new PublicKeyRecordRetriever() {
- public List getRecords(CharSequence methodAndOption,
- CharSequence selector, CharSequence token)
- throws TempFailException, PermFailException {
- List l = new ArrayList();
- l.add(selector.toString());
- l.add(token.toString());
- return l;
- }
-
- };
-
- public void testMultiplexingPublicKeyRecordRetriever() {
- MultiplexingPublicKeyRecordRetriever pkrr = new MultiplexingPublicKeyRecordRetriever();
- try {
- pkrr.getRecords("method", "selector", "token");
- fail("method is unknown");
- } catch (FailException e) {
- }
- }
-
- public void testMultiplexingPublicKeyRecordRetrieverStringPublicKeyRecordRetriever() throws TempFailException, PermFailException {
- MultiplexingPublicKeyRecordRetriever pkrr = new MultiplexingPublicKeyRecordRetriever("mymethod", myMethodRetriever);
- check(pkrr, "mymethod");
- }
-
- private void check(MultiplexingPublicKeyRecordRetriever pkrr, String method)
- throws TempFailException, PermFailException {
- List l = pkrr.getRecords(method, "selector", "token");
- Iterator i = l.iterator();
- assertEquals("selector", i.next());
- assertEquals("token", i.next());
- try {
- l = pkrr.getRecords("anothermethod", "selector", "token");
- fail("anothermethod is not declared");
- } catch (FailException e) {
- }
- }
-
- public void testAddRetriever() throws TempFailException, PermFailException {
- MultiplexingPublicKeyRecordRetriever pkrr = new MultiplexingPublicKeyRecordRetriever();
- pkrr.addRetriever("mymethod", myMethodRetriever);
- check(pkrr, "mymethod");
- }
-
- public void testAddRetrieverWithOptions() throws TempFailException, PermFailException {
- MultiplexingPublicKeyRecordRetriever pkrr = new MultiplexingPublicKeyRecordRetriever();
- pkrr.addRetriever("mymethod", myMethodRetriever);
- check(pkrr, "mymethod/option");
- }
+ public List getRecords(CharSequence methodAndOption,
+ CharSequence selector, CharSequence token)
+ throws TempFailException, PermFailException {
+ List l = new ArrayList();
+ l.add(selector.toString());
+ l.add(token.toString());
+ return l;
+ }
+
+ };
+
+ public void testMultiplexingPublicKeyRecordRetriever() {
+ MultiplexingPublicKeyRecordRetriever pkrr = new MultiplexingPublicKeyRecordRetriever();
+ try {
+ pkrr.getRecords("method", "selector", "token");
+ fail("method is unknown");
+ } catch (FailException e) {
+ }
+ }
+
+ public void testMultiplexingPublicKeyRecordRetrieverStringPublicKeyRecordRetriever()
+ throws TempFailException, PermFailException {
+ MultiplexingPublicKeyRecordRetriever pkrr = new MultiplexingPublicKeyRecordRetriever(
+ "mymethod", myMethodRetriever);
+ check(pkrr, "mymethod");
+ }
+
+ private void check(MultiplexingPublicKeyRecordRetriever pkrr, String method)
+ throws TempFailException, PermFailException {
+ List l = pkrr.getRecords(method, "selector", "token");
+ Iterator i = l.iterator();
+ assertEquals("selector", i.next());
+ assertEquals("token", i.next());
+ try {
+ l = pkrr.getRecords("anothermethod", "selector", "token");
+ fail("anothermethod is not declared");
+ } catch (FailException e) {
+ }
+ }
+
+ public void testAddRetriever() throws TempFailException, PermFailException {
+ MultiplexingPublicKeyRecordRetriever pkrr = new MultiplexingPublicKeyRecordRetriever();
+ pkrr.addRetriever("mymethod", myMethodRetriever);
+ check(pkrr, "mymethod");
+ }
+
+ public void testAddRetrieverWithOptions() throws TempFailException,
+ PermFailException {
+ MultiplexingPublicKeyRecordRetriever pkrr = new MultiplexingPublicKeyRecordRetriever();
+ pkrr.addRetriever("mymethod", myMethodRetriever);
+ check(pkrr, "mymethod/option");
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org