int sodium_memcmp(const void * const b1_, const void * const b2_, size_t len);
When a comparison involves secret data (e.g. key, authentication tag), is it critical to use a constant-time comparison function in order to mitigate side-channel attacks.
The sodium_memcmp()
function can be used for this purpose.
The function returns 0
if the len
bytes pointed to by b1_
match the len
bytes pointed to by b2_
. Otherwise, it returns -1
.
Note: sodium_memcmp()
is not a lexicographic comparator and is not a generic replacement for memcmp()
.
char *sodium_bin2hex(char * const hex, const size_t hex_maxlen,
const unsigned char * const bin, const size_t bin_len);
The sodium_bin2hex()
function converts bin_len
bytes stored at bin
into a hexadecimal string.
The string is stored into hex
and includes a nul byte (\0
) terminator.
hex_maxlen
is the maximum number of bytes that the function is allowed to write starting at hex
. It should be at least bin_len * 2 + 1
.
The function returns hex
on success, or NULL
on overflow. It evaluates in constant time for a given size.
int sodium_hex2bin(unsigned char * const bin, const size_t bin_maxlen,
const char * const hex, const size_t hex_len,
const char * const ignore, size_t * const bin_len,
const char ** const hex_end);
The sodium_hex2bin()
function parses a hexadecimal string hex
and converts it to a byte sequence.
hex
does not have to be nul terminated, as the number of characters to parse is supplied via the hex_len
parameter.
ignore
is a string of characters to skip. For example, the string ": "
allows columns and spaces to be present at any locations in the hexadecimal string. These characters will just be ignored. As a result, "69:FC"
, "69 FC"
, "69 : FC"
and "69FC"
will be valid inputs, and will produce the same output.
ignore
can be set to NULL
in order to disallow any non-hexadecimal character.
bin_maxlen
is the maximum number of bytes to put into bin
.
The parser stops when a non-hexadecimal, non-ignored character is found or when bin_maxlen
bytes have been written.
The function returns -1
if more than bin_maxlen
bytes would be required to store the parsed string.
It returns 0
on success and sets hex_end
, if it is not NULL
, to a pointer to the character following the last parsed character.
It evaluates in constant time for a given length and format.
void sodium_increment(unsigned char *n, const size_t nlen);
The sodium_increment()
function takes a pointer to an arbitrary-long unsigned number, and increments it.
It runs in constant-time for a given length, and considers the number to be encoded in little-endian format.
sodium_increment()
can be used to increment nonces in constant time.
This function was introduced in libsodium 1.0.4.