forked from azjezz/psl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathint.php
44 lines (36 loc) · 1.11 KB
/
int.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
declare(strict_types=1);
namespace Psl\SecureRandom;
use Exception as PHPException;
use Psl\Math;
use Psl\Str;
use function is_string;
use function random_int;
/**
* Returns a cryptographically secure random integer in the given range.
*
* @throws Exception\InsufficientEntropyException If it was not possible to gather sufficient entropy.
* @throws Exception\InvalidArgumentException If $min > $max.
*
* @psalm-external-mutation-free
*/
function int(int $min = Math\INT64_MIN, int $max = Math\INT64_MAX): int
{
if ($max < $min) {
throw new Exception\InvalidArgumentException(Str\format('Expected $min (%d) to be less than or equal to $max (%d).', $min, $max));
}
if ($min === $max) {
return $min;
}
try {
return random_int($min, $max);
// @codeCoverageIgnoreStart
} catch (PHPException $e) {
$code = $e->getCode();
if (is_string($code)) {
$code = Str\to_int($code) ?? 0;
}
throw new Exception\InsufficientEntropyException('Unable to gather sufficient entropy.', $code, $e);
// @codeCoverageIgnoreEnd
}
}