Skip to content

Commit 8ff2de2

Browse files
Replaced custom Base64 with java.util.Base64
1 parent 0783709 commit 8ff2de2

File tree

10 files changed

+73
-2135
lines changed

10 files changed

+73
-2135
lines changed

src/main/java/com/hierynomus/sshj/transport/verification/KnownHostMatchers.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@
1515
*/
1616
package com.hierynomus.sshj.transport.verification;
1717

18-
import net.schmizz.sshj.common.Base64;
1918
import net.schmizz.sshj.common.IOUtils;
2019
import net.schmizz.sshj.common.SSHException;
2120
import net.schmizz.sshj.transport.mac.MAC;
2221

2322
import java.io.IOException;
2423
import java.util.ArrayList;
24+
import java.util.Base64;
2525
import java.util.List;
2626
import java.util.regex.Pattern;
2727

@@ -85,12 +85,12 @@ public boolean match(String hostname) throws IOException {
8585

8686
private String hashHost(String host) throws IOException {
8787
sha1.init(getSaltyBytes());
88-
return "|1|" + salt + "|" + Base64.encodeBytes(sha1.doFinal(host.getBytes(IOUtils.UTF8)));
88+
return "|1|" + salt + "|" + Base64.getEncoder().encodeToString(sha1.doFinal(host.getBytes(IOUtils.UTF8)));
8989
}
9090

91-
private byte[] getSaltyBytes() throws IOException {
91+
private byte[] getSaltyBytes() {
9292
if (saltyBytes == null) {
93-
saltyBytes = Base64.decode(salt);
93+
saltyBytes = Base64.getDecoder().decode(salt);
9494
}
9595
return saltyBytes;
9696
}

src/main/java/com/hierynomus/sshj/userauth/keyprovider/OpenSSHKeyFileUtil.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package com.hierynomus.sshj.userauth.keyprovider;
1717

18-
import net.schmizz.sshj.common.Base64;
1918
import net.schmizz.sshj.common.Buffer;
2019
import net.schmizz.sshj.common.KeyType;
2120

@@ -24,6 +23,7 @@
2423
import java.io.IOException;
2524
import java.io.Reader;
2625
import java.security.PublicKey;
26+
import java.util.Base64;
2727

2828
public class OpenSSHKeyFileUtil {
2929
private OpenSSHKeyFileUtil() {
@@ -56,7 +56,7 @@ public static ParsedPubKey initPubKey(Reader publicKey) throws IOException {
5656
if (parts.length >= 2) {
5757
return new ParsedPubKey(
5858
KeyType.fromString(parts[0]),
59-
new Buffer.PlainBuffer(Base64.decode(parts[1])).readPublicKey()
59+
new Buffer.PlainBuffer(Base64.getDecoder().decode(parts[1])).readPublicKey()
6060
);
6161
} else {
6262
throw new IOException("Got line with only one column");

src/main/java/com/hierynomus/sshj/userauth/keyprovider/OpenSSHKeyV1KeyFile.java

+8-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,13 @@
2121
import net.i2p.crypto.eddsa.EdDSAPrivateKey;
2222
import net.i2p.crypto.eddsa.spec.EdDSANamedCurveTable;
2323
import net.i2p.crypto.eddsa.spec.EdDSAPrivateKeySpec;
24-
import net.schmizz.sshj.common.*;
24+
import net.schmizz.sshj.common.Buffer;
2525
import net.schmizz.sshj.common.Buffer.PlainBuffer;
26+
import net.schmizz.sshj.common.ByteArrayUtils;
27+
import net.schmizz.sshj.common.IOUtils;
28+
import net.schmizz.sshj.common.KeyType;
29+
import net.schmizz.sshj.common.SSHRuntimeException;
30+
import net.schmizz.sshj.common.SecurityUtils;
2631
import net.schmizz.sshj.transport.cipher.Cipher;
2732
import net.schmizz.sshj.userauth.keyprovider.BaseFileKeyProvider;
2833
import net.schmizz.sshj.userauth.keyprovider.FileKeyProvider;
@@ -47,6 +52,7 @@
4752
import java.security.spec.ECPrivateKeySpec;
4853
import java.security.spec.RSAPrivateCrtKeySpec;
4954
import java.util.Arrays;
55+
import java.util.Base64;
5056

5157
/**
5258
* Reads a key file in the new OpenSSH format.
@@ -99,7 +105,7 @@ protected KeyPair readKeyPair() throws IOException {
99105
}
100106

101107
String keyFile = readKeyFile(reader);
102-
byte[] decode = Base64.decode(keyFile);
108+
byte[] decode = Base64.getDecoder().decode(keyFile);
103109
PlainBuffer keyBuffer = new PlainBuffer(decode);
104110
return readDecodedKeyPair(keyBuffer);
105111

src/main/java/net/schmizz/sshj/common/Base64.java

-2,066
This file was deleted.

src/main/java/net/schmizz/sshj/transport/verification/FingerprintVerifier.java

+29-40
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,15 @@
1515
*/
1616
package net.schmizz.sshj.transport.verification;
1717

18-
import java.io.IOException;
1918
import java.security.GeneralSecurityException;
2019
import java.security.MessageDigest;
2120
import java.security.PublicKey;
2221
import java.util.Arrays;
22+
import java.util.Base64;
2323
import java.util.Collections;
2424
import java.util.List;
2525
import java.util.regex.Pattern;
2626

27-
import net.schmizz.sshj.common.Base64;
2827
import net.schmizz.sshj.common.Buffer;
2928
import net.schmizz.sshj.common.SSHRuntimeException;
3029
import net.schmizz.sshj.common.SecurityUtils;
@@ -46,48 +45,40 @@ public class FingerprintVerifier implements HostKeyVerifier {
4645
*
4746
* @param fingerprint of an SSH fingerprint in MD5 (hex), SHA-1 (base64) or SHA-256(base64) format
4847
*
49-
* @return
48+
* @return Host Key Verifier
5049
*/
5150
public static HostKeyVerifier getInstance(String fingerprint) {
51+
if (fingerprint.startsWith("SHA1:")) {
52+
return new FingerprintVerifier("SHA-1", fingerprint.substring(5));
53+
}
5254

53-
try {
54-
if (fingerprint.startsWith("SHA1:")) {
55-
return new FingerprintVerifier("SHA-1", fingerprint.substring(5));
56-
}
55+
if (fingerprint.startsWith("SHA256:")) {
56+
return new FingerprintVerifier("SHA-256", fingerprint.substring(7));
57+
}
5758

58-
if (fingerprint.startsWith("SHA256:")) {
59-
return new FingerprintVerifier("SHA-256", fingerprint.substring(7));
60-
}
59+
final String md5;
60+
if (fingerprint.startsWith("MD5:")) {
61+
md5 = fingerprint.substring(4); // remove the MD5: prefix
62+
} else {
63+
md5 = fingerprint;
64+
}
6165

62-
final String md5;
63-
if (fingerprint.startsWith("MD5:")) {
64-
md5 = fingerprint.substring(4); // remove the MD5: prefix
65-
} else {
66-
md5 = fingerprint;
67-
}
66+
if (!MD5_FINGERPRINT_PATTERN.matcher(md5).matches()) {
67+
throw new SSHRuntimeException("Invalid MD5 fingerprint: " + fingerprint);
68+
}
6869

69-
if (!MD5_FINGERPRINT_PATTERN.matcher(md5).matches()) {
70-
throw new SSHRuntimeException("Invalid MD5 fingerprint: " + fingerprint);
70+
// Use the old default fingerprint verifier for md5 fingerprints
71+
return (new HostKeyVerifier() {
72+
@Override
73+
public boolean verify(String h, int p, PublicKey k) {
74+
return SecurityUtils.getFingerprint(k).equals(md5);
7175
}
7276

73-
// Use the old default fingerprint verifier for md5 fingerprints
74-
return (new HostKeyVerifier() {
75-
@Override
76-
public boolean verify(String h, int p, PublicKey k) {
77-
return SecurityUtils.getFingerprint(k).equals(md5);
78-
}
79-
80-
@Override
81-
public List<String> findExistingAlgorithms(String hostname, int port) {
82-
return Collections.emptyList();
83-
}
84-
});
85-
} catch (SSHRuntimeException e) {
86-
throw e;
87-
} catch (IOException e) {
88-
throw new SSHRuntimeException(e);
89-
}
90-
77+
@Override
78+
public List<String> findExistingAlgorithms(String hostname, int port) {
79+
return Collections.emptyList();
80+
}
81+
});
9182
}
9283

9384
private final String digestAlgorithm;
@@ -99,18 +90,16 @@ public List<String> findExistingAlgorithms(String hostname, int port) {
9990
* the used digest algorithm
10091
* @param base64Fingerprint
10192
* base64 encoded fingerprint data
102-
*
103-
* @throws IOException
10493
*/
105-
private FingerprintVerifier(String digestAlgorithm, String base64Fingerprint) throws IOException {
94+
private FingerprintVerifier(String digestAlgorithm, String base64Fingerprint) {
10695
this.digestAlgorithm = digestAlgorithm;
10796

10897
// if the length is not padded with "=" chars at the end so that it is divisible by 4 the SSHJ Base64 implementation does not work correctly
10998
StringBuilder base64FingerprintBuilder = new StringBuilder(base64Fingerprint);
11099
while (base64FingerprintBuilder.length() % 4 != 0) {
111100
base64FingerprintBuilder.append("=");
112101
}
113-
fingerprintData = Base64.decode(base64FingerprintBuilder.toString());
102+
fingerprintData = Base64.getDecoder().decode(base64FingerprintBuilder.toString());
114103
}
115104

116105
@Override

src/main/java/net/schmizz/sshj/transport/verification/OpenSSHKnownHosts.java

+19-5
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,30 @@
1818
import com.hierynomus.sshj.common.KeyAlgorithm;
1919
import com.hierynomus.sshj.transport.verification.KnownHostMatchers;
2020
import com.hierynomus.sshj.userauth.certificate.Certificate;
21-
import net.schmizz.sshj.common.*;
21+
import net.schmizz.sshj.common.Buffer;
22+
import net.schmizz.sshj.common.IOUtils;
23+
import net.schmizz.sshj.common.KeyType;
24+
import net.schmizz.sshj.common.LoggerFactory;
25+
import net.schmizz.sshj.common.SSHException;
26+
import net.schmizz.sshj.common.SSHRuntimeException;
27+
import net.schmizz.sshj.common.SecurityUtils;
2228
import org.slf4j.Logger;
2329

24-
import java.io.*;
30+
import java.io.BufferedOutputStream;
31+
import java.io.BufferedReader;
32+
import java.io.BufferedWriter;
33+
import java.io.File;
34+
import java.io.FileOutputStream;
35+
import java.io.FileReader;
36+
import java.io.FileWriter;
37+
import java.io.IOException;
38+
import java.io.Reader;
2539
import java.math.BigInteger;
2640
import java.security.KeyFactory;
2741
import java.security.PublicKey;
2842
import java.security.spec.RSAPublicKeySpec;
2943
import java.util.ArrayList;
44+
import java.util.Base64;
3045
import java.util.List;
3146

3247
/**
@@ -274,7 +289,7 @@ public KnownHostEntry parseEntry(String line)
274289
if (type != KeyType.UNKNOWN) {
275290
final String sKey = split[i++];
276291
try {
277-
byte[] keyBytes = Base64.decode(sKey);
292+
byte[] keyBytes = Base64.getDecoder().decode(sKey);
278293
key = new Buffer.PlainBuffer(keyBytes).readPublicKey();
279294
} catch (IOException ioe) {
280295
log.warn("Error decoding Base64 key bytes", ioe);
@@ -453,8 +468,7 @@ public String getLine() {
453468
}
454469

455470
private String getKeyString(PublicKey pk) {
456-
final Buffer.PlainBuffer buf = new Buffer.PlainBuffer().putPublicKey(pk);
457-
return Base64.encodeBytes(buf.array(), buf.rpos(), buf.available());
471+
return Base64.getEncoder().encodeToString(pk.getEncoded());
458472
}
459473

460474
protected String getHostPart() {

src/main/java/net/schmizz/sshj/userauth/keyprovider/PuTTYKeyFile.java

+4-6
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import net.i2p.crypto.eddsa.spec.EdDSANamedCurveTable;
2323
import net.i2p.crypto.eddsa.spec.EdDSAPrivateKeySpec;
2424
import net.i2p.crypto.eddsa.spec.EdDSAPublicKeySpec;
25-
import net.schmizz.sshj.common.Base64;
2625
import net.schmizz.sshj.common.Buffer;
2726
import net.schmizz.sshj.common.KeyType;
2827
import net.schmizz.sshj.common.SecurityUtils;
@@ -43,9 +42,8 @@
4342
import java.security.*;
4443
import java.security.spec.*;
4544
import java.util.Arrays;
45+
import java.util.Base64;
4646
import java.util.HashMap;
47-
import java.util.LinkedList;
48-
import java.util.List;
4947
import java.util.Map;
5048

5149
/**
@@ -243,7 +241,7 @@ protected void parseKeyPair() throws IOException {
243241
throw new IOException("Invalid key file format: missing \"PuTTY-User-Key-File-?\" entry");
244242
}
245243
// Retrieve keys from payload
246-
publicKey = Base64.decode(payload.get("Public-Lines"));
244+
publicKey = Base64.getDecoder().decode(payload.get("Public-Lines"));
247245
if (this.isEncrypted()) {
248246
final char[] passphrase;
249247
if (pwdf != null) {
@@ -252,7 +250,7 @@ protected void parseKeyPair() throws IOException {
252250
passphrase = "".toCharArray();
253251
}
254252
try {
255-
privateKey = this.decrypt(Base64.decode(payload.get("Private-Lines")), passphrase);
253+
privateKey = this.decrypt(Base64.getDecoder().decode(payload.get("Private-Lines")), passphrase);
256254
Mac mac;
257255
if (this.keyFileVersion <= 2) {
258256
mac = this.prepareVerifyMacV2(passphrase);
@@ -264,7 +262,7 @@ protected void parseKeyPair() throws IOException {
264262
PasswordUtils.blankOut(passphrase);
265263
}
266264
} else {
267-
privateKey = Base64.decode(payload.get("Private-Lines"));
265+
privateKey = Base64.getDecoder().decode(payload.get("Private-Lines"));
268266
}
269267
}
270268

src/test/groovy/com/hierynomus/sshj/common/KeyTypeSpec.groovy

+1-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package com.hierynomus.sshj.common
1717

1818
import com.hierynomus.sshj.userauth.certificate.Certificate
19-
import net.schmizz.sshj.common.Base64
2019
import net.schmizz.sshj.common.Buffer
2120
import net.schmizz.sshj.common.KeyType
2221
import net.schmizz.sshj.userauth.keyprovider.OpenSSHKeyFile
@@ -110,7 +109,7 @@ f26VSnEypH3G3cmPYfpVcXL63bCb0E4sNJwENM4tQGZa5YGz3CxMdgIVAJUv4z9+
110109
def keyType = KeyType.fromString(parts[0])
111110
112111
when:
113-
def pubKey = new Buffer.PlainBuffer(Base64.decode(parts[1])).readPublicKey()
112+
def pubKey = new Buffer.PlainBuffer(Base64.getDecoder().decode(parts[1])).readPublicKey()
114113
115114
then:
116115
KeyType.fromKey(pubKey) == keyType

src/test/groovy/com/hierynomus/sshj/transport/verification/OpenSSHKnownHostsSpec.groovy

+5-6
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package com.hierynomus.sshj.transport.verification
1717

18-
import net.schmizz.sshj.common.Base64
1918
import net.schmizz.sshj.common.Buffer
2019
import net.schmizz.sshj.transport.verification.OpenSSHKnownHosts
2120
import net.schmizz.sshj.util.KeyUtil
@@ -65,7 +64,7 @@ class OpenSSHKnownHostsSpec extends Specification {
6564
host1 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCiYp2IDgzDFhl8T4TRLIhEljvEixz1YN0XWh4dYh0REGK9T4QKiyb28EztPMdcOtz1uyX5rUGYXX9hj99S4SiU=
6665
host1 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLTjA7hduYGmvV9smEEsIdGLdghSPD7kL8QarIIOkeXmBh+LTtT/T1K+Ot/rmXCZsP8hoUXxbvN+Tks440Ci0ck=
6766
""")
68-
def pk = new Buffer.PlainBuffer(Base64.decode("AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLTjA7hduYGmvV9smEEsIdGLdghSPD7kL8QarIIOkeXmBh+LTtT/T1K+Ot/rmXCZsP8hoUXxbvN+Tks440Ci0ck=")).readPublicKey()
67+
def pk = new Buffer.PlainBuffer(Base64.getDecoder().decode("AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLTjA7hduYGmvV9smEEsIdGLdghSPD7kL8QarIIOkeXmBh+LTtT/T1K+Ot/rmXCZsP8hoUXxbvN+Tks440Ci0ck=")).readPublicKey()
6968
when:
7069
def knownhosts = new OpenSSHKnownHosts(f)
7170

@@ -79,7 +78,7 @@ host1 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBL
7978
host1 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTIDgzDFhl8T4TRLIhEljvEixz1YN0XWh4dYh0REGK9T4QKiyb28EztPMdcOtz1uyX5rUGYXX9hj99S4SiU=
8079
host1 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLTjA7hduYGmvV9smEEsIdGLdghSPD7kL8QarIIOkeXmBh+LTtT/T1K+Ot/rmXCZsP8hoUXxbvN+Tks440Ci0ck=
8180
""")
82-
def pk = new Buffer.PlainBuffer(Base64.decode("AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLTjA7hduYGmvV9smEEsIdGLdghSPD7kL8QarIIOkeXmBh+LTtT/T1K+Ot/rmXCZsP8hoUXxbvN+Tks440Ci0ck=")).readPublicKey()
81+
def pk = new Buffer.PlainBuffer(Base64.getDecoder().decode("AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLTjA7hduYGmvV9smEEsIdGLdghSPD7kL8QarIIOkeXmBh+LTtT/T1K+Ot/rmXCZsP8hoUXxbvN+Tks440Ci0ck=")).readPublicKey()
8382
when:
8483
def knownhosts = new OpenSSHKnownHosts(f)
8584

@@ -150,7 +149,7 @@ host1 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBL
150149
def "should match any host name from multi-host line"() {
151150
given:
152151
def f = knownHosts("schmizz.net,69.163.155.180 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6P9Hlwdahh250jGZYKg2snRq2j2lFJVdKSHyxqbJiVy9VX9gTkN3K2MD48qyrYLYOyGs3vTttyUk+cK++JMzURWsrP4piby7LpeOT+3Iq8CQNj4gXZdcH9w15Vuk2qS11at6IsQPVHpKD9HGg9//EFUccI/4w06k4XXLm/IxOGUwj6I2AeWmEOL3aDi+fe07TTosSdLUD6INtR0cyKsg0zC7Da24ixoShT8Oy3x2MpR7CY3PQ1pUVmvPkr79VeA+4qV9F1JM09WdboAMZgWQZ+XrbtuBlGsyhpUHSCQOya+kOJ+bYryS+U7A+6nmTW3C9FX4FgFqTF89UHOC7V0zZQ==")
153-
def pk = new Buffer.PlainBuffer(Base64.decode("AAAAB3NzaC1yc2EAAAABIwAAAQEA6P9Hlwdahh250jGZYKg2snRq2j2lFJVdKSHyxqbJiVy9VX9gTkN3K2MD48qyrYLYOyGs3vTttyUk+cK++JMzURWsrP4piby7LpeOT+3Iq8CQNj4gXZdcH9w15Vuk2qS11at6IsQPVHpKD9HGg9//EFUccI/4w06k4XXLm/IxOGUwj6I2AeWmEOL3aDi+fe07TTosSdLUD6INtR0cyKsg0zC7Da24ixoShT8Oy3x2MpR7CY3PQ1pUVmvPkr79VeA+4qV9F1JM09WdboAMZgWQZ+XrbtuBlGsyhpUHSCQOya+kOJ+bYryS+U7A+6nmTW3C9FX4FgFqTF89UHOC7V0zZQ==")).readPublicKey()
152+
def pk = new Buffer.PlainBuffer(Base64.getDecoder().decode("AAAAB3NzaC1yc2EAAAABIwAAAQEA6P9Hlwdahh250jGZYKg2snRq2j2lFJVdKSHyxqbJiVy9VX9gTkN3K2MD48qyrYLYOyGs3vTttyUk+cK++JMzURWsrP4piby7LpeOT+3Iq8CQNj4gXZdcH9w15Vuk2qS11at6IsQPVHpKD9HGg9//EFUccI/4w06k4XXLm/IxOGUwj6I2AeWmEOL3aDi+fe07TTosSdLUD6INtR0cyKsg0zC7Da24ixoShT8Oy3x2MpR7CY3PQ1pUVmvPkr79VeA+4qV9F1JM09WdboAMZgWQZ+XrbtuBlGsyhpUHSCQOya+kOJ+bYryS+U7A+6nmTW3C9FX4FgFqTF89UHOC7V0zZQ==")).readPublicKey()
154153

155154
when:
156155
def knownHosts = new OpenSSHKnownHosts(f)
@@ -184,7 +183,7 @@ host1 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBL
184183
|\t\t\t\t\t
185184
|\t@revoked host3\tssh-ed25519\t \t$key\t
186185
""".stripMargin())
187-
def pk = new Buffer.PlainBuffer(Base64.decode(key)).readPublicKey()
186+
def pk = new Buffer.PlainBuffer(Base64.getDecoder().decode(key)).readPublicKey()
188187

189188
when:
190189
def knownhosts = new OpenSSHKnownHosts(f)
@@ -212,7 +211,7 @@ host1 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBL
212211
def knownhosts = new OpenSSHKnownHosts(f)
213212

214213
then:
215-
knownhosts.verify("good-host", 22, new Buffer.PlainBuffer(Base64.decode(key)).readPublicKey())
214+
knownhosts.verify("good-host", 22, new Buffer.PlainBuffer(Base64.getDecoder().decode(key)).readPublicKey())
216215
}
217216

218217
def knownHosts(String s) {

src/test/groovy/net/schmizz/sshj/transport/verification/FingerprintVerifierSpec.groovy

+1-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package net.schmizz.sshj.transport.verification
1717

18-
import net.schmizz.sshj.common.Base64
1918
import net.schmizz.sshj.common.Buffer
2019
import spock.lang.Specification
2120
import spock.lang.Unroll
@@ -63,6 +62,6 @@ class FingerprintVerifierSpec extends Specification {
6362
def getPublicKey() {
6463
def lines = new File("src/test/resources/keytypes/test_ed25519.pub").readLines()
6564
def keystring = lines[0].split(" ")[1]
66-
return new Buffer.PlainBuffer(Base64.decode(keystring)).readPublicKey()
65+
return new Buffer.PlainBuffer(Base64.getDecoder().decode(keystring)).readPublicKey()
6766
}
6867
}

0 commit comments

Comments
 (0)