8#include <botan/internal/ffi_util.h>
9#include <botan/internal/ffi_rng.h>
10#include <botan/system_rng.h>
11#include <botan/auto_rng.h>
13#if defined(BOTAN_HAS_PROCESSOR_RNG)
14 #include <botan/processor_rng.h>
24 if(rng_out ==
nullptr)
27 const std::string rng_type_s(rng_type ? rng_type :
"system");
29 std::unique_ptr<Botan::RandomNumberGenerator> rng;
31 if(rng_type_s ==
"system")
35 else if(rng_type_s ==
"user" || rng_type_s ==
"user-threadsafe")
39 else if(rng_type_s ==
"null")
43#if defined(BOTAN_HAS_PROCESSOR_RNG)
55 *rng_out =
new botan_rng_struct(rng.release());
virtual void reseed_from_rng(RandomNumberGenerator &rng, size_t poll_bits=BOTAN_RNG_RESEED_POLL_BITS)
virtual void randomize(uint8_t output[], size_t length)=0
virtual void add_entropy(const uint8_t input[], size_t length)=0
struct botan_rng_struct * botan_rng_t
@ BOTAN_FFI_ERROR_NOT_IMPLEMENTED
@ BOTAN_FFI_ERROR_NULL_POINTER
int botan_rng_reseed_from_rng(botan_rng_t rng, botan_rng_t source_rng, size_t bits)
int botan_rng_reseed(botan_rng_t rng, size_t bits)
int botan_rng_add_entropy(botan_rng_t rng, const uint8_t *input, size_t len)
int botan_rng_init(botan_rng_t *rng_out, const char *rng_type)
int botan_rng_get(botan_rng_t rng, uint8_t *out, size_t out_len)
int botan_rng_destroy(botan_rng_t rng)
#define BOTAN_FFI_DO(T, obj, param, block)
#define BOTAN_FFI_CHECKED_DELETE(o)
int ffi_guard_thunk(const char *func_name, std::function< int()> thunk)
T & safe_get(botan_struct< T, M > *p)
RandomNumberGenerator & system_rng()