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 
37 SODIUM_EXPORT
38 void randombytes_buf_deterministic(void * const buf, const size_t size,
39                                    const unsigned char seed[randombytes_SEEDBYTES]);
40 
41 SODIUM_EXPORT
42 uint32_t randombytes_random(void);
43 
44 SODIUM_EXPORT
45 uint32_t randombytes_uniform(const uint32_t upper_bound);
46 
47 SODIUM_EXPORT
48 void randombytes_stir(void);
49 
50 SODIUM_EXPORT
51 int randombytes_close(void);
52 
53 SODIUM_EXPORT
54 int randombytes_set_implementation(randombytes_implementation *impl);
55 
56 SODIUM_EXPORT
57 const char *randombytes_implementation_name(void);
58 
59 /* -- NaCl compatibility interface -- */
60 
61 SODIUM_EXPORT
62 void randombytes(unsigned char * const buf, const unsigned long long buf_len);
63 
64 #ifdef __cplusplus
65 }
66 #endif
67 
68 #endif
69