52 #define MATRIX_A 0x9908b0dfUL
53 #define UPPER_MASK 0x80000000UL
54 #define LOWER_MASK 0x7fffffffUL
56 static uint32_t mt[N];
57 static uint32_t mti = N + 1;
60 static void init_genrand(uint32_t s) {
61 mt[0] = s & 0xffffffffUL;
62 for (mti = 1; mti < N; mti++) {
63 mt[mti] = (1812433253UL * (mt[mti - 1] ^ (mt[mti - 1] >> 30)) + mti);
68 mt[mti] &= 0xffffffffUL;
77 static void init_by_array(uint32_t init_key[], uint32_t key_length) {
79 init_genrand(19650218UL);
82 k = (N > key_length ? N : key_length);
84 mt[i] = (mt[i] ^ ((mt[i - 1] ^ (mt[i - 1] >> 30)) * 1664525UL)) +
86 mt[i] &= 0xffffffffUL;
96 for (k = N - 1; k; k--) {
97 mt[i] = (mt[i] ^ ((mt[i - 1] ^ (mt[i - 1] >> 30)) * 1566083941UL)) -
99 mt[i] &= 0xffffffffUL;
107 mt[0] = 0x80000000UL;
112 __attribute__((noinline))
static uint32_t genrand_int32(
void) {
114 static uint32_t mag01[2] = {0x0UL, MATRIX_A};
121 init_genrand(5489UL);
123 for (kk = 0; kk < N - M; kk++) {
124 y = (mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK);
125 mt[kk] = mt[kk + M] ^ (y >> 1) ^ mag01[y & 0x1UL];
127 for (; kk < N - 1; kk++) {
128 y = (mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK);
129 mt[kk] = mt[kk + (M - N)] ^ (y >> 1) ^ mag01[y & 0x1UL];
131 y = (mt[N - 1] & UPPER_MASK) | (mt[0] & LOWER_MASK);
132 mt[N - 1] = mt[M - 1] ^ (y >> 1) ^ mag01[y & 0x1UL];
141 y ^= (y << 7) & 0x9d2c5680UL;
142 y ^= (y << 15) & 0xefc60000UL;
159 void prng_seed(uint32_t seed) { init_by_array(&seed, 1); }
174 rand = genrand_int32() >> 23;
175 }
while (rand > 255);
176 return (uint8_t)rand;
180 for (
size_t i = 0; i < buffer_len; ++i) {