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 rc...@apache.org on 2025/03/24 02:21:03 UTC
(james-jdkim) branch master updated (1cfa4e9 -> 7e382bb)
This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/james-jdkim.git
from 1cfa4e9 Add dependency-reduced-pom to gitignore (#22)
new 8dd50bb Store SignatureRecord in FailException
new 7e382bb Pass SignatureRecord to PermFailException
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../java/org/apache/james/jdkim/DKIMSigner.java | 6 +--
.../java/org/apache/james/jdkim/DKIMVerifier.java | 44 +++++++++++-----------
.../james/jdkim/exceptions/FailException.java | 17 +++++++--
.../james/jdkim/exceptions/PermFailException.java | 11 +++++-
.../apache/james/jdkim/impl/BodyHasherImpl.java | 6 +--
5 files changed, 50 insertions(+), 34 deletions(-)
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
(james-jdkim) 01/02: Store SignatureRecord in FailException
Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-jdkim.git
commit 8dd50bb8907549ce0cf43c5b4d216d14cab83ff2
Author: Emerson Pinter <e...@pinter.dev>
AuthorDate: Thu Mar 20 13:47:57 2025 -0300
Store SignatureRecord in FailException
With this change is possible to use other fields like selector to generate
a results header.
---
.../main/java/org/apache/james/jdkim/DKIMVerifier.java | 18 +++++++++---------
.../apache/james/jdkim/exceptions/FailException.java | 17 +++++++++++++----
.../james/jdkim/exceptions/PermFailException.java | 11 +++++++++--
3 files changed, 31 insertions(+), 15 deletions(-)
diff --git a/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java b/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java
index 546c01c..2648a5e 100644
--- a/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java
+++ b/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java
@@ -119,27 +119,27 @@ public class DKIMVerifier extends DKIMCommon {
.matches()) {
throw new PermFailException("inapplicable key identity local="
+ sign.getIdentityLocalPart() + " Pattern: "
- + pkr.getGranularityPattern().pattern(), sign.getIdentity().toString());
+ + pkr.getGranularityPattern().pattern(), sign);
}
if (!pkr.isHashMethodSupported(sign.getHashMethod())) {
throw new PermFailException("inappropriate hash for a="
- + sign.getHashKeyType() + "/" + sign.getHashMethod(), sign.getIdentity().toString());
+ + sign.getHashKeyType() + "/" + sign.getHashMethod(), sign);
}
if (!pkr.isKeyTypeSupported(sign.getHashKeyType())) {
throw new PermFailException("inappropriate key type for a="
- + sign.getHashKeyType() + "/" + sign.getHashMethod(), sign.getIdentity().toString());
+ + sign.getHashKeyType() + "/" + sign.getHashMethod(), sign);
}
if (pkr.isDenySubdomains()) {
if (!sign.getIdentity().toString().toLowerCase().endsWith(
("@" + sign.getDToken()).toLowerCase())) {
throw new PermFailException(
- "AUID in subdomain of SDID is not allowed by the public key record.", sign.getIdentity().toString());
+ "AUID in subdomain of SDID is not allowed by the public key record.", sign);
}
}
} catch (IllegalStateException e) {
- throw new PermFailException("Invalid public key: " + e.getMessage(), sign.getIdentity().toString());
+ throw new PermFailException("Invalid public key: " + e.getMessage(), sign);
}
}
@@ -179,16 +179,16 @@ public class DKIMVerifier extends DKIMCommon {
}
if (key == null) {
if (lastTempFailure != null) {
- if (sign != null) lastTempFailure.setRelatedRecordIdentity(sign.getIdentity().toString());
+ if (sign != null) lastTempFailure.setRelatedRecord(sign);
throw lastTempFailure;
} else if (lastPermFailure != null) {
- if (sign != null) lastPermFailure.setRelatedRecordIdentity(sign.getIdentity().toString());
+ if (sign != null) lastPermFailure.setRelatedRecord(sign);
throw lastPermFailure;
} // this is unexpected because the publicKeySelector always returns
// null or exception
else {
throw new PermFailException(
- "no key for signature [unexpected condition]", sign.getIdentity().toString());
+ "no key for signature [unexpected condition]", sign);
}
}
return key;
@@ -482,7 +482,7 @@ public class DKIMVerifier extends DKIMCommon {
signatureCheck(h, sign, headers, signature);
if (!signature.verify(decoded))
- throw new PermFailException("Header signature does not verify");
+ throw new PermFailException("Header signature does not verify", sign);
} catch (InvalidKeyException e) {
throw new PermFailException(e.getMessage(), e);
} catch (NoSuchAlgorithmException e) {
diff --git a/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java b/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java
index 17cc7d0..cf33fe0 100644
--- a/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java
+++ b/main/src/main/java/org/apache/james/jdkim/exceptions/FailException.java
@@ -19,11 +19,13 @@
package org.apache.james.jdkim.exceptions;
+import org.apache.james.jdkim.api.SignatureRecord;
+
public class FailException extends Exception {
private static final long serialVersionUID = 1584103235607992818L;
- private String relatedRecordIdentity = null;
+ private SignatureRecord relatedRecord = null;
public FailException(String error) {
super(error);
@@ -34,10 +36,17 @@ public class FailException extends Exception {
}
public String getRelatedRecordIdentity() {
- return relatedRecordIdentity;
+ if(relatedRecord != null) {
+ return relatedRecord.getIdentity().toString();
+ }
+ return null;
+ }
+
+ public SignatureRecord getRelatedRecord() {
+ return relatedRecord;
}
- public void setRelatedRecordIdentity(String relatedRecordIdentity) {
- this.relatedRecordIdentity = relatedRecordIdentity;
+ public void setRelatedRecord(SignatureRecord relatedRecord) {
+ this.relatedRecord = relatedRecord;
}
}
diff --git a/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java b/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java
index 2673e86..2fe72ff 100644
--- a/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java
+++ b/main/src/main/java/org/apache/james/jdkim/exceptions/PermFailException.java
@@ -20,6 +20,8 @@
package org.apache.james.jdkim.exceptions;
+import org.apache.james.jdkim.api.SignatureRecord;
+
public class PermFailException extends FailException {
private static final long serialVersionUID = 1304736020453821093L;
@@ -32,9 +34,14 @@ public class PermFailException extends FailException {
super(string, e);
}
- public PermFailException(String string, String signatureIdentity) {
+ public PermFailException(String string, SignatureRecord signatureRecord, Exception e) {
+ super(string, e);
+ setRelatedRecord(signatureRecord);
+ }
+
+ public PermFailException(String string, SignatureRecord signatureRecord) {
super(string);
- setRelatedRecordIdentity(signatureIdentity);
+ setRelatedRecord(signatureRecord);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
(james-jdkim) 02/02: Pass SignatureRecord to PermFailException
Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-jdkim.git
commit 7e382bb3a99cff9ab94620d025a8bd6cb635febd
Author: Emerson Pinter <e...@pinter.dev>
AuthorDate: Thu Mar 20 17:28:54 2025 -0300
Pass SignatureRecord to PermFailException
---
.../java/org/apache/james/jdkim/DKIMSigner.java | 6 ++---
.../java/org/apache/james/jdkim/DKIMVerifier.java | 26 +++++++++++-----------
.../apache/james/jdkim/impl/BodyHasherImpl.java | 6 ++---
3 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/main/src/main/java/org/apache/james/jdkim/DKIMSigner.java b/main/src/main/java/org/apache/james/jdkim/DKIMSigner.java
index bee8fdf..1a91c1e 100644
--- a/main/src/main/java/org/apache/james/jdkim/DKIMSigner.java
+++ b/main/src/main/java/org/apache/james/jdkim/DKIMSigner.java
@@ -121,12 +121,12 @@ public class DKIMSigner extends DKIMCommon {
return "DKIM-Signature:" + bhj.getSignatureRecord().toString();
} catch (InvalidKeyException e) {
- throw new PermFailException("Invalid key: " + e.getMessage(), e);
+ throw new PermFailException("Invalid key: " + e.getMessage(), bhj.getSignatureRecord(), e);
} catch (NoSuchAlgorithmException e) {
- throw new PermFailException("Unknown algorythm: " + e.getMessage(),
+ throw new PermFailException("Unknown algorythm: " + e.getMessage(), bhj.getSignatureRecord(),
e);
} catch (SignatureException e) {
- throw new PermFailException("Signing exception: " + e.getMessage(),
+ throw new PermFailException("Signing exception: " + e.getMessage(), bhj.getSignatureRecord(),
e);
}
}
diff --git a/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java b/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java
index 2648a5e..2b1966d 100644
--- a/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java
+++ b/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java
@@ -246,13 +246,13 @@ public class DKIMVerifier extends DKIMCommon {
if (pos > 0) {
String v = signatureField.substring(pos + 1, signatureField
.length());
- SignatureRecord signatureRecord;
+ SignatureRecord signatureRecord = null;
try {
signatureRecord = newSignatureRecord(v);
// validate
signatureRecord.validate();
} catch (IllegalStateException e) {
- throw new PermFailException("Invalid signature record: " + e.getMessage(), e);
+ throw new PermFailException("Invalid signature record: " + e.getMessage(), signatureRecord, e);
}
// Specification say we MAY refuse to verify the signature.
@@ -261,22 +261,22 @@ public class DKIMVerifier extends DKIMCommon {
long elapsed = (System.currentTimeMillis() / 1000 - signedTime);
if (elapsed < -3600 * 24 * 365 * 3) {
throw new PermFailException("Signature date is more than "
- + -elapsed / (3600 * 24 * 365) + " years in the future.");
+ + -elapsed / (3600 * 24 * 365) + " years in the future.", signatureRecord);
} else if (elapsed < -3600 * 24 * 30 * 3) {
throw new PermFailException("Signature date is more than "
- + -elapsed / (3600 * 24 * 30) + " months in the future.");
+ + -elapsed / (3600 * 24 * 30) + " months in the future.", signatureRecord);
} else if (elapsed < -3600 * 24 * 3) {
throw new PermFailException("Signature date is more than "
- + -elapsed / (3600 * 24) + " days in the future.");
+ + -elapsed / (3600 * 24) + " days in the future.", signatureRecord);
} else if (elapsed < -3600 * 3) {
throw new PermFailException("Signature date is more than "
- + -elapsed / 3600 + " hours in the future.");
+ + -elapsed / 3600 + " hours in the future.", signatureRecord);
} else if (elapsed < -60 * 3) {
throw new PermFailException("Signature date is more than "
- + -elapsed / 60 + " minutes in the future.");
+ + -elapsed / 60 + " minutes in the future.", signatureRecord);
} else if (elapsed < 0) {
throw new PermFailException("Signature date is "
- + elapsed + " seconds in the future.");
+ + elapsed + " seconds in the future.", signatureRecord);
}
}
@@ -403,7 +403,7 @@ public class DKIMVerifier extends DKIMCommon {
.put(
"DKIM-Signature:" + bhj.getSignatureRecord().toString(),
new PermFailException(
- "Computed bodyhash is different from the expected one"));
+ "Computed bodyhash is different from the expected one", bhj.getSignatureRecord()));
} else {
verifiedSignatures.add(bhj.getSignatureRecord());
}
@@ -475,7 +475,7 @@ public class DKIMVerifier extends DKIMCommon {
try {
publicKey = key.getPublicKey();
} catch (IllegalStateException e) {
- throw new PermFailException("Invalid Public Key: " + e.getMessage(), e);
+ throw new PermFailException("Invalid Public Key: " + e.getMessage(), sign, e);
}
signature.initVerify(publicKey);
@@ -484,11 +484,11 @@ public class DKIMVerifier extends DKIMCommon {
if (!signature.verify(decoded))
throw new PermFailException("Header signature does not verify", sign);
} catch (InvalidKeyException e) {
- throw new PermFailException(e.getMessage(), e);
+ throw new PermFailException(e.getMessage(), sign, e);
} catch (NoSuchAlgorithmException e) {
- throw new PermFailException(e.getMessage(), e);
+ throw new PermFailException(e.getMessage(), sign, e);
} catch (SignatureException e) {
- throw new PermFailException(e.getMessage(), e);
+ throw new PermFailException(e.getMessage(), sign, e);
}
}
diff --git a/main/src/main/java/org/apache/james/jdkim/impl/BodyHasherImpl.java b/main/src/main/java/org/apache/james/jdkim/impl/BodyHasherImpl.java
index ef8577d..e180991 100644
--- a/main/src/main/java/org/apache/james/jdkim/impl/BodyHasherImpl.java
+++ b/main/src/main/java/org/apache/james/jdkim/impl/BodyHasherImpl.java
@@ -45,13 +45,13 @@ public class BodyHasherImpl implements BodyHasher {
md = MessageDigest.getInstance(sign.getHashAlgo().toString());
} catch (NoSuchAlgorithmException e) {
throw new PermFailException("Unsupported algorythm: "
- + sign.getHashAlgo(), e);
+ + sign.getHashAlgo(), sign, e);
}
try {
sign.validate();
} catch (IllegalStateException e) {
- throw new PermFailException("Invalid signature template", e);
+ throw new PermFailException("Invalid signature template", sign, e);
}
int limit = sign.getBodyHashLimit();
@@ -65,7 +65,7 @@ public class BodyHasherImpl implements BodyHasher {
.getBodyCanonicalisationMethod())) {
throw new PermFailException(
"Unsupported body canonicalization method: "
- + sign.getBodyCanonicalisationMethod());
+ + sign.getBodyCanonicalisationMethod(), sign);
}
DigestOutputStream dout = new DigestOutputStream(md);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org