diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/B64Code.java b/jetty-util/src/main/java/org/eclipse/jetty/util/B64Code.java deleted file mode 100644 index 608e0af9f31..00000000000 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/B64Code.java +++ /dev/null @@ -1,571 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2019 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.util; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; -import java.nio.charset.UnsupportedCharsetException; -import java.util.Base64; - - -/** Fast B64 Encoder/Decoder as described in RFC 1421. - *

Does not insert or interpret whitespace as described in RFC - * 1521. If you require this you must pre/post process your data. - *

Note that in a web context the usual case is to not want - * linebreaks or other white space in the encoded output. - * @deprecated use {@link java.util.Base64} instead - */ -@Deprecated -public class B64Code -{ - private static final char __pad='='; - private static final char[] __rfc1421alphabet= - { - 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P', - 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f', - 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v', - 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/' - }; - - private static final byte[] __rfc1421nibbles; - static - { - __rfc1421nibbles=new byte[256]; - for (int i=0;i<256;i++) - __rfc1421nibbles[i]=-1; - for (byte b=0;b<64;b++) - __rfc1421nibbles[(byte)__rfc1421alphabet[b]]=b; - __rfc1421nibbles[(byte)__pad]=0; - } - - private static final char[] __rfc4648urlAlphabet= - { - 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P', - 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f', - 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v', - 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','-','_' - }; - - private static final byte[] __rfc4648urlNibbles; - static - { - __rfc4648urlNibbles=new byte[256]; - for (int i=0;i<256;i++) - __rfc4648urlNibbles[i]=-1; - for (byte b=0;b<64;b++) - __rfc4648urlNibbles[(byte)__rfc4648urlAlphabet[b]]=b; - __rfc4648urlNibbles[(byte)__pad]=0; - } - - private B64Code() - { - } - - /** - * Base 64 encode as described in RFC 1421. - *

Does not insert whitespace as described in RFC 1521. - * @param s String to encode. - * @return String containing the encoded form of the input. - * @deprecated use {@link Base64.Encoder#encodeToString(byte[])}} instead. - */ - public static String encode(String s) - { - // FIXME: no Jetty mainline code uses this anymore - return encode(s, (Charset)null); - } - - /** - * Base 64 encode as described in RFC 1421. - *

Does not insert whitespace as described in RFC 1521. - * @param s String to encode. - * @param charEncoding String representing the name of - * the character encoding of the provided input String. - * @return String containing the encoded form of the input. - */ - public static String encode(String s,String charEncoding) - { - // FIXME: no Jetty mainline code uses this anymore - byte[] bytes; - if (charEncoding==null) - bytes=s.getBytes(StandardCharsets.ISO_8859_1); - else - bytes=s.getBytes(Charset.forName(charEncoding)); - return new String(encode(bytes)); - } - - /** - * Base 64 encode as described in RFC 1421. - *

Does not insert whitespace as described in RFC 1521. - * @param s String to encode. - * @param charEncoding The character encoding of the provided input String. - * @return String containing the encoded form of the input. - */ - public static String encode(String s, Charset charEncoding) - { - // FIXME: no Jetty mainline code uses this anymore - byte[] bytes=s.getBytes(charEncoding==null ? StandardCharsets.ISO_8859_1 : charEncoding); - return new String(encode(bytes)); - } - - /** - * Fast Base 64 encode as described in RFC 1421. - *

Does not insert whitespace as described in RFC 1521. - *

Avoids creating extra copies of the input/output. - * @param b byte array to encode. - * @return char array containing the encoded form of the input. - */ - public static char[] encode(byte[] b) - { - // FIXME: no Jetty mainline code uses this anymore - if (b==null) - return null; - - int bLen=b.length; - int cLen=((bLen+2)/3)*4; - char c[]=new char[cLen]; - int ci=0; - int bi=0; - byte b0, b1, b2; - int stop=(bLen/3)*3; - while (bi>>2)&0x3f]; - c[ci++]=__rfc1421alphabet[(b0<<4)&0x3f|(b1>>>4)&0x0f]; - c[ci++]=__rfc1421alphabet[(b1<<2)&0x3f|(b2>>>6)&0x03]; - c[ci++]=__rfc1421alphabet[b2&0x3f]; - } - - if (bLen!=bi) - { - switch (bLen%3) - { - case 2: - b0=b[bi++]; - b1=b[bi++]; - c[ci++]=__rfc1421alphabet[(b0>>>2)&0x3f]; - c[ci++]=__rfc1421alphabet[(b0<<4)&0x3f|(b1>>>4)&0x0f]; - c[ci++]=__rfc1421alphabet[(b1<<2)&0x3f]; - c[ci++]=__pad; - break; - - case 1: - b0=b[bi++]; - c[ci++]=__rfc1421alphabet[(b0>>>2)&0x3f]; - c[ci++]=__rfc1421alphabet[(b0<<4)&0x3f]; - c[ci++]=__pad; - c[ci++]=__pad; - break; - - default: - break; - } - } - - return c; - } - - /** - * Fast Base 64 encode as described in RFC 1421 and RFC2045 - *

Does not insert whitespace as described in RFC 1521, unless rfc2045 is passed as true. - *

Avoids creating extra copies of the input/output. - * @param b byte array to encode. - * @param rfc2045 If true, break lines at 76 characters with CRLF - * @return char array containing the encoded form of the input. - */ - public static char[] encode(byte[] b, boolean rfc2045) - { - // FIXME: no Jetty mainline code uses this anymore - if (b==null) - return null; - if (!rfc2045) - return encode(b); - - int bLen=b.length; - int cLen=((bLen+2)/3)*4; - cLen+=2+2*(cLen/76); - char c[]=new char[cLen]; - int ci=0; - int bi=0; - byte b0, b1, b2; - int stop=(bLen/3)*3; - int l=0; - while (bi>>2)&0x3f]; - c[ci++]=__rfc1421alphabet[(b0<<4)&0x3f|(b1>>>4)&0x0f]; - c[ci++]=__rfc1421alphabet[(b1<<2)&0x3f|(b2>>>6)&0x03]; - c[ci++]=__rfc1421alphabet[b2&0x3f]; - l+=4; - if (l%76==0) - { - c[ci++]=13; - c[ci++]=10; - } - } - - if (bLen!=bi) - { - switch (bLen%3) - { - case 2: - b0=b[bi++]; - b1=b[bi++]; - c[ci++]=__rfc1421alphabet[(b0>>>2)&0x3f]; - c[ci++]=__rfc1421alphabet[(b0<<4)&0x3f|(b1>>>4)&0x0f]; - c[ci++]=__rfc1421alphabet[(b1<<2)&0x3f]; - c[ci++]=__pad; - break; - - case 1: - b0=b[bi++]; - c[ci++]=__rfc1421alphabet[(b0>>>2)&0x3f]; - c[ci++]=__rfc1421alphabet[(b0<<4)&0x3f]; - c[ci++]=__pad; - c[ci++]=__pad; - break; - - default: - break; - } - } - - c[ci++]=13; - c[ci++]=10; - return c; - } - - /** - * Base 64 decode as described in RFC 2045. - *

Unlike {@link #decode(char[])}, extra whitespace is ignored. - * @param encoded String to decode. - * @param charEncoding String representing the character encoding - * used to map the decoded bytes into a String. If null - * the platforms default charset is used. - * @return String decoded byte array. - * @throws UnsupportedCharsetException if the encoding is not supported - * @throws IllegalArgumentException if the input is not a valid - * B64 encoding. - */ - @SuppressWarnings("DefaultCharset") - public static String decode(String encoded,String charEncoding) - { - // FIXME: no Jetty mainline code uses this anymore - byte[] decoded=decode(encoded); - if (charEncoding==null) - return new String(decoded); - return new String(decoded,Charset.forName(charEncoding)); - } - - /** - * Base 64 decode as described in RFC 2045. - *

Unlike {@link #decode(char[])}, extra whitespace is ignored. - * @param encoded String to decode. - * @param charEncoding Character encoding - * used to map the decoded bytes into a String. If null - * the platforms default charset is used. - * @return String decoded byte array. - * @throws IllegalArgumentException if the input is not a valid - * B64 encoding. - */ - @SuppressWarnings("DefaultCharset") - public static String decode(String encoded, Charset charEncoding) - { - // FIXME: no Jetty mainline code uses this anymore - byte[] decoded=decode(encoded); - if (charEncoding==null) - return new String(decoded); - return new String(decoded, charEncoding); - } - - /** - * Fast Base 64 decode as described in RFC 1421. - * - *

Unlike other decode methods, this does not attempt to - * cope with extra whitespace as described in RFC 1521/2045. - *

Avoids creating extra copies of the input/output. - *

Note this code has been flattened for performance. - * @param b char array to decode. - * @return byte array containing the decoded form of the input. - * @throws IllegalArgumentException if the input is not a valid - * B64 encoding. - */ - public static byte[] decode(char[] b) - { - // FIXME: no Jetty mainline code uses this anymore - if (b==null) - return null; - - int bLen=b.length; - if (bLen%4!=0) - throw new IllegalArgumentException("Input block size is not 4"); - - int li=bLen-1; - while (li>=0 && b[li]==(byte)__pad) - li--; - - if (li<0) - return new byte[0]; - - // Create result array of exact required size. - int rLen=((li+1)*3)/4; - byte r[]=new byte[rLen]; - int ri=0; - int bi=0; - int stop=(rLen/3)*3; - byte b0,b1,b2,b3; - try - { - while (ri>>4); - r[ri++]=(byte)(b1<<4|b2>>>2); - r[ri++]=(byte)(b2<<6|b3); - } - - if (rLen!=ri) - { - switch (rLen%3) - { - case 2: - b0=__rfc1421nibbles[b[bi++]]; - b1=__rfc1421nibbles[b[bi++]]; - b2=__rfc1421nibbles[b[bi++]]; - if (b0<0 || b1<0 || b2<0) - throw new IllegalArgumentException("Not B64 encoded"); - r[ri++]=(byte)(b0<<2|b1>>>4); - r[ri++]=(byte)(b1<<4|b2>>>2); - break; - - case 1: - b0=__rfc1421nibbles[b[bi++]]; - b1=__rfc1421nibbles[b[bi++]]; - if (b0<0 || b1<0) - throw new IllegalArgumentException("Not B64 encoded"); - r[ri++]=(byte)(b0<<2|b1>>>4); - break; - - default: - break; - } - } - } - catch (IndexOutOfBoundsException e) - { - throw new IllegalArgumentException("char "+bi - +" was not B64 encoded"); - } - - return r; - } - - /** - * Base 64 decode as described in RFC 2045. - *

Unlike {@link #decode(char[])}, extra whitespace is ignored. - * @param encoded String to decode. - * @return byte array containing the decoded form of the input. - * @throws IllegalArgumentException if the input is not a valid - * B64 encoding. - */ - public static byte[] decode(String encoded) - { - // FIXME: no Jetty mainline code uses this anymore - if (encoded==null) - return null; - - ByteArrayOutputStream bout = new ByteArrayOutputStream(4*encoded.length()/3); - decode(encoded, bout); - return bout.toByteArray(); - } - - /* ------------------------------------------------------------ */ - /** - * Base 64 decode as described in RFC 2045. - *

Unlike {@link #decode(char[])}, extra whitespace is ignored. - * @param encoded String to decode. - * @param bout stream for decoded bytes - * @throws IllegalArgumentException if the input is not a valid - * B64 encoding. - */ - static public void decode(String encoded, ByteArrayOutputStream bout) - { - // FIXME: no Jetty mainline code uses this anymore - if (encoded==null) - return; - - if (bout == null) - throw new IllegalArgumentException("No outputstream for decoded bytes"); - - int ci=0; - byte nibbles[] = new byte[4]; - int s=0; - - while (ci>>4); - break; - case 3: - bout.write(nibbles[1]<<4|nibbles[2]>>>2); - break; - case 4: - bout.write(nibbles[2]<<6|nibbles[3]); - s=0; - break; - } - - } - - return; - } - - /* ------------------------------------------------------------ */ - public static byte[] decodeRFC4648URL(String encoded) - { - // FIXME: no Jetty mainline code uses this anymore - if (encoded==null) - return null; - - ByteArrayOutputStream bout = new ByteArrayOutputStream(4*encoded.length()/3); - decodeRFC4648URL(encoded, bout); - return bout.toByteArray(); - } - - /* ------------------------------------------------------------ */ - /** - * Base 64 decode as described in RFC 4648 URL. - *

Unlike {@link #decode(char[])}, extra whitespace is ignored. - * @param encoded String to decode. - * @param bout stream for decoded bytes - * @throws IllegalArgumentException if the input is not a valid - * B64 encoding. - */ - static public void decodeRFC4648URL (String encoded, ByteArrayOutputStream bout) - { - // FIXME: no Jetty mainline code uses this anymore - if (encoded==null) - return; - - if (bout == null) - throw new IllegalArgumentException("No outputstream for decoded bytes"); - - int ci=0; - byte nibbles[] = new byte[4]; - int s=0; - - while (ci>>4); - break; - case 3: - bout.write(nibbles[1]<<4|nibbles[2]>>>2); - break; - case 4: - bout.write(nibbles[2]<<6|nibbles[3]); - s=0; - break; - } - - } - - return; - } - - public static void encode(int value,Appendable buf) throws IOException - { - // FIXME: no Jetty mainline code uses this anymore - buf.append(__rfc1421alphabet[0x3f&((0xFC000000&value)>>26)]); - buf.append(__rfc1421alphabet[0x3f&((0x03F00000&value)>>20)]); - buf.append(__rfc1421alphabet[0x3f&((0x000FC000&value)>>14)]); - buf.append(__rfc1421alphabet[0x3f&((0x00003F00&value)>>8)]); - buf.append(__rfc1421alphabet[0x3f&((0x000000FC&value)>>2)]); - buf.append(__rfc1421alphabet[0x3f&((0x00000003&value)<<4)]); - } - - public static void encode(long lvalue,Appendable buf) throws IOException - { - // FIXME: no Jetty mainline code uses this anymore - int value=(int)(0xFFFFFFFC&(lvalue>>32)); - buf.append(__rfc1421alphabet[0x3f&((0xFC000000&value)>>26)]); - buf.append(__rfc1421alphabet[0x3f&((0x03F00000&value)>>20)]); - buf.append(__rfc1421alphabet[0x3f&((0x000FC000&value)>>14)]); - buf.append(__rfc1421alphabet[0x3f&((0x00003F00&value)>>8)]); - buf.append(__rfc1421alphabet[0x3f&((0x000000FC&value)>>2)]); - - buf.append(__rfc1421alphabet[0x3f&((0x00000003&value)<<4) + (0xf&(int)(lvalue>>28))]); - - value=0x0FFFFFFF&(int)lvalue; - buf.append(__rfc1421alphabet[0x3f&((0x0FC00000&value)>>22)]); - buf.append(__rfc1421alphabet[0x3f&((0x003F0000&value)>>16)]); - buf.append(__rfc1421alphabet[0x3f&((0x0000FC00&value)>>10)]); - buf.append(__rfc1421alphabet[0x3f&((0x000003F0&value)>>4)]); - buf.append(__rfc1421alphabet[0x3f&((0x0000000F&value)<<2)]); - } -} diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/B64CodeTest.java b/jetty-util/src/test/java/org/eclipse/jetty/util/B64CodeTest.java deleted file mode 100644 index e1c3848218a..00000000000 --- a/jetty-util/src/test/java/org/eclipse/jetty/util/B64CodeTest.java +++ /dev/null @@ -1,138 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2019 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.util; - -import java.util.Base64; - -import org.junit.jupiter.api.Test; - -import static java.nio.charset.StandardCharsets.ISO_8859_1; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; - -public class B64CodeTest -{ - String text = "Man is distinguished, not only by his reason, but by this singular passion " + - "from other animals, which is a lust of the mind, that by a perseverance of delight in " + - "the continued and indefatigable generation of knowledge, exceeds the short vehemence " + - "of any carnal pleasure."; - - @Test - public void testEncode_RFC1421() - { - String expected = "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz" + - "IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg" + - "dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu" + - "dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo" + - "ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4="; - - // Default Encode - String b64 = B64Code.encode(text, ISO_8859_1); - assertThat("B64Code.encode(String)", b64, is(expected)); - - // Specified RFC Encode - byte[] rawInputBytes = text.getBytes(ISO_8859_1); - char[] chars = B64Code.encode(rawInputBytes,false); - b64 = new String(chars,0,chars.length); - assertThat("B64Code.encode(byte[], false)", b64, is(expected)); - - // Standard Java Encode - String javaBase64 = Base64.getEncoder().encodeToString(rawInputBytes); - assertThat("Base64.getEncoder().encodeToString((byte[])", javaBase64, is(expected)); - } - - @Test - public void testEncode_RFC2045() - { - byte[] rawInputBytes = text.getBytes(ISO_8859_1); - - // Old Jetty way - char[] chars = B64Code.encode(rawInputBytes,true); - String b64 = new String(chars,0,chars.length); - - String expected = "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz\r\n"+ - "IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg\r\n"+ - "dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu\r\n"+ - "dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo\r\n"+ - "ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=\r\n"; - - assertThat(b64, is(expected)); - - // Standard Java way - String javaBase64 = Base64.getMimeEncoder().encodeToString(rawInputBytes); - // NOTE: MIME standard for encoding should not include final "\r\n" - assertThat(javaBase64 + "\r\n", is(expected)); - } - - @Test - public void testInteger() throws Exception - { - byte[] bytes = text.getBytes(ISO_8859_1); - int value = (bytes[0] << 24) + - (bytes[1] << 16) + - (bytes[2] << 8) + - (bytes[3]); - - String expected = "TWFuIA"; - - // Old Jetty way - StringBuilder b = new StringBuilder(); - B64Code.encode(value,b); - assertThat("Old Jetty B64Code", b.toString(), is(expected)); - - // Standard Java technique - byte[] intBytes = new byte[Integer.BYTES]; - for (int i = Integer.BYTES - 1; i >= 0; i--) - { - intBytes[i] = (byte) (value & 0xFF); - value >>= 8; - } - assertThat("Standard Java Base64", Base64.getEncoder().withoutPadding().encodeToString(intBytes), is(expected)); - } - - @Test - public void testLong() throws Exception - { - byte[] bytes = text.getBytes(ISO_8859_1); - long value = ((0xffL & bytes[0]) << 56) + - ((0xffL & bytes[1]) << 48) + - ((0xffL & bytes[2]) << 40) + - ((0xffL & bytes[3]) << 32) + - ((0xffL & bytes[4]) << 24) + - ((0xffL & bytes[5]) << 16) + - ((0xffL & bytes[6]) << 8) + - (0xffL & bytes[7]); - - String expected = "TWFuIGlzIGQ"; - - // Old Jetty way - StringBuilder b = new StringBuilder(); - B64Code.encode(value,b); - assertThat("Old Jetty B64Code", b.toString(), is(expected)); - - // Standard Java technique - byte[] longBytes = new byte[Long.BYTES]; - for (int i = Long.BYTES - 1; i >= 0; i--) - { - longBytes[i] = (byte) (value & 0xFF); - value >>= 8; - } - assertThat("Standard Java Base64", Base64.getEncoder().withoutPadding().encodeToString(longBytes), is(expected)); - } -} diff --git a/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/ClientUpgradeRequest.java b/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/ClientUpgradeRequest.java index af28e1fc50d..77dae96ec2d 100644 --- a/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/ClientUpgradeRequest.java +++ b/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/ClientUpgradeRequest.java @@ -20,6 +20,7 @@ package org.eclipse.jetty.websocket.core.client; import java.net.URI; import java.util.ArrayList; +import java.util.Base64; import java.util.List; import java.util.Locale; import java.util.concurrent.CompletableFuture; @@ -48,7 +49,6 @@ import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.io.ByteBufferPool; import org.eclipse.jetty.io.Connection; import org.eclipse.jetty.io.EndPoint; -import org.eclipse.jetty.util.B64Code; import org.eclipse.jetty.util.Callback; import org.eclipse.jetty.util.QuotedStringTokenizer; import org.eclipse.jetty.util.StringUtil; @@ -406,7 +406,7 @@ public abstract class ClientUpgradeRequest extends HttpRequest implements Respon { byte[] bytes = new byte[16]; ThreadLocalRandom.current().nextBytes(bytes); - return new String(B64Code.encode(bytes)); + return Base64.getEncoder().encodeToString(bytes); } private void initWebSocketHeaders() diff --git a/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/internal/WebSocketCore.java b/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/internal/WebSocketCore.java index 8f7aecbe840..c1af37ea8b9 100644 --- a/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/internal/WebSocketCore.java +++ b/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/internal/WebSocketCore.java @@ -18,11 +18,11 @@ package org.eclipse.jetty.websocket.core.internal; -import org.eclipse.jetty.util.B64Code; -import org.eclipse.jetty.websocket.core.WebSocketConstants; - import java.nio.charset.StandardCharsets; import java.security.MessageDigest; +import java.util.Base64; + +import org.eclipse.jetty.websocket.core.WebSocketConstants; public final class WebSocketCore { @@ -40,7 +40,7 @@ public final class WebSocketCore MessageDigest md = MessageDigest.getInstance("SHA1"); md.update(key.getBytes(StandardCharsets.UTF_8)); md.update(WebSocketConstants.MAGIC); - return new String(B64Code.encode(md.digest())); + return Base64.getEncoder().encodeToString(md.digest()); } catch (Exception e) { diff --git a/jetty-websocket/websocket-core/src/test/java/org/eclipse/jetty/websocket/core/AcceptHashTest.java b/jetty-websocket/websocket-core/src/test/java/org/eclipse/jetty/websocket/core/AcceptHashTest.java index 49fe787c32f..cf408c445c2 100644 --- a/jetty-websocket/websocket-core/src/test/java/org/eclipse/jetty/websocket/core/AcceptHashTest.java +++ b/jetty-websocket/websocket-core/src/test/java/org/eclipse/jetty/websocket/core/AcceptHashTest.java @@ -18,15 +18,15 @@ package org.eclipse.jetty.websocket.core; -import org.eclipse.jetty.util.B64Code; +import java.util.Base64; +import java.util.stream.Stream; + import org.eclipse.jetty.util.TypeUtil; import org.eclipse.jetty.websocket.core.internal.WebSocketCore; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import java.util.stream.Stream; - import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; @@ -36,7 +36,7 @@ public class AcceptHashTest { byte key[] = TypeUtil.fromHexString(hex); assertThat("Key size of hex:[" + hex + "]", key.length, is(16)); - return String.valueOf(B64Code.encode(key)); + return Base64.getEncoder().encodeToString(key); } public static Stream data() diff --git a/jetty-websocket/websocket-core/src/test/java/org/eclipse/jetty/websocket/core/WebSocketTester.java b/jetty-websocket/websocket-core/src/test/java/org/eclipse/jetty/websocket/core/WebSocketTester.java index 27cdf501763..1785b7b03e8 100644 --- a/jetty-websocket/websocket-core/src/test/java/org/eclipse/jetty/websocket/core/WebSocketTester.java +++ b/jetty-websocket/websocket-core/src/test/java/org/eclipse/jetty/websocket/core/WebSocketTester.java @@ -25,12 +25,12 @@ import java.net.InetSocketAddress; import java.net.Socket; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; +import java.util.Base64; import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.io.ArrayByteBufferPool; import org.eclipse.jetty.io.ByteBufferPool; -import org.eclipse.jetty.util.B64Code; import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.eclipse.jetty.websocket.core.internal.Parser; @@ -44,7 +44,7 @@ import static org.hamcrest.Matchers.startsWith; public class WebSocketTester { - private static String NON_RANDOM_KEY = new String(B64Code.encode("0123456701234567".getBytes())); + private static String NON_RANDOM_KEY = Base64.getEncoder().encodeToString("0123456701234567".getBytes()); private static SslContextFactory.Client sslContextFactory; protected ByteBufferPool bufferPool; protected Parser parser;