Mercurial > hg > isophonics-drupal-site
comparison vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 7a779792577d |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 /** | |
3 * Random_* Compatibility Library | |
4 * for using the new PHP 7 random_* API in PHP 5 projects | |
5 * | |
6 * The MIT License (MIT) | |
7 * | |
8 * Copyright (c) 2015 - 2017 Paragon Initiative Enterprises | |
9 * | |
10 * Permission is hereby granted, free of charge, to any person obtaining a copy | |
11 * of this software and associated documentation files (the "Software"), to deal | |
12 * in the Software without restriction, including without limitation the rights | |
13 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
14 * copies of the Software, and to permit persons to whom the Software is | |
15 * furnished to do so, subject to the following conditions: | |
16 * | |
17 * The above copyright notice and this permission notice shall be included in | |
18 * all copies or substantial portions of the Software. | |
19 * | |
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
23 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
24 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
25 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
26 * SOFTWARE. | |
27 */ | |
28 | |
29 if (!is_callable('random_bytes')) { | |
30 /** | |
31 * If the libsodium PHP extension is loaded, we'll use it above any other | |
32 * solution. | |
33 * | |
34 * libsodium-php project: | |
35 * @ref https://github.com/jedisct1/libsodium-php | |
36 * | |
37 * @param int $bytes | |
38 * | |
39 * @throws Exception | |
40 * | |
41 * @return string | |
42 */ | |
43 function random_bytes($bytes) | |
44 { | |
45 try { | |
46 $bytes = RandomCompat_intval($bytes); | |
47 } catch (TypeError $ex) { | |
48 throw new TypeError( | |
49 'random_bytes(): $bytes must be an integer' | |
50 ); | |
51 } | |
52 | |
53 if ($bytes < 1) { | |
54 throw new Error( | |
55 'Length must be greater than 0' | |
56 ); | |
57 } | |
58 | |
59 /** | |
60 * @var string | |
61 */ | |
62 $buf = ''; | |
63 | |
64 /** | |
65 * \Sodium\randombytes_buf() doesn't allow more than 2147483647 bytes to be | |
66 * generated in one invocation. | |
67 */ | |
68 if ($bytes > 2147483647) { | |
69 for ($i = 0; $i < $bytes; $i += 1073741824) { | |
70 $n = ($bytes - $i) > 1073741824 | |
71 ? 1073741824 | |
72 : $bytes - $i; | |
73 $buf .= Sodium::randombytes_buf($n); | |
74 } | |
75 } else { | |
76 $buf .= Sodium::randombytes_buf($bytes); | |
77 } | |
78 | |
79 if (is_string($buf)) { | |
80 if (RandomCompat_strlen($buf) === $bytes) { | |
81 return $buf; | |
82 } | |
83 } | |
84 | |
85 /** | |
86 * If we reach here, PHP has failed us. | |
87 */ | |
88 throw new Exception( | |
89 'Could not gather sufficient random data' | |
90 ); | |
91 } | |
92 } |