Skip to content

Commit 751332f

Browse files
committed
drop XorShift128+
1 parent 930b056 commit 751332f

13 files changed

+8
-431
lines changed

ext/random/php_random.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,6 @@ extern PHPAPI zend_class_entry *random_ce_Random_Engine_CombinedLCG;
192192
extern PHPAPI zend_class_entry *random_ce_Random_Engine_PCG64;
193193
extern PHPAPI zend_class_entry *random_ce_Random_Engine_MersenneTwister;
194194
extern PHPAPI zend_class_entry *random_ce_Random_Engine_Secure;
195-
extern PHPAPI zend_class_entry *random_ce_Random_Engine_XorShift128Plus;
196195
extern PHPAPI zend_class_entry *random_ce_Random_Engine_Xoshiro256StarStar;
197196
extern PHPAPI zend_class_entry *random_ce_Random_Randomizer;
198197

@@ -201,7 +200,6 @@ extern const php_random_engine_algo php_random_engine_algo_mersennetwister;
201200
extern const php_random_engine_algo php_random_engine_algo_pcg64;
202201
extern const php_random_engine_algo php_random_engine_algo_secure;
203202
extern const php_random_engine_algo php_random_engine_algo_user;
204-
extern const php_random_engine_algo php_random_engine_algo_xorshift128plus;
205203
extern const php_random_engine_algo php_random_engine_algo_xoshiro256starstar;
206204

