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