/usr/include/kashmir/system/winrandom.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 | // winrandom.h -- Windows random number generator
// Copyright (C) 2008 Kenneth Laskoski
/** @file winrandom.h
@brief Windows random number generator
@author Copyright (C) 2008 Kenneth Laskoski
with contribution of
@author Chet Stuut
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_WINRANDOM_H
#define KL_WINRANDOM_H
#include "../randomstream.h"
#include "../unique.h"
#include <stdexcept>
#define WINVER 0x0500
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <wincrypt.h>
namespace kashmir {
namespace system {
class WinRandom : public randomstream<WinRandom>, unique<WinRandom>
{
HCRYPTPROV hProv;
public:
WinRandom()
{
if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0))
if (GetLastError() != NTE_BAD_KEYSET || !CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET))
throw std::runtime_error("failed to acquire cryptographic context.");
}
~WinRandom()
{
CryptReleaseContext(hProv, 0);
}
void read(char *buffer, std::size_t count)
{
if (!CryptGenRandom(hProv, count, buffer))
throw std::runtime_error("system failed to generate random data.");
}
};
}}
#endif
|