summaryrefslogtreecommitdiffstats
path: root/lib/Providers/Rng/HashRNGProvider.php
blob: ca6e8593990eb13b3d9dbccee097f5adc2469001 (plain)
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
<?php
namespace RobThree\Auth\Providers\Rng;

class HashRNGProvider implements IRNGProvider
{
    private $algorithm;
    
    function __construct($algorithm = 'sha256' ) {
        $algos = array_values(hash_algos());
        if (!in_array($algorithm, $algos, true))
            throw new \RNGException('Unsupported algorithm specified');
        $this->algorithm = $algorithm;
    }
    
    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, sizeof($hash))];
        }
        return $result;
    }
    
    public function isCryptographicallySecure() {
        return false;
    }
}