random_numbers.h (n2n-2.8) | : | random_numbers.h (n2n-3.0) | ||
---|---|---|---|---|
/** | /** | |||
* (C) 2007-20 - ntop.org and contributors | * (C) 2007-21 - ntop.org and contributors | |||
* | * | |||
* This program is free software; you can redistribute it and/or modify | * This program is free software; you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | * it under the terms of the GNU General Public License as published by | |||
* the Free Software Foundation; either version 3 of the License, or | * the Free Software Foundation; either version 3 of the License, or | |||
* (at your option) any later version. | * (at your option) any later version. | |||
* | * | |||
* This program is distributed in the hope that it will be useful, | * This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | * GNU General Public License for more details. | |||
* | * | |||
* You should have received a copy of the GNU General Public License | * You should have received a copy of the GNU General Public License | |||
* along with this program; if not see see <http://www.gnu.org/licenses/> | * along with this program; if not see see <http://www.gnu.org/licenses/> | |||
* | * | |||
*/ | */ | |||
/* The WIN32 code is still untested and thus commented | #ifndef RND_H | |||
#if defined (WIN32) | #define RND_H | |||
#include <Wincrypt.h> | ||||
#endif | ||||
*/ | ||||
struct rn_generator_state_t { | ||||
uint64_t a, b; | ||||
}; | ||||
struct splitmix64_state_t { | #include <stdint.h> | |||
#include <stddef.h> | ||||
#include <time.h> /* time, clock */ | ||||
#include "n2n.h" /* traceEvent */ | ||||
// syscall and inquiring random number from hardware generators might fail, so w | ||||
e will retry | ||||
#define RND_RETRIES 1000 | ||||
#if defined (__linux__) | ||||
#include <sys/syscall.h> /* syscall, SYS_getrandom */ | ||||
#ifdef SYS_getrandom | ||||
#define GRND_NONBLOCK 1 | ||||
#include <errno.h> /* errno, EAGAIN */ | ||||
#endif | ||||
#endif | ||||
#if defined (__RDRND__) || defined (__RDSEED__) | ||||
#include <immintrin.h> /* _rdrand64_step, rdseed4_step */ | ||||
#endif | ||||
#if defined (WIN32) | ||||
#include <wincrypt.h> // HCTYPTPROV, Crypt*-functions | ||||
#endif | ||||
typedef struct rn_generator_state_t { | ||||
uint64_t a, b; | ||||
} rn_generator_state_t; | ||||
typedef struct splitmix64_state_t { | ||||
uint64_t s; | uint64_t s; | |||
}; | } splitmix64_state_t; | |||
int n2n_srand (uint64_t seed); | int n2n_srand (uint64_t seed); | |||
uint64_t n2n_rand (); | uint64_t n2n_rand (void); | |||
uint64_t n2n_seed (void); | ||||
uint32_t n2n_rand_sqr (uint32_t max_n); | ||||
uint64_t n2n_seed (); | #endif // RND_H | |||
End of changes. 6 change blocks. | ||||
13 lines changed or deleted | 40 lines changed or added |