Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/ssl/s3_enc.c |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||
2 | - | |||||||||||||
3 | static int ssl3_generate_key_block(SSL *s, unsigned char *km, int num) | - | ||||||||||||
4 | { | - | ||||||||||||
5 | EVP_MD_CTX *m5; | - | ||||||||||||
6 | EVP_MD_CTX *s1; | - | ||||||||||||
7 | unsigned char buf[16], smd[20]; | - | ||||||||||||
8 | unsigned char c = 'A'; | - | ||||||||||||
9 | unsigned int i, j, k; | - | ||||||||||||
10 | int ret = 0; | - | ||||||||||||
11 | - | |||||||||||||
12 | - | |||||||||||||
13 | - | |||||||||||||
14 | - | |||||||||||||
15 | k = 0; | - | ||||||||||||
16 | m5 = EVP_MD_CTX_new(); | - | ||||||||||||
17 | s1 = EVP_MD_CTX_new(); | - | ||||||||||||
18 | if (m5 ==
| 0 | ||||||||||||
19 | ((void *)0)
| 0 | ||||||||||||
20 | || s1 ==
| 0 | ||||||||||||
21 | ((void *)0)
| 0 | ||||||||||||
22 | ) { | - | ||||||||||||
23 | ossl_statem_fatal((s), (80), (238), ((1|64)), | - | ||||||||||||
24 | __FILE__ | - | ||||||||||||
25 | , | - | ||||||||||||
26 | 34 | - | ||||||||||||
27 | ) | - | ||||||||||||
28 | ; | - | ||||||||||||
29 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
30 | } | - | ||||||||||||
31 | EVP_MD_CTX_set_flags(m5, 0x0008); | - | ||||||||||||
32 | for (i = 0; (
| 0 | ||||||||||||
33 | k++; | - | ||||||||||||
34 | if (k > sizeof(buf)
| 0 | ||||||||||||
35 | - | |||||||||||||
36 | ossl_statem_fatal((s), (80), (238), ((4|64)), | - | ||||||||||||
37 | __FILE__ | - | ||||||||||||
38 | , | - | ||||||||||||
39 | 43 | - | ||||||||||||
40 | ) | - | ||||||||||||
41 | ; | - | ||||||||||||
42 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
43 | } | - | ||||||||||||
44 | - | |||||||||||||
45 | for (j = 0; j < k
| 0 | ||||||||||||
46 | buf[j] = c; never executed: buf[j] = c; | 0 | ||||||||||||
47 | c++; | - | ||||||||||||
48 | if (!EVP_DigestInit_ex(s1, EVP_sha1(),
| 0 | ||||||||||||
49 | ((void *)0)
| 0 | ||||||||||||
50 | )
| 0 | ||||||||||||
51 | || !EVP_DigestUpdate(s1, buf, k)
| 0 | ||||||||||||
52 | || !EVP_DigestUpdate(s1, s->session->master_key,
| 0 | ||||||||||||
53 | s->session->master_key_length)
| 0 | ||||||||||||
54 | || !EVP_DigestUpdate(s1, s->s3->server_random, 32)
| 0 | ||||||||||||
55 | || !EVP_DigestUpdate(s1, s->s3->client_random, 32)
| 0 | ||||||||||||
56 | || !EVP_DigestFinal_ex(s1, smd,
| 0 | ||||||||||||
57 | ((void *)0)
| 0 | ||||||||||||
58 | )
| 0 | ||||||||||||
59 | || !EVP_DigestInit_ex(m5, EVP_md5(),
| 0 | ||||||||||||
60 | ((void *)0)
| 0 | ||||||||||||
61 | )
| 0 | ||||||||||||
62 | || !EVP_DigestUpdate(m5, s->session->master_key,
| 0 | ||||||||||||
63 | s->session->master_key_length)
| 0 | ||||||||||||
64 | || !EVP_DigestUpdate(m5, smd, 20)
| 0 | ||||||||||||
65 | ossl_statem_fatal((s), (80), (238), ((4|64)), | - | ||||||||||||
66 | __FILE__ | - | ||||||||||||
67 | , | - | ||||||||||||
68 | 62 | - | ||||||||||||
69 | ) | - | ||||||||||||
70 | ; | - | ||||||||||||
71 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
72 | } | - | ||||||||||||
73 | if ((
| 0 | ||||||||||||
74 | if (!EVP_DigestFinal_ex(m5, smd,
| 0 | ||||||||||||
75 | ((void *)0)
| 0 | ||||||||||||
76 | )
| 0 | ||||||||||||
77 | ossl_statem_fatal((s), (80), (238), ((4|64)), | - | ||||||||||||
78 | __FILE__ | - | ||||||||||||
79 | , | - | ||||||||||||
80 | 68 | - | ||||||||||||
81 | ) | - | ||||||||||||
82 | ; | - | ||||||||||||
83 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
84 | } | - | ||||||||||||
85 | memcpy(km, smd, (num - i)); | - | ||||||||||||
86 | } never executed: else {end of block | 0 | ||||||||||||
87 | if (!EVP_DigestFinal_ex(m5, km,
| 0 | ||||||||||||
88 | ((void *)0)
| 0 | ||||||||||||
89 | )
| 0 | ||||||||||||
90 | ossl_statem_fatal((s), (80), (238), ((4|64)), | - | ||||||||||||
91 | __FILE__ | - | ||||||||||||
92 | , | - | ||||||||||||
93 | 75 | - | ||||||||||||
94 | ) | - | ||||||||||||
95 | ; | - | ||||||||||||
96 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
97 | } | - | ||||||||||||
98 | } never executed: end of block | 0 | ||||||||||||
99 | - | |||||||||||||
100 | km += 16; | - | ||||||||||||
101 | } never executed: end of block | 0 | ||||||||||||
102 | OPENSSL_cleanse(smd, sizeof(smd)); | - | ||||||||||||
103 | ret = 1; | - | ||||||||||||
104 | err: code before this statement never executed: err: | 0 | ||||||||||||
105 | EVP_MD_CTX_free(m5); | - | ||||||||||||
106 | EVP_MD_CTX_free(s1); | - | ||||||||||||
107 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||
108 | } | - | ||||||||||||
109 | - | |||||||||||||
110 | int ssl3_change_cipher_state(SSL *s, int which) | - | ||||||||||||
111 | { | - | ||||||||||||
112 | unsigned char *p, *mac_secret; | - | ||||||||||||
113 | unsigned char exp_key[64]; | - | ||||||||||||
114 | unsigned char exp_iv[16]; | - | ||||||||||||
115 | unsigned char *ms, *key, *iv; | - | ||||||||||||
116 | EVP_CIPHER_CTX *dd; | - | ||||||||||||
117 | const EVP_CIPHER *c; | - | ||||||||||||
118 | - | |||||||||||||
119 | COMP_METHOD *comp; | - | ||||||||||||
120 | - | |||||||||||||
121 | const EVP_MD *m; | - | ||||||||||||
122 | int mdi; | - | ||||||||||||
123 | size_t n, i, j, k, cl; | - | ||||||||||||
124 | int reuse_dd = 0; | - | ||||||||||||
125 | - | |||||||||||||
126 | c = s->s3->tmp.new_sym_enc; | - | ||||||||||||
127 | m = s->s3->tmp.new_hash; | - | ||||||||||||
128 | - | |||||||||||||
129 | if (!((m !=
| 0 | ||||||||||||
130 | ((void *)0)
| 0 | ||||||||||||
131 | ) != 0)
| 0 | ||||||||||||
132 | ossl_statem_fatal((s), (80), (129), ((4|64)), | - | ||||||||||||
133 | __FILE__ | - | ||||||||||||
134 | , | - | ||||||||||||
135 | 111 | - | ||||||||||||
136 | ) | - | ||||||||||||
137 | ; | - | ||||||||||||
138 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
139 | } | - | ||||||||||||
140 | - | |||||||||||||
141 | if (s->s3->tmp.new_compression ==
| 0 | ||||||||||||
142 | ((void *)0)
| 0 | ||||||||||||
143 | ) | - | ||||||||||||
144 | comp = never executed: comp = ((void *)0) ; | 0 | ||||||||||||
145 | ((void *)0) never executed: comp = ((void *)0) ; | 0 | ||||||||||||
146 | ; never executed: comp = ((void *)0) ; | 0 | ||||||||||||
147 | else | - | ||||||||||||
148 | comp = s->s3->tmp.new_compression->method; never executed: comp = s->s3->tmp.new_compression->method; | 0 | ||||||||||||
149 | - | |||||||||||||
150 | - | |||||||||||||
151 | if (which & 0x001
| 0 | ||||||||||||
152 | if (s->enc_read_ctx !=
| 0 | ||||||||||||
153 | ((void *)0)
| 0 | ||||||||||||
154 | ) { | - | ||||||||||||
155 | reuse_dd = 1; | - | ||||||||||||
156 | } never executed: else if ((end of block
| 0 | ||||||||||||
157 | ((void *)0)
| 0 | ||||||||||||
158 | ) { | - | ||||||||||||
159 | ossl_statem_fatal((s), (80), (129), ((1|64)), | - | ||||||||||||
160 | __FILE__ | - | ||||||||||||
161 | , | - | ||||||||||||
162 | 126 | - | ||||||||||||
163 | ) | - | ||||||||||||
164 | ; | - | ||||||||||||
165 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
166 | } else { | - | ||||||||||||
167 | - | |||||||||||||
168 | - | |||||||||||||
169 | - | |||||||||||||
170 | EVP_CIPHER_CTX_reset(s->enc_read_ctx); | - | ||||||||||||
171 | } never executed: end of block | 0 | ||||||||||||
172 | dd = s->enc_read_ctx; | - | ||||||||||||
173 | - | |||||||||||||
174 | if (ssl_replace_hash(&s->read_hash, m) ==
| 0 | ||||||||||||
175 | ((void *)0)
| 0 | ||||||||||||
176 | ) { | - | ||||||||||||
177 | ossl_statem_fatal((s), (80), (129), ((4|64)), | - | ||||||||||||
178 | __FILE__ | - | ||||||||||||
179 | , | - | ||||||||||||
180 | 138 | - | ||||||||||||
181 | ) | - | ||||||||||||
182 | ; | - | ||||||||||||
183 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
184 | } | - | ||||||||||||
185 | - | |||||||||||||
186 | - | |||||||||||||
187 | COMP_CTX_free(s->expand); | - | ||||||||||||
188 | s->expand = | - | ||||||||||||
189 | ((void *)0) | - | ||||||||||||
190 | ; | - | ||||||||||||
191 | if (comp !=
| 0 | ||||||||||||
192 | ((void *)0)
| 0 | ||||||||||||
193 | ) { | - | ||||||||||||
194 | s->expand = COMP_CTX_new(comp); | - | ||||||||||||
195 | if (s->expand ==
| 0 | ||||||||||||
196 | ((void *)0)
| 0 | ||||||||||||
197 | ) { | - | ||||||||||||
198 | ossl_statem_fatal((s), (80), (129), (142), | - | ||||||||||||
199 | - | |||||||||||||
200 | __FILE__ | - | ||||||||||||
201 | , | - | ||||||||||||
202 | - | |||||||||||||
203 | 150 | - | ||||||||||||
204 | ) | - | ||||||||||||
205 | - | |||||||||||||
206 | ; | - | ||||||||||||
207 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
208 | } | - | ||||||||||||
209 | } never executed: end of block | 0 | ||||||||||||
210 | - | |||||||||||||
211 | RECORD_LAYER_reset_read_sequence(&s->rlayer); | - | ||||||||||||
212 | mac_secret = &(s->s3->read_mac_secret[0]); | - | ||||||||||||
213 | } never executed: else {end of block | 0 | ||||||||||||
214 | s->statem.enc_write_state = ENC_WRITE_STATE_INVALID; | - | ||||||||||||
215 | if (s->enc_write_ctx !=
| 0 | ||||||||||||
216 | ((void *)0)
| 0 | ||||||||||||
217 | ) { | - | ||||||||||||
218 | reuse_dd = 1; | - | ||||||||||||
219 | } never executed: else if ((end of block
| 0 | ||||||||||||
220 | ((void *)0)
| 0 | ||||||||||||
221 | ) { | - | ||||||||||||
222 | ossl_statem_fatal((s), (80), (129), ((1|64)), | - | ||||||||||||
223 | __FILE__ | - | ||||||||||||
224 | , | - | ||||||||||||
225 | 163 | - | ||||||||||||
226 | ) | - | ||||||||||||
227 | ; | - | ||||||||||||
228 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
229 | } else { | - | ||||||||||||
230 | - | |||||||||||||
231 | - | |||||||||||||
232 | - | |||||||||||||
233 | EVP_CIPHER_CTX_reset(s->enc_write_ctx); | - | ||||||||||||
234 | } never executed: end of block | 0 | ||||||||||||
235 | dd = s->enc_write_ctx; | - | ||||||||||||
236 | if (ssl_replace_hash(&s->write_hash, m) ==
| 0 | ||||||||||||
237 | ((void *)0)
| 0 | ||||||||||||
238 | ) { | - | ||||||||||||
239 | ossl_statem_fatal((s), (80), (129), ((1|64)), | - | ||||||||||||
240 | __FILE__ | - | ||||||||||||
241 | , | - | ||||||||||||
242 | 174 | - | ||||||||||||
243 | ) | - | ||||||||||||
244 | ; | - | ||||||||||||
245 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
246 | } | - | ||||||||||||
247 | - | |||||||||||||
248 | - | |||||||||||||
249 | COMP_CTX_free(s->compress); | - | ||||||||||||
250 | s->compress = | - | ||||||||||||
251 | ((void *)0) | - | ||||||||||||
252 | ; | - | ||||||||||||
253 | if (comp !=
| 0 | ||||||||||||
254 | ((void *)0)
| 0 | ||||||||||||
255 | ) { | - | ||||||||||||
256 | s->compress = COMP_CTX_new(comp); | - | ||||||||||||
257 | if (s->compress ==
| 0 | ||||||||||||
258 | ((void *)0)
| 0 | ||||||||||||
259 | ) { | - | ||||||||||||
260 | ossl_statem_fatal((s), (80), (129), (142), | - | ||||||||||||
261 | - | |||||||||||||
262 | __FILE__ | - | ||||||||||||
263 | , | - | ||||||||||||
264 | - | |||||||||||||
265 | 186 | - | ||||||||||||
266 | ) | - | ||||||||||||
267 | - | |||||||||||||
268 | ; | - | ||||||||||||
269 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
270 | } | - | ||||||||||||
271 | } never executed: end of block | 0 | ||||||||||||
272 | - | |||||||||||||
273 | RECORD_LAYER_reset_write_sequence(&s->rlayer); | - | ||||||||||||
274 | mac_secret = &(s->s3->write_mac_secret[0]); | - | ||||||||||||
275 | } never executed: end of block | 0 | ||||||||||||
276 | - | |||||||||||||
277 | if (reuse_dd
| 0 | ||||||||||||
278 | EVP_CIPHER_CTX_reset(dd); never executed: EVP_CIPHER_CTX_reset(dd); | 0 | ||||||||||||
279 | - | |||||||||||||
280 | p = s->s3->tmp.key_block; | - | ||||||||||||
281 | mdi = EVP_MD_size(m); | - | ||||||||||||
282 | if (mdi < 0
| 0 | ||||||||||||
283 | ossl_statem_fatal((s), (80), (129), ((4|64)), | - | ||||||||||||
284 | __FILE__ | - | ||||||||||||
285 | , | - | ||||||||||||
286 | 202 | - | ||||||||||||
287 | ) | - | ||||||||||||
288 | ; | - | ||||||||||||
289 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
290 | } | - | ||||||||||||
291 | i = mdi; | - | ||||||||||||
292 | cl = EVP_CIPHER_key_length(c); | - | ||||||||||||
293 | j = cl; | - | ||||||||||||
294 | k = EVP_CIPHER_iv_length(c); | - | ||||||||||||
295 | if ((
| 0 | ||||||||||||
296 | (
| 0 | ||||||||||||
297 | ms = &(p[0]); | - | ||||||||||||
298 | n = i + i; | - | ||||||||||||
299 | key = &(p[n]); | - | ||||||||||||
300 | n += j + j; | - | ||||||||||||
301 | iv = &(p[n]); | - | ||||||||||||
302 | n += k + k; | - | ||||||||||||
303 | } never executed: else {end of block | 0 | ||||||||||||
304 | n = i; | - | ||||||||||||
305 | ms = &(p[n]); | - | ||||||||||||
306 | n += i + j; | - | ||||||||||||
307 | key = &(p[n]); | - | ||||||||||||
308 | n += j + k; | - | ||||||||||||
309 | iv = &(p[n]); | - | ||||||||||||
310 | n += k; | - | ||||||||||||
311 | } never executed: end of block | 0 | ||||||||||||
312 | - | |||||||||||||
313 | if (n > s->s3->tmp.key_block_length
| 0 | ||||||||||||
314 | ossl_statem_fatal((s), (80), (129), ((4|64)), | - | ||||||||||||
315 | __FILE__ | - | ||||||||||||
316 | , | - | ||||||||||||
317 | 229 | - | ||||||||||||
318 | ) | - | ||||||||||||
319 | ; | - | ||||||||||||
320 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
321 | } | - | ||||||||||||
322 | - | |||||||||||||
323 | memcpy(mac_secret, ms, i); | - | ||||||||||||
324 | - | |||||||||||||
325 | if (!EVP_CipherInit_ex(dd, c,
| 0 | ||||||||||||
326 | ((void *)0)
| 0 | ||||||||||||
327 | , key, iv, (which & 0x002))
| 0 | ||||||||||||
328 | ossl_statem_fatal((s), (80), (129), ((4|64)), | - | ||||||||||||
329 | __FILE__ | - | ||||||||||||
330 | , | - | ||||||||||||
331 | 237 | - | ||||||||||||
332 | ) | - | ||||||||||||
333 | ; | - | ||||||||||||
334 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||
335 | } | - | ||||||||||||
336 | - | |||||||||||||
337 | s->statem.enc_write_state = ENC_WRITE_STATE_VALID; | - | ||||||||||||
338 | OPENSSL_cleanse(exp_key, sizeof(exp_key)); | - | ||||||||||||
339 | OPENSSL_cleanse(exp_iv, sizeof(exp_iv)); | - | ||||||||||||
340 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||
341 | err: | - | ||||||||||||
342 | OPENSSL_cleanse(exp_key, sizeof(exp_key)); | - | ||||||||||||
343 | OPENSSL_cleanse(exp_iv, sizeof(exp_iv)); | - | ||||||||||||
344 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
345 | } | - | ||||||||||||
346 | - | |||||||||||||
347 | int ssl3_setup_key_block(SSL *s) | - | ||||||||||||
348 | { | - | ||||||||||||
349 | unsigned char *p; | - | ||||||||||||
350 | const EVP_CIPHER *c; | - | ||||||||||||
351 | const EVP_MD *hash; | - | ||||||||||||
352 | int num; | - | ||||||||||||
353 | int ret = 0; | - | ||||||||||||
354 | SSL_COMP *comp; | - | ||||||||||||
355 | - | |||||||||||||
356 | if (s->s3->tmp.key_block_length != 0
| 0 | ||||||||||||
357 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||
358 | - | |||||||||||||
359 | if (!ssl_cipher_get_evp(s->session, &c, &hash,
| 0 | ||||||||||||
360 | ((void *)0)
| 0 | ||||||||||||
361 | ,
| 0 | ||||||||||||
362 | ((void *)0)
| 0 | ||||||||||||
363 | , &comp, 0)
| 0 | ||||||||||||
364 | ossl_statem_fatal((s), (80), (157), (138), | - | ||||||||||||
365 | __FILE__ | - | ||||||||||||
366 | , | - | ||||||||||||
367 | 265 | - | ||||||||||||
368 | ) | - | ||||||||||||
369 | ; | - | ||||||||||||
370 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
371 | } | - | ||||||||||||
372 | - | |||||||||||||
373 | s->s3->tmp.new_sym_enc = c; | - | ||||||||||||
374 | s->s3->tmp.new_hash = hash; | - | ||||||||||||
375 | - | |||||||||||||
376 | - | |||||||||||||
377 | - | |||||||||||||
378 | s->s3->tmp.new_compression = comp; | - | ||||||||||||
379 | - | |||||||||||||
380 | - | |||||||||||||
381 | num = EVP_MD_size(hash); | - | ||||||||||||
382 | if (num < 0
| 0 | ||||||||||||
383 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
384 | - | |||||||||||||
385 | num = EVP_CIPHER_key_length(c) + num + EVP_CIPHER_iv_length(c); | - | ||||||||||||
386 | num *= 2; | - | ||||||||||||
387 | - | |||||||||||||
388 | ssl3_cleanup_key_block(s); | - | ||||||||||||
389 | - | |||||||||||||
390 | if ((
| 0 | ||||||||||||
391 | ((void *)0)
| 0 | ||||||||||||
392 | ) { | - | ||||||||||||
393 | ossl_statem_fatal((s), (80), (157), ((1|64)), | - | ||||||||||||
394 | __FILE__ | - | ||||||||||||
395 | , | - | ||||||||||||
396 | 288 | - | ||||||||||||
397 | ) | - | ||||||||||||
398 | ; | - | ||||||||||||
399 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
400 | } | - | ||||||||||||
401 | - | |||||||||||||
402 | s->s3->tmp.key_block_length = num; | - | ||||||||||||
403 | s->s3->tmp.key_block = p; | - | ||||||||||||
404 | - | |||||||||||||
405 | - | |||||||||||||
406 | ret = ssl3_generate_key_block(s, p, num); | - | ||||||||||||
407 | - | |||||||||||||
408 | if (!(s->options & 0x00000800U)
| 0 | ||||||||||||
409 | - | |||||||||||||
410 | - | |||||||||||||
411 | - | |||||||||||||
412 | - | |||||||||||||
413 | s->s3->need_empty_fragments = 1; | - | ||||||||||||
414 | - | |||||||||||||
415 | if (s->session->cipher !=
| 0 | ||||||||||||
416 | ((void *)0)
| 0 | ||||||||||||
417 | ) { | - | ||||||||||||
418 | if (s->session->cipher->algorithm_enc == 0x00000020U
| 0 | ||||||||||||
419 | s->s3->need_empty_fragments = 0; never executed: s->s3->need_empty_fragments = 0; | 0 | ||||||||||||
420 | - | |||||||||||||
421 | - | |||||||||||||
422 | if (s->session->cipher->algorithm_enc == 0x00000004U
| 0 | ||||||||||||
423 | s->s3->need_empty_fragments = 0; never executed: s->s3->need_empty_fragments = 0; | 0 | ||||||||||||
424 | - | |||||||||||||
425 | } never executed: end of block | 0 | ||||||||||||
426 | } never executed: end of block | 0 | ||||||||||||
427 | - | |||||||||||||
428 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||
429 | } | - | ||||||||||||
430 | - | |||||||||||||
431 | void ssl3_cleanup_key_block(SSL *s) | - | ||||||||||||
432 | { | - | ||||||||||||
433 | CRYPTO_clear_free(s->s3->tmp.key_block, s->s3->tmp.key_block_length, __FILE__, 321); | - | ||||||||||||
434 | s->s3->tmp.key_block = | - | ||||||||||||
435 | ((void *)0) | - | ||||||||||||
436 | ; | - | ||||||||||||
437 | s->s3->tmp.key_block_length = 0; | - | ||||||||||||
438 | } executed 47115 times by 2 tests: end of block Executed by:
| 47115 | ||||||||||||
439 | - | |||||||||||||
440 | int ssl3_init_finished_mac(SSL *s) | - | ||||||||||||
441 | { | - | ||||||||||||
442 | BIO *buf = BIO_new(BIO_s_mem()); | - | ||||||||||||
443 | - | |||||||||||||
444 | if (buf ==
| 0-9057 | ||||||||||||
445 | ((void *)0)
| 0-9057 | ||||||||||||
446 | ) { | - | ||||||||||||
447 | ossl_statem_fatal((s), (80), (397), ((1|64)), | - | ||||||||||||
448 | __FILE__ | - | ||||||||||||
449 | , | - | ||||||||||||
450 | 332 | - | ||||||||||||
451 | ) | - | ||||||||||||
452 | ; | - | ||||||||||||
453 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
454 | } | - | ||||||||||||
455 | ssl3_free_digest_list(s); | - | ||||||||||||
456 | s->s3->handshake_buffer = buf; | - | ||||||||||||
457 | (void)(int)BIO_ctrl(s->s3->handshake_buffer,9,(0x01), | - | ||||||||||||
458 | ((void *)0) | - | ||||||||||||
459 | ); | - | ||||||||||||
460 | return executed 9057 times by 1 test: 1;return 1; Executed by:
executed 9057 times by 1 test: return 1; Executed by:
| 9057 | ||||||||||||
461 | } | - | ||||||||||||
462 | - | |||||||||||||
463 | - | |||||||||||||
464 | - | |||||||||||||
465 | - | |||||||||||||
466 | - | |||||||||||||
467 | - | |||||||||||||
468 | void ssl3_free_digest_list(SSL *s) | - | ||||||||||||
469 | { | - | ||||||||||||
470 | BIO_free(s->s3->handshake_buffer); | - | ||||||||||||
471 | s->s3->handshake_buffer = | - | ||||||||||||
472 | ((void *)0) | - | ||||||||||||
473 | ; | - | ||||||||||||
474 | EVP_MD_CTX_free(s->s3->handshake_dgst); | - | ||||||||||||
475 | s->s3->handshake_dgst = | - | ||||||||||||
476 | ((void *)0) | - | ||||||||||||
477 | ; | - | ||||||||||||
478 | } executed 50257 times by 2 tests: end of block Executed by:
| 50257 | ||||||||||||
479 | - | |||||||||||||
480 | int ssl3_finish_mac(SSL *s, const unsigned char *buf, size_t len) | - | ||||||||||||
481 | { | - | ||||||||||||
482 | int ret; | - | ||||||||||||
483 | - | |||||||||||||
484 | if (s->s3->handshake_dgst ==
| 21465-22173 | ||||||||||||
485 | ((void *)0)
| 21465-22173 | ||||||||||||
486 | ) { | - | ||||||||||||
487 | - | |||||||||||||
488 | if (len > 0x7fffffff
| 0-22173 | ||||||||||||
489 | ossl_statem_fatal((s), (80), (587), (237), | - | ||||||||||||
490 | __FILE__ | - | ||||||||||||
491 | , | - | ||||||||||||
492 | 362 | - | ||||||||||||
493 | ) | - | ||||||||||||
494 | ; | - | ||||||||||||
495 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
496 | } | - | ||||||||||||
497 | ret = BIO_write(s->s3->handshake_buffer, (void *)buf, (int)len); | - | ||||||||||||
498 | if (ret <= 0
| 0-22173 | ||||||||||||
499 | ossl_statem_fatal((s), (80), (587), ((4|64)), | - | ||||||||||||
500 | __FILE__ | - | ||||||||||||
501 | , | - | ||||||||||||
502 | 368 | - | ||||||||||||
503 | ) | - | ||||||||||||
504 | ; | - | ||||||||||||
505 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
506 | } | - | ||||||||||||
507 | } executed 22173 times by 1 test: else {end of block Executed by:
| 22173 | ||||||||||||
508 | ret = EVP_DigestUpdate(s->s3->handshake_dgst, buf, len); | - | ||||||||||||
509 | if (!ret
| 0-21465 | ||||||||||||
510 | ossl_statem_fatal((s), (80), (587), ((4|64)), | - | ||||||||||||
511 | __FILE__ | - | ||||||||||||
512 | , | - | ||||||||||||
513 | 375 | - | ||||||||||||
514 | ) | - | ||||||||||||
515 | ; | - | ||||||||||||
516 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
517 | } | - | ||||||||||||
518 | } executed 21465 times by 1 test: end of block Executed by:
| 21465 | ||||||||||||
519 | return executed 43638 times by 1 test: 1;return 1; Executed by:
executed 43638 times by 1 test: return 1; Executed by:
| 43638 | ||||||||||||
520 | } | - | ||||||||||||
521 | - | |||||||||||||
522 | int ssl3_digest_cached_records(SSL *s, int keep) | - | ||||||||||||
523 | { | - | ||||||||||||
524 | const EVP_MD *md; | - | ||||||||||||
525 | long hdatalen; | - | ||||||||||||
526 | void *hdata; | - | ||||||||||||
527 | - | |||||||||||||
528 | if (s->s3->handshake_dgst ==
| 5223-14725 | ||||||||||||
529 | ((void *)0)
| 5223-14725 | ||||||||||||
530 | ) { | - | ||||||||||||
531 | hdatalen = BIO_ctrl(s->s3->handshake_buffer,3,0,(char *)(&hdata)); | - | ||||||||||||
532 | if (hdatalen <= 0
| 0-5223 | ||||||||||||
533 | ossl_statem_fatal((s), (80), (293), (332), | - | ||||||||||||
534 | __FILE__ | - | ||||||||||||
535 | , | - | ||||||||||||
536 | 392 | - | ||||||||||||
537 | ) | - | ||||||||||||
538 | ; | - | ||||||||||||
539 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
540 | } | - | ||||||||||||
541 | - | |||||||||||||
542 | s->s3->handshake_dgst = EVP_MD_CTX_new(); | - | ||||||||||||
543 | if (s->s3->handshake_dgst ==
| 0-5223 | ||||||||||||
544 | ((void *)0)
| 0-5223 | ||||||||||||
545 | ) { | - | ||||||||||||
546 | ossl_statem_fatal((s), (80), (293), ((1|64)), | - | ||||||||||||
547 | __FILE__ | - | ||||||||||||
548 | , | - | ||||||||||||
549 | 399 | - | ||||||||||||
550 | ) | - | ||||||||||||
551 | ; | - | ||||||||||||
552 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
553 | } | - | ||||||||||||
554 | - | |||||||||||||
555 | md = ssl_handshake_md(s); | - | ||||||||||||
556 | if (md ==
| 0-5223 | ||||||||||||
557 | ((void *)0)
| 0-5223 | ||||||||||||
558 | || !EVP_DigestInit_ex(s->s3->handshake_dgst, md,
| 0-5223 | ||||||||||||
559 | ((void *)0)
| 0-5223 | ||||||||||||
560 | )
| 0-5223 | ||||||||||||
561 | || !EVP_DigestUpdate(s->s3->handshake_dgst, hdata, hdatalen)
| 0-5223 | ||||||||||||
562 | ossl_statem_fatal((s), (80), (293), ((4|64)), | - | ||||||||||||
563 | __FILE__ | - | ||||||||||||
564 | , | - | ||||||||||||
565 | 407 | - | ||||||||||||
566 | ) | - | ||||||||||||
567 | ; | - | ||||||||||||
568 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
569 | } | - | ||||||||||||
570 | } executed 5223 times by 1 test: end of block Executed by:
| 5223 | ||||||||||||
571 | if (keep == 0
| 8847-11101 | ||||||||||||
572 | BIO_free(s->s3->handshake_buffer); | - | ||||||||||||
573 | s->s3->handshake_buffer = | - | ||||||||||||
574 | ((void *)0) | - | ||||||||||||
575 | ; | - | ||||||||||||
576 | } executed 11101 times by 1 test: end of block Executed by:
| 11101 | ||||||||||||
577 | - | |||||||||||||
578 | return executed 19948 times by 1 test: 1;return 1; Executed by:
executed 19948 times by 1 test: return 1; Executed by:
| 19948 | ||||||||||||
579 | } | - | ||||||||||||
580 | - | |||||||||||||
581 | size_t ssl3_final_finish_mac(SSL *s, const char *sender, size_t len, | - | ||||||||||||
582 | unsigned char *p) | - | ||||||||||||
583 | { | - | ||||||||||||
584 | int ret; | - | ||||||||||||
585 | EVP_MD_CTX *ctx = | - | ||||||||||||
586 | ((void *)0) | - | ||||||||||||
587 | ; | - | ||||||||||||
588 | - | |||||||||||||
589 | if (!ssl3_digest_cached_records(s, 0)
| 0 | ||||||||||||
590 | - | |||||||||||||
591 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
592 | } | - | ||||||||||||
593 | - | |||||||||||||
594 | if (EVP_MD_type(EVP_MD_CTX_md(s->s3->handshake_dgst)) != 114
| 0 | ||||||||||||
595 | ossl_statem_fatal((s), (80), (285), (324), | - | ||||||||||||
596 | __FILE__ | - | ||||||||||||
597 | , | - | ||||||||||||
598 | 432 | - | ||||||||||||
599 | ) | - | ||||||||||||
600 | ; | - | ||||||||||||
601 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
602 | } | - | ||||||||||||
603 | - | |||||||||||||
604 | ctx = EVP_MD_CTX_new(); | - | ||||||||||||
605 | if (ctx ==
| 0 | ||||||||||||
606 | ((void *)0)
| 0 | ||||||||||||
607 | ) { | - | ||||||||||||
608 | ossl_statem_fatal((s), (80), (285), ((1|64)), | - | ||||||||||||
609 | __FILE__ | - | ||||||||||||
610 | , | - | ||||||||||||
611 | 439 | - | ||||||||||||
612 | ) | - | ||||||||||||
613 | ; | - | ||||||||||||
614 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
615 | } | - | ||||||||||||
616 | if (!EVP_MD_CTX_copy_ex(ctx, s->s3->handshake_dgst)
| 0 | ||||||||||||
617 | ossl_statem_fatal((s), (80), (285), ((4|64)), | - | ||||||||||||
618 | __FILE__ | - | ||||||||||||
619 | , | - | ||||||||||||
620 | 444 | - | ||||||||||||
621 | ) | - | ||||||||||||
622 | ; | - | ||||||||||||
623 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
624 | } | - | ||||||||||||
625 | - | |||||||||||||
626 | ret = EVP_MD_size(EVP_MD_CTX_md(ctx)); | - | ||||||||||||
627 | if (ret < 0
| 0 | ||||||||||||
628 | ossl_statem_fatal((s), (80), (285), ((4|64)), | - | ||||||||||||
629 | __FILE__ | - | ||||||||||||
630 | , | - | ||||||||||||
631 | 451 | - | ||||||||||||
632 | ) | - | ||||||||||||
633 | ; | - | ||||||||||||
634 | EVP_MD_CTX_reset(ctx); | - | ||||||||||||
635 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
636 | } | - | ||||||||||||
637 | - | |||||||||||||
638 | if ((sender !=
| 0 | ||||||||||||
639 | ((void *)0)
| 0 | ||||||||||||
640 | && EVP_DigestUpdate(ctx, sender, len) <= 0
| 0 | ||||||||||||
641 | || EVP_MD_CTX_ctrl(ctx, 0x1d,
| 0 | ||||||||||||
642 | (int)s->session->master_key_length,
| 0 | ||||||||||||
643 | s->session->master_key) <= 0
| 0 | ||||||||||||
644 | || EVP_DigestFinal_ex(ctx, p,
| 0 | ||||||||||||
645 | ((void *)0)
| 0 | ||||||||||||
646 | ) <= 0
| 0 | ||||||||||||
647 | ossl_statem_fatal((s), (80), (285), ((4|64)), | - | ||||||||||||
648 | __FILE__ | - | ||||||||||||
649 | , | - | ||||||||||||
650 | 462 | - | ||||||||||||
651 | ) | - | ||||||||||||
652 | ; | - | ||||||||||||
653 | ret = 0; | - | ||||||||||||
654 | } never executed: end of block | 0 | ||||||||||||
655 | - | |||||||||||||
656 | EVP_MD_CTX_free(ctx); | - | ||||||||||||
657 | - | |||||||||||||
658 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||
659 | } | - | ||||||||||||
660 | - | |||||||||||||
661 | int ssl3_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p, | - | ||||||||||||
662 | size_t len, size_t *secret_size) | - | ||||||||||||
663 | { | - | ||||||||||||
664 | static const unsigned char *salt[3] = { | - | ||||||||||||
665 | - | |||||||||||||
666 | (const unsigned char *)"A", | - | ||||||||||||
667 | (const unsigned char *)"BB", | - | ||||||||||||
668 | (const unsigned char *)"CCC", | - | ||||||||||||
669 | - | |||||||||||||
670 | - | |||||||||||||
671 | - | |||||||||||||
672 | - | |||||||||||||
673 | - | |||||||||||||
674 | }; | - | ||||||||||||
675 | unsigned char buf[64]; | - | ||||||||||||
676 | EVP_MD_CTX *ctx = EVP_MD_CTX_new(); | - | ||||||||||||
677 | int i, ret = 1; | - | ||||||||||||
678 | unsigned int n; | - | ||||||||||||
679 | size_t ret_secret_size = 0; | - | ||||||||||||
680 | - | |||||||||||||
681 | if (ctx ==
| 0 | ||||||||||||
682 | ((void *)0)
| 0 | ||||||||||||
683 | ) { | - | ||||||||||||
684 | ossl_statem_fatal((s), (80), (388), ((1|64)), | - | ||||||||||||
685 | __FILE__ | - | ||||||||||||
686 | , | - | ||||||||||||
687 | 493 | - | ||||||||||||
688 | ) | - | ||||||||||||
689 | ; | - | ||||||||||||
690 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
691 | } | - | ||||||||||||
692 | for (i = 0; i < 3
| 0 | ||||||||||||
693 | if (EVP_DigestInit_ex(ctx, s->ctx->sha1,
| 0 | ||||||||||||
694 | ((void *)0)
| 0 | ||||||||||||
695 | ) <= 0
| 0 | ||||||||||||
696 | || EVP_DigestUpdate(ctx, salt[i],
| 0 | ||||||||||||
697 | strlen((const char *)salt[i])) <= 0
| 0 | ||||||||||||
698 | || EVP_DigestUpdate(ctx, p, len) <= 0
| 0 | ||||||||||||
699 | || EVP_DigestUpdate(ctx, &(s->s3->client_random[0]),
| 0 | ||||||||||||
700 | 32) <= 0
| 0 | ||||||||||||
701 | || EVP_DigestUpdate(ctx, &(s->s3->server_random[0]),
| 0 | ||||||||||||
702 | 32) <= 0
| 0 | ||||||||||||
703 | - | |||||||||||||
704 | || EVP_DigestFinal_ex(ctx, buf, &n) <= 0
| 0 | ||||||||||||
705 | || EVP_DigestInit_ex(ctx, s->ctx->md5,
| 0 | ||||||||||||
706 | ((void *)0)
| 0 | ||||||||||||
707 | ) <= 0
| 0 | ||||||||||||
708 | || EVP_DigestUpdate(ctx, p, len) <= 0
| 0 | ||||||||||||
709 | || EVP_DigestUpdate(ctx, buf, n) <= 0
| 0 | ||||||||||||
710 | || EVP_DigestFinal_ex(ctx, out, &n) <= 0
| 0 | ||||||||||||
711 | ossl_statem_fatal((s), (80), (388), ((4|64)), | - | ||||||||||||
712 | __FILE__ | - | ||||||||||||
713 | , | - | ||||||||||||
714 | 512 | - | ||||||||||||
715 | ) | - | ||||||||||||
716 | ; | - | ||||||||||||
717 | ret = 0; | - | ||||||||||||
718 | break; never executed: break; | 0 | ||||||||||||
719 | } | - | ||||||||||||
720 | out += n; | - | ||||||||||||
721 | ret_secret_size += n; | - | ||||||||||||
722 | } never executed: end of block | 0 | ||||||||||||
723 | EVP_MD_CTX_free(ctx); | - | ||||||||||||
724 | - | |||||||||||||
725 | OPENSSL_cleanse(buf, sizeof(buf)); | - | ||||||||||||
726 | if (ret
| 0 | ||||||||||||
727 | * never executed: secret_size = ret_secret_size;*secret_size = ret_secret_size; never executed: *secret_size = ret_secret_size; | 0 | ||||||||||||
728 | return never executed: ret;return ret; never executed: return ret; | 0 | ||||||||||||
729 | } | - | ||||||||||||
730 | - | |||||||||||||
731 | int ssl3_alert_code(int code) | - | ||||||||||||
732 | { | - | ||||||||||||
733 | switch (code) { | - | ||||||||||||
734 | case never executed: 0:case 0: never executed: case 0: | 0 | ||||||||||||
735 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
736 | case never executed: 10:case 10: never executed: case 10: | 0 | ||||||||||||
737 | return never executed: 10;return 10; never executed: return 10; | 0 | ||||||||||||
738 | case never executed: 20:case 20: never executed: case 20: | 0 | ||||||||||||
739 | return never executed: 20;return 20; never executed: return 20; | 0 | ||||||||||||
740 | case never executed: 21:case 21: never executed: case 21: | 0 | ||||||||||||
741 | return never executed: 20;return 20; never executed: return 20; | 0 | ||||||||||||
742 | case never executed: 22:case 22: never executed: case 22: | 0 | ||||||||||||
743 | return never executed: 20;return 20; never executed: return 20; | 0 | ||||||||||||
744 | case never executed: 30:case 30: never executed: case 30: | 0 | ||||||||||||
745 | return never executed: 30;return 30; never executed: return 30; | 0 | ||||||||||||
746 | case never executed: 40:case 40: never executed: case 40: | 0 | ||||||||||||
747 | return never executed: 40;return 40; never executed: return 40; | 0 | ||||||||||||
748 | case never executed: 41:case 41: never executed: case 41: | 0 | ||||||||||||
749 | return never executed: 41;return 41; never executed: return 41; | 0 | ||||||||||||
750 | case never executed: 42:case 42: never executed: case 42: | 0 | ||||||||||||
751 | return never executed: 42;return 42; never executed: return 42; | 0 | ||||||||||||
752 | case never executed: 43:case 43: never executed: case 43: | 0 | ||||||||||||
753 | return never executed: 43;return 43; never executed: return 43; | 0 | ||||||||||||
754 | case never executed: 44:case 44: never executed: case 44: | 0 | ||||||||||||
755 | return never executed: 44;return 44; never executed: return 44; | 0 | ||||||||||||
756 | case never executed: 45:case 45: never executed: case 45: | 0 | ||||||||||||
757 | return never executed: 45;return 45; never executed: return 45; | 0 | ||||||||||||
758 | case never executed: 46:case 46: never executed: case 46: | 0 | ||||||||||||
759 | return never executed: 46;return 46; never executed: return 46; | 0 | ||||||||||||
760 | case never executed: 47:case 47: never executed: case 47: | 0 | ||||||||||||
761 | return never executed: 47;return 47; never executed: return 47; | 0 | ||||||||||||
762 | case never executed: 48:case 48: never executed: case 48: | 0 | ||||||||||||
763 | return never executed: 42;return 42; never executed: return 42; | 0 | ||||||||||||
764 | case never executed: 49:case 49: never executed: case 49: | 0 | ||||||||||||
765 | return never executed: 40;return 40; never executed: return 40; | 0 | ||||||||||||
766 | case never executed: 50:case 50: never executed: case 50: | 0 | ||||||||||||
767 | return never executed: 40;return 40; never executed: return 40; | 0 | ||||||||||||
768 | case never executed: 51:case 51: never executed: case 51: | 0 | ||||||||||||
769 | return never executed: 40;return 40; never executed: return 40; | 0 | ||||||||||||
770 | case never executed: 60:case 60: never executed: case 60: | 0 | ||||||||||||
771 | return never executed: 40;return 40; never executed: return 40; | 0 | ||||||||||||
772 | case never executed: 70:case 70: never executed: case 70: | 0 | ||||||||||||
773 | return never executed: 40;return 40; never executed: return 40; | 0 | ||||||||||||
774 | case never executed: 71:case 71: never executed: case 71: | 0 | ||||||||||||
775 | return never executed: 40;return 40; never executed: return 40; | 0 | ||||||||||||
776 | case never executed: 80:case 80: never executed: case 80: | 0 | ||||||||||||
777 | return never executed: 40;return 40; never executed: return 40; | 0 | ||||||||||||
778 | case never executed: 90:case 90: never executed: case 90: | 0 | ||||||||||||
779 | return never executed: 40;return 40; never executed: return 40; | 0 | ||||||||||||
780 | case never executed: 100:case 100: never executed: case 100: | 0 | ||||||||||||
781 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||
782 | case never executed: 110:case 110: never executed: case 110: | 0 | ||||||||||||
783 | return never executed: 40;return 40; never executed: return 40; | 0 | ||||||||||||
784 | case never executed: 111:case 111: never executed: case 111: | 0 | ||||||||||||
785 | return never executed: 40;return 40; never executed: return 40; | 0 | ||||||||||||
786 | case never executed: 112:case 112: never executed: case 112: | 0 | ||||||||||||
787 | return never executed: 40;return 40; never executed: return 40; | 0 | ||||||||||||
788 | case never executed: 113:case 113: never executed: case 113: | 0 | ||||||||||||
789 | return never executed: 40;return 40; never executed: return 40; | 0 | ||||||||||||
790 | case never executed: 114:case 114: never executed: case 114: | 0 | ||||||||||||
791 | return never executed: 40;return 40; never executed: return 40; | 0 | ||||||||||||
792 | case never executed: 115:case 115: never executed: case 115: | 0 | ||||||||||||
793 | return never executed: 115;return 115; never executed: return 115; | 0 | ||||||||||||
794 | case never executed: 86:case 86: never executed: case 86: | 0 | ||||||||||||
795 | return never executed: 86;return 86; never executed: return 86; | 0 | ||||||||||||
796 | case never executed: 120:case 120: never executed: case 120: | 0 | ||||||||||||
797 | return never executed: 120;return 120; never executed: return 120; | 0 | ||||||||||||
798 | case never executed: 116:case 116: never executed: case 116: | 0 | ||||||||||||
799 | return never executed: 40;return 40; never executed: return 40; | 0 | ||||||||||||
800 | default never executed: :default: never executed: default: | 0 | ||||||||||||
801 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||
802 | } | - | ||||||||||||
803 | } | - | ||||||||||||
Switch to Source code | Preprocessed file |