blob: faa3cb07d334191f685a063de9e302452fde0f0c [file] [log] [blame]
/********************************************************************\
* devrandom.h -- UNIX random number generator *
* *
* Copyright (C) 2009 Kenneth Laskoski *
* *
\********************************************************************/
/** @file devrandom.h
@brief UNIX random number generator
@author Copyright (C) 2009 Kenneth Laskoski
based on work by
@author Copyright (C) 1996, 1997, 1998 Theodore Ts'o
@author Copyright (C) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
Use, modification, and distribution are subject
to the Boost Software License, Version 1.0. (See accompanying file
LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
*/
#ifndef KL_DEVRANDOM_H
#define KL_DEVRANDOM_H
#include "kashmir/randomstream.h"
#include <fstream>
#include <stdexcept>
namespace kashmir { namespace system {
class DevRandom : public user::randomstream<DevRandom>
{
public:
DevRandom() : file("/dev/urandom", std::ios::binary)
{
if (!file) throw std::runtime_error("failed to open random device.");
}
DevRandom(const DevRandom&) = delete;
const DevRandom& operator=(const DevRandom&) = delete;
void
read(char* buffer, std::size_t count) { file.read(buffer, count); }
private:
std::ifstream file;
};
}}
#endif