Skip to content

Commit 9798fcd

Browse files
committed
Migrate to java.util.Base64
1 parent d748bad commit 9798fcd

File tree

9 files changed

+28
-199
lines changed

9 files changed

+28
-199
lines changed

Diff for: src/main/java/nl/martijndwars/webpush/AbstractPushService.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.security.PublicKey;
2020
import java.security.SecureRandom;
2121
import java.security.spec.InvalidKeySpecException;
22+
import java.util.Base64;
2223
import java.util.HashMap;
2324
import java.util.Map;
2425

@@ -164,8 +165,8 @@ protected final HttpRequest prepareRequest(Notification notification, Encoding e
164165
headers.put("Content-Encoding", "aes128gcm");
165166
} else if (encoding == Encoding.AESGCM) {
166167
headers.put("Content-Encoding", "aesgcm");
167-
headers.put("Encryption", "salt=" + Base64Encoder.encodeUrlWithoutPadding(salt));
168-
headers.put("Crypto-Key", "dh=" + Base64Encoder.encodeUrl(dh));
168+
headers.put("Encryption", "salt=" + Base64.getUrlEncoder().withoutPadding().encodeToString(salt));
169+
headers.put("Crypto-Key", "dh=" + Base64.getUrlEncoder().encodeToString(dh));
169170
}
170171

