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]

Reply via email to