Skip to content

Commit 901faa3

Browse files
committed
refactor: replace commons-codec with JDK Base64/HexFormat, drop gnu-crypto
Java 17 ships java.util.Base64 (since 8) and java.util.HexFormat (since 17), so commons-codec is redundant. gnu-crypto was declared in pom.xml but never imported.
1 parent 4787893 commit 901faa3

10 files changed

Lines changed: 234 additions & 35 deletions

File tree

pom.xml

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,6 @@
1313
<artifactId>xmlbeans</artifactId>
1414
<version>5.3.0</version>
1515
</dependency>
16-
<dependency>
17-
<groupId>commons-codec</groupId>
18-
<artifactId>commons-codec</artifactId>
19-
<version>1.15</version>
20-
</dependency>
2116
<dependency>
2217
<groupId>org.apache.httpcomponents</groupId>
2318
<artifactId>httpclient</artifactId>
@@ -39,11 +34,6 @@
3934
<version>2.0.17</version>
4035
<optional>true</optional>
4136
</dependency>
42-
<dependency>
43-
<groupId>org.gnu</groupId>
44-
<artifactId>gnu-crypto</artifactId>
45-
<version>2.0.1</version>
46-
</dependency>
4737
<dependency>
4838
<groupId>org.apache.santuario</groupId>
4939
<artifactId>xmlsec</artifactId>
@@ -57,19 +47,19 @@
5747
<dependency>
5848
<groupId>org.junit.jupiter</groupId>
5949
<artifactId>junit-jupiter-api</artifactId>
60-
<version>6.0.0</version>
50+
<version>6.1.0</version>
6151
<scope>test</scope>
6252
</dependency>
6353
<dependency>
6454
<groupId>org.junit.jupiter</groupId>
6555
<artifactId>junit-jupiter-engine</artifactId>
66-
<version>6.0.0</version>
56+
<version>6.1.0</version>
6757
<scope>test</scope>
6858
</dependency>
6959
<dependency>
7060
<groupId>org.mockito</groupId>
7161
<artifactId>mockito-core</artifactId>
72-
<version>3.2.4</version>
62+
<version>5.23.0</version>
7363
<scope>test</scope>
7464
</dependency>
7565
</dependencies>

src/main/java/org/kopi/ebics/certificate/KeyUtil.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
import java.security.NoSuchAlgorithmException;
2727
import java.security.SecureRandom;
2828
import java.security.interfaces.RSAPublicKey;
29+
import java.util.HexFormat;
2930

30-
import org.apache.commons.codec.binary.Hex;
3131
import org.kopi.ebics.exception.EbicsException;
3232
import org.kopi.ebics.utils.Utils;
3333

@@ -80,8 +80,8 @@ public static byte[] getKeyDigest(RSAPublicKey publicKey) throws EbicsException
8080
String hash;
8181
byte[] digest;
8282

83-
exponent = Hex.encodeHexString(publicKey.getPublicExponent().toByteArray());
84-
modulus = Hex.encodeHexString(removeFirstByte(publicKey.getModulus().toByteArray()));
83+
exponent = HexFormat.of().formatHex(publicKey.getPublicExponent().toByteArray());
84+
modulus = HexFormat.of().formatHex(removeFirstByte(publicKey.getModulus().toByteArray()));
8585
hash = exponent + " " + modulus;
8686

8787
if (hash.charAt(0) == '0') {
@@ -95,7 +95,7 @@ public static byte[] getKeyDigest(RSAPublicKey publicKey) throws EbicsException
9595
throw new EbicsException(e.getMessage());
9696
}
9797

98-
return new String(Hex.encodeHex(digest, false)).getBytes();
98+
return HexFormat.of().withUpperCase().formatHex(digest).getBytes(StandardCharsets.US_ASCII);
9999
}
100100

101101
/**

src/main/java/org/kopi/ebics/letter/A005Letter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import java.security.GeneralSecurityException;
2323
import java.util.Locale;
2424

25-
import org.apache.commons.codec.binary.Base64;
2625
import org.kopi.ebics.exception.EbicsException;
2726
import org.kopi.ebics.interfaces.EbicsUser;
2827

@@ -55,7 +54,7 @@ public void create(EbicsUser user) throws GeneralSecurityException, IOException,
5554
user.getPartner().getPartnerId(),
5655
getString("INILetter.version"),
5756
getString("INILetter.certificate"),
58-
Base64.encodeBase64(user.getA005Certificate(), true),
57+
chunkedBase64(user.getA005Certificate()),
5958
getString("INILetter.digest"),
6059
getHash(user.getA005Certificate()));
6160
}

src/main/java/org/kopi/ebics/letter/AbstractInitLetter.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,11 @@
2626
import java.security.GeneralSecurityException;
2727
import java.security.MessageDigest;
2828
import java.text.SimpleDateFormat;
29+
import java.util.Base64;
2930
import java.util.Date;
31+
import java.util.HexFormat;
3032
import java.util.Locale;
3133

32-
import org.apache.commons.codec.binary.Hex;
3334
import org.kopi.ebics.interfaces.InitLetter;
3435
import org.kopi.ebics.messages.Messages;
3536

@@ -103,11 +104,29 @@ protected String getString(String key) {
103104
* @throws GeneralSecurityException
104105
*/
105106
protected byte[] getHash(byte[] certificate) throws GeneralSecurityException {
106-
String hash256 = new String(
107-
Hex.encodeHex(MessageDigest.getInstance("SHA-256").digest(certificate), false));
107+
String hash256 = HexFormat.of().withUpperCase().formatHex(
108+
MessageDigest.getInstance("SHA-256").digest(certificate));
108109
return format(hash256).getBytes();
109110
}
110111

