]>
Commit | Line | Data |
---|---|---|
52ad194e | 1 | /* SPDX-License-Identifier: LGPL-2.1+ */ |
81c58355 MB |
2 | |
3 | #include "hexdecoct.h" | |
4 | #include "random-util.h" | |
5 | #include "log.h" | |
6e866b33 | 6 | #include "tests.h" |
81c58355 | 7 | |
6e866b33 | 8 | static void test_genuine_random_bytes(RandomFlags flags) { |
81c58355 MB |
9 | uint8_t buf[16] = {}; |
10 | unsigned i; | |
11 | ||
12 | log_info("/* %s */", __func__); | |
13 | ||
14 | for (i = 1; i < sizeof buf; i++) { | |
6e866b33 | 15 | assert_se(genuine_random_bytes(buf, i, flags) == 0); |
81c58355 MB |
16 | if (i + 1 < sizeof buf) |
17 | assert_se(buf[i] == 0); | |
18 | ||
19 | hexdump(stdout, buf, i); | |
20 | } | |
21 | } | |
22 | ||
6e866b33 | 23 | static void test_pseudo_random_bytes(void) { |
81c58355 MB |
24 | uint8_t buf[16] = {}; |
25 | unsigned i; | |
26 | ||
27 | log_info("/* %s */", __func__); | |
28 | ||
29 | for (i = 1; i < sizeof buf; i++) { | |
6e866b33 | 30 | pseudo_random_bytes(buf, i); |
81c58355 MB |
31 | if (i + 1 < sizeof buf) |
32 | assert_se(buf[i] == 0); | |
33 | ||
34 | hexdump(stdout, buf, i); | |
35 | } | |
36 | } | |
37 | ||
6e866b33 MB |
38 | static void test_rdrand(void) { |
39 | int r, i; | |
40 | ||
41 | for (i = 0; i < 10; i++) { | |
42 | unsigned long x = 0; | |
43 | ||
44 | r = rdrand(&x); | |
45 | if (r < 0) { | |
46 | log_error_errno(r, "RDRAND failed: %m"); | |
47 | return; | |
48 | } | |
49 | ||
50 | printf("%lx\n", x); | |
51 | } | |
52 | } | |
53 | ||
81c58355 | 54 | int main(int argc, char **argv) { |
6e866b33 MB |
55 | test_setup_logging(LOG_DEBUG); |
56 | ||
57 | test_genuine_random_bytes(RANDOM_EXTEND_WITH_PSEUDO); | |
58 | test_genuine_random_bytes(0); | |
59 | test_genuine_random_bytes(RANDOM_BLOCK); | |
60 | test_genuine_random_bytes(RANDOM_ALLOW_RDRAND); | |
81c58355 | 61 | |
6e866b33 | 62 | test_pseudo_random_bytes(); |
81c58355 | 63 | |
6e866b33 | 64 | test_rdrand(); |
81c58355 MB |
65 | |
66 | return 0; | |
67 | } |