mirror of
https://github.com/oxen-io/lokinet.git
synced 2024-10-29 11:05:43 +00:00
54 lines
1.1 KiB
C
54 lines
1.1 KiB
C
/* [Rtl]SecureZeroMemory is an inline procedure in the windows headers */
|
|
#ifdef _WIN32
|
|
#include <windows.h>
|
|
#endif
|
|
#include <sodium/utils.h>
|
|
|
|
void
|
|
sodium_memzero(void *const pnt, const size_t len)
|
|
{
|
|
#ifdef _WIN32
|
|
SecureZeroMemory(pnt, len);
|
|
#elif defined(HAVE_EXPLICIT_BZERO)
|
|
explicit_bzero(pnt, len);
|
|
#else
|
|
volatile unsigned char *volatile pnt_ = (volatile unsigned char *volatile)pnt;
|
|
size_t i = (size_t)0U;
|
|
|
|
while(i < len)
|
|
{
|
|
pnt_[i++] = 0U;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
int
|
|
sodium_is_zero(const unsigned char *n, const size_t nlen)
|
|
{
|
|
size_t i;
|
|
volatile unsigned char d = 0U;
|
|
|
|
for(i = 0U; i < nlen; i++)
|
|
{
|
|
d |= n[i];
|
|
}
|
|
return 1 & ((d - 1) >> 8);
|
|
}
|
|
|
|
int
|
|
sodium_memcmp(const void *const b1_, const void *const b2_, size_t len)
|
|
{
|
|
const volatile unsigned char *volatile b1 =
|
|
(const volatile unsigned char *volatile)b1_;
|
|
const volatile unsigned char *volatile b2 =
|
|
(const volatile unsigned char *volatile)b2_;
|
|
size_t i;
|
|
volatile unsigned char d = 0U;
|
|
|
|
for(i = 0U; i < len; i++)
|
|
{
|
|
d |= b1[i] ^ b2[i];
|
|
}
|
|
return (1 & ((d - 1) >> 8)) - 1;
|
|
}
|