44 lines
952 B
PHP
44 lines
952 B
PHP
<?php
|
|
|
|
namespace RobThree\Auth\Providers\Rng;
|
|
|
|
class HashRNGProvider implements IRNGProvider
|
|
{
|
|
/** @var string */
|
|
private $algorithm;
|
|
|
|
/**
|
|
* @param string $algorithm
|
|
*/
|
|
public function __construct($algorithm = 'sha256')
|
|
{
|
|
$algos = array_values(hash_algos());
|
|
if (!in_array($algorithm, $algos, true)) {
|
|
throw new RNGException('Unsupported algorithm specified');
|
|
}
|
|
$this->algorithm = $algorithm;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function getRandomBytes($bytecount)
|
|
{
|
|
$result = '';
|
|
$hash = mt_rand();
|
|
for ($i = 0; $i < $bytecount; $i++) {
|
|
$hash = hash($this->algorithm, $hash . mt_rand(), true);
|
|
$result .= $hash[mt_rand(0, strlen($hash) - 1)];
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function isCryptographicallySecure()
|
|
{
|
|
return false;
|
|
}
|
|
}
|