2 #define TEST_NAME "randombytes"
5 static unsigned char x[65536];
6 static unsigned long long freq[256];
13 memset(x, 0, sizeof x);
14 randombytes(x, sizeof x);
15 for (i = 0; i < 256; ++i) {
18 for (i = 0; i < sizeof x; ++i) {
19 ++freq[255 & (int) x[i]];
21 for (i = 0; i < 256; ++i) {
23 printf("nacl_tests failed\n");
30 randombytes_tests(void)
32 static const unsigned char seed[randombytes_SEEDBYTES] = {
33 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
34 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
35 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
37 unsigned char out[100];
43 # ifdef __EMSCRIPTEN__
44 assert(strcmp(randombytes_implementation_name(), "js") == 0);
45 # elif defined(__native_client__)
46 assert(strcmp(randombytes_implementation_name(), "nativeclient") == 0);
48 assert(strcmp(randombytes_implementation_name(), "sysrandom") == 0);
53 n = randombytes_random();
55 f |= ((n >> 16) > 1) << 1;
56 f |= ((n >> 8) > 1) << 2;
58 f |= (n > 0x7fffffff) << 4;
62 for (i = 0; i < 256; ++i) {
65 for (i = 0; i < 65536; ++i) {
66 ++freq[randombytes_uniform(256)];
68 for (i = 0; i < 256; ++i) {
70 printf("randombytes_uniform() test failed\n");
73 assert(randombytes_uniform(1U) == 0U);
75 #ifndef __EMSCRIPTEN__
76 randombytes_set_implementation(&randombytes_salsa20_implementation);
77 assert(strcmp(randombytes_implementation_name(), "salsa20") == 0);
80 for (i = 0; i < 256; ++i) {
83 for (i = 0; i < 65536; ++i) {
84 ++freq[randombytes_uniform(256)];
86 for (i = 0; i < 256; ++i) {
88 printf("randombytes_uniform() test failed\n");
91 memset(x, 0, sizeof x);
92 randombytes_buf(x, sizeof x);
93 for (i = 0; i < 256; ++i) {
96 for (i = 0; i < sizeof x; ++i) {
97 ++freq[255 & (int) x[i]];
99 for (i = 0; i < 256; ++i) {
101 printf("randombytes_buf() test failed\n");
104 assert(randombytes_uniform(1U) == 0U);
106 randombytes_buf_deterministic(out, sizeof out, seed);
107 for (i = 0; i < sizeof out; ++i) {
108 printf("%02x", out[i]);
110 printf(" (deterministic)\n");
117 assert(randombytes_SEEDBYTES > 0);
118 assert(randombytes_seedbytes() == randombytes_SEEDBYTES);
124 randombytes_uniform_impl(const uint32_t upper_bound)
132 #ifndef __native_client__
133 randombytes_implementation impl = randombytes_sysrandom_implementation;
135 randombytes_implementation impl = randombytes_nativeclient_implementation;
137 uint32_t v = randombytes_random();
139 impl.uniform = randombytes_uniform_impl;
141 randombytes_set_implementation(&impl);
142 assert(randombytes_uniform(1) == 1);
143 assert(randombytes_uniform(v) == v);
144 assert(randombytes_uniform(v) == v);
145 assert(randombytes_uniform(v) == v);
146 assert(randombytes_uniform(v) == v);
159 #ifndef __EMSCRIPTEN__
164 #ifndef __EMSCRIPTEN__
165 randombytes_set_implementation(&randombytes_salsa20_implementation);