#
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 ...
|
#
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 ...
|
#
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 ...
|
#
3bc63a37 |
| 07-Oct-2023 |
Tim Düsterhus |
random: Remove RAND_RANGE_BADSCALING (#12374) This macro is no longer used within php-src since 60ace13f9c5e2828bfa1c177479039f6abbd4319, it invokes undefined behavior depending on t
random: Remove RAND_RANGE_BADSCALING (#12374) This macro is no longer used within php-src since 60ace13f9c5e2828bfa1c177479039f6abbd4319, it invokes undefined behavior depending on the input and the corresponding MT_RAND_PHP mode was deprecated in PHP 8.3. Thus remove this macro. Any remaining non-php-src user should just inline it into their code, but should ideally migrate to a non-biased scaler. In any case the undefined behavior of the original implementation should be accounted for.
show more ...
|
#
d5484bf1 |
| 04-Apr-2023 |
Dmitry Stogov |
Remove includes
|
#
8abea1b3 |
| 04-Mar-2023 |
Tim Düsterhus |
random: Convert `php_random_(bytes|int)_(silent|throw)` into inline functions (#10763) Compared to macros, inline functions are more robust and easier to debug. Also, use true/false
random: Convert `php_random_(bytes|int)_(silent|throw)` into inline functions (#10763) Compared to macros, inline functions are more robust and easier to debug. Also, use true/false at the same time instead of 1 and 0.
show more ...
|
#
f079aa2e |
| 24-Feb-2023 |
Tim Düsterhus |
random: Fix return type of php_random_(bytes|int) (#10687) These return a `zend_result`, not `int`.
|
#
f9a1a903 |
| 14-Dec-2022 |
Tim Düsterhus |
Add Randomizer::nextFloat() and Randomizer::getFloat() (#9679) * random: Add Randomizer::nextFloat() * random: Check that doubles are IEEE-754 in Randomizer::nextFloat() *
Add Randomizer::nextFloat() and Randomizer::getFloat() (#9679) * random: Add Randomizer::nextFloat() * random: Check that doubles are IEEE-754 in Randomizer::nextFloat() * random: Add Randomizer::nextFloat() tests * random: Add Randomizer::getFloat() implementing the y-section algorithm The algorithm is published in: Drawing Random Floating-Point Numbers from an Interval. Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022. https://doi.org/10.1145/3503512 * random: Implement getFloat_gamma() optimization see https://github.com/php/php-src/pull/9679/files#r994668327 * random: Add Random\IntervalBoundary * random: Split the implementation of γ-section into its own file * random: Add tests for Randomizer::getFloat() * random: Fix γ-section for 32-bit systems * random: Replace check for __STDC_IEC_559__ by compile-time check for DBL_MANT_DIG * random: Drop nextFloat_spacing.phpt * random: Optimize Randomizer::getFloat() implementation * random: Reject non-finite parameters in Randomizer::getFloat() * random: Add NEWS/UPGRADING for Randomizer’s float functionality
show more ...
|
#
ac3ecd03 |
| 09-Dec-2022 |
Joshua Rüsweg |
Add `Randomizer::getBytesFromString()` method (#9664) * Add `Randomizer::getBytesFromAlphabet()` method * Rename `getBytesFromAlphabet` to `getBytesFromString` * [ci skip]
Add `Randomizer::getBytesFromString()` method (#9664) * Add `Randomizer::getBytesFromAlphabet()` method * Rename `getBytesFromAlphabet` to `getBytesFromString` * [ci skip] Add NEWS/UPGRADING for Randomizer::getBytesFromString() Co-authored-by: Tim Düsterhus <tim@bastelstu.be>
show more ...
|
#
22040f5a |
| 26-Mar-2023 |
Niels Dossche <7771979+nielsdos@users.noreply.github.com> |
Merge branch 'PHP-8.1' into PHP-8.2 * PHP-8.1: Fix undefined behaviour in GENERATE_SEED() Fix undefined behaviour when writing 32-bit values in phar/tar.c
|
#
50879319 |
| 06-Mar-2023 |
Tim Düsterhus |
random: Add missing `php.h` include to php_random.h (#10764) `PHPAPI` is defined in `php.h`. It appears that without the explicit include, recent versions of Visual Studio Code’s intelli
random: Add missing `php.h` include to php_random.h (#10764) `PHPAPI` is defined in `php.h`. It appears that without the explicit include, recent versions of Visual Studio Code’s intellisense (rightfully) no longer detect `PHPAPI`. This will then lead to a misparsing of the file, because `PHPAPI` is assumed to be the return type and the actual return type is assumed to be the function name, thus expecting a semicolon after the actual return type. This in turn colors the entire header in red due to the detected syntax error(s), making development very hard / impossible. This did not cause issues outside of the IDE use case, because apparently all users of `php_random.h` include `php.h` before including `php_random.h`.
show more ...
|
#
1e9280e0 |
| 03-Oct-2022 |
Tim Düsterhus |
[ci skip] Trim trailing whitespace in php_random.h |
#
28a4d767 |
| 19-Sep-2022 |
Remi Collet |
declare random globals as public API |
#
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 ...
|
#
5c693c77 |
| 26-Jul-2022 |
Tim Düsterhus |
Remove `->last_unsafe` from php_random_status (#9132) Whenever ->last_unsafe is set to `true` an exception has been thrown. Thus we can replace the check for `->last_unsafe` with a check
Remove `->last_unsafe` from php_random_status (#9132) Whenever ->last_unsafe is set to `true` an exception has been thrown. Thus we can replace the check for `->last_unsafe` with a check for `EG(exception)` which is a much more natural way to ommunicate an error up the chain.
show more ...
|
#
133b9b08 |
| 22-Jul-2022 |
Go Kudo |
Avoid signed integer overflow in php_random_range() (#9066) |
#
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. |
#
4d8dd8d2 |
| 19-Jul-2022 |
Go Kudo |
Implement Random Extension https://wiki.php.net/rfc/rng_extension https://wiki.php.net/rfc/random_extension_improvement |