1 
2 #ifndef randombytes_H
3 #define randombytes_H
4 
5 #include <stddef.h>
6 #include <stdint.h>
7 
8 #include <sys/types.h>
9 
10 #include "export.h"
11 
12 #ifdef __cplusplus
13 # ifdef __GNUC__
14 #  pragma GCC diagnostic ignored "-Wlong-long"
15 # endif
16 extern "C" {
17 #endif
18 
19 typedef struct randombytes_implementation {
20     const char *(*implementation_name)(void); /* required */
21     uint32_t    (*random)(void);              /* required */
22     void        (*stir)(void);                /* optional */
23     uint32_t    (*uniform)(const uint32_t upper_bound); /* optional, a default implementation will be used if NULL */
24     void        (*buf)(void * const buf, const size_t size); /* required */
25     int         (*close)(void);               /* optional */
26 } randombytes_implementation;
27 
28 #define randombytes_BYTES_MAX SODIUM_MIN(SODIUM_SIZE_MAX, 0xffffffffUL)
29 
30 #define randombytes_SEEDBYTES 32U
31 SODIUM_EXPORT
32 size_t randombytes_seedbytes(void);
33 
34 SODIUM_EXPORT
35 void randombytes_buf(void * const buf, const size_t size)
36             __attribute__ ((nonnull));
37 
38 SODIUM_EXPORT
39 void randombytes_buf_deterministic(void * const buf, const size_t size,
40                                    const unsigned char seed[randombytes_SEEDBYTES])
41             __attribute__ ((nonnull));
42 
43 SODIUM_EXPORT
44 uint32_t randombytes_random(void);
45 
46 SODIUM_EXPORT
47 uint32_t randombytes_uniform(const uint32_t upper_bound);
48 
49 SODIUM_EXPORT
50 void randombytes_stir(void);
51 
52 SODIUM_EXPORT
53 int randombytes_close(void);
54 
55 SODIUM_EXPORT
56 int randombytes_set_implementation(randombytes_implementation *impl)
57             __attribute__ ((nonnull));
58 
59 SODIUM_EXPORT
60 const char *randombytes_implementation_name(void);
61 
62 /* -- NaCl compatibility interface -- */
63 
64 SODIUM_EXPORT
65 void randombytes(unsigned char * const buf, const unsigned long long buf_len)
66             __attribute__ ((nonnull));
67 
68 #ifdef __cplusplus
69 }
70 #endif
71 
72 #endif
73