Skip to content

Commit 6e0c368

Browse files
committed
Deprecate iharder implementation of Base64 in favor JDK implementation
1 parent f9386ff commit 6e0c368

File tree

26 files changed

+112
-90
lines changed

26 files changed

+112
-90
lines changed

commons/src/main/java/com/itextpdf/commons/actions/processors/DefaultITextProductEventProcessor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ This file is part of the iText (R) project.
2424

2525
import com.itextpdf.commons.actions.AbstractProductProcessITextEvent;
2626
import com.itextpdf.commons.actions.confirmations.ConfirmEvent;
27-
import com.itextpdf.commons.utils.Base64;
27+
import com.itextpdf.commons.utils.EncodingUtil;
2828

2929
import java.nio.charset.StandardCharsets;
3030
import java.util.concurrent.atomic.AtomicLong;
@@ -36,8 +36,8 @@ This file is part of the iText (R) project.
3636
*/
3737
public class DefaultITextProductEventProcessor extends AbstractITextProductEventProcessor {
3838

39-
static final byte[] MESSAGE_FOR_LOGGING = Base64
40-
.decode("WW91IGFyZSB1c2luZyBpVGV4dCB1bmRlciB0aGUgQUdQTC4KCklmIHRoaXMgaXMgeW9" +
39+
static final byte[] MESSAGE_FOR_LOGGING = EncodingUtil.fromBase64(
40+
"WW91IGFyZSB1c2luZyBpVGV4dCB1bmRlciB0aGUgQUdQTC4KCklmIHRoaXMgaXMgeW9" +
4141
"1ciBpbnRlbnRpb24sIHlvdSBoYXZlIHB1Ymxpc2hlZCB5b3VyIG93biBzb3VyY2UgY2" +
4242
"9kZSBhcyBBR1BMIHNvZnR3YXJlIHRvby4KUGxlYXNlIGxldCB1cyBrbm93IHdoZXJlI" +
4343
"HRvIGZpbmQgeW91ciBzb3VyY2UgY29kZSBieSBzZW5kaW5nIGEgbWFpbCB0byBhZ3Bs" +

commons/src/main/java/com/itextpdf/commons/utils/Base64.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,11 @@
6868
* @author Robert Harder
6969
7070
* @version 2.2.1
71+
*
72+
* @deprecated in favour of {@link EncodingUtil#toBase64(byte[])} and {@link EncodingUtil#fromBase64(String)}
7173
*/
74+
@Deprecated
75+
// After removing the class, update commons/NOTICE.txt
7276
public class Base64 {
7377

7478
/* ******** P U B L I C F I E L D S ******** */

commons/src/main/java/com/itextpdf/commons/utils/EncodingUtil.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ This file is part of the iText (R) project.
2929
import java.nio.charset.Charset;
3030
import java.nio.charset.CharsetEncoder;
3131
import java.nio.charset.CodingErrorAction;
32+
import java.util.Base64;
3233

3334
/**
3435
* This file is a helper class for internal usage only.
@@ -85,4 +86,24 @@ public static String convertToString(byte[] bytes, String encoding) throws Unsup
8586
}
8687
return new String(bytes, encoding);
8788
}
89+
90+
/**
91+
* Decodes base64 string into byte array with tolerance to new lines and spaces.
92+
*
93+
* @param base64 base64 string to decode
94+
* @return decode string as byte array
95+
*/
96+
public static byte[] fromBase64(String base64) {
97+
return Base64.getDecoder().decode(base64.replaceAll("\\s", ""));
98+
}
99+
100+
/**
101+
* Encodes byte array to base64 string.
102+
*
103+
* @param bytes the byte array to encode
104+
* @return encoded base64 string
105+
*/
106+
public static String toBase64(byte[] bytes) {
107+
return Base64.getEncoder().encodeToString(bytes);
108+
}
88109
}

commons/src/sharpenconfig/java/com/itextpdf/commons/SharpenConfigMapping.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@ public void applyMappingConfiguration(MappingConfigurator configurator) {
117117
configurator.mapMethod("java.util.AbstractSet.hashCode", "iText.Commons.Utils.JavaUtil.SetHashCode", false);
118118
configurator.mapMethodParametersOrder("com.itextpdf.commons.utils.JsonUtil.deserializeFromString", "1");
119119
configurator.mapMethodParametersOrder("com.itextpdf.commons.utils.JsonUtil.deserializeFromStream", "1");
120-
configurator.mapMethod("com.itextpdf.commons.utils.Base64.decode", "System.Convert.FromBase64String", false);
121-
configurator.mapMethod("com.itextpdf.commons.utils.Base64.encodeBytes", "System.Convert.ToBase64String", false);
120+
configurator.mapMethod("com.itextpdf.commons.utils.EncodingUtil.fromBase64", "System.Convert.FromBase64String", false);
121+
configurator.mapMethod("com.itextpdf.commons.utils.EncodingUtil.toBase64", "System.Convert.ToBase64String", false);
122122
configurator.mapType("com.itextpdf.commons.utils.ThrowingSupplier<>", "System.Func");
123123
configurator.mapType("com.itextpdf.commons.utils.Action", "System.Action");
124124
configurator.mapType("com.itextpdf.commons.utils.ThrowingAction", "System.Action");

forms/src/main/java/com/itextpdf/forms/fields/PdfButtonFormField.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ This file is part of the iText (R) project.
2222
*/
2323
package com.itextpdf.forms.fields;
2424

25-
import com.itextpdf.commons.utils.Base64;
25+
import com.itextpdf.commons.utils.EncodingUtil;
2626
import com.itextpdf.commons.utils.FileUtil;
2727
import com.itextpdf.forms.logs.FormsLogMessageConstants;
2828
import com.itextpdf.io.util.StreamUtil;
@@ -210,7 +210,7 @@ public PdfButtonFormField setRadiosInUnison(boolean radiosInUnison) {
210210
*/
211211
public PdfButtonFormField setImage(String image) throws IOException {
212212
InputStream is = FileUtil.getInputStreamForFile(image);
213-
String str = Base64.encodeBytes(StreamUtil.inputStreamToArray(is));
213+
String str = EncodingUtil.toBase64(StreamUtil.inputStreamToArray(is));
214214
return (PdfButtonFormField) setValue(str);
215215
}
216216

forms/src/main/java/com/itextpdf/forms/fields/PdfFormField.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ This file is part of the iText (R) project.
2323
package com.itextpdf.forms.fields;
2424

2525
import com.itextpdf.commons.datastructures.NullableContainer;
26-
import com.itextpdf.commons.utils.Base64;
26+
import com.itextpdf.commons.utils.EncodingUtil;
2727
import com.itextpdf.commons.utils.MessageFormatUtil;
2828
import com.itextpdf.forms.PdfAcroForm;
2929
import com.itextpdf.forms.fields.properties.CheckBoxType;
@@ -1393,7 +1393,7 @@ private PdfFormField setFieldValue(String value, boolean generateAppearance) {
13931393
if (PdfName.Btn.equals(formType)) {
13941394
if (getFieldFlag(PdfButtonFormField.FF_PUSH_BUTTON)) {
13951395
try {
1396-
img = ImageDataFactory.create(Base64.decode(value));
1396+
img = ImageDataFactory.create(EncodingUtil.fromBase64(value));
13971397
} catch (Exception e) {
13981398
if (generateAppearance) {
13991399
// Display value.

kernel/src/test/java/com/itextpdf/kernel/crypto/PdfDecryptingTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ This file is part of the iText (R) project.
2323
package com.itextpdf.kernel.crypto;
2424

2525
import com.itextpdf.bouncycastleconnector.BouncyCastleFactoryCreator;
26-
import com.itextpdf.commons.utils.Base64;
26+
import com.itextpdf.commons.utils.EncodingUtil;
2727
import com.itextpdf.commons.utils.FileUtil;
2828
import com.itextpdf.io.util.StreamUtil;
2929
import com.itextpdf.kernel.logs.KernelLogMessageConstant;
@@ -298,7 +298,7 @@ private PrivateKey readPrivateKey(String privateKeyName, String algorithm)
298298
int startPos = pemContent.indexOf(start);
299299
int endPos = pemContent.indexOf(end);
300300
pemContent = pemContent.substring(startPos + start.length(), endPos);
301-
byte[] encoded = Base64.decode(pemContent);
301+
byte[] encoded = EncodingUtil.fromBase64(pemContent);
302302

303303
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);
304304
return KeyFactory.getInstance(algorithm, BouncyCastleFactoryCreator.getFactory().getProviderName())

kernel/src/test/java/com/itextpdf/kernel/crypto/PdfEncryptingTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ This file is part of the iText (R) project.
2424

2525
import com.itextpdf.bouncycastleconnector.BouncyCastleFactoryCreator;
2626
import com.itextpdf.commons.bouncycastle.crypto.fips.AbstractFipsUnapprovedOperationError;
27-
import com.itextpdf.commons.utils.Base64;
27+
import com.itextpdf.commons.utils.EncodingUtil;
2828
import com.itextpdf.commons.utils.FileUtil;
2929
import com.itextpdf.commons.utils.MessageFormatUtil;
3030
import com.itextpdf.io.font.constants.StandardFonts;
@@ -200,7 +200,7 @@ private PrivateKey readPrivateKey(String privateKeyName, String algorithm)
200200
int startPos = pemContent.indexOf(start);
201201
int endPos = pemContent.indexOf(end);
202202
pemContent = pemContent.substring(startPos + start.length(), endPos);
203-
byte[] encoded = Base64.decode(pemContent);
203+
byte[] encoded = EncodingUtil.fromBase64(pemContent);
204204

205205
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);
206206
return KeyFactory.getInstance(algorithm, BouncyCastleFactoryCreator.getFactory().getProviderName())

sign/src/main/java/com/itextpdf/signatures/SignUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ This file is part of the iText (R) project.
4141
import com.itextpdf.commons.bouncycastle.operator.AbstractOperatorCreationException;
4242
import com.itextpdf.commons.bouncycastle.tsp.AbstractTSPException;
4343
import com.itextpdf.commons.bouncycastle.tsp.ITimeStampToken;
44-
import com.itextpdf.commons.utils.Base64;
44+
import com.itextpdf.commons.utils.EncodingUtil;
4545
import com.itextpdf.kernel.exceptions.PdfException;
4646
import com.itextpdf.kernel.pdf.PdfEncryption;
4747
import com.itextpdf.signatures.exceptions.SignExceptionMessageConstant;
@@ -285,7 +285,7 @@ static TsaResponse getTsaResponseForUserRequest(String tsaUrl, byte[] requestByt
285285
if ((tsaUsername != null) && !tsaUsername.equals("")) {
286286
String userPassword = tsaUsername + ":" + tsaPassword;
287287
tsaConnection.setRequestProperty("Authorization", "Basic " +
288-
Base64.encodeBytes(userPassword.getBytes(StandardCharsets.UTF_8), Base64.DONT_BREAK_LINES));
288+
EncodingUtil.toBase64(userPassword.getBytes(StandardCharsets.UTF_8)));
289289
}
290290
OutputStream out = tsaConnection.getOutputStream();
291291
out.write(requestBytes);

sign/src/main/java/com/itextpdf/signatures/SignaturePolicyInfo.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ This file is part of the iText (R) project.
2929
import com.itextpdf.commons.bouncycastle.asn1.esf.ISigPolicyQualifierInfo;
3030
import com.itextpdf.commons.bouncycastle.asn1.esf.ISignaturePolicyId;
3131
import com.itextpdf.commons.bouncycastle.asn1.esf.ISignaturePolicyIdentifier;
32-
import com.itextpdf.commons.utils.Base64;
32+
import com.itextpdf.commons.utils.EncodingUtil;
3333
import com.itextpdf.kernel.crypto.DigestAlgorithms;
3434

3535
/**
@@ -87,7 +87,7 @@ public SignaturePolicyInfo(String policyIdentifier, byte[] policyHash, String po
8787
*/
8888
public SignaturePolicyInfo(String policyIdentifier, String policyHashBase64, String policyDigestAlgorithm,
8989
String policyUri) {
90-
this(policyIdentifier, policyHashBase64 != null ? Base64.decode(policyHashBase64) : null,
90+
this(policyIdentifier, policyHashBase64 != null ? EncodingUtil.fromBase64(policyHashBase64) : null,
9191
policyDigestAlgorithm, policyUri);
9292
}
9393

0 commit comments

Comments
 (0)