/usr/include/kashmir/system/winrand.h is in libkashmir-dev 0.0~git20150805.0.2f3913f+dfsg3-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | // winrand.h -- Windows random number generator
// Copyright (C) 2008 Kenneth Laskoski
/** @file winrand.h
@brief Windows random number generator
@author Copyright (C) 2008 Kenneth Laskoski
WinRand uses ADVAPI32!RtlGenRandom and does not require a CSP context
see <http://blogs.msdn.com/michael_howard/archive/2005/01/14/353379.aspx>
and <http://msdn.microsoft.com/en-us/library/aa387694%28VS.85%29.aspx>
Use, modification, and distribution are subject to the
Boost Software License, Version 1.0. See accompanying file
LICENSE_1_0.txt or <http://www.boost.org/LICENSE_1_0.txt>.
*/
#ifndef KL_WINRAND_H
#define KL_WINRAND_H
#include "../randomstream.h"
#include "../unique.h"
#include <stdexcept>
#define WINVER 0x0501
#define _WIN32_WINNT 0x0501
#include <windows.h>
namespace kashmir {
namespace system {
class WinRand : public randomstream<WinRand>, unique<WinRand>
{
HMODULE advapi32;
BOOLEAN (APIENTRY *RtlGenRandom)(void*, ULONG);
public:
WinRand() : advapi32(LoadLibrary("ADVAPI32.DLL"))
{
if (!advapi32)
throw std::runtime_error("failed to load ADVAPI32.DLL.");
RtlGenRandom = reinterpret_cast<BOOLEAN (APIENTRY*)(void*, ULONG)>(GetProcAddress(advapi32, "SystemFunction036"));
if (!RtlGenRandom)
{
FreeLibrary(advapi32);
throw std::runtime_error("failed to get ADVAPI32!RtlGenRandom address.");
}
}
~WinRand()
{
FreeLibrary(advapi32);
}
void read(char *buffer, std::size_t count)
{
if (!RtlGenRandom(buffer, count))
throw std::runtime_error("system failed to generate random data.");
}
};
}}
#endif
|