92 "Assumed length of Mt19937 state vector does not match actual size."
95#define hiBit(u) ((u) & 0x80000000U)
96#define loBit(u) ((u) & 0x00000001U)
97#define loBits(u) ((u) & 0x7FFFFFFFU)
98#define mixBits(u, v) (hiBit(u) | loBits(v))
100#define twist(m,u,v) (m ^ (mixBits(u,v) >> 1) ^ ((uint32_t)(-(int32_t)(loBit(v))) & 0x9908b0dfU))
101#define twist_php(m,u,v) (m ^ (mixBits(u,v) >> 1) ^ ((uint32_t)(-(int32_t)(loBit(u))) & 0x9908b0dfU))
105 uint32_t *
p =
state->state;
108 for (uint32_t i =
N -
M; i--; ++
p) {
111 for (uint32_t i =
M; --i; ++
p) {
116 for (uint32_t i =
N -
M; i--; ++
p) {
119 for (uint32_t i =
M; --i; ++
p) {
130 uint32_t i, prev_state;
136 state->state[0] = seed;
137 for (i = 1; i <
N; i++) {
138 prev_state =
state->state[i - 1];
139 state->state[i] = (1812433253U * (prev_state ^ (prev_state >> 30)) + i) & 0xffffffffU;
143 mt19937_reload(
state);
155 s1 =
s->state[
s->count++];
157 s1 ^= (s1 << 7) & 0x9d2c5680U;
158 s1 ^= (s1 << 15) & 0xefc60000U;
161 .size =
sizeof(uint32_t),
162 .
result = (uint64_t) (s1 ^ (s1 >> 18)),
179 for (uint32_t i = 0; i <
N; i++) {
197 if (zend_hash_num_elements(
data) != (
N + 2)) {
201 for (uint32_t i = 0; i <
N; i++) {
244 if (php_random_bytes_silent(&seed,
sizeof(seed)) ==
FAILURE) {
258 bool seed_is_null =
true;
281 if (php_random_bytes_throw(&seed,
sizeof(seed)) ==
FAILURE) {
304 bytes = zend_string_alloc(generated.
size,
false);
307 for (
size_t i = 0; i < generated.
size; i++) {
333 if (!engine->engine.algo->serialize(engine->engine.state,
Z_ARRVAL(t))) {
353 if (zend_hash_num_elements(d) != 2) {
376 if (!engine->engine.algo->unserialize(engine->engine.state,
Z_ARRVAL_P(t))) {
393 if (engine->engine.algo->serialize) {
395 if (!engine->engine.algo->serialize(engine->engine.state,
Z_ARRVAL(t))) {
#define twist_php(m, u, v)
PHPAPI void php_random_mt19937_seed32(php_random_status_state_mt19937 *state, uint32_t seed)
PHPAPI const php_random_algo php_random_algo_mt19937
PHPAPI void php_random_mt19937_seed_default(php_random_status_state_mt19937 *state)
PHPAPI zend_string * php_random_bin2hex_le(const void *ptr, const size_t len)
PHPAPI bool php_random_hex2bin_le(zend_string *hexstr, void *dest)
struct _php_random_algo_with_state php_random_algo_with_state
PHPAPI uint64_t php_random_generate_fallback_seed(void)
PHPAPI zend_class_entry * random_ce_Random_RandomException
struct _php_random_status_state_mt19937 php_random_status_state_mt19937
#define Z_RANDOM_ENGINE_P(zval)
struct _php_random_engine php_random_engine
PHPAPI zend_long php_random_range(php_random_algo_with_state engine, zend_long min, zend_long max)
struct _php_random_algo php_random_algo
struct _php_random_result php_random_result
#define zend_hash_str_add(...)
ZEND_API ZEND_COLD void zend_error(int type, const char *format,...)
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
ZEND_API void object_properties_load(zend_object *object, HashTable *properties)
#define ZEND_PARSE_PARAMETERS_END()
#define ZEND_PARSE_PARAMETERS_NONE()
#define ZEND_PARSE_PARAMETERS_START(min_num_args, max_num_args)
#define Z_PARAM_LONG(dest)
#define Z_PARAM_ARRAY_HT(dest)
#define Z_PARAM_LONG_OR_NULL(dest, is_null)
ZEND_API ZEND_COLD zend_object * zend_throw_exception(zend_class_entry *exception_ce, const char *message, zend_long code)
ZEND_API ZEND_COLD zend_object * zend_throw_exception_ex(zend_class_entry *exception_ce, zend_long code, const char *format,...)
ZEND_API zval *ZEND_FASTCALL zend_hash_next_index_insert(HashTable *ht, zval *pData)
ZEND_API HashTable *ZEND_FASTCALL zend_array_dup(HashTable *source)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_find(const HashTable *ht, zend_ulong h)
struct _zend_string zend_string
ZEND_API HashTable * zend_std_get_properties(zend_object *zobj)
#define ZEND_STATIC_ASSERT(c, m)
#define Z_ARRVAL_P(zval_p)
struct _zend_array HashTable
#define Z_STRLEN_P(zval_p)