#include "random.h" #include #include #include "config.h" #if ASCON_MASK_RNG == 'R' void randinit() { srand(time(0)); } uint32_t rand32() { uint32_t r; randombytes(&r, 4); return r; } uint64_t rand64() { uint64_t r; randombytes(&r, 8); return r; } #elif ASCON_MASK_RNG == 'S' void randinit() { srand(time(0)); } uint32_t rand32() { return ((uint32_t)rand() << 21) ^ rand(); } uint64_t rand64() { return ((uint64_t)rand() << 43) ^ ((uint64_t)rand() << 21) ^ rand(); } #elif ASCON_MASK_RNG == 'X' uint32_t xorshift32; uint64_t xorshift64; void randinit() { srand(time(0)); xorshift32 = rand(); xorshift64 = (uint64_t)rand() << 32 | rand(); } uint32_t rand32() { uint32_t x = xorshift32; x ^= x << 13; x ^= x >> 17; x ^= x << 5; return xorshift32 = x; } uint64_t rand64() { uint64_t x = xorshift64; x ^= x << 13; x ^= x >> 7; x ^= x << 17; return xorshift64 = x; } #endif