207205
typedef struct _php_random_engine {
@@ -233,10 +231,6 @@ typedef struct _php_random_engine_state_user {
233231
size_t last_generate_size;
234232
} php_random_engine_state_user;
235233

236-
typedef struct _php_random_engine_state_xorshift128plus {
237-
uint64_t s[2];
238-
} php_random_engine_state_xorshift128plus;
239-
240234
typedef struct _php_random_engine_state_xoshiro256starstar {
241235
uint64_t s[4];
242236
} php_random_engine_state_xoshiro256starstar;

ext/random/random.c

Lines changed: 1 addition & 155 deletions
Original file line numberDiff line numberDiff line change
@@ -168,15 +168,13 @@ PHPAPI zend_class_entry *random_ce_Random_Engine_CombinedLCG;
168168
PHPAPI zend_class_entry *random_ce_Random_Engine_MersenneTwister;
169169
PHPAPI zend_class_entry *random_ce_Random_Engine_PCG64;
170170
PHPAPI zend_class_entry *random_ce_Random_Engine_Secure;
171-
PHPAPI zend_class_entry *random_ce_Random_Engine_XorShift128Plus;
172171
PHPAPI zend_class_entry *random_ce_Random_Engine_Xoshiro256StarStar;
173172
PHPAPI zend_class_entry *random_ce_Random_Randomizer;
174173

175174
static zend_object_handlers random_engine_combinedlcg_object_handlers;
176175
static zend_object_handlers random_engine_mersennetwister_object_handlers;
177176
static zend_object_handlers random_engine_pcg64_object_handlers;
178177
static zend_object_handlers random_engine_secure_object_handlers;
179-
static zend_object_handlers random_engine_xorshift128plus_object_handlers;
180178
static zend_object_handlers random_engine_xoshiro256starstar_object_handlers;
181179
static zend_object_handlers random_randomizer_object_handlers;
182180

@@ -768,80 +766,6 @@ const php_random_engine_algo php_random_engine_algo_user = {
768766

769767
/* User end */
770768

771-
/* XorShift128Plus begin */
772-
773-
static inline size_t xorshift128plus_dynamic_generate_size(void *state) {
774-
return sizeof(uint64_t);
775-
}
776-
777-
static uint64_t xorshift128plus_generate(void *state, bool *engine_unsafe) {
778-
php_random_engine_state_xorshift128plus *s = state;
779-
uint64_t s0, s1, r;
780-
781-
s1 = s->s[0];
782-
s0 = s->s[1];
783-
r = s0 + s1;
784-
s->s[0] = s0;
785-
s1 ^= s1 << 23;
786-
s->s[1] = s1 ^ s0 ^ (s1 >> 18) ^ (s0 >> 5);
787-
788-
return r;
789-
}
790-
791-
static void xorshift128plus_seed(void *state, const uint64_t seed) {
792-
php_random_engine_state_xorshift128plus *s = state;
793-
uint64_t sd = seed;
794-
795-
s->s[0] = splitmix64(&sd);
796-
s->s[1] = splitmix64(&sd);
797-
}
798-
799-
static int xorshift128plus_serialize(void *state, HashTable *data) {
800-
php_random_engine_state_xorshift128plus *s = state;
801-
zval tmp;
802-
int i;
803-
804-
for (i = 0; i < 2; i++) {
805-
ZVAL_STR(&tmp, zend_strpprintf(0, "%" PRIu64, s->s[i]));
806-
zend_hash_next_index_insert(data, &tmp);
807-
}
808-
809-
return SUCCESS;
810-
}
811-
812-
static int xorshift128plus_unserialize(void *state, HashTable *data) {
813-
php_random_engine_state_xorshift128plus *s = state;
814-
zval *tmp;
815-
int i;
816-
817-
for (i = 0; i < 2; i++) {
818-
tmp = zend_hash_index_find(data, i);
819-
if (!tmp || Z_TYPE_P(tmp) != IS_STRING) {
820-
return FAILURE;
821-
}
822-
823-
s->s[i] = strtoull(ZSTR_VAL(Z_STR_P(tmp)), NULL, 10);
824-
}
825-
826-
return SUCCESS;
827-
}
828-
829-
static zend_object *php_random_engine_xorshift128plus_new(zend_class_entry *ce) {
830-
return php_random_engine_common_init(ce, &php_random_engine_algo_xorshift128plus, &random_engine_xorshift128plus_object_handlers);
831-
}
832-
833-
const php_random_engine_algo php_random_engine_algo_xorshift128plus = {
834-
sizeof(uint64_t),
835-
xorshift128plus_dynamic_generate_size,
836-
sizeof(php_random_engine_state_xorshift128plus),
837-
xorshift128plus_generate,
838-
xorshift128plus_seed,
839-
xorshift128plus_serialize,
840-
xorshift128plus_unserialize
841-
};
842-
843-
/* XorShift128Plus end */
844-
845769
/* Xoshiro256StarStar start */
846770

847771
static inline size_t xoshiro256starstar_dynamic_generate_size(void *state) {
@@ -1642,76 +1566,6 @@ PHP_METHOD(Random_Engine_PCG64, jump)
16421566
}
16431567
/* }}} */
16441568

1645-
/* {{{ Construct object */
1646-
PHP_METHOD(Random_Engine_XorShift128Plus, __construct)
1647-
{
1648-
php_random_engine *engine = Z_RANDOM_ENGINE_P(ZEND_THIS);
1649-
php_random_engine_state_xorshift128plus *state = engine->state;
1650-
zend_string *str_seed = NULL;
1651-
zend_long int_seed = 0;
1652-
bool seed_is_null = true;
1653-
int i, j;
1654-
1655-
ZEND_PARSE_PARAMETERS_START(0, 1)
1656-
Z_PARAM_OPTIONAL;
1657-
Z_PARAM_STR_OR_LONG_OR_NULL(str_seed, int_seed, seed_is_null);
1658-
ZEND_PARSE_PARAMETERS_END();
1659-
1660-
if (seed_is_null) {
1661-
for (i = 0; i < 2; i++) {
1662-
if (php_random_bytes_silent(&state->s[i], sizeof(uint64_t)) == FAILURE) {
1663-
zend_throw_exception(spl_ce_RuntimeException, "Random number generate failed", 0);
1664-
RETURN_THROWS();
1665-
}
1666-
}
1667-
} else {
1668-
if (str_seed) {
1669-
/* char (8 bit) * 16 = 128 bits */
1670-
if (ZSTR_LEN(str_seed) == 16) {
1671-
/* Endianness safe copy */
1672-
for (i = 0; i < 2; i++) {
1673-
state->s[i] = 0;
1674-
for (j = 0; j < 8; j++) {
1675-
state->s[i] += ((uint64_t) (unsigned char) ZSTR_VAL(str_seed)[(i * 8) + j]) << (j * 8);
1676-
}
1677-
}
1678-
} else {
1679-
zend_argument_value_error(1, "state strings must be 16 bytes");
1680-
RETURN_THROWS();
1681-
}
1682-
} else {
1683-
engine->algo->seed(state, int_seed);
1684-
}
1685-
}
1686-
}
1687-
/* }}} */
1688-
1689-
/* {{{ Jump a state */
1690-
PHP_METHOD(Random_Engine_XorShift128Plus, jump)
1691-
{
1692-
php_random_engine *engine = Z_RANDOM_ENGINE_P(ZEND_THIS);
1693-
php_random_engine_state_xorshift128plus *s = engine->state;
1694-
static const uint64_t jmp[] = { 0x8a5cd789635d2dff, 0x121fd2155c472f96 };
1695-
uint64_t s0 = 0, s1 = 0;
1696-
int i, j;
1697-
1698-
ZEND_PARSE_PARAMETERS_NONE();
1699-
1700-
for (i = 0; i < sizeof (jmp) / sizeof (*jmp); i++) {
1701-
for (j = 0; j < 64; j++) {
1702-
if (jmp[i] & 1ULL << j) {
1703-
s0 ^= s->s[0];
1704-
s1 ^= s->s[1];
1705-
}
1706-
engine->algo->generate(engine->state, NULL);
1707-
}
1708-
}
1709-
1710-
s->s[0] = s0;
1711-
s->s[1] = s1;
1712-
}
1713-
/* }}} */
1714-
17151569
/* {{{ Construct object */
17161570
PHP_METHOD(Random_Engine_Xoshiro256StarStar, __construct)
17171571
{
@@ -2060,15 +1914,7 @@ PHP_MINIT_FUNCTION(random)
20601914
random_engine_secure_object_handlers.offset = XtOffsetOf(php_random_engine, std);
20611915
random_engine_secure_object_handlers.free_obj = php_random_engine_common_free_obj;
20621916
random_engine_secure_object_handlers.clone_obj = NULL;
2063-
2064-
/* Random\Engine\XorShift128Plus */
2065-
random_ce_Random_Engine_XorShift128Plus = register_class_Random_Engine_XorShift128Plus(random_ce_Random_SeedableEngine, random_ce_Random_SerializableEngine);
2066-
random_ce_Random_Engine_XorShift128Plus->create_object = php_random_engine_xorshift128plus_new;
2067-
memcpy(&random_engine_xorshift128plus_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
2068-
random_engine_xorshift128plus_object_handlers.offset = XtOffsetOf(php_random_engine, std);
2069-
random_engine_xorshift128plus_object_handlers.free_obj = php_random_engine_common_free_obj;
2070-
random_engine_xorshift128plus_object_handlers.clone_obj = php_random_engine_common_clone_obj;
2071-
1917+
20721918
/* Random\Engine\Xoshiro256StarStar */
20731919
random_ce_Random_Engine_Xoshiro256StarStar = register_class_Random_Engine_Xoshiro256StarStar(random_ce_Random_SeedableEngine, random_ce_Random_SerializableEngine);
20741920
random_ce_Random_Engine_Xoshiro256StarStar->create_object = php_random_engine_xoshiro256starstar_new;

ext/random/random.stub.php

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -83,25 +83,6 @@ class Secure implements Random\CryptoSafeEngine
8383
public function generate(): string {}
8484
}
8585

86-
class XorShift128Plus implements Random\SeedableEngine, Random\SerializableEngine
87-
{
88-
public function __construct(string|int|null $seed = null) {}
89-
90-
/** @implementation-alias Random\Engine\CombinedLCG::generate */
91-
public function generate(): string {}
92-
93-
public function jump(): void {}
94-
95-
/** @implementation-alias Random\Engine\CombinedLCG::__serialize */
96-
public function __serialize(): array {}
97-
98-
/** @implementation-alias Random\Engine\CombinedLCG::__unserialize */
99-
public function __unserialize(array $data): void {}
100-
101-
/** @implementation-alias Random\Engine\CombinedLCG::__debugInfo */
102-
public function __debugInfo(): array {}
103-
}
104-
10586
class Xoshiro256StarStar implements Random\SeedableEngine, Random\SerializableEngine
10687
{
10788
public function __construct(string|int|null $seed = null) {}
@@ -156,7 +137,7 @@ public function __construct(?Engine $engine = null) {}
156137

157138
public function getInt(int $min = UNKNOWN, int $max = UNKNOWN): int {}
158139

159-
public function getBytes(int $legnth): string {}
140+
public function getBytes(int $length): string {}
160141

161142
public function shuffleArray(array $array): array {}
162143

ext/random/random_arginfo.h

Lines changed: 5 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: ebab329eeeafe1b609c74aa7bb48f2069f3763da */
2+
* Stub hash: a0bc52433aa2b610b62996655bed08acd9d042e9 */
33

44
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_lcg_value, 0, 0, IS_DOUBLE, 0)
55
ZEND_END_ARG_INFO()
@@ -79,26 +79,14 @@ ZEND_END_ARG_INFO()
7979

8080
#define arginfo_class_Random_Engine_Secure_generate arginfo_class_Random_Engine_CombinedLCG_generate
8181

82-
#define arginfo_class_Random_Engine_XorShift128Plus___construct arginfo_class_Random_Engine_PCG64___construct
83-
84-
#define arginfo_class_Random_Engine_XorShift128Plus_generate arginfo_class_Random_Engine_CombinedLCG_generate
85-
86-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Random_Engine_XorShift128Plus_jump, 0, 0, IS_VOID, 0)
87-
ZEND_END_ARG_INFO()
88-
89-
#define arginfo_class_Random_Engine_XorShift128Plus___serialize arginfo_class_Random_Engine_CombinedLCG___serialize
90-
91-
#define arginfo_class_Random_Engine_XorShift128Plus___unserialize arginfo_class_Random_Engine_CombinedLCG___unserialize
92-
93-
#define arginfo_class_Random_Engine_XorShift128Plus___debugInfo arginfo_class_Random_Engine_CombinedLCG___serialize
94-
9582
#define arginfo_class_Random_Engine_Xoshiro256StarStar___construct arginfo_class_Random_Engine_PCG64___construct
9683

9784
#define arginfo_class_Random_Engine_Xoshiro256StarStar_generate arginfo_class_Random_Engine_CombinedLCG_generate
9885

99-
#define arginfo_class_Random_Engine_Xoshiro256StarStar_jump arginfo_class_Random_Engine_XorShift128Plus_jump
86+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Random_Engine_Xoshiro256StarStar_jump, 0, 0, IS_VOID, 0)
87+
ZEND_END_ARG_INFO()
10088

101-
#define arginfo_class_Random_Engine_Xoshiro256StarStar_jumpLong arginfo_class_Random_Engine_XorShift128Plus_jump
89+
#define arginfo_class_Random_Engine_Xoshiro256StarStar_jumpLong arginfo_class_Random_Engine_Xoshiro256StarStar_jump
10290

10391
#define arginfo_class_Random_Engine_Xoshiro256StarStar___serialize arginfo_class_Random_Engine_CombinedLCG___serialize
10492

@@ -120,9 +108,7 @@ ZEND_END_ARG_INFO()
120108

121109
#define arginfo_class_Random_Randomizer_getInt arginfo_rand
122110

123-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Random_Randomizer_getBytes, 0, 1, IS_STRING, 0)
124-
ZEND_ARG_TYPE_INFO(0, legnth, IS_LONG, 0)
125-
ZEND_END_ARG_INFO()
111+
#define arginfo_class_Random_Randomizer_getBytes arginfo_random_bytes
126112

