Skip to content

Commit c090d68

Browse files
authored
refactor: move the base64UrlEncode out of JweObject (#37)
* add base64url encoding in encoding utils base64url encoding with no padding * refactor: remove base64UrlEncode from JweObject remove base64UrlEncode from JweObject and using same function from EncodingUtils.
1 parent 311c822 commit c090d68

File tree

3 files changed

+18
-11
lines changed

3 files changed

+18
-11
lines changed

src/main/java/com/mastercard/developer/encryption/jwe/JweObject.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.mastercard.developer.encryption.rsa.RSA;
99
import com.mastercard.developer.json.JsonEngine;
1010
import com.mastercard.developer.utils.ByteUtils;
11+
import com.mastercard.developer.utils.EncodingUtils;
1112

1213
import javax.crypto.Cipher;
1314
import javax.crypto.spec.GCMParameterSpec;
@@ -57,14 +58,14 @@ public String decrypt(JweConfig config) throws EncryptionException, GeneralSecur
5758
public static String encrypt(JweConfig config, String payload, JweHeader header) throws EncryptionException, GeneralSecurityException {
5859
SecretKeySpec cek = AESEncryption.generateCek(256);
5960
byte[] encryptedSecretKeyBytes = RSA.wrapSecretKey(config.getEncryptionCertificate().getPublicKey(), cek, "SHA-256");
60-
String encryptedKey = base64UrlEncode(encryptedSecretKeyBytes);
61+
String encryptedKey = EncodingUtils.base64UrlEncode(encryptedSecretKeyBytes);
6162

6263
byte[] iv = AESEncryption.generateIv().getIV();
6364
byte[] payloadBytes = payload.getBytes();
6465
GCMParameterSpec gcmSpec = new GCMParameterSpec(128, iv);
6566

6667
String headerString = header.toJson();
67-
String encodedHeader = base64UrlEncode(headerString.getBytes());
68+
String encodedHeader = EncodingUtils.base64UrlEncode(headerString.getBytes());
6869

6970
byte[] aad = encodedHeader.getBytes(StandardCharsets.US_ASCII);
7071

@@ -76,7 +77,7 @@ public static String encrypt(JweConfig config, String payload, JweHeader header)
7677
byte[] cipherText = ByteUtils.subArray(cipherOutput, 0, tagPos);
7778
byte[] authTag = ByteUtils.subArray(cipherOutput, tagPos, ByteUtils.byteLength(128));
7879

79-
return serialize(encodedHeader, encryptedKey, base64UrlEncode(iv), base64UrlEncode(cipherText), base64UrlEncode(authTag));
80+
return serialize(encodedHeader, encryptedKey, EncodingUtils.base64UrlEncode(iv), EncodingUtils.base64UrlEncode(cipherText), EncodingUtils.base64UrlEncode(authTag));
8081
}
8182

8283
private static String serialize(String header, String encryptedKey, String iv, String cipherText, String authTag) {
@@ -90,14 +91,6 @@ private static String serialize(String header, String encryptedKey, String iv, S
9091
authTag;
9192
}
9293

93-
/**
94-
* BASE64URL as per https://datatracker.ietf.org/doc/html/rfc7515#appendix-C
95-
*/
96-
private static String base64UrlEncode(byte[] bytes) {
97-
return Base64.getUrlEncoder().encodeToString(bytes)
98-
.replace("=", ""); // Remove any trailing '='s
99-
}
100-
10194
public static JweObject parse(String encryptedPayload, JsonEngine jsonEngine) {
10295
String[] payloadParts = encryptedPayload.trim()
10396
.split("\\.");

src/main/java/com/mastercard/developer/utils/EncodingUtils.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,11 @@ static String base64Encode(byte[] bytes) {
6363
}
6464
return Base64.getEncoder().encodeToString(bytes);
6565
}
66+
67+
/**
68+
* BASE64URL as per https://datatracker.ietf.org/doc/html/rfc7515#appendix-C
69+
*/
70+
public static String base64UrlEncode(byte[] bytes) {
71+
return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes);
72+
}
6673
}

src/test/java/com/mastercard/developer/utils/EncodingUtilsTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,11 @@ public void testBase64Decode() {
6767
public void testBase64Decode_ShouldThrowIllegalArgumentException_WhenNullValue() {
6868
EncodingUtils.base64Decode(null);
6969
}
70+
71+
@Test
72+
public void testBase64UrlEncode() {
73+
Assert.assertEquals("AA", EncodingUtils.base64UrlEncode(new byte[1]));
74+
Assert.assertEquals("eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQ", EncodingUtils.base64UrlEncode("{\"alg\":\"RSA-OAEP\",\"enc\":\"A256GCM\"}".getBytes()));
75+
Assert.assertEquals("bGlnaHQgd29yaw", EncodingUtils.base64UrlEncode("light work".getBytes()));
76+
}
7077
}

0 commit comments

Comments
 (0)