public function testBias() { $this->markTestSkipped('This test can fail randomly; only enable it when needed.'); // Populate: $buffer = array_fill(0, 10, 0); // Perform the experiment: for ($i = 0; $i < 5000; ++$i) { // Increase a random index by 1 $j = \Resonantcore\Lib\Secure::random(0, 9); ++$buffer[$j]; } var_dump($buffer); // Analyze the results: for ($i = 0; $i < 10; ++$i) { // If any of these are 0, then our RNG is failing us $this->assertNotEquals($buffer[$i], 0); } }
<?php define('BASE', dirname(__DIR__)); require_once BASE . "/autoload.php"; echo "# Demo: \\Resonantcore\\Lib\\Secure\n\n"; /* Secure::random($min, $max) */ echo "\n## random(\$min, \$max)\n"; $charset = array_merge(range('a', 'z'), range('2', '7')); $buffer = ''; for ($i = 0; $i < 16; ++$i) { // Get a random index $n = \Resonantcore\Lib\Secure::random(0, 31); // Append a random character from $charset to buffer $buffer .= $charset[$n]; } echo $buffer . "\n"; unset($buffer); /* Secure::random_bytes($num) */ echo "\n## random_bytes(\$num)\n"; echo base64_encode(\Resonantcore\Lib\Secure::random_bytes(32)) . "\n"; /* Secure::noHTML($str) */ echo "\n## noHTML(\$str)\n"; $buffer = \Resonantcore\Lib\Secure::noHTML('<br />'); if ($buffer === '<br />') { echo "No HTML succeeded!\n"; } unset($buffer); /* Secure::file_valid($file, $jail_dir) */ echo "\n## file_valid(\$file, \$jail_dir)\n"; $buffer = \Resonantcore\Lib\Secure::file_valid($_SERVER['PHP_SELF'], BASE); var_dump($buffer);