This is an automated email from the ASF dual-hosted git repository. chibenwa pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-jdkim.git
commit 5f1209c2d1970aef0d277c2472aaaa49551ce18f Author: Benoit TELLIER <[email protected]> AuthorDate: Fri Oct 30 08:30:32 2026 +0100 [FIX] SignatureRecordImpl: encode the raw bytes given to setSignature/setBodyHash Since the commons-codec removal both setters base64-decoded their argument instead of encoding it: raw digests and RSA signatures either threw IllegalArgumentException or were stored as a wrong b=/bh=. They now encode, as SignatureRecordTemplate does. Co-Authored-By: Claude Opus 5.5 <[email protected]> --- .../james/jdkim/tagvalue/SignatureRecordImpl.java | 4 ++-- .../apache/james/jdkim/SignatureRecordImplTest.java | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/main/src/main/java/org/apache/james/jdkim/tagvalue/SignatureRecordImpl.java b/main/src/main/java/org/apache/james/jdkim/tagvalue/SignatureRecordImpl.java index c2cfc88..2e2a9f1 100644 --- a/main/src/main/java/org/apache/james/jdkim/tagvalue/SignatureRecordImpl.java +++ b/main/src/main/java/org/apache/james/jdkim/tagvalue/SignatureRecordImpl.java @@ -274,12 +274,12 @@ public class SignatureRecordImpl extends TagValue implements SignatureRecord { } public void setSignature(byte[] newSignature) { - String signature = new String(Base64.getMimeDecoder().decode(newSignature)); + String signature = Base64.getEncoder().encodeToString(newSignature); setValue("b", signature); } public void setBodyHash(byte[] newBodyHash) { - String bodyHash = new String(Base64.getMimeDecoder().decode(newBodyHash)); + String bodyHash = Base64.getEncoder().encodeToString(newBodyHash); setValue("bh", bodyHash); // If a t=; parameter is present in the signature, make sure to // fill it with the current timestamp diff --git a/main/src/test/java/org/apache/james/jdkim/SignatureRecordImplTest.java b/main/src/test/java/org/apache/james/jdkim/SignatureRecordImplTest.java index d380ec1..2f44f6e 100644 --- a/main/src/test/java/org/apache/james/jdkim/SignatureRecordImplTest.java +++ b/main/src/test/java/org/apache/james/jdkim/SignatureRecordImplTest.java @@ -22,8 +22,11 @@ package org.apache.james.jdkim; import org.apache.james.jdkim.api.SignatureRecord; import org.apache.james.jdkim.tagvalue.SignatureRecordImpl; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import java.util.Arrays; + import org.junit.Assert; import org.junit.Test; @@ -148,4 +151,19 @@ public class SignatureRecordImplTest { Assert.assertTrue(signatureRecord.getSignature().length > 0); Assert.assertTrue(signatureRecord.getBodyHash().length > 0); } + + @Test + public void settersShouldRoundTripRawBytes() { + SignatureRecordImpl record = new SignatureRecordImpl("v=1; a=rsa-sha256; d=example.com; s=s; h=from; bh=AA==; b=AA=="); + byte[] digest = new byte[32]; + byte[] signature = {0, 1, 2, (byte) 0xff, 0x3d}; + Arrays.fill(digest, (byte) 0x08); + + record.setBodyHash(digest); + record.setSignature(signature); + + assertThat(record.getBodyHash()).isEqualTo(digest); + assertThat(record.getSignature()).isEqualTo(signature); + assertThat(new SignatureRecordImpl(record.toString()).getSignature()).isEqualTo(signature); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
