#ifndef RANDOM_H #define RANDOM_H #include #include #ifdef __linux__ #include #endif #ifndef SYS_getrandom #include #endif #include #include #include #include //dirty hacks #ifdef SYS_getrandom inline int getrandom(void *buf, size_t buflen, unsigned int flags) { return syscall(SYS_getrandom, buf, buflen, flags); } #else #if __linux__ //ancient linux systems #define GRND_NONBLOCK 0 inline int getrandom(void *buf, size_t buflen, unsigned int flags) { int result = RAND_bytes(buf, buflen); if(result == 1) { return (int) buflen; } return -1; } #endif #if __OpenBSD__ inline int getrandom(void *buf, size_t buflen, unsigned int flags) { arc4random_buf(buf, buflen); return 0; } #endif #endif /* TODO: if the >=C++11 prngr are good enough, use them */ class Random { public: Random(); std::string getRandomHexString(unsigned int bytes ); }; #endif // RANDOM_H