#ifndef _FUTILS_RANDOM_H_
#define _FUTILS_RANDOM_H_
#include <errno.h>
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
int futils_random_strong(void *buffer, size_t len);
void futils_random(void *buffer, size_t len);
uint8_t futils_randomr8(void);
uint16_t futils_randomr16(void);
uint32_t futils_randomr32(void);
uint64_t futils_randomr64(void);
uint8_t futils_randomr8_maximum(uint8_t maximum);
uint16_t futils_randomr16_maximum(uint16_t maximum);
uint32_t futils_randomr32_maximum(uint32_t maximum);
uint64_t futils_randomr64_maximum(uint64_t maximum);
double futils_randomrd(void);
float futils_randomrf(void);
static inline int futils_random_bytes(void *buffer, size_t len)
{
if (!buffer || !len)
return -EINVAL;
futils_random(buffer, len);
return 0;
}
static inline int futils_random8(uint8_t *val)
{
if (!val)
return -EINVAL;
*val = futils_randomr8();
return 0;
}
static inline int futils_random16(uint16_t *val)
{
if (!val)
return -EINVAL;
*val = futils_randomr16();
return 0;
}
static inline int futils_random32(uint32_t *val)
{
if (!val)
return -EINVAL;
*val = futils_randomr32();
return 0;
}
static inline int futils_random64(uint64_t *val)
{
if (!val)
return -EINVAL;
*val = futils_randomr64();
return 0;
}
static inline int futils_random8_maximum(uint8_t *val, uint8_t maximum)
{
if (!val)
return -EINVAL;
*val = futils_randomr8_maximum(maximum);
return 0;
}
static inline int futils_random16_maximum(uint16_t *val, uint16_t maximum)
{
if (!val)
return -EINVAL;
*val = futils_randomr16_maximum(maximum);
return 0;
}
static inline int futils_random32_maximum(uint32_t *val, uint32_t maximum)
{
if (!val)
return -EINVAL;
*val = futils_randomr32_maximum(maximum);
return 0;
}
static inline int futils_random64_maximum(uint64_t *val, uint64_t maximum)
{
if (!val)
return -EINVAL;
*val = futils_randomr64_maximum(maximum);
return 0;
}
int futils_random_string(char *buffer, size_t len,
size_t count,
const char *alphabet);
int futils_random_base16(char *buffer, size_t len, size_t count);
int futils_random_base32(char *buffer, size_t len, size_t count);
int futils_random_base64(char *buffer, size_t len, size_t count);
int futils_random_shuffle(void *base, size_t nmemb, size_t size);
int futils_random_reseed(void);
#ifdef __cplusplus
}
#endif
#endif