112+
/**
113+
* Encodes {@code data} as MIME Base64 (76-character lines separated by CRLF)
114+
* with a trailing CRLF, matching the historical commons-codec
115+
* {@code Base64.encodeBase64(data, true)} byte-for-byte so PEM-style blocks
116+
* in the letter keep the {@code -----END CERTIFICATE-----} marker on its own line.
117+
*/
118+
protected static byte[] chunkedBase64(byte[] data) {
119+
byte[] encoded = Base64.getMimeEncoder().encode(data);
120+
if (encoded.length == 0) {
121+
return encoded;
122+
}
123+
byte[] result = new byte[encoded.length + 2];
124+
System.arraycopy(encoded, 0, result, 0, encoded.length);
125+
result[encoded.length] = '\r';
126+
result[encoded.length + 1] = '\n';
127+
return result;
128+
}
129+
111130
/**
112131
* Formats a hash 256 input.
113132
* @param hash256 the hash input

src/main/java/org/kopi/ebics/letter/E002Letter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import java.security.GeneralSecurityException;
2323
import java.util.Locale;
2424

25-
import org.apache.commons.codec.binary.Base64;
2625
import org.kopi.ebics.exception.EbicsException;
2726
import org.kopi.ebics.interfaces.EbicsUser;
2827

@@ -55,7 +54,7 @@ public void create(EbicsUser user) throws GeneralSecurityException, IOException,
5554
user.getPartner().getPartnerId(),
5655
getString("HIALetter.e002.version"),
5756
getString("HIALetter.e002.certificate"),
58-
Base64.encodeBase64(user.getE002Certificate(), true),
57+
chunkedBase64(user.getE002Certificate()),
5958
getString("HIALetter.e002.digest"),
6059
getHash(user.getE002Certificate()));
6160
}

src/main/java/org/kopi/ebics/letter/X002Letter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import java.security.GeneralSecurityException;
2323
import java.util.Locale;
2424

25-
import org.apache.commons.codec.binary.Base64;
2625
import org.kopi.ebics.exception.EbicsException;
2726
import org.kopi.ebics.interfaces.EbicsUser;
2827

@@ -55,7 +54,7 @@ public void create(EbicsUser user) throws GeneralSecurityException, IOException,
5554
user.getPartner().getPartnerId(),
5655
getString("HIALetter.x002.version"),
5756
getString("HIALetter.x002.certificate"),
58-
Base64.encodeBase64(user.getX002Certificate(), true),
57+
chunkedBase64(user.getX002Certificate()),
5958
getString("HIALetter.x002.digest"),
6059
getHash(user.getX002Certificate()));
6160
}

src/main/java/org/kopi/ebics/xml/InitializationRequestElement.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,11 @@
2121
import java.security.MessageDigest;
2222
import java.security.NoSuchAlgorithmException;
2323
import java.security.NoSuchProviderException;
24+
import java.util.HexFormat;
2425

2526
import javax.crypto.Cipher;
2627
import javax.crypto.spec.SecretKeySpec;
2728

28-
import org.apache.commons.codec.DecoderException;
29-
import org.apache.commons.codec.binary.Hex;
3029
import org.bouncycastle.jce.provider.BouncyCastleProvider;
3130
import org.kopi.ebics.exception.EbicsException;
3231
import org.kopi.ebics.interfaces.EbicsOrderType;
@@ -120,8 +119,8 @@ protected byte[] decodeHex(byte[] hex) throws EbicsException {
120119
}
121120

122121
try {
123-
return Hex.decodeHex(new String(hex).toCharArray());
124-
} catch (DecoderException e) {
122+
return HexFormat.of().parseHex(new String(hex));
123+
} catch (IllegalArgumentException e) {
125124
throw new EbicsException(e.getMessage());
126125
}
127126
}

src/main/java/org/kopi/ebics/xml/UploadInitializationRequestElement.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
import java.security.MessageDigest;
2323
import java.security.NoSuchAlgorithmException;
2424
import java.security.NoSuchProviderException;
25+
import java.util.Base64;
2526
import java.util.Calendar;
2627

27-
import org.apache.commons.codec.binary.Base64;
2828
import org.apache.xmlbeans.XmlObject;
2929
import org.kopi.ebics.client.EbicsUploadParams;
3030
import org.kopi.ebics.exception.EbicsException;
@@ -133,7 +133,7 @@ public void buildInitialization() throws EbicsException {
133133
String digest;
134134
try {
135135
// TODO: check if this is correct
136-
digest = Base64.encodeBase64String(MessageDigest.getInstance("SHA-256", "BC").digest(this.userData));
136+
digest = Base64.getEncoder().encodeToString(MessageDigest.getInstance("SHA-256", "BC").digest(this.userData));
137137
} catch (NoSuchAlgorithmException | NoSuchProviderException e) {
138138
throw new EbicsException(e);
139139
}

0 commit comments

Comments
 (0)