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_RDRAND_RNG)
14 #include <botan/rdrand_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")
39 else if(rng_type_s ==
"null")
43 #if defined(BOTAN_HAS_RDRAND_RNG)
49 #if defined(BOTAN_TARGET_OS_HAS_THREADS)
50 else if(rng_type_s ==
"user-threadsafe")
61 *rng_out =
new botan_rng_struct(rng.release());
int ffi_guard_thunk(const char *func_name, std::function< int()> thunk)
RandomNumberGenerator & system_rng()
int botan_rng_add_entropy(botan_rng_t rng, const uint8_t *input, size_t len)
int botan_rng_get(botan_rng_t rng, uint8_t *out, size_t out_len)
virtual void add_entropy(const uint8_t input[], size_t length)=0
virtual void randomize(uint8_t output[], size_t length)=0
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_destroy(botan_rng_t rng)
#define BOTAN_FFI_CHECKED_DELETE(o)
int botan_rng_init(botan_rng_t *rng_out, const char *rng_type)
T & safe_get(botan_struct< T, M > *p)
virtual void reseed_from_rng(RandomNumberGenerator &rng, size_t poll_bits=BOTAN_RNG_RESEED_POLL_BITS)
#define BOTAN_FFI_DO(T, obj, param, block)
struct botan_rng_struct * botan_rng_t