blob: d1b64308e7452e5997d47cf68f9e64dbbafa1687 [file] [log] [blame]
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +01001<?php
2
3namespace RobThree\Auth\Providers\Rng;
4
5class MCryptRNGProvider implements IRNGProvider
6{
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +02007 /** @var int */
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +01008 private $source;
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +02009
10 /**
11 * @param int $source
12 */
13 public function __construct($source = MCRYPT_DEV_URANDOM)
14 {
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +010015 $this->source = $source;
16 }
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +020017
18 /**
19 * {@inheritdoc}
20 */
21 public function getRandomBytes($bytecount)
22 {
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +010023 $result = @mcrypt_create_iv($bytecount, $this->source);
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +020024 if ($result === false) {
25 throw new RNGException('mcrypt_create_iv returned an invalid value');
26 }
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +010027 return $result;
28 }
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +020029
30 /**
31 * {@inheritdoc}
32 */
33 public function isCryptographicallySecure()
34 {
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +010035 return true;
36 }
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +020037}