Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/pkcs12/p12_mutl.c |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||
2 | - | |||||||||||||
3 | int PKCS12_mac_present(const PKCS12 *p12) | - | ||||||||||||
4 | { | - | ||||||||||||
5 | return never executed: p12->macreturn p12->mac ? 1 : 0;
never executed: return p12->mac ? 1 : 0; | 0 | ||||||||||||
6 | } | - | ||||||||||||
7 | - | |||||||||||||
8 | void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac, | - | ||||||||||||
9 | const X509_ALGOR **pmacalg, | - | ||||||||||||
10 | const ASN1_OCTET_STRING **psalt, | - | ||||||||||||
11 | const ASN1_INTEGER **piter, | - | ||||||||||||
12 | const PKCS12 *p12) | - | ||||||||||||
13 | { | - | ||||||||||||
14 | if (p12->mac
| 0 | ||||||||||||
15 | X509_SIG_get0(p12->mac->dinfo, pmacalg, pmac); | - | ||||||||||||
16 | if (psalt
| 0 | ||||||||||||
17 | * never executed: psalt = p12->mac->salt;*psalt = p12->mac->salt; never executed: *psalt = p12->mac->salt; | 0 | ||||||||||||
18 | if (piter
| 0 | ||||||||||||
19 | * never executed: piter = p12->mac->iter;*piter = p12->mac->iter; never executed: *piter = p12->mac->iter; | 0 | ||||||||||||
20 | } never executed: else {end of block | 0 | ||||||||||||
21 | if (pmac
| 0 | ||||||||||||
22 | * never executed: pmac = *pmac = ((void *)0) ; never executed: *pmac = ((void *)0) ; | 0 | ||||||||||||
23 | ((void *)0) never executed: *pmac = ((void *)0) ; | 0 | ||||||||||||
24 | ; never executed: *pmac = ((void *)0) ; | 0 | ||||||||||||
25 | if (pmacalg
| 0 | ||||||||||||
26 | * never executed: pmacalg = *pmacalg = ((void *)0) ; never executed: *pmacalg = ((void *)0) ; | 0 | ||||||||||||
27 | ((void *)0) never executed: *pmacalg = ((void *)0) ; | 0 | ||||||||||||
28 | ; never executed: *pmacalg = ((void *)0) ; | 0 | ||||||||||||
29 | if (psalt
| 0 | ||||||||||||
30 | * never executed: psalt = *psalt = ((void *)0) ; never executed: *psalt = ((void *)0) ; | 0 | ||||||||||||
31 | ((void *)0) never executed: *psalt = ((void *)0) ; | 0 | ||||||||||||
32 | ; never executed: *psalt = ((void *)0) ; | 0 | ||||||||||||
33 | if (piter
| 0 | ||||||||||||
34 | * never executed: piter = *piter = ((void *)0) ; never executed: *piter = ((void *)0) ; | 0 | ||||||||||||
35 | ((void *)0) never executed: *piter = ((void *)0) ; | 0 | ||||||||||||
36 | ; never executed: *piter = ((void *)0) ; | 0 | ||||||||||||
37 | } never executed: end of block | 0 | ||||||||||||
38 | } | - | ||||||||||||
39 | - | |||||||||||||
40 | - | |||||||||||||
41 | - | |||||||||||||
42 | static int pkcs12_gen_gost_mac_key(const char *pass, int passlen, | - | ||||||||||||
43 | const unsigned char *salt, int saltlen, | - | ||||||||||||
44 | int iter, int keylen, unsigned char *key, | - | ||||||||||||
45 | const EVP_MD *digest) | - | ||||||||||||
46 | { | - | ||||||||||||
47 | unsigned char out[96]; | - | ||||||||||||
48 | - | |||||||||||||
49 | if (keylen != 32
| 0 | ||||||||||||
50 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
51 | } | - | ||||||||||||
52 | - | |||||||||||||
53 | if (!PKCS5_PBKDF2_HMAC(pass, passlen, salt, saltlen, iter,
| 0 | ||||||||||||
54 | digest, sizeof(out), out)
| 0 | ||||||||||||
55 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
56 | } | - | ||||||||||||
57 | memcpy(key, out + sizeof(out) - 32, 32); | - | ||||||||||||
58 | OPENSSL_cleanse(out, sizeof(out)); | - | ||||||||||||
59 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||
60 | } | - | ||||||||||||
61 | - | |||||||||||||
62 | - | |||||||||||||
63 | static int pkcs12_gen_mac(PKCS12 *p12, const char *pass, int passlen, | - | ||||||||||||
64 | unsigned char *mac, unsigned int *maclen, | - | ||||||||||||
65 | int (*pkcs12_key_gen)(const char *pass, int passlen, | - | ||||||||||||
66 | unsigned char *salt, int slen, | - | ||||||||||||
67 | int id, int iter, int n, | - | ||||||||||||
68 | unsigned char *out, | - | ||||||||||||
69 | const EVP_MD *md_type)) | - | ||||||||||||
70 | { | - | ||||||||||||
71 | int ret = 0; | - | ||||||||||||
72 | const EVP_MD *md_type; | - | ||||||||||||
73 | HMAC_CTX *hmac = | - | ||||||||||||
74 | ((void *)0) | - | ||||||||||||
75 | ; | - | ||||||||||||
76 | unsigned char key[64], *salt; | - | ||||||||||||
77 | int saltlen, iter; | - | ||||||||||||
78 | int md_size = 0; | - | ||||||||||||
79 | int md_type_nid; | - | ||||||||||||
80 | const X509_ALGOR *macalg; | - | ||||||||||||
81 | const ASN1_OBJECT *macoid; | - | ||||||||||||
82 | - | |||||||||||||
83 | if (pkcs12_key_gen ==
| 0-1 | ||||||||||||
84 | ((void *)0)
| 0-1 | ||||||||||||
85 | ) | - | ||||||||||||
86 | pkcs12_key_gen = PKCS12_key_gen_utf8; never executed: pkcs12_key_gen = PKCS12_key_gen_utf8; | 0 | ||||||||||||
87 | - | |||||||||||||
88 | if (!(OBJ_obj2nid((p12->authsafes)->type) == 21)
| 0-1 | ||||||||||||
89 | ERR_put_error(35,(107),(121),__FILE__,92); | - | ||||||||||||
90 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
91 | } | - | ||||||||||||
92 | - | |||||||||||||
93 | salt = p12->mac->salt->data; | - | ||||||||||||
94 | saltlen = p12->mac->salt->length; | - | ||||||||||||
95 | if (!p12->mac->iter
| 0-1 | ||||||||||||
96 | iter = 1; never executed: iter = 1; | 0 | ||||||||||||
97 | else | - | ||||||||||||
98 | iter = ASN1_INTEGER_get(p12->mac->iter); executed 1 time by 1 test: iter = ASN1_INTEGER_get(p12->mac->iter); Executed by:
| 1 | ||||||||||||
99 | X509_SIG_get0(p12->mac->dinfo, &macalg, | - | ||||||||||||
100 | ((void *)0) | - | ||||||||||||
101 | ); | - | ||||||||||||
102 | X509_ALGOR_get0(&macoid, | - | ||||||||||||
103 | ((void *)0) | - | ||||||||||||
104 | , | - | ||||||||||||
105 | ((void *)0) | - | ||||||||||||
106 | , macalg); | - | ||||||||||||
107 | if ((
| 0-1 | ||||||||||||
108 | ((void *)0)
| 0-1 | ||||||||||||
109 | ) { | - | ||||||||||||
110 | ERR_put_error(35,(107),(118),__FILE__,105); | - | ||||||||||||
111 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
112 | } | - | ||||||||||||
113 | md_size = EVP_MD_size(md_type); | - | ||||||||||||
114 | md_type_nid = EVP_MD_type(md_type); | - | ||||||||||||
115 | if (md_size < 0
| 0-1 | ||||||||||||
116 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
117 | if ((md_type_nid == 809
| 0-1 | ||||||||||||
118 | || md_type_nid == 982
| 0-1 | ||||||||||||
119 | || md_type_nid == 983
| 0-1 | ||||||||||||
120 | && !getenv("LEGACY_GOST_PKCS12")
| 0 | ||||||||||||
121 | md_size = 32; | - | ||||||||||||
122 | if (!pkcs12_gen_gost_mac_key(pass, passlen, salt, saltlen, iter,
| 0 | ||||||||||||
123 | md_size, key, md_type)
| 0 | ||||||||||||
124 | ERR_put_error(35,(107),(107),__FILE__,119); | - | ||||||||||||
125 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
126 | } | - | ||||||||||||
127 | } never executed: elseend of block | 0 | ||||||||||||
128 | if (!(*pkcs12_key_gen)(pass, passlen, salt, saltlen, 3,
| 0-1 | ||||||||||||
129 | iter, md_size, key, md_type)
| 0-1 | ||||||||||||
130 | ERR_put_error(35,(107),(107),__FILE__,125); | - | ||||||||||||
131 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
132 | } | - | ||||||||||||
133 | if ((
| 0-1 | ||||||||||||
134 | ((void *)0)
| 0-1 | ||||||||||||
135 | - | |||||||||||||
136 | || !HMAC_Init_ex(hmac, key, md_size, md_type,
| 0-1 | ||||||||||||
137 | ((void *)0)
| 0-1 | ||||||||||||
138 | )
| 0-1 | ||||||||||||
139 | || !HMAC_Update(hmac, p12->authsafes->d.data->data,
| 0-1 | ||||||||||||
140 | p12->authsafes->d.data->length)
| 0-1 | ||||||||||||
141 | || !HMAC_Final(hmac, mac, maclen)
| 0-1 | ||||||||||||
142 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
143 | } | - | ||||||||||||
144 | ret = 1; | - | ||||||||||||
145 | - | |||||||||||||
146 | err: code before this statement executed 1 time by 1 test: err: Executed by:
| 1 | ||||||||||||
147 | OPENSSL_cleanse(key, sizeof(key)); | - | ||||||||||||
148 | HMAC_CTX_free(hmac); | - | ||||||||||||
149 | return executed 1 time by 1 test: ret;return ret; Executed by:
executed 1 time by 1 test: return ret; Executed by:
| 1 | ||||||||||||
150 | } | - | ||||||||||||
151 | - | |||||||||||||
152 | int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, | - | ||||||||||||
153 | unsigned char *mac, unsigned int *maclen) | - | ||||||||||||
154 | { | - | ||||||||||||
155 | return never executed: pkcs12_gen_mac(p12, pass, passlen, mac, maclen, return pkcs12_gen_mac(p12, pass, passlen, mac, maclen, ((void *)0) ); never executed: return pkcs12_gen_mac(p12, pass, passlen, mac, maclen, ((void *)0) ); | 0 | ||||||||||||
156 | ((void *)0) never executed: return pkcs12_gen_mac(p12, pass, passlen, mac, maclen, ((void *)0) ); | 0 | ||||||||||||
157 | ); never executed: return pkcs12_gen_mac(p12, pass, passlen, mac, maclen, ((void *)0) ); | 0 | ||||||||||||
158 | } | - | ||||||||||||
159 | - | |||||||||||||
160 | - | |||||||||||||
161 | int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen) | - | ||||||||||||
162 | { | - | ||||||||||||
163 | unsigned char mac[64]; | - | ||||||||||||
164 | unsigned int maclen; | - | ||||||||||||
165 | const ASN1_OCTET_STRING *macoct; | - | ||||||||||||
166 | - | |||||||||||||
167 | if (p12->mac ==
| 0-1 | ||||||||||||
168 | ((void *)0)
| 0-1 | ||||||||||||
169 | ) { | - | ||||||||||||
170 | ERR_put_error(35,(126),(108),__FILE__,157); | - | ||||||||||||
171 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
172 | } | - | ||||||||||||
173 | if (!pkcs12_gen_mac(p12, pass, passlen, mac, &maclen,
| 0-1 | ||||||||||||
174 | PKCS12_key_gen_utf8)
| 0-1 | ||||||||||||
175 | ERR_put_error(35,(126),(109),__FILE__,162); | - | ||||||||||||
176 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
177 | } | - | ||||||||||||
178 | X509_SIG_get0(p12->mac->dinfo, | - | ||||||||||||
179 | ((void *)0) | - | ||||||||||||
180 | , &macoct); | - | ||||||||||||
181 | if ((
| 0-1 | ||||||||||||
182 | || CRYPTO_memcmp(mac, ASN1_STRING_get0_data(macoct), maclen) != 0
| 0-1 | ||||||||||||
183 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
184 | - | |||||||||||||
185 | return executed 1 time by 1 test: 1;return 1; Executed by:
executed 1 time by 1 test: return 1; Executed by:
| 1 | ||||||||||||
186 | } | - | ||||||||||||
187 | - | |||||||||||||
188 | - | |||||||||||||
189 | - | |||||||||||||
190 | int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, | - | ||||||||||||
191 | unsigned char *salt, int saltlen, int iter, | - | ||||||||||||
192 | const EVP_MD *md_type) | - | ||||||||||||
193 | { | - | ||||||||||||
194 | unsigned char mac[64]; | - | ||||||||||||
195 | unsigned int maclen; | - | ||||||||||||
196 | ASN1_OCTET_STRING *macoct; | - | ||||||||||||
197 | - | |||||||||||||
198 | if (!md_type
| 0 | ||||||||||||
199 | md_type = EVP_sha1(); never executed: md_type = EVP_sha1(); | 0 | ||||||||||||
200 | if (PKCS12_setup_mac(p12, iter, salt, saltlen, md_type) == 0
| 0 | ||||||||||||
201 | ERR_put_error(35,(123),(110),__FILE__,186); | - | ||||||||||||
202 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
203 | } | - | ||||||||||||
204 | - | |||||||||||||
205 | - | |||||||||||||
206 | - | |||||||||||||
207 | if (!pkcs12_gen_mac(p12, pass, passlen, mac, &maclen,
| 0 | ||||||||||||
208 | PKCS12_key_gen_utf8)
| 0 | ||||||||||||
209 | ERR_put_error(35,(123),(109),__FILE__,194); | - | ||||||||||||
210 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
211 | } | - | ||||||||||||
212 | X509_SIG_getm(p12->mac->dinfo, | - | ||||||||||||
213 | ((void *)0) | - | ||||||||||||
214 | , &macoct); | - | ||||||||||||
215 | if (!ASN1_OCTET_STRING_set(macoct, mac, maclen)
| 0 | ||||||||||||
216 | ERR_put_error(35,(123),(111),__FILE__,199); | - | ||||||||||||
217 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
218 | } | - | ||||||||||||
219 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||
220 | } | - | ||||||||||||
221 | - | |||||||||||||
222 | - | |||||||||||||
223 | int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, int saltlen, | - | ||||||||||||
224 | const EVP_MD *md_type) | - | ||||||||||||
225 | { | - | ||||||||||||
226 | X509_ALGOR *macalg; | - | ||||||||||||
227 | - | |||||||||||||
228 | PKCS12_MAC_DATA_free(p12->mac); | - | ||||||||||||
229 | p12->mac = | - | ||||||||||||
230 | ((void *)0) | - | ||||||||||||
231 | ; | - | ||||||||||||
232 | - | |||||||||||||
233 | if ((
| 0 | ||||||||||||
234 | ((void *)0)
| 0 | ||||||||||||
235 | ) | - | ||||||||||||
236 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
237 | if (iter > 1
| 0 | ||||||||||||
238 | if ((
| 0 | ||||||||||||
239 | ((void *)0)
| 0 | ||||||||||||
240 | ) { | - | ||||||||||||
241 | ERR_put_error(35,(122),((1|64)),__FILE__,218); | - | ||||||||||||
242 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
243 | } | - | ||||||||||||
244 | if (!ASN1_INTEGER_set(p12->mac->iter, iter)
| 0 | ||||||||||||
245 | ERR_put_error(35,(122),((1|64)),__FILE__,222); | - | ||||||||||||
246 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
247 | } | - | ||||||||||||
248 | } never executed: end of block | 0 | ||||||||||||
249 | if (!saltlen
| 0 | ||||||||||||
250 | saltlen = 8; never executed: saltlen = 8; | 0 | ||||||||||||
251 | if ((
| 0 | ||||||||||||
252 | ((void *)0)
| 0 | ||||||||||||
253 | ) { | - | ||||||||||||
254 | ERR_put_error(35,(122),((1|64)),__FILE__,229); | - | ||||||||||||
255 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
256 | } | - | ||||||||||||
257 | p12->mac->salt->length = saltlen; | - | ||||||||||||
258 | if (!salt
| 0 | ||||||||||||
259 | if (RAND_bytes(p12->mac->salt->data, saltlen) <= 0
| 0 | ||||||||||||
260 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
261 | } never executed: elseend of block | 0 | ||||||||||||
262 | memcpy(p12->mac->salt->data, salt, saltlen); never executed: memcpy(p12->mac->salt->data, salt, saltlen); | 0 | ||||||||||||
263 | X509_SIG_getm(p12->mac->dinfo, &macalg, | - | ||||||||||||
264 | ((void *)0) | - | ||||||||||||
265 | ); | - | ||||||||||||
266 | if (!X509_ALGOR_set0(macalg, OBJ_nid2obj(EVP_MD_type(md_type)),
| 0 | ||||||||||||
267 | 5,
| 0 | ||||||||||||
268 | ((void *)0)
| 0 | ||||||||||||
269 | )
| 0 | ||||||||||||
270 | ERR_put_error(35,(122),((1|64)),__FILE__,241); | - | ||||||||||||
271 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
272 | } | - | ||||||||||||
273 | - | |||||||||||||
274 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||
275 | } | - | ||||||||||||
Switch to Source code | Preprocessed file |