127113
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Random_Randomizer_shuffleArray, 0, 1, IS_ARRAY, 0)
128114
ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
@@ -152,8 +138,6 @@ ZEND_METHOD(Random_Engine_CombinedLCG, __debugInfo);
152138
ZEND_METHOD(Random_Engine_MersenneTwister, __construct);
153139
ZEND_METHOD(Random_Engine_PCG64, __construct);
154140
ZEND_METHOD(Random_Engine_PCG64, jump);
155-
ZEND_METHOD(Random_Engine_XorShift128Plus, __construct);
156-
ZEND_METHOD(Random_Engine_XorShift128Plus, jump);
157141
ZEND_METHOD(Random_Engine_Xoshiro256StarStar, __construct);
158142
ZEND_METHOD(Random_Engine_Xoshiro256StarStar, jump);
159143
ZEND_METHOD(Random_Engine_Xoshiro256StarStar, jumpLong);
@@ -217,17 +201,6 @@ static const zend_function_entry class_Random_Engine_Secure_methods[] = {
217201
};
218202

219203

220-
static const zend_function_entry class_Random_Engine_XorShift128Plus_methods[] = {
221-
ZEND_ME(Random_Engine_XorShift128Plus, __construct, arginfo_class_Random_Engine_XorShift128Plus___construct, ZEND_ACC_PUBLIC)
222-
ZEND_MALIAS(Random_Engine_CombinedLCG, generate, generate, arginfo_class_Random_Engine_XorShift128Plus_generate, ZEND_ACC_PUBLIC)
223-
ZEND_ME(Random_Engine_XorShift128Plus, jump, arginfo_class_Random_Engine_XorShift128Plus_jump, ZEND_ACC_PUBLIC)
224-
ZEND_MALIAS(Random_Engine_CombinedLCG, __serialize, __serialize, arginfo_class_Random_Engine_XorShift128Plus___serialize, ZEND_ACC_PUBLIC)
225-
ZEND_MALIAS(Random_Engine_CombinedLCG, __unserialize, __unserialize, arginfo_class_Random_Engine_XorShift128Plus___unserialize, ZEND_ACC_PUBLIC)
226-
ZEND_MALIAS(Random_Engine_CombinedLCG, __debugInfo, __debugInfo, arginfo_class_Random_Engine_XorShift128Plus___debugInfo, ZEND_ACC_PUBLIC)
227-
ZEND_FE_END
228-
};
229-
230-
231204
static const zend_function_entry class_Random_Engine_Xoshiro256StarStar_methods[] = {
232205
ZEND_ME(Random_Engine_Xoshiro256StarStar, __construct, arginfo_class_Random_Engine_Xoshiro256StarStar___construct, ZEND_ACC_PUBLIC)
233206
ZEND_MALIAS(Random_Engine_CombinedLCG, generate, generate, arginfo_class_Random_Engine_Xoshiro256StarStar_generate, ZEND_ACC_PUBLIC)
@@ -320,17 +293,6 @@ static zend_class_entry *register_class_Random_Engine_Secure(zend_class_entry *c
320293
return class_entry;
321294
}
322295

323-
static zend_class_entry *register_class_Random_Engine_XorShift128Plus(zend_class_entry *class_entry_Random_Engine_Random_SeedableEngine, zend_class_entry *class_entry_Random_Engine_Random_SerializableEngine)
324-
{
325-
zend_class_entry ce, *class_entry;
326-
327-
INIT_NS_CLASS_ENTRY(ce, "Random\\Engine", "XorShift128Plus", class_Random_Engine_XorShift128Plus_methods);
328-
class_entry = zend_register_internal_class_ex(&ce, NULL);
329-
zend_class_implements(class_entry, 2, class_entry_Random_Engine_Random_SeedableEngine, class_entry_Random_Engine_Random_SerializableEngine);
330-
331-
return class_entry;
332-
}
333-
334296
static zend_class_entry *register_class_Random_Engine_Xoshiro256StarStar(zend_class_entry *class_entry_Random_Engine_Random_SeedableEngine, zend_class_entry *class_entry_Random_Engine_Random_SerializableEngine)
335297
{
336298
zend_class_entry ce, *class_entry;

ext/random/tests/02_engine/user_compatibility.phpt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,6 @@ for ($i = 0; $i < 1000; $i++) {
3030
}
3131
}
3232

33-
$native_engine = new \Random\Engine\XorShift128Plus(1234);
34-
$user_engine = new class (1234) extends \Random\Engine\XorShift128Plus {};
35-
36-
for ($i = 0; $i < 1000; $i++) {
37-
if ($native_engine->generate() !== $user_engine->generate()) {
38-
die('failure XorShift128Plus');
39-
}
40-
}
41-
4233
$native_engine = new \Random\Engine\Xoshiro256StarStar(1234);
4334
$user_engine = new class (1234) extends \Random\Engine\Xoshiro256StarStar {};
4435

0 commit comments

Comments
 (0)