]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-random-util.c
Merge pull request #15442 from poettering/fido2
[thirdparty/systemd.git] / src / test / test-random-util.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2
3 #include "hexdecoct.h"
4 #include "random-util.h"
5 #include "log.h"
6 #include "tests.h"
7
8 static void test_genuine_random_bytes(RandomFlags flags) {
9 uint8_t buf[16] = {};
10 unsigned i;
11
12 log_info("/* %s */", __func__);
13
14 for (i = 1; i < sizeof buf; i++) {
15 assert_se(genuine_random_bytes(buf, i, flags) == 0);
16 if (i + 1 < sizeof buf)
17 assert_se(buf[i] == 0);
18
19 hexdump(stdout, buf, i);
20 }
21 }
22
23 static void test_pseudo_random_bytes(void) {
24 uint8_t buf[16] = {};
25 unsigned i;
26
27 log_info("/* %s */", __func__);
28
29 for (i = 1; i < sizeof buf; i++) {
30 pseudo_random_bytes(buf, i);
31 if (i + 1 < sizeof buf)
32 assert_se(buf[i] == 0);
33
34 hexdump(stdout, buf, i);
35 }
36 }
37
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
54 int main(int argc, char **argv) {
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);
61 test_genuine_random_bytes(RANDOM_ALLOW_INSECURE);
62
63 test_pseudo_random_bytes();
64
65 test_rdrand();
66
67 return 0;
68 }