Changeset View
Changeset View
Standalone View
Standalone View
sys/sys/random.h
Show All 29 Lines | |||||
#ifndef _SYS_RANDOM_H_ | #ifndef _SYS_RANDOM_H_ | ||||
#define _SYS_RANDOM_H_ | #define _SYS_RANDOM_H_ | ||||
#include <sys/types.h> | #include <sys/types.h> | ||||
#ifdef _KERNEL | #ifdef _KERNEL | ||||
#if !defined(KLD_MODULE) | |||||
#if defined(RANDOM_LOADABLE) && defined(RANDOM_YARROW) | |||||
#error "Cannot define both RANDOM_LOADABLE and RANDOM_YARROW" | |||||
#endif | |||||
#endif | |||||
struct uio; | struct uio; | ||||
#if defined(DEV_RANDOM) | #if defined(DEV_RANDOM) | ||||
u_int read_random(void *, u_int); | u_int read_random(void *, u_int); | ||||
int read_random_uio(struct uio *, bool); | int read_random_uio(struct uio *, bool); | ||||
#else | #else | ||||
static __inline int | static __inline int | ||||
read_random_uio(void *a __unused, u_int b __unused) | read_random_uio(void *a __unused, u_int b __unused) | ||||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | |||||
#define RANDOM_HARVEST_PURE_MASK (((1 << ENTROPYSOURCE) - 1) & (-1UL << RANDOM_PURE_START)) | #define RANDOM_HARVEST_PURE_MASK (((1 << ENTROPYSOURCE) - 1) & (-1UL << RANDOM_PURE_START)) | ||||
#define RANDOM_LEGACY_BOOT_ENTROPY_MODULE "/boot/entropy" | #define RANDOM_LEGACY_BOOT_ENTROPY_MODULE "/boot/entropy" | ||||
#define RANDOM_CACHED_BOOT_ENTROPY_MODULE "boot_entropy_cache" | #define RANDOM_CACHED_BOOT_ENTROPY_MODULE "boot_entropy_cache" | ||||
#define RANDOM_CACHED_SKIP_START 256 | #define RANDOM_CACHED_SKIP_START 256 | ||||
#if defined(DEV_RANDOM) | #if defined(DEV_RANDOM) | ||||
extern u_int hc_source_mask; | extern u_int hc_source_mask; | ||||
void random_harvest_queue_(const void *, u_int, u_int, enum random_entropy_source); | void random_harvest_queue_(const void *, u_int, enum random_entropy_source); | ||||
void random_harvest_fast_(const void *, u_int, u_int); | void random_harvest_fast_(const void *, u_int); | ||||
void random_harvest_direct_(const void *, u_int, u_int, enum random_entropy_source); | void random_harvest_direct_(const void *, u_int, enum random_entropy_source); | ||||
static __inline void | static __inline void | ||||
random_harvest_queue(const void *entropy, u_int size, u_int bits, | random_harvest_queue(const void *entropy, u_int size, enum random_entropy_source origin) | ||||
enum random_entropy_source origin) | |||||
{ | { | ||||
if (hc_source_mask & (1 << origin)) | if (hc_source_mask & (1 << origin)) | ||||
random_harvest_queue_(entropy, size, bits, origin); | random_harvest_queue_(entropy, size, origin); | ||||
} | } | ||||
static __inline void | static __inline void | ||||
random_harvest_fast(const void *entropy, u_int size, u_int bits, | random_harvest_fast(const void *entropy, u_int size, enum random_entropy_source origin) | ||||
enum random_entropy_source origin) | |||||
{ | { | ||||
if (hc_source_mask & (1 << origin)) | if (hc_source_mask & (1 << origin)) | ||||
random_harvest_fast_(entropy, size, bits); | random_harvest_fast_(entropy, size); | ||||
} | } | ||||
static __inline void | static __inline void | ||||
random_harvest_direct(const void *entropy, u_int size, u_int bits, | random_harvest_direct(const void *entropy, u_int size, enum random_entropy_source origin) | ||||
enum random_entropy_source origin) | |||||
{ | { | ||||
if (hc_source_mask & (1 << origin)) | if (hc_source_mask & (1 << origin)) | ||||
random_harvest_direct_(entropy, size, bits, origin); | random_harvest_direct_(entropy, size, origin); | ||||
} | } | ||||
void random_harvest_register_source(enum random_entropy_source); | void random_harvest_register_source(enum random_entropy_source); | ||||
void random_harvest_deregister_source(enum random_entropy_source); | void random_harvest_deregister_source(enum random_entropy_source); | ||||
#else | #else | ||||
#define random_harvest_queue(a, b, c, d) do {} while (0) | #define random_harvest_queue(a, b, c) do {} while (0) | ||||
#define random_harvest_fast(a, b, c, d) do {} while (0) | #define random_harvest_fast(a, b, c) do {} while (0) | ||||
#define random_harvest_direct(a, b, c, d) do {} while (0) | #define random_harvest_direct(a, b, c) do {} while (0) | ||||
#define random_harvest_register_source(a) do {} while (0) | #define random_harvest_register_source(a) do {} while (0) | ||||
#define random_harvest_deregister_source(a) do {} while (0) | #define random_harvest_deregister_source(a) do {} while (0) | ||||
#endif | #endif | ||||
#if defined(RANDOM_ENABLE_UMA) | #if defined(RANDOM_ENABLE_UMA) | ||||
#define random_harvest_fast_uma(a, b, c, d) random_harvest_fast(a, b, c, d) | #define random_harvest_fast_uma(a, b, c) random_harvest_fast(a, b, c) | ||||
#else /* !defined(RANDOM_ENABLE_UMA) */ | #else /* !defined(RANDOM_ENABLE_UMA) */ | ||||
#define random_harvest_fast_uma(a, b, c, d) do {} while (0) | #define random_harvest_fast_uma(a, b, c) do {} while (0) | ||||
#endif /* defined(RANDOM_ENABLE_UMA) */ | #endif /* defined(RANDOM_ENABLE_UMA) */ | ||||
#if defined(RANDOM_ENABLE_ETHER) | #if defined(RANDOM_ENABLE_ETHER) | ||||
#define random_harvest_queue_ether(a, b, c) random_harvest_queue(a, b, c, RANDOM_NET_ETHER) | #define random_harvest_queue_ether(a, b) random_harvest_queue(a, b, RANDOM_NET_ETHER) | ||||
#else /* !defined(RANDOM_ENABLE_ETHER) */ | #else /* !defined(RANDOM_ENABLE_ETHER) */ | ||||
#define random_harvest_queue_ether(a, b, c) do {} while (0) | #define random_harvest_queue_ether(a, b) do {} while (0) | ||||
#endif /* defined(RANDOM_ENABLE_ETHER) */ | #endif /* defined(RANDOM_ENABLE_ETHER) */ | ||||
#endif /* _KERNEL */ | #endif /* _KERNEL */ | ||||
#define GRND_NONBLOCK 0x1 | #define GRND_NONBLOCK 0x1 | ||||
#define GRND_RANDOM 0x2 | #define GRND_RANDOM 0x2 | ||||
ssize_t getrandom(void *buf, size_t buflen, unsigned int flags); | ssize_t getrandom(void *buf, size_t buflen, unsigned int flags); | ||||
#endif /* _SYS_RANDOM_H_ */ | #endif /* _SYS_RANDOM_H_ */ |