171172
body = encrypted.getCiphertext();
@@ -201,15 +202,15 @@ protected final HttpRequest prepareRequest(Notification notification, Encoding e
201202
byte[] pk = Utils.encode((ECPublicKey) getPublicKey());
202203

203204
if (encoding == Encoding.AES128GCM) {
204-
headers.put("Authorization", "vapid t=" + jws.getCompactSerialization() + ", k=" + Base64Encoder.encodeUrlWithoutPadding(pk));
205+
headers.put("Authorization", "vapid t=" + jws.getCompactSerialization() + ", k=" + Base64.getUrlEncoder().withoutPadding().encodeToString(pk));
205206
} else if (encoding == Encoding.AESGCM) {
206207
headers.put("Authorization", "WebPush " + jws.getCompactSerialization());
207208
}
208209

209210
if (headers.containsKey("Crypto-Key")) {
210-
headers.put("Crypto-Key", headers.get("Crypto-Key") + ";p256ecdsa=" + Base64Encoder.encodeUrlWithoutPadding(pk));
211+
headers.put("Crypto-Key", headers.get("Crypto-Key") + ";p256ecdsa=" + Base64.getUrlEncoder().encodeToString(pk));
211212
} else {
212-
headers.put("Crypto-Key", "p256ecdsa=" + Base64Encoder.encodeUrl(pk));
213+
headers.put("Crypto-Key", "p256ecdsa=" + Base64.getUrlEncoder().encodeToString(pk));
213214
}
214215
} else if (notification.isFcm() && getGcmApiKey() != null) {
215216
headers.put("Authorization", "key=" + getGcmApiKey());

Diff for: src/main/java/nl/martijndwars/webpush/Base64Encoder.java

-51
This file was deleted.

Diff for: src/main/java/nl/martijndwars/webpush/HttpEce.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.nio.ByteBuffer;
1313
import java.security.*;
1414
import java.util.Arrays;
15+
import java.util.Base64;
1516
import java.util.HashMap;
1617
import java.util.Map;
1718

@@ -437,7 +438,7 @@ private static byte[] intToBytes(int number) {
437438
*/
438439
private static byte[] log(String info, byte[] array) {
439440
if ("1".equals(System.getenv("ECE_KEYLOG"))) {
440-
System.out.println(info + " [" + array.length + "]: " + Base64Encoder.encodeUrlWithoutPadding(array));
441+
System.out.println(info + " [" + array.length + "]: " + Base64.getUrlEncoder().withoutPadding().encodeToString(array));
441442
}
442443

443444
return array;

Diff for: src/main/java/nl/martijndwars/webpush/Notification.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.security.NoSuchProviderException;
99
import java.security.PublicKey;
1010
import java.security.spec.InvalidKeySpecException;
11+
import java.util.Base64;
1112

1213
import static java.nio.charset.StandardCharsets.UTF_8;
1314

@@ -71,23 +72,23 @@ public Notification(String endpoint, PublicKey userPublicKey, byte[] userAuth, b
7172
}
7273

7374
public Notification(String endpoint, String userPublicKey, String userAuth, byte[] payload, int ttl) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeySpecException {
74-
this(endpoint, Utils.loadPublicKey(userPublicKey), Base64Encoder.decode(userAuth), payload, ttl);
75+
this(endpoint, Utils.loadPublicKey(userPublicKey), Base64.getUrlDecoder().decode(userAuth), payload, ttl);
7576
}
7677

7778
public Notification(String endpoint, PublicKey userPublicKey, byte[] userAuth, byte[] payload) {
7879
this(endpoint, userPublicKey, userAuth, payload, DEFAULT_TTL);
7980
}
8081

8182
public Notification(String endpoint, String userPublicKey, String userAuth, byte[] payload) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeySpecException {
82-
this(endpoint, Utils.loadPublicKey(userPublicKey), Base64Encoder.decode(userAuth), payload);
83+
this(endpoint, Utils.loadPublicKey(userPublicKey), Base64.getUrlDecoder().decode(userAuth), payload);
8384
}
8485

8586
public Notification(String endpoint, String userPublicKey, String userAuth, String payload) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeySpecException {
86-
this(endpoint, Utils.loadPublicKey(userPublicKey), Base64Encoder.decode(userAuth), payload.getBytes(UTF_8));
87+
this(endpoint, Utils.loadPublicKey(userPublicKey), Base64.getUrlDecoder().decode(userAuth), payload.getBytes(UTF_8));
8788
}
8889

8990
public Notification(String endpoint, String userPublicKey, String userAuth, String payload, Urgency urgency) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeySpecException {
90-
this(endpoint, Utils.loadPublicKey(userPublicKey), Base64Encoder.decode(userAuth), payload.getBytes(UTF_8));
91+
this(endpoint, Utils.loadPublicKey(userPublicKey), Base64.getUrlDecoder().decode(userAuth), payload.getBytes(UTF_8));
9192
this.urgency = urgency;
9293
}
9394

@@ -200,7 +201,7 @@ public NotificationBuilder userPublicKey(byte[] publicKey) throws NoSuchAlgorith
200201
}
201202

202203
public NotificationBuilder userAuth(String userAuth) {
203-
this.userAuth = Base64Encoder.decode(userAuth);
204+
this.userAuth = Base64.getUrlDecoder().decode(userAuth);
204205
return this;
205206
}
206207

Diff for: src/main/java/nl/martijndwars/webpush/Utils.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.nio.ByteBuffer;
1616
import java.security.*;
1717
import java.security.spec.InvalidKeySpecException;
18+
import java.util.Base64;
1819

1920
import static org.bouncycastle.jce.provider.BouncyCastleProvider.PROVIDER_NAME;
2021

@@ -45,7 +46,7 @@ public static byte[] encode(ECPrivateKey privateKey) {
4546
* @param encodedPublicKey
4647
*/
4748
public static PublicKey loadPublicKey(String encodedPublicKey) throws NoSuchProviderException, NoSuchAlgorithmException, InvalidKeySpecException {
48-
byte[] decodedPublicKey = Base64Encoder.decode(encodedPublicKey);
49+
byte[] decodedPublicKey = Base64.getUrlDecoder().decode(encodedPublicKey);
4950
return loadPublicKey(decodedPublicKey);
5051
}
5152

@@ -74,7 +75,7 @@ public static PublicKey loadPublicKey(byte[] decodedPublicKey) throws NoSuchProv
7475
* @throws InvalidKeySpecException
7576
*/
7677
public static PrivateKey loadPrivateKey(String encodedPrivateKey) throws NoSuchProviderException, NoSuchAlgorithmException, InvalidKeySpecException {
77-
byte[] decodedPrivateKey = Base64Encoder.decode(encodedPrivateKey);
78+
byte[] decodedPrivateKey = Base64.getUrlDecoder().decode(encodedPrivateKey);
7879
return loadPrivateKey(decodedPrivateKey);
7980
}
8081

Diff for: src/main/java/nl/martijndwars/webpush/cli/handlers/GenerateKeyHandler.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package nl.martijndwars.webpush.cli.handlers;
22

3-
import nl.martijndwars.webpush.Base64Encoder;
43
import nl.martijndwars.webpush.Utils;
54
import nl.martijndwars.webpush.cli.commands.GenerateKeyCommand;
65
import org.bouncycastle.jce.ECNamedCurveTable;
@@ -15,6 +14,7 @@
1514
import java.io.IOException;
1615
import java.io.OutputStreamWriter;
1716
import java.security.*;
17+
import java.util.Base64;
1818

1919
import static nl.martijndwars.webpush.Utils.ALGORITHM;
2020
import static nl.martijndwars.webpush.Utils.CURVE;
@@ -42,10 +42,10 @@ public void run() throws InvalidAlgorithmParameterException, NoSuchAlgorithmExce
4242
}
4343

4444
System.out.println("PublicKey:");
45-
System.out.println(Base64Encoder.encodeUrl(encodedPublicKey));
45+
System.out.println(Base64.getUrlEncoder().encodeToString(encodedPublicKey));
4646

4747
System.out.println("PrivateKey:");
48-
System.out.println(Base64Encoder.encodeUrl(encodedPrivateKey));
48+
System.out.println(Base64.getUrlEncoder().encodeToString(encodedPrivateKey));
4949
}
5050

5151
/**

Diff for: src/test/java/nl/martijndwars/webpush/Base64EncoderTest.java

-128
This file was deleted.

Diff for: src/test/java/nl/martijndwars/webpush/HttpEceTest.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
import org.junit.jupiter.api.Test;
88

99
import java.security.*;
10+
import java.util.Base64;
1011
import java.util.HashMap;
1112

12-
import static nl.martijndwars.webpush.Base64Encoder.decode;
1313
import static nl.martijndwars.webpush.Encoding.AES128GCM;
1414
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
1515

@@ -19,6 +19,10 @@ public static void addSecurityProvider() {
1919
Security.addProvider(new BouncyCastleProvider());
2020
}
2121

22+
private byte[] decode(String s) {
23+
return Base64.getUrlDecoder().decode(s);
24+
}
25+
2226
@Test
2327
public void testZeroSaltAndKey() throws GeneralSecurityException {
2428
HttpEce httpEce = new HttpEce();

Diff for: src/test/java/nl/martijndwars/webpush/selenium/SeleniumTests.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package nl.martijndwars.webpush.selenium;
22

3-
import nl.martijndwars.webpush.Base64Encoder;
43
import org.bouncycastle.jce.provider.BouncyCastleProvider;
54
import org.junit.jupiter.api.AfterAll;
65
import org.junit.jupiter.api.DynamicTest;
76
import org.junit.jupiter.api.TestFactory;
87

98
import java.io.IOException;
109
import java.security.Security;
10+
import java.util.Base64;
1111
import java.util.stream.Stream;
1212

1313
import static org.junit.jupiter.api.DynamicTest.dynamicTest;
@@ -58,8 +58,8 @@ public Stream<DynamicTest> dynamicTests() throws IOException {
5858
* @return
5959
*/
6060
protected Stream<Configuration> getConfigurations() {
61-
String PUBLIC_KEY_NO_PADDING = Base64Encoder.encodeWithoutPadding(
62-
Base64Encoder.decode(PUBLIC_KEY)
61+
String PUBLIC_KEY_NO_PADDING = Base64.getUrlEncoder().withoutPadding().encodeToString(
62+
Base64.getUrlDecoder().decode(PUBLIC_KEY)
6363
);
6464

6565
return Stream.of(

0 commit comments

Comments
 (0)