#
d5cc7e91 |
| 30-Apr-2024 |
Tim Düsterhus |
random: Add PHPAPI to all `php_random_algo` definitions (#14088) The php_random.h header already defines them as `PHPAPI` and they actually are part of the public API. Co-author
random: Add PHPAPI to all `php_random_algo` definitions (#14088) The php_random.h header already defines them as `PHPAPI` and they actually are part of the public API. Co-authored-by: Arnaud Le Blanc <arnaud.lb@gmail.com>
show more ...
|
#
99e7cf07 |
| 29-Feb-2024 |
Tim Düsterhus |
random: Clean up seeding API (#13540) * random: Expose xoshiro256**'s seeding functions * random: Expose pcgoneseq128xslrr64's seeding functions * random: Expose Mt19937's
random: Clean up seeding API (#13540) * random: Expose xoshiro256**'s seeding functions * random: Expose pcgoneseq128xslrr64's seeding functions * random: Expose Mt19937's seeding functions * random: Expose CombinedLCG's seeding functions * random: Call php_random_mt19937_seed32 to seed the global Mt19937 This avoids the function pointer indirection and improves type safety. * random: NULL the generic seeding function Different engines work quite differently, it is not useful to attempt to seed them in a generic way using a 64 bit integer. As an example Mt19937 completely ignores the upper 32 bits. * random: Remove the `seed` member from `php_random_algo` See the explanation in the previous commit for the reasoning. This member is unused since the previous commit and was not consistently available even before that (specifically for the Secure engine). * UPGRADING.INTERNALS * random: Remove useless cast in `php_mt_srand()`
show more ...
|
#
dce6ed31 |
| 26-Feb-2024 |
Tim Düsterhus |
random: Adjust `status` to `state` (#13521) * random: Rename `status` local to `state` * random: Rename `php_random_algo_with_state`'s `status` member to `state`
|
#
79133df1 |
| 25-Feb-2024 |
Tim Düsterhus |
random: Pass algorithm and state together as `php_random_algo_with_state` (#13350) * random: Remove `php_random_status` Since 162e1dce9870168cb8c65c013f2b5a510b6536b1, the `php_rand
random: Pass algorithm and state together as `php_random_algo_with_state` (#13350) * random: Remove `php_random_status` Since 162e1dce9870168cb8c65c013f2b5a510b6536b1, the `php_random_status` struct contains just a single `void*`, resulting in needless indirection when accessing the engine state and thus decreasing readability because of the additional non-meaningful `->state` references / the local helper variables. There is also a small, but measurable performance benefit: <?php $e = new Random\Engine\Xoshiro256StarStar(0); $r = new Random\Randomizer($e); for ($i = 0; $i < 15; $i++) var_dump(strlen($r->getBytes(100000000))); goes from roughly 3.85s down to 3.60s. The names of the `status` variables have not yet been touched to keep the diff small. They will be renamed to the more appropriate `state` in a follow-up cleanup commit. * Introduce `php_random_algo_with_state`
show more ...
|
#
ce2d2636 |
| 05-Feb-2024 |
Tim Düsterhus |
random: Reuse the seed128/seed256 helpers when seeding using the CSPRNG (#13311) Instead of writing to the engine's state struct directly, use the helpers for consistency.
|
#
97b3b455 |
| 01-Feb-2024 |
Tim Düsterhus |
random: Move CSPRNG API into php_random_csprng.h (#13290) This allows consumers of just the CSPRNG to include a much smaller header. It also allows to verify at a glance whether a source
random: Move CSPRNG API into php_random_csprng.h (#13290) This allows consumers of just the CSPRNG to include a much smaller header. It also allows to verify at a glance whether a source file might use non-secure randomness. This commit includes the new header wherever the CSPRNG is used, possibly replacing the inclusion of php_random.h if nothing else is used, but also includes it in the main php_random.h header for compatibility. Somewhat related to 45f8cfaf104f504340b0073b9736bb50a88d70a1, 2b30f18708b4f73d2c1d29d3a92a606ebdc5ac4c, and b14dd85dca3b67a5462f5ed9b6aa0dc22beb615c.
show more ...
|
#
f39357b0 |
| 29-Jan-2024 |
Tim Düsterhus |
random: Call int-seeding functions directly As the `__construct()` implementation is engine-specific anyway, we know what engine were dealing with and can just call the seeding function
random: Call int-seeding functions directly As the `__construct()` implementation is engine-specific anyway, we know what engine were dealing with and can just call the seeding function directly instead of going through a function pointer. This likely improves construction performance a little, but I did not measure.
show more ...
|
#
79f648ac |
| 09-Jan-2024 |
Tim Düsterhus |
random: Narrow the parameter types of seed128/seed256 These internal-only functions accepted a `php_random_status`, just to extract the internal state from the `state` pointer. Make them
random: Narrow the parameter types of seed128/seed256 These internal-only functions accepted a `php_random_status`, just to extract the internal state from the `state` pointer. Make them take the state struct directly to improve type safety.
show more ...
|
#
45f8cfaf |
| 17-Jan-2024 |
Tim Düsterhus |
random: Split the uint128 implementation into its own header (#13132) The implementation of `php_random_uint128_*` exists specifically for pcgoneseq128xslrr66 and takes up a third of php
random: Split the uint128 implementation into its own header (#13132) The implementation of `php_random_uint128_*` exists specifically for pcgoneseq128xslrr66 and takes up a third of php_random.h. Split it into its own header to keep php_random.h focused on the functionality directly related to randomness.
show more ...
|
#
db68565d |
| 09-Jan-2024 |
Tim Düsterhus |
random: Dynamically calculate the state size when seeding with CSPRNG Instead of hardcoding struct names, or even sizes, we can just determine the actual size of the target structure usi
random: Dynamically calculate the state size when seeding with CSPRNG Instead of hardcoding struct names, or even sizes, we can just determine the actual size of the target structure using sizeof().
show more ...
|
#
62aa8fa3 |
| 09-Jan-2024 |
Tim Düsterhus |
random: Reduce variable scope in Random\Engine\PcgOneseq128XslRr64::__construct() This is for consistency with xoshiro256**'s constructor.
|
#
162e1dce |
| 09-Jan-2024 |
Tim Düsterhus |
random: Optimize data flow for the `generate` function of native engines (#13043) Instead of returning the generated `uint64_t` and providing the size (i.e. the number of bytes of the ge
random: Optimize data flow for the `generate` function of native engines (#13043) Instead of returning the generated `uint64_t` and providing the size (i.e. the number of bytes of the generated value) out-of-band via the `last_generated_size` member of the `php_random_status` struct, the `generate` function is now expected to return a new `php_random_result` struct containing both the `size` and the `result`. This has two benefits, one for the developer: It's no longer possible to forget setting `last_generated_size` to the correct value, because it now happens at the time of returning from the function. and the other benefit is for performance: The `php_random_result` struct will be returned as a register pair, thus the `size` will be directly available without reloading it from main memory. Checking a simplified version of `php_random_range64()` on Compiler Explorer (“Godbolt”) with clang 17 shows a single change in the resulting assembly showcasing the improvement (https://godbolt.org/z/G4WjdYxqx): - add rbp, qword ptr [r14] + add rbp, rdx Empirical testing confirms a measurable performance increase for the `Randomizer::getBytes()` method: <?php $e = new Random\Engine\Xoshiro256StarStar(0); $r = new Random\Randomizer($e); var_dump(strlen($r->getBytes(100000000))); goes from 250ms (before the change) to 220ms (after the change). While generating 100 MB of random data certainly is not the most common use case, it confirms the theoretical improvement in practice.
show more ...
|
#
ddf7a5d4 |
| 05-Sep-2022 |
Tim Düsterhus |
random: Validate that the arrays do not contain extra elements when unserializing (#9458) * Apply `var_dump()` in 02_engine/all_serialize_error.phpt This ensures that an undetected
random: Validate that the arrays do not contain extra elements when unserializing (#9458) * Apply `var_dump()` in 02_engine/all_serialize_error.phpt This ensures that an undetected serialization error is clear identifiable in the output. * random: Validate that the arrays do not contain extra elements when unserializing
show more ...
|
Revision tags: php-8.2.0RC1, php-8.1.10, php-8.0.23, php-8.0.23RC1, php-8.1.10RC1, php-8.2.0beta3 |
|
#
3331832b |
| 02-Aug-2022 |
Tim Düsterhus |
Add ext/random Exception hierarchy (#9220) * Add Random\Random{Error,Exception} and Random\BrokenRandomEngineError * Throw BrokenRandomEngineError * Throw RandomException o
Add ext/random Exception hierarchy (#9220) * Add Random\Random{Error,Exception} and Random\BrokenRandomEngineError * Throw BrokenRandomEngineError * Throw RandomException on seeding failure * Throw RandomException when CSPRNG fails * Remove unused include from ext/random/engine_combinedlcg.c * Remove unused include from ext/random/engine_secure.c * Remove unused include from ext/random/random.c * [ci skip] Add ext/random Exception hierarchy to NEWS * [ci skip] Add the change of Exception for random_(int|bytes) to UPGRADING
show more ...
|
Revision tags: php-8.2.0beta2, php-8.1.9, php-8.0.22 |
|
#
50bd8ba5 |
| 01-Aug-2022 |
Anton Smirnov |
PcgOneseq128XslRr64::jump(): Throw ValueError for negative $advance (#9213) * PCG64: $advance must be non-negative Closes GH-9212 |
#
53ca24d4 |
| 31-Jul-2022 |
Tim Düsterhus |
Improve phrasing in argument value errors in ext/random (#9206) This rephrases the error message for argument errors to be a proper English sentence. Co-authored-by: Máté Kocsis
Improve phrasing in argument value errors in ext/random (#9206) This rephrases the error message for argument errors to be a proper English sentence. Co-authored-by: Máté Kocsis <kocsismate@woohoolabs.com>
show more ...
|
#
5aca25a1 |
| 30-Jul-2022 |
Tim Düsterhus |
[ci skip] Improve error message of an engine fails to seed from the CSPRNG (#9160) |
#
e4c89498 |
| 21-Jul-2022 |
Go Kudo |
[ci skip] Update EXTENSIONS and Author(s) in ext/random (#9074) php.net account is better suited for this cases. |
Revision tags: php-8.1.9RC1, php-8.2.0beta1, php-8.0.22RC1 |
|
#
4d8dd8d2 |
| 19-Jul-2022 |
Go Kudo |
Implement Random Extension https://wiki.php.net/rfc/rng_extension https://wiki.php.net/rfc/random_extension_improvement |