public function createSecret($bits = 80, $requirecryptosecure = true)
    {
        $secret = '';
        $bytes = ceil($bits / 5);   //We use 5 bits of each byte (since we have a 32-character 'alphabet' / BASE32)
        $rngprovider = $this->getRngprovider();
        if ($requirecryptosecure && !$rngprovider->isCryptographicallySecure())
            throw new TwoFactorAuthException('RNG provider is not cryptographically secure');
        $rnd = $rngprovider->getRandomBytes($bytes);
        for ($i = 0; $i < $bytes; $i++)
            $secret .= self::$_base32[ord($rnd[$i]) & 31];  //Mask out left 3 bits for 0-31 values
        return $secret;
    }
public function createSecret($bits = 80, $requirecryptosecure = true)
    {
        $secret = '';
        $bytes = ceil($bits / 5);   //We use 5 bits of each byte (since we have a 32-character 'alphabet' / BASE32)
        $rngprovider = $this->getRngprovider();
        if ($requirecryptosecure && !$rngprovider->isCryptographicallySecure())
            throw new TwoFactorAuthException('RNG provider is not cryptographically secure');
        $rnd = $rngprovider->getRandomBytes($bytes);
        for ($i = 0; $i < $bytes; $i++)
            $secret .= self::$_base32[ord($rnd[$i]) & 31];  //Mask out left 3 bits for 0-31 values
        return $secret;
    }
public function createSecret ( $ bits = 80 , $ requirecryptosecure = true ) { $ secret = '' ; $ bytes = ceil ( $ bits / 5 ) ; //We use 5 bits of each byte (since we have a 32-character 'alphabet' / BASE32) $ rngprovider = $ this -> getRngprovider ( ) ; if ( $ requirecryptosecure && ! $ rngprovider -> isCryptographicallySecure ( ) ) throw new TwoFactorAuthException ( 'RNG provider is not cryptographically secure' ) ; $ rnd = $ rngprovider -> getRandomBytes ( $ bytes ) ; for ( $ i = 0 ; $ i < $ bytes ; $ i ++ ) $ secret .= self :: $ _base32 [ ord ( $ rnd [ $ i ] ) & 31 ] ; //Mask out left 3 bits for 0-31 values return $ secret ; }
Create a new secret
Create a new secret