Class BufferUtils
- java.lang.Object
-
- org.apache.sshd.common.util.buffer.BufferUtils
-
public final class BufferUtils extends java.lang.Object
TODO Add javadoc
-
-
Field Summary
Fields Modifier and Type Field Description static java.util.function.IntUnaryOperator
DEFAULT_BUFFER_GROWTH_FACTOR
static char
DEFAULT_HEX_SEPARATOR
static java.util.logging.Level
DEFAULT_HEXDUMP_LEVEL
static char
EMPTY_HEX_SEPARATOR
static java.lang.String
HEX_DIGITS
static long
MAX_UINT32_VALUE
Maximum value of auint32
fieldstatic int
MAX_UINT8_VALUE
Maximum value of auint8
field
-
Constructor Summary
Constructors Modifier Constructor Description private
BufferUtils()
Private Constructor
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static <A extends java.lang.Appendable>
AappendHex(A sb, byte[] array, int offset, int len, char sep)
static <A extends java.lang.Appendable>
AappendHex(A sb, char sep, byte... array)
static <B extends Buffer>
Bclear(B buffer)
InvokesBuffer.clear()
static byte[]
decodeHex(char separator, java.lang.CharSequence csq)
static byte[]
decodeHex(char separator, java.lang.CharSequence csq, int start, int end)
static <S extends java.io.OutputStream>
intdecodeHex(S stream, char separator, java.lang.CharSequence csq)
static <S extends java.io.OutputStream>
intdecodeHex(S stream, char separator, java.lang.CharSequence csq, int start, int end)
static void
dumpHex(SimplifiedLog logger, java.util.logging.Level level, java.lang.String prefix, char sep, int chunkSize, byte... data)
static void
dumpHex(SimplifiedLog logger, java.util.logging.Level level, java.lang.String prefix, char sep, int chunkSize, byte[] data, int offset, int len)
static void
dumpHex(SimplifiedLog logger, java.util.logging.Level level, java.lang.String prefix, PropertyResolver resolver, char sep, byte... data)
static void
dumpHex(SimplifiedLog logger, java.util.logging.Level level, java.lang.String prefix, PropertyResolver resolver, char sep, byte[] data, int offset, int len)
static boolean
equals(byte[] a1, byte[] a2)
Compares the contents of 2 arrays of bytes - Note: do not use it to execute security related comparisons (e.g.static boolean
equals(byte[] a1, int a1Offset, byte[] a2, int a2Offset, int length)
Compares the contents of 2 arrays of bytes - Note: do not use it to execute security related comparisons (e.g.static byte
fromHex(char hi, char lo)
static java.math.BigInteger
fromMPIntBytes(byte[] mpInt)
static long
getLong(byte[] buf, int off, int len)
static int
getNextPowerOf2(int value)
static long
getUInt(byte... buf)
static long
getUInt(byte[] buf, int off, int len)
static boolean
isValidInt32Value(long value)
static boolean
isValidUint32Value(long value)
static int
putLong(long value, byte[] buf, int off, int len)
static int
putUInt(long value, byte[] buf)
Writes a 32-bit value in network order (i.e., MSB 1st)static int
putUInt(long value, byte[] buf, int off, int len)
Writes a 32-bit value in network order (i.e., MSB 1st)static int
readInt(java.io.InputStream input, byte[] buf)
Read a 32-bit value in network orderstatic int
readInt(java.io.InputStream input, byte[] buf, int offset, int len)
Read a 32-bit value in network orderstatic long
readUInt(java.io.InputStream input, byte[] buf)
Read a 32-bit value in network orderstatic long
readUInt(java.io.InputStream input, byte[] buf, int offset, int len)
Read a 32-bit value in network orderstatic java.lang.String
toHex(byte... array)
static java.lang.String
toHex(byte[] array, int offset, int len)
static java.lang.String
toHex(byte[] array, int offset, int len, char sep)
static java.lang.String
toHex(char sep, byte... array)
static int
updateLengthPlaceholder(Buffer buffer, int lenPos)
Used for encodings where we don't know the data length before adding it to the buffer.static void
updateLengthPlaceholder(Buffer buffer, int lenPos, int dataLength)
Updates a 32-bit "placeholder" location for data length - moves the write position to the specified placeholder position, updates the length value and then moves the write position it back to its original value.static long
validateInt32Value(long value, java.lang.String message)
static long
validateInt32Value(long value, java.lang.String format, java.lang.Object arg)
static long
validateInt32Value(long value, java.lang.String format, java.lang.Object... args)
static long
validateUint32Value(long value, java.lang.String message)
static long
validateUint32Value(long value, java.lang.String format, java.lang.Object arg)
static long
validateUint32Value(long value, java.lang.String format, java.lang.Object... args)
static void
writeInt(java.io.OutputStream output, int value, byte[] buf)
Writes a 32-bit value in network order (i.e., MSB 1st)static void
writeInt(java.io.OutputStream output, int value, byte[] buf, int off, int len)
Writes a 32-bit value in network order (i.e., MSB 1st)static void
writeUInt(java.io.OutputStream output, long value, byte[] buf)
Writes a 32-bit value in network order (i.e., MSB 1st)static void
writeUInt(java.io.OutputStream output, long value, byte[] buf, int off, int len)
Writes a 32-bit value in network order (i.e., MSB 1st)
-
-
-
Field Detail
-
DEFAULT_HEX_SEPARATOR
public static final char DEFAULT_HEX_SEPARATOR
- See Also:
- Constant Field Values
-
EMPTY_HEX_SEPARATOR
public static final char EMPTY_HEX_SEPARATOR
- See Also:
- Constant Field Values
-
HEX_DIGITS
public static final java.lang.String HEX_DIGITS
- See Also:
- Constant Field Values
-
DEFAULT_HEXDUMP_LEVEL
public static final java.util.logging.Level DEFAULT_HEXDUMP_LEVEL
-
DEFAULT_BUFFER_GROWTH_FACTOR
public static final java.util.function.IntUnaryOperator DEFAULT_BUFFER_GROWTH_FACTOR
-
MAX_UINT32_VALUE
public static final long MAX_UINT32_VALUE
Maximum value of auint32
field- See Also:
- Constant Field Values
-
MAX_UINT8_VALUE
public static final int MAX_UINT8_VALUE
Maximum value of auint8
field- See Also:
- Constant Field Values
-
-
Method Detail
-
dumpHex
public static void dumpHex(SimplifiedLog logger, java.util.logging.Level level, java.lang.String prefix, PropertyResolver resolver, char sep, byte... data)
-
dumpHex
public static void dumpHex(SimplifiedLog logger, java.util.logging.Level level, java.lang.String prefix, PropertyResolver resolver, char sep, byte[] data, int offset, int len)
-
dumpHex
public static void dumpHex(SimplifiedLog logger, java.util.logging.Level level, java.lang.String prefix, char sep, int chunkSize, byte... data)
-
dumpHex
public static void dumpHex(SimplifiedLog logger, java.util.logging.Level level, java.lang.String prefix, char sep, int chunkSize, byte[] data, int offset, int len)
-
toHex
public static java.lang.String toHex(byte... array)
-
toHex
public static java.lang.String toHex(char sep, byte... array)
-
toHex
public static java.lang.String toHex(byte[] array, int offset, int len)
-
toHex
public static java.lang.String toHex(byte[] array, int offset, int len, char sep)
-
appendHex
public static <A extends java.lang.Appendable> A appendHex(A sb, char sep, byte... array) throws java.io.IOException
- Throws:
java.io.IOException
-
appendHex
public static <A extends java.lang.Appendable> A appendHex(A sb, byte[] array, int offset, int len, char sep) throws java.io.IOException
- Throws:
java.io.IOException
-
decodeHex
public static byte[] decodeHex(char separator, java.lang.CharSequence csq)
- Parameters:
separator
- The separator between the HEX values - may beEMPTY_HEX_SEPARATOR
csq
- TheCharSequence
containing the HEX encoded bytes- Returns:
- The decoded bytes
- Throws:
java.lang.IllegalArgumentException
- If invalid HEX sequence lengthjava.lang.NumberFormatException
- If invalid HEX characters found- See Also:
decodeHex(char, CharSequence, int, int)
-
decodeHex
public static byte[] decodeHex(char separator, java.lang.CharSequence csq, int start, int end)
- Parameters:
separator
- The separator between the HEX values - may beEMPTY_HEX_SEPARATOR
csq
- TheCharSequence
containing the HEX encoded bytesstart
- Start offset of the HEX sequence (inclusive)end
- End offset of the HEX sequence (exclusive)- Returns:
- The decoded bytes
- Throws:
java.lang.IllegalArgumentException
- If invalid HEX sequence lengthjava.lang.NumberFormatException
- If invalid HEX characters found
-
decodeHex
public static <S extends java.io.OutputStream> int decodeHex(S stream, char separator, java.lang.CharSequence csq) throws java.io.IOException
- Type Parameters:
S
- TheOutputStream
generic type- Parameters:
stream
- The targetOutputStream
separator
- The separator between the HEX values - may beEMPTY_HEX_SEPARATOR
csq
- TheCharSequence
containing the HEX encoded bytes- Returns:
- The number of bytes written to the stream
- Throws:
java.io.IOException
- If failed to writejava.lang.IllegalArgumentException
- If invalid HEX sequence lengthjava.lang.NumberFormatException
- If invalid HEX characters found- See Also:
decodeHex(OutputStream, char, CharSequence, int, int)
-
decodeHex
public static <S extends java.io.OutputStream> int decodeHex(S stream, char separator, java.lang.CharSequence csq, int start, int end) throws java.io.IOException
- Type Parameters:
S
- TheOutputStream
generic type- Parameters:
stream
- The targetOutputStream
separator
- The separator between the HEX values - may beEMPTY_HEX_SEPARATOR
csq
- TheCharSequence
containing the HEX encoded bytesstart
- Start offset of the HEX sequence (inclusive)end
- End offset of the HEX sequence (exclusive)- Returns:
- The number of bytes written to the stream
- Throws:
java.io.IOException
- If failed to writejava.lang.IllegalArgumentException
- If invalid HEX sequence lengthjava.lang.NumberFormatException
- If invalid HEX characters found
-
fromHex
public static byte fromHex(char hi, char lo) throws java.lang.NumberFormatException
- Throws:
java.lang.NumberFormatException
-
readInt
public static int readInt(java.io.InputStream input, byte[] buf) throws java.io.IOException
Read a 32-bit value in network order- Parameters:
input
- TheInputStream
buf
- Work buffer to use- Returns:
- The read 32-bit value
- Throws:
java.io.IOException
- If failed to read 4 bytes or not enough room in work buffer- See Also:
readInt(InputStream, byte[], int, int)
-
readInt
public static int readInt(java.io.InputStream input, byte[] buf, int offset, int len) throws java.io.IOException
Read a 32-bit value in network order- Parameters:
input
- TheInputStream
buf
- Work buffer to useoffset
- Offset in buffer to uslen
- Available length - must have at least 4 bytes available- Returns:
- The read 32-bit value
- Throws:
java.io.IOException
- If failed to read 4 bytes or not enough room in work buffer- See Also:
readUInt(InputStream, byte[], int, int)
-
readUInt
public static long readUInt(java.io.InputStream input, byte[] buf) throws java.io.IOException
Read a 32-bit value in network order- Parameters:
input
- TheInputStream
buf
- Work buffer to use- Returns:
- The read 32-bit value
- Throws:
java.io.IOException
- If failed to read 4 bytes or not enough room in work buffer- See Also:
readUInt(InputStream, byte[], int, int)
-
readUInt
public static long readUInt(java.io.InputStream input, byte[] buf, int offset, int len) throws java.io.IOException
Read a 32-bit value in network order- Parameters:
input
- TheInputStream
buf
- Work buffer to useoffset
- Offset in buffer to uslen
- Available length - must have at least 4 bytes available- Returns:
- The read 32-bit value
- Throws:
java.io.IOException
- If failed to read 4 bytes or not enough room in work buffer- See Also:
getUInt(byte[], int, int)
-
getUInt
public static long getUInt(byte... buf)
- Parameters:
buf
- A buffer holding a 32-bit unsigned integer in big endian format. Note: if more than 4 bytes are available, then only the first 4 bytes in the buffer will be used- Returns:
- The result as a
long
whose 32 high-order bits are zero - See Also:
getUInt(byte[], int, int)
-
getUInt
public static long getUInt(byte[] buf, int off, int len)
- Parameters:
buf
- A buffer holding a 32-bit unsigned integer in big endian format.off
- The offset of the data in the bufferlen
- The available data length. Note: if more than 4 bytes are available, then only the first 4 bytes in the buffer will be used (starting at the specified offset)- Returns:
- The result as a
long
whose 32 high-order bits are zero
-
getLong
public static long getLong(byte[] buf, int off, int len)
-
fromMPIntBytes
public static java.math.BigInteger fromMPIntBytes(byte[] mpInt)
-
writeInt
public static void writeInt(java.io.OutputStream output, int value, byte[] buf) throws java.io.IOException
Writes a 32-bit value in network order (i.e., MSB 1st)- Parameters:
output
- TheOutputStream
to write the valuevalue
- The 32-bit valuebuf
- A work buffer to use - must have enough space to contain 4 bytes- Throws:
java.io.IOException
- If failed to write the value or work buffer too small- See Also:
writeInt(OutputStream, int, byte[], int, int)
-
writeInt
public static void writeInt(java.io.OutputStream output, int value, byte[] buf, int off, int len) throws java.io.IOException
Writes a 32-bit value in network order (i.e., MSB 1st)- Parameters:
output
- TheOutputStream
to write the valuevalue
- The 32-bit valuebuf
- A work buffer to use - must have enough space to contain 4 bytesoff
- The offset to write the valuelen
- The available space- Throws:
java.io.IOException
- If failed to write the value or work buffer too small- See Also:
writeUInt(OutputStream, long, byte[], int, int)
-
writeUInt
public static void writeUInt(java.io.OutputStream output, long value, byte[] buf) throws java.io.IOException
Writes a 32-bit value in network order (i.e., MSB 1st)- Parameters:
output
- TheOutputStream
to write the valuevalue
- The 32-bit valuebuf
- A work buffer to use - must have enough space to contain 4 bytes- Throws:
java.io.IOException
- If failed to write the value or work buffer too small- See Also:
writeUInt(OutputStream, long, byte[], int, int)
-
writeUInt
public static void writeUInt(java.io.OutputStream output, long value, byte[] buf, int off, int len) throws java.io.IOException
Writes a 32-bit value in network order (i.e., MSB 1st)- Parameters:
output
- TheOutputStream
to write the valuevalue
- The 32-bit valuebuf
- A work buffer to use - must have enough space to contain 4 bytesoff
- The offset to write the valuelen
- The available space- Throws:
java.io.IOException
- If failed to write the value or work buffer to small- See Also:
putUInt(long, byte[], int, int)
-
putUInt
public static int putUInt(long value, byte[] buf)
Writes a 32-bit value in network order (i.e., MSB 1st)- Parameters:
value
- The 32-bit valuebuf
- The buffer- Returns:
- The number of bytes used in the buffer
- Throws:
java.lang.IllegalArgumentException
- if not enough space available- See Also:
putUInt(long, byte[], int, int)
-
putUInt
public static int putUInt(long value, byte[] buf, int off, int len)
Writes a 32-bit value in network order (i.e., MSB 1st)- Parameters:
value
- The 32-bit valuebuf
- The bufferoff
- The offset to write the valuelen
- The available space- Returns:
- The number of bytes used in the buffer
- Throws:
java.lang.IllegalArgumentException
- if not enough space available
-
putLong
public static int putLong(long value, byte[] buf, int off, int len)
-
equals
public static boolean equals(byte[] a1, byte[] a2)
Compares the contents of 2 arrays of bytes - Note: do not use it to execute security related comparisons (e.g. MACs) since the method leaks timing information. UseMac#equals
method instead.- Parameters:
a1
- 1st arraya2
- 2nd array- Returns:
true
if all bytes in the compared arrays are equal
-
equals
public static boolean equals(byte[] a1, int a1Offset, byte[] a2, int a2Offset, int length)
Compares the contents of 2 arrays of bytes - Note: do not use it to execute security related comparisons (e.g. MACs) since the method leaks timing information. UseMac#equals
method instead.- Parameters:
a1
- 1st arraya1Offset
- Offset to start comparing in 1st arraya2
- 2nd arraya2Offset
- Offset to start comparing in 2nd arraylength
- Number of bytes to compare- Returns:
true
if all bytes in the compared arrays are equal when compared from the specified offsets and up to specified length
-
getNextPowerOf2
public static int getNextPowerOf2(int value)
-
updateLengthPlaceholder
public static int updateLengthPlaceholder(Buffer buffer, int lenPos)
Used for encodings where we don't know the data length before adding it to the buffer. The idea is to place a 32-bit "placeholder", encode the data and then return back to the placeholder and update the length. The method calculates the encoded data length, moves the write position to the specified placeholder position, updates the length value and then moves the write position it back to its original value.- Parameters:
buffer
- TheBuffer
lenPos
- The offset in the buffer where the length placeholder is to be update - Note: assumption is that the encoded data starts immediately after the placeholder- Returns:
- The amount of data that has been encoded
-
updateLengthPlaceholder
public static void updateLengthPlaceholder(Buffer buffer, int lenPos, int dataLength)
Updates a 32-bit "placeholder" location for data length - moves the write position to the specified placeholder position, updates the length value and then moves the write position it back to its original value.- Parameters:
buffer
- TheBuffer
lenPos
- The offset in the buffer where the length placeholder is to be update - Note: assumption is that the encoded data starts immediately after the placeholderdataLength
- The length to update
-
clear
public static <B extends Buffer> B clear(B buffer)
InvokesBuffer.clear()
- Type Parameters:
B
- The generic buffer type- Parameters:
buffer
- ABuffer
instance - ignored ifnull
- Returns:
- The same as the input instance
-
validateInt32Value
public static long validateInt32Value(long value, java.lang.String message)
-
validateInt32Value
public static long validateInt32Value(long value, java.lang.String format, java.lang.Object arg)
-
validateInt32Value
public static long validateInt32Value(long value, java.lang.String format, java.lang.Object... args)
-
isValidInt32Value
public static boolean isValidInt32Value(long value)
-
validateUint32Value
public static long validateUint32Value(long value, java.lang.String message)
-
validateUint32Value
public static long validateUint32Value(long value, java.lang.String format, java.lang.Object arg)
-
validateUint32Value
public static long validateUint32Value(long value, java.lang.String format, java.lang.Object... args)
-
isValidUint32Value
public static boolean isValidUint32Value(long value)
-
-