/**
  *
  * Returns a cryptographically secure random value.
  *
  * @param   integer  $bytes  How many bytes to return
  *
  * @return  string
  */
 public function generate($bytes = 32)
 {
     if ($this->phpfunc->extension_loaded('openssl') && (version_compare(PHP_VERSION, '5.3.4') >= 0 || IS_WIN)) {
         $strong = false;
         $randBytes = openssl_random_pseudo_bytes($bytes, $strong);
         if ($strong) {
             return $randBytes;
         }
     }
     if ($this->phpfunc->extension_loaded('mcrypt')) {
         return $this->phpfunc->mcrypt_create_iv($bytes, MCRYPT_DEV_URANDOM);
     }
     return $this->genRandomBytes($bytes);
 }