mirror of
https://github.com/jedisct1/libsodium.git
synced 2024-12-23 20:15:19 -07:00
Add a sodium_bin2hex utility function.
This commit is contained in:
parent
a6490db658
commit
1a3786705e
@ -135,11 +135,17 @@ Warning: if a region has been allocated on the heap, you still have
|
||||
to make sure that it can't get swapped to disk, possibly using
|
||||
`mlock(2)`.
|
||||
|
||||
In order to compare memory zones in constant time, Sodium proides:
|
||||
In order to compare memory zones in constant time, Sodium provides:
|
||||
|
||||
int sodium_memcmp(const void * const b1_, const void * const b2_,
|
||||
size_t size);
|
||||
|
||||
And a convenience function for converting a binary buffer to a
|
||||
hexadecimal string:
|
||||
|
||||
char * sodium_bin2hex(char * const hex, const size_t hexlen,
|
||||
const unsigned char *bin, const size_t binlen);
|
||||
|
||||
## New operations
|
||||
|
||||
### crypto_shorthash
|
||||
|
@ -25,6 +25,10 @@ void sodium_memzero(void * const pnt, const size_t len);
|
||||
SODIUM_EXPORT
|
||||
int sodium_memcmp(const void * const b1_, const void * const b2_, size_t size);
|
||||
|
||||
SODIUM_EXPORT
|
||||
char *sodium_bin2hex(char * const hex, const size_t hexlen,
|
||||
const unsigned char *bin, const size_t binlen);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -63,3 +63,24 @@ _sodium_alignedcalloc(unsigned char ** const unaligned_p, const size_t len)
|
||||
|
||||
return aligned;
|
||||
}
|
||||
|
||||
char *
|
||||
sodium_bin2hex(char * const hex, const size_t hexlen,
|
||||
const unsigned char *bin, const size_t binlen)
|
||||
{
|
||||
static const char hexdigits[16] = "0123456789abcdef";
|
||||
size_t i = (size_t) 0U;
|
||||
size_t j = (size_t) 0U;
|
||||
|
||||
if (binlen >= SIZE_MAX / 2 || hexlen < binlen * 2U) {
|
||||
abort();
|
||||
}
|
||||
while (i < binlen) {
|
||||
hex[j++] = hexdigits[bin[i] >> 4];
|
||||
hex[j++] = hexdigits[bin[i] & 0xf];
|
||||
i++;
|
||||
}
|
||||
hex[j] = 0;
|
||||
|
||||
return hex;
|
||||
}
|
||||
|
@ -8,17 +8,20 @@ int main(void)
|
||||
{
|
||||
unsigned char buf1[1000];
|
||||
unsigned char buf2[1000];
|
||||
char buf3[33];
|
||||
|
||||
randombytes(buf1, sizeof buf1);
|
||||
memcpy(buf2, buf1, sizeof buf2);
|
||||
printf ("%d\n", sodium_memcmp(buf1, buf2, sizeof buf1));
|
||||
printf("%d\n", sodium_memcmp(buf1, buf2, sizeof buf1));
|
||||
sodium_memzero(buf1, 0U);
|
||||
printf ("%d\n", sodium_memcmp(buf1, buf2, sizeof buf1));
|
||||
printf("%d\n", sodium_memcmp(buf1, buf2, sizeof buf1));
|
||||
sodium_memzero(buf1, sizeof buf1 / 2);
|
||||
printf ("%d\n", sodium_memcmp(buf1, buf2, sizeof buf1));
|
||||
printf ("%d\n", sodium_memcmp(buf1, buf2, 0U));
|
||||
printf("%d\n", sodium_memcmp(buf1, buf2, sizeof buf1));
|
||||
printf("%d\n", sodium_memcmp(buf1, buf2, 0U));
|
||||
sodium_memzero(buf2, sizeof buf2 / 2);
|
||||
printf ("%d\n", sodium_memcmp(buf1, buf2, sizeof buf1));
|
||||
|
||||
printf("%d\n", sodium_memcmp(buf1, buf2, sizeof buf1));
|
||||
printf("%s\n", sodium_bin2hex(buf3, 33U,
|
||||
(const unsigned char *)
|
||||
"0123456789ABCDEF", 16U));
|
||||
return 0;
|
||||
}
|
||||
|
@ -3,3 +3,4 @@
|
||||
255
|
||||
0
|
||||
0
|
||||
30313233343536373839414243444546
|
||||
|
Loading…
Reference in New Issue
Block a user