Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | #include <openssl/opensslconf.h> | - |
11 | | - |
12 | #include <stdio.h> | - |
13 | #include <string.h> | - |
14 | #include "internal/engine.h" | - |
15 | #include <openssl/rand.h> | - |
16 | #include <openssl/err.h> | - |
17 | #include <openssl/crypto.h> | - |
18 | | - |
19 | #if (defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ | - |
20 | defined(__x86_64) || defined(__x86_64__) || \ | - |
21 | defined(_M_AMD64) || defined (_M_X64)) && defined(OPENSSL_CPUID_OBJ) | - |
22 | | - |
23 | size_t OPENSSL_ia32_rdrand_bytes(unsigned char *buf, size_t len); | - |
24 | | - |
25 | static int get_random_bytes(unsigned char *buf, int num) | - |
26 | { | - |
27 | if (num < 0) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
28 | return 0; never executed: return 0; | 0 |
29 | } | - |
30 | | - |
31 | return (size_t)num == OPENSSL_ia32_rdrand_bytes(buf, (size_t)num); never executed: return (size_t)num == OPENSSL_ia32_rdrand_bytes(buf, (size_t)num); | 0 |
32 | } | - |
33 | | - |
34 | static int random_status(void) | - |
35 | { | - |
36 | return 1; never executed: return 1; | 0 |
37 | } | - |
38 | | - |
39 | static RAND_METHOD rdrand_meth = { | - |
40 | NULL, | - |
41 | get_random_bytes, | - |
42 | NULL, | - |
43 | NULL, | - |
44 | get_random_bytes, | - |
45 | random_status, | - |
46 | }; | - |
47 | | - |
48 | static int rdrand_init(ENGINE *e) | - |
49 | { | - |
50 | return 1; never executed: return 1; | 0 |
51 | } | - |
52 | | - |
53 | static const char *engine_e_rdrand_id = "rdrand"; | - |
54 | static const char *engine_e_rdrand_name = "Intel RDRAND engine"; | - |
55 | | - |
56 | static int bind_helper(ENGINE *e) | - |
57 | { | - |
58 | if (!ENGINE_set_id(e, engine_e_rdrand_id) ||TRUE | never evaluated | FALSE | never evaluated |
| 0 |
59 | !ENGINE_set_name(e, engine_e_rdrand_name) ||TRUE | never evaluated | FALSE | never evaluated |
| 0 |
60 | !ENGINE_set_flags(e, ENGINE_FLAGS_NO_REGISTER_ALL) ||TRUE | never evaluated | FALSE | never evaluated |
| 0 |
61 | !ENGINE_set_init_function(e, rdrand_init) ||TRUE | never evaluated | FALSE | never evaluated |
| 0 |
62 | !ENGINE_set_RAND(e, &rdrand_meth))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
63 | return 0; never executed: return 0; | 0 |
64 | | - |
65 | return 1; never executed: return 1; | 0 |
66 | } | - |
67 | | - |
68 | static ENGINE *ENGINE_rdrand(void) | - |
69 | { | - |
70 | ENGINE *ret = ENGINE_new(); | - |
71 | if (ret == NULL)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
72 | return NULL; never executed: return ((void *)0) ; | 0 |
73 | if (!bind_helper(ret)) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
74 | ENGINE_free(ret); | - |
75 | return NULL; never executed: return ((void *)0) ; | 0 |
76 | } | - |
77 | return ret; never executed: return ret; | 0 |
78 | } | - |
79 | | - |
80 | void engine_load_rdrand_int(void) | - |
81 | { | - |
82 | extern unsigned int OPENSSL_ia32cap_P[]; | - |
83 | | - |
84 | if (OPENSSL_ia32cap_P[1] & (1 << (62 - 32))) {TRUE | never evaluated | FALSE | evaluated 1959 times by 1 test |
| 0-1959 |
85 | ENGINE *toadd = ENGINE_rdrand(); | - |
86 | if (!toadd)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
87 | return; never executed: return; | 0 |
88 | ENGINE_add(toadd); | - |
89 | ENGINE_free(toadd); | - |
90 | ERR_clear_error(); | - |
91 | } never executed: end of block | 0 |
92 | }executed 1959 times by 1 test: end of block | 1959 |
93 | #else | - |
94 | void engine_load_rdrand_int(void) | - |
95 | { | - |
96 | } | - |
97 | #endif | - |
| | |