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