32#define DEBUG_TYPE "rng" 
   45RandomNumberGenerator::RandomNumberGenerator(
StringRef Salt) {
 
   47             << 
"Warning! Using unseeded random number generator.\n");
 
   54  std::vector<uint32_t> 
Data;
 
   61  std::seed_seq SeedSeq(
Data.begin(), 
Data.end());
 
   62  Generator.seed(SeedSeq);
 
   73  if (CryptAcquireContext(&hProvider, 0, 0, PROV_RSA_FULL,
 
   74                           CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) {
 
   76    if (CryptGenRandom(hProvider, 
Size, 
static_cast<BYTE *
>(Buffer)))
 
   77      return std::error_code();
 
   79  return std::error_code(GetLastError(), std::system_category());
 
   81  int Fd = open(
"/dev/urandom", O_RDONLY);
 
   84    ssize_t BytesRead = read(Fd, Buffer, 
Size);
 
   87    else if (BytesRead != 
static_cast<ssize_t
>(
Size))
 
   88      Ret = std::error_code(EIO, std::system_category());
 
 
static ManagedStatic< cl::opt< uint64_t >, CreateSeed > Seed
 
ManagedStatic - This transparently changes the behavior of global statics to be lazily constructed on...
 
generator_type::result_type result_type
 
LLVM_ABI result_type operator()()
Returns a random number in the range [0, Max).
 
StringRef - Represent a constant reference to a string, i.e.
 
constexpr size_t size() const
size - Get the string size.
 
initializer< Ty > init(const Ty &Val)
 
This is an optimization pass for GlobalISel generic memory operations.
 
ScopedHandle< CryptContextTraits > ScopedCryptContext
 
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
 
FunctionAddr VTableAddr uintptr_t uintptr_t Data
 
void initRandomSeedOptions()
 
LLVM_ABI std::error_code getRandomBytes(void *Buffer, size_t Size)
 
OutputIt copy(R &&Range, OutputIt Out)
 
std::error_code errnoAsErrorCode()
Helper to get errno as an std::error_code.