diff options
Diffstat (limited to 'src/lib/libssl/ssl_clnt.c')
-rw-r--r-- | src/lib/libssl/ssl_clnt.c | 272 |
1 files changed, 136 insertions, 136 deletions
diff --git a/src/lib/libssl/ssl_clnt.c b/src/lib/libssl/ssl_clnt.c index 6d50ade398..607b038825 100644 --- a/src/lib/libssl/ssl_clnt.c +++ b/src/lib/libssl/ssl_clnt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_clnt.c,v 1.140 2022/02/03 16:33:12 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_clnt.c,v 1.141 2022/02/05 14:54:10 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -190,12 +190,12 @@ ssl3_connect(SSL *s) | |||
190 | SSL_clear(s); | 190 | SSL_clear(s); |
191 | 191 | ||
192 | for (;;) { | 192 | for (;;) { |
193 | state = S3I(s)->hs.state; | 193 | state = s->s3->hs.state; |
194 | 194 | ||
195 | switch (S3I(s)->hs.state) { | 195 | switch (s->s3->hs.state) { |
196 | case SSL_ST_RENEGOTIATE: | 196 | case SSL_ST_RENEGOTIATE: |
197 | s->internal->renegotiate = 1; | 197 | s->internal->renegotiate = 1; |
198 | S3I(s)->hs.state = SSL_ST_CONNECT; | 198 | s->s3->hs.state = SSL_ST_CONNECT; |
199 | s->ctx->internal->stats.sess_connect_renegotiate++; | 199 | s->ctx->internal->stats.sess_connect_renegotiate++; |
200 | /* break */ | 200 | /* break */ |
201 | case SSL_ST_BEFORE: | 201 | case SSL_ST_BEFORE: |
@@ -214,8 +214,8 @@ ssl3_connect(SSL *s) | |||
214 | } | 214 | } |
215 | 215 | ||
216 | if (!ssl_supported_tls_version_range(s, | 216 | if (!ssl_supported_tls_version_range(s, |
217 | &S3I(s)->hs.our_min_tls_version, | 217 | &s->s3->hs.our_min_tls_version, |
218 | &S3I(s)->hs.our_max_tls_version)) { | 218 | &s->s3->hs.our_max_tls_version)) { |
219 | SSLerror(s, SSL_R_NO_PROTOCOLS_AVAILABLE); | 219 | SSLerror(s, SSL_R_NO_PROTOCOLS_AVAILABLE); |
220 | ret = -1; | 220 | ret = -1; |
221 | goto end; | 221 | goto end; |
@@ -241,7 +241,7 @@ ssl3_connect(SSL *s) | |||
241 | goto end; | 241 | goto end; |
242 | } | 242 | } |
243 | 243 | ||
244 | S3I(s)->hs.state = SSL3_ST_CW_CLNT_HELLO_A; | 244 | s->s3->hs.state = SSL3_ST_CW_CLNT_HELLO_A; |
245 | s->ctx->internal->stats.sess_connect++; | 245 | s->ctx->internal->stats.sess_connect++; |
246 | s->internal->init_num = 0; | 246 | s->internal->init_num = 0; |
247 | 247 | ||
@@ -270,10 +270,10 @@ ssl3_connect(SSL *s) | |||
270 | goto end; | 270 | goto end; |
271 | 271 | ||
272 | if (SSL_is_dtls(s) && s->d1->send_cookie) { | 272 | if (SSL_is_dtls(s) && s->d1->send_cookie) { |
273 | S3I(s)->hs.state = SSL3_ST_CW_FLUSH; | 273 | s->s3->hs.state = SSL3_ST_CW_FLUSH; |
274 | S3I(s)->hs.tls12.next_state = SSL3_ST_CR_SRVR_HELLO_A; | 274 | s->s3->hs.tls12.next_state = SSL3_ST_CR_SRVR_HELLO_A; |
275 | } else | 275 | } else |
276 | S3I(s)->hs.state = SSL3_ST_CR_SRVR_HELLO_A; | 276 | s->s3->hs.state = SSL3_ST_CR_SRVR_HELLO_A; |
277 | 277 | ||
278 | s->internal->init_num = 0; | 278 | s->internal->init_num = 0; |
279 | 279 | ||
@@ -290,20 +290,20 @@ ssl3_connect(SSL *s) | |||
290 | goto end; | 290 | goto end; |
291 | 291 | ||
292 | if (s->internal->hit) { | 292 | if (s->internal->hit) { |
293 | S3I(s)->hs.state = SSL3_ST_CR_FINISHED_A; | 293 | s->s3->hs.state = SSL3_ST_CR_FINISHED_A; |
294 | if (!SSL_is_dtls(s)) { | 294 | if (!SSL_is_dtls(s)) { |
295 | if (s->internal->tlsext_ticket_expected) { | 295 | if (s->internal->tlsext_ticket_expected) { |
296 | /* receive renewed session ticket */ | 296 | /* receive renewed session ticket */ |
297 | S3I(s)->hs.state = SSL3_ST_CR_SESSION_TICKET_A; | 297 | s->s3->hs.state = SSL3_ST_CR_SESSION_TICKET_A; |
298 | } | 298 | } |
299 | 299 | ||
300 | /* No client certificate verification. */ | 300 | /* No client certificate verification. */ |
301 | tls1_transcript_free(s); | 301 | tls1_transcript_free(s); |
302 | } | 302 | } |
303 | } else if (SSL_is_dtls(s)) { | 303 | } else if (SSL_is_dtls(s)) { |
304 | S3I(s)->hs.state = DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A; | 304 | s->s3->hs.state = DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A; |
305 | } else { | 305 | } else { |
306 | S3I(s)->hs.state = SSL3_ST_CR_CERT_A; | 306 | s->s3->hs.state = SSL3_ST_CR_CERT_A; |
307 | } | 307 | } |
308 | s->internal->init_num = 0; | 308 | s->internal->init_num = 0; |
309 | break; | 309 | break; |
@@ -315,9 +315,9 @@ ssl3_connect(SSL *s) | |||
315 | goto end; | 315 | goto end; |
316 | dtls1_stop_timer(s); | 316 | dtls1_stop_timer(s); |
317 | if (s->d1->send_cookie) /* start again, with a cookie */ | 317 | if (s->d1->send_cookie) /* start again, with a cookie */ |
318 | S3I(s)->hs.state = SSL3_ST_CW_CLNT_HELLO_A; | 318 | s->s3->hs.state = SSL3_ST_CW_CLNT_HELLO_A; |
319 | else | 319 | else |
320 | S3I(s)->hs.state = SSL3_ST_CR_CERT_A; | 320 | s->s3->hs.state = SSL3_ST_CR_CERT_A; |
321 | s->internal->init_num = 0; | 321 | s->internal->init_num = 0; |
322 | break; | 322 | break; |
323 | 323 | ||
@@ -329,25 +329,25 @@ ssl3_connect(SSL *s) | |||
329 | if (ret == 2) { | 329 | if (ret == 2) { |
330 | s->internal->hit = 1; | 330 | s->internal->hit = 1; |
331 | if (s->internal->tlsext_ticket_expected) | 331 | if (s->internal->tlsext_ticket_expected) |
332 | S3I(s)->hs.state = SSL3_ST_CR_SESSION_TICKET_A; | 332 | s->s3->hs.state = SSL3_ST_CR_SESSION_TICKET_A; |
333 | else | 333 | else |
334 | S3I(s)->hs.state = SSL3_ST_CR_FINISHED_A; | 334 | s->s3->hs.state = SSL3_ST_CR_FINISHED_A; |
335 | s->internal->init_num = 0; | 335 | s->internal->init_num = 0; |
336 | break; | 336 | break; |
337 | } | 337 | } |
338 | /* Check if it is anon DH/ECDH. */ | 338 | /* Check if it is anon DH/ECDH. */ |
339 | if (!(S3I(s)->hs.cipher->algorithm_auth & | 339 | if (!(s->s3->hs.cipher->algorithm_auth & |
340 | SSL_aNULL)) { | 340 | SSL_aNULL)) { |
341 | ret = ssl3_get_server_certificate(s); | 341 | ret = ssl3_get_server_certificate(s); |
342 | if (ret <= 0) | 342 | if (ret <= 0) |
343 | goto end; | 343 | goto end; |
344 | if (s->internal->tlsext_status_expected) | 344 | if (s->internal->tlsext_status_expected) |
345 | S3I(s)->hs.state = SSL3_ST_CR_CERT_STATUS_A; | 345 | s->s3->hs.state = SSL3_ST_CR_CERT_STATUS_A; |
346 | else | 346 | else |
347 | S3I(s)->hs.state = SSL3_ST_CR_KEY_EXCH_A; | 347 | s->s3->hs.state = SSL3_ST_CR_KEY_EXCH_A; |
348 | } else { | 348 | } else { |
349 | skip = 1; | 349 | skip = 1; |
350 | S3I(s)->hs.state = SSL3_ST_CR_KEY_EXCH_A; | 350 | s->s3->hs.state = SSL3_ST_CR_KEY_EXCH_A; |
351 | } | 351 | } |
352 | s->internal->init_num = 0; | 352 | s->internal->init_num = 0; |
353 | break; | 353 | break; |
@@ -357,7 +357,7 @@ ssl3_connect(SSL *s) | |||
357 | ret = ssl3_get_server_key_exchange(s); | 357 | ret = ssl3_get_server_key_exchange(s); |
358 | if (ret <= 0) | 358 | if (ret <= 0) |
359 | goto end; | 359 | goto end; |
360 | S3I(s)->hs.state = SSL3_ST_CR_CERT_REQ_A; | 360 | s->s3->hs.state = SSL3_ST_CR_CERT_REQ_A; |
361 | s->internal->init_num = 0; | 361 | s->internal->init_num = 0; |
362 | 362 | ||
363 | /* | 363 | /* |
@@ -375,7 +375,7 @@ ssl3_connect(SSL *s) | |||
375 | ret = ssl3_get_certificate_request(s); | 375 | ret = ssl3_get_certificate_request(s); |
376 | if (ret <= 0) | 376 | if (ret <= 0) |
377 | goto end; | 377 | goto end; |
378 | S3I(s)->hs.state = SSL3_ST_CR_SRVR_DONE_A; | 378 | s->s3->hs.state = SSL3_ST_CR_SRVR_DONE_A; |
379 | s->internal->init_num = 0; | 379 | s->internal->init_num = 0; |
380 | break; | 380 | break; |
381 | 381 | ||
@@ -386,10 +386,10 @@ ssl3_connect(SSL *s) | |||
386 | goto end; | 386 | goto end; |
387 | if (SSL_is_dtls(s)) | 387 | if (SSL_is_dtls(s)) |
388 | dtls1_stop_timer(s); | 388 | dtls1_stop_timer(s); |
389 | if (S3I(s)->hs.tls12.cert_request) | 389 | if (s->s3->hs.tls12.cert_request) |
390 | S3I(s)->hs.state = SSL3_ST_CW_CERT_A; | 390 | s->s3->hs.state = SSL3_ST_CW_CERT_A; |
391 | else | 391 | else |
392 | S3I(s)->hs.state = SSL3_ST_CW_KEY_EXCH_A; | 392 | s->s3->hs.state = SSL3_ST_CW_KEY_EXCH_A; |
393 | s->internal->init_num = 0; | 393 | s->internal->init_num = 0; |
394 | 394 | ||
395 | break; | 395 | break; |
@@ -403,7 +403,7 @@ ssl3_connect(SSL *s) | |||
403 | ret = ssl3_send_client_certificate(s); | 403 | ret = ssl3_send_client_certificate(s); |
404 | if (ret <= 0) | 404 | if (ret <= 0) |
405 | goto end; | 405 | goto end; |
406 | S3I(s)->hs.state = SSL3_ST_CW_KEY_EXCH_A; | 406 | s->s3->hs.state = SSL3_ST_CW_KEY_EXCH_A; |
407 | s->internal->init_num = 0; | 407 | s->internal->init_num = 0; |
408 | break; | 408 | break; |
409 | 409 | ||
@@ -430,16 +430,16 @@ ssl3_connect(SSL *s) | |||
430 | * message when client's ECDH public key is sent | 430 | * message when client's ECDH public key is sent |
431 | * inside the client certificate. | 431 | * inside the client certificate. |
432 | */ | 432 | */ |
433 | if (S3I(s)->hs.tls12.cert_request == 1) { | 433 | if (s->s3->hs.tls12.cert_request == 1) { |
434 | S3I(s)->hs.state = SSL3_ST_CW_CERT_VRFY_A; | 434 | s->s3->hs.state = SSL3_ST_CW_CERT_VRFY_A; |
435 | } else { | 435 | } else { |
436 | S3I(s)->hs.state = SSL3_ST_CW_CHANGE_A; | 436 | s->s3->hs.state = SSL3_ST_CW_CHANGE_A; |
437 | S3I(s)->change_cipher_spec = 0; | 437 | s->s3->change_cipher_spec = 0; |
438 | } | 438 | } |
439 | if (!SSL_is_dtls(s)) { | 439 | if (!SSL_is_dtls(s)) { |
440 | if (s->s3->flags & TLS1_FLAGS_SKIP_CERT_VERIFY) { | 440 | if (s->s3->flags & TLS1_FLAGS_SKIP_CERT_VERIFY) { |
441 | S3I(s)->hs.state = SSL3_ST_CW_CHANGE_A; | 441 | s->s3->hs.state = SSL3_ST_CW_CHANGE_A; |
442 | S3I(s)->change_cipher_spec = 0; | 442 | s->s3->change_cipher_spec = 0; |
443 | } | 443 | } |
444 | } | 444 | } |
445 | 445 | ||
@@ -453,9 +453,9 @@ ssl3_connect(SSL *s) | |||
453 | ret = ssl3_send_client_verify(s); | 453 | ret = ssl3_send_client_verify(s); |
454 | if (ret <= 0) | 454 | if (ret <= 0) |
455 | goto end; | 455 | goto end; |
456 | S3I(s)->hs.state = SSL3_ST_CW_CHANGE_A; | 456 | s->s3->hs.state = SSL3_ST_CW_CHANGE_A; |
457 | s->internal->init_num = 0; | 457 | s->internal->init_num = 0; |
458 | S3I(s)->change_cipher_spec = 0; | 458 | s->s3->change_cipher_spec = 0; |
459 | break; | 459 | break; |
460 | 460 | ||
461 | case SSL3_ST_CW_CHANGE_A: | 461 | case SSL3_ST_CW_CHANGE_A: |
@@ -467,9 +467,9 @@ ssl3_connect(SSL *s) | |||
467 | if (ret <= 0) | 467 | if (ret <= 0) |
468 | goto end; | 468 | goto end; |
469 | 469 | ||
470 | S3I(s)->hs.state = SSL3_ST_CW_FINISHED_A; | 470 | s->s3->hs.state = SSL3_ST_CW_FINISHED_A; |
471 | s->internal->init_num = 0; | 471 | s->internal->init_num = 0; |
472 | s->session->cipher = S3I(s)->hs.cipher; | 472 | s->session->cipher = s->s3->hs.cipher; |
473 | 473 | ||
474 | if (!tls1_setup_key_block(s)) { | 474 | if (!tls1_setup_key_block(s)) { |
475 | ret = -1; | 475 | ret = -1; |
@@ -491,18 +491,18 @@ ssl3_connect(SSL *s) | |||
491 | goto end; | 491 | goto end; |
492 | if (!SSL_is_dtls(s)) | 492 | if (!SSL_is_dtls(s)) |
493 | s->s3->flags |= SSL3_FLAGS_CCS_OK; | 493 | s->s3->flags |= SSL3_FLAGS_CCS_OK; |
494 | S3I(s)->hs.state = SSL3_ST_CW_FLUSH; | 494 | s->s3->hs.state = SSL3_ST_CW_FLUSH; |
495 | 495 | ||
496 | /* clear flags */ | 496 | /* clear flags */ |
497 | if (s->internal->hit) { | 497 | if (s->internal->hit) { |
498 | S3I(s)->hs.tls12.next_state = SSL_ST_OK; | 498 | s->s3->hs.tls12.next_state = SSL_ST_OK; |
499 | } else { | 499 | } else { |
500 | /* Allow NewSessionTicket if ticket expected */ | 500 | /* Allow NewSessionTicket if ticket expected */ |
501 | if (s->internal->tlsext_ticket_expected) | 501 | if (s->internal->tlsext_ticket_expected) |
502 | S3I(s)->hs.tls12.next_state = | 502 | s->s3->hs.tls12.next_state = |
503 | SSL3_ST_CR_SESSION_TICKET_A; | 503 | SSL3_ST_CR_SESSION_TICKET_A; |
504 | else | 504 | else |
505 | S3I(s)->hs.tls12.next_state = | 505 | s->s3->hs.tls12.next_state = |
506 | SSL3_ST_CR_FINISHED_A; | 506 | SSL3_ST_CR_FINISHED_A; |
507 | } | 507 | } |
508 | s->internal->init_num = 0; | 508 | s->internal->init_num = 0; |
@@ -513,7 +513,7 @@ ssl3_connect(SSL *s) | |||
513 | ret = ssl3_get_new_session_ticket(s); | 513 | ret = ssl3_get_new_session_ticket(s); |
514 | if (ret <= 0) | 514 | if (ret <= 0) |
515 | goto end; | 515 | goto end; |
516 | S3I(s)->hs.state = SSL3_ST_CR_FINISHED_A; | 516 | s->s3->hs.state = SSL3_ST_CR_FINISHED_A; |
517 | s->internal->init_num = 0; | 517 | s->internal->init_num = 0; |
518 | break; | 518 | break; |
519 | 519 | ||
@@ -522,7 +522,7 @@ ssl3_connect(SSL *s) | |||
522 | ret = ssl3_get_cert_status(s); | 522 | ret = ssl3_get_cert_status(s); |
523 | if (ret <= 0) | 523 | if (ret <= 0) |
524 | goto end; | 524 | goto end; |
525 | S3I(s)->hs.state = SSL3_ST_CR_KEY_EXCH_A; | 525 | s->s3->hs.state = SSL3_ST_CR_KEY_EXCH_A; |
526 | s->internal->init_num = 0; | 526 | s->internal->init_num = 0; |
527 | break; | 527 | break; |
528 | 528 | ||
@@ -540,9 +540,9 @@ ssl3_connect(SSL *s) | |||
540 | dtls1_stop_timer(s); | 540 | dtls1_stop_timer(s); |
541 | 541 | ||
542 | if (s->internal->hit) | 542 | if (s->internal->hit) |
543 | S3I(s)->hs.state = SSL3_ST_CW_CHANGE_A; | 543 | s->s3->hs.state = SSL3_ST_CW_CHANGE_A; |
544 | else | 544 | else |
545 | S3I(s)->hs.state = SSL_ST_OK; | 545 | s->s3->hs.state = SSL_ST_OK; |
546 | s->internal->init_num = 0; | 546 | s->internal->init_num = 0; |
547 | break; | 547 | break; |
548 | 548 | ||
@@ -553,21 +553,21 @@ ssl3_connect(SSL *s) | |||
553 | /* If the write error was fatal, stop trying */ | 553 | /* If the write error was fatal, stop trying */ |
554 | if (!BIO_should_retry(s->wbio)) { | 554 | if (!BIO_should_retry(s->wbio)) { |
555 | s->internal->rwstate = SSL_NOTHING; | 555 | s->internal->rwstate = SSL_NOTHING; |
556 | S3I(s)->hs.state = S3I(s)->hs.tls12.next_state; | 556 | s->s3->hs.state = s->s3->hs.tls12.next_state; |
557 | } | 557 | } |
558 | } | 558 | } |
559 | ret = -1; | 559 | ret = -1; |
560 | goto end; | 560 | goto end; |
561 | } | 561 | } |
562 | s->internal->rwstate = SSL_NOTHING; | 562 | s->internal->rwstate = SSL_NOTHING; |
563 | S3I(s)->hs.state = S3I(s)->hs.tls12.next_state; | 563 | s->s3->hs.state = s->s3->hs.tls12.next_state; |
564 | break; | 564 | break; |
565 | 565 | ||
566 | case SSL_ST_OK: | 566 | case SSL_ST_OK: |
567 | /* clean a few things up */ | 567 | /* clean a few things up */ |
568 | tls1_cleanup_key_block(s); | 568 | tls1_cleanup_key_block(s); |
569 | 569 | ||
570 | if (S3I(s)->handshake_transcript != NULL) { | 570 | if (s->s3->handshake_transcript != NULL) { |
571 | SSLerror(s, ERR_R_INTERNAL_ERROR); | 571 | SSLerror(s, ERR_R_INTERNAL_ERROR); |
572 | ret = -1; | 572 | ret = -1; |
573 | goto end; | 573 | goto end; |
@@ -610,17 +610,17 @@ ssl3_connect(SSL *s) | |||
610 | } | 610 | } |
611 | 611 | ||
612 | /* did we do anything */ | 612 | /* did we do anything */ |
613 | if (!S3I(s)->hs.tls12.reuse_message && !skip) { | 613 | if (!s->s3->hs.tls12.reuse_message && !skip) { |
614 | if (s->internal->debug) { | 614 | if (s->internal->debug) { |
615 | if ((ret = BIO_flush(s->wbio)) <= 0) | 615 | if ((ret = BIO_flush(s->wbio)) <= 0) |
616 | goto end; | 616 | goto end; |
617 | } | 617 | } |
618 | 618 | ||
619 | if (S3I(s)->hs.state != state) { | 619 | if (s->s3->hs.state != state) { |
620 | new_state = S3I(s)->hs.state; | 620 | new_state = s->s3->hs.state; |
621 | S3I(s)->hs.state = state; | 621 | s->s3->hs.state = state; |
622 | ssl_info_callback(s, SSL_CB_CONNECT_LOOP, 1); | 622 | ssl_info_callback(s, SSL_CB_CONNECT_LOOP, 1); |
623 | S3I(s)->hs.state = new_state; | 623 | s->s3->hs.state = new_state; |
624 | } | 624 | } |
625 | } | 625 | } |
626 | skip = 0; | 626 | skip = 0; |
@@ -643,7 +643,7 @@ ssl3_send_client_hello(SSL *s) | |||
643 | 643 | ||
644 | memset(&cbb, 0, sizeof(cbb)); | 644 | memset(&cbb, 0, sizeof(cbb)); |
645 | 645 | ||
646 | if (S3I(s)->hs.state == SSL3_ST_CW_CLNT_HELLO_A) { | 646 | if (s->s3->hs.state == SSL3_ST_CW_CLNT_HELLO_A) { |
647 | SSL_SESSION *sess = s->session; | 647 | SSL_SESSION *sess = s->session; |
648 | 648 | ||
649 | if (!ssl_max_supported_version(s, &max_version)) { | 649 | if (!ssl_max_supported_version(s, &max_version)) { |
@@ -734,7 +734,7 @@ ssl3_send_client_hello(SSL *s) | |||
734 | if (!ssl3_handshake_msg_finish(s, &cbb)) | 734 | if (!ssl3_handshake_msg_finish(s, &cbb)) |
735 | goto err; | 735 | goto err; |
736 | 736 | ||
737 | S3I(s)->hs.state = SSL3_ST_CW_CLNT_HELLO_B; | 737 | s->s3->hs.state = SSL3_ST_CW_CLNT_HELLO_B; |
738 | } | 738 | } |
739 | 739 | ||
740 | /* SSL3_ST_CW_CLNT_HELLO_B */ | 740 | /* SSL3_ST_CW_CLNT_HELLO_B */ |
@@ -758,9 +758,9 @@ ssl3_get_dtls_hello_verify(SSL *s) | |||
758 | DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B, -1, s->internal->max_cert_list)) <= 0) | 758 | DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B, -1, s->internal->max_cert_list)) <= 0) |
759 | return ret; | 759 | return ret; |
760 | 760 | ||
761 | if (S3I(s)->hs.tls12.message_type != DTLS1_MT_HELLO_VERIFY_REQUEST) { | 761 | if (s->s3->hs.tls12.message_type != DTLS1_MT_HELLO_VERIFY_REQUEST) { |
762 | s->d1->send_cookie = 0; | 762 | s->d1->send_cookie = 0; |
763 | S3I(s)->hs.tls12.reuse_message = 1; | 763 | s->s3->hs.tls12.reuse_message = 1; |
764 | return (1); | 764 | return (1); |
765 | } | 765 | } |
766 | 766 | ||
@@ -831,9 +831,9 @@ ssl3_get_server_hello(SSL *s) | |||
831 | CBS_init(&cbs, s->internal->init_msg, s->internal->init_num); | 831 | CBS_init(&cbs, s->internal->init_msg, s->internal->init_num); |
832 | 832 | ||
833 | if (SSL_is_dtls(s)) { | 833 | if (SSL_is_dtls(s)) { |
834 | if (S3I(s)->hs.tls12.message_type == DTLS1_MT_HELLO_VERIFY_REQUEST) { | 834 | if (s->s3->hs.tls12.message_type == DTLS1_MT_HELLO_VERIFY_REQUEST) { |
835 | if (s->d1->send_cookie == 0) { | 835 | if (s->d1->send_cookie == 0) { |
836 | S3I(s)->hs.tls12.reuse_message = 1; | 836 | s->s3->hs.tls12.reuse_message = 1; |
837 | return (1); | 837 | return (1); |
838 | } else { | 838 | } else { |
839 | /* Already sent a cookie. */ | 839 | /* Already sent a cookie. */ |
@@ -844,7 +844,7 @@ ssl3_get_server_hello(SSL *s) | |||
844 | } | 844 | } |
845 | } | 845 | } |
846 | 846 | ||
847 | if (S3I(s)->hs.tls12.message_type != SSL3_MT_SERVER_HELLO) { | 847 | if (s->s3->hs.tls12.message_type != SSL3_MT_SERVER_HELLO) { |
848 | al = SSL_AD_UNEXPECTED_MESSAGE; | 848 | al = SSL_AD_UNEXPECTED_MESSAGE; |
849 | SSLerror(s, SSL_R_BAD_MESSAGE_TYPE); | 849 | SSLerror(s, SSL_R_BAD_MESSAGE_TYPE); |
850 | goto fatal_err; | 850 | goto fatal_err; |
@@ -859,11 +859,11 @@ ssl3_get_server_hello(SSL *s) | |||
859 | al = SSL_AD_PROTOCOL_VERSION; | 859 | al = SSL_AD_PROTOCOL_VERSION; |
860 | goto fatal_err; | 860 | goto fatal_err; |
861 | } | 861 | } |
862 | S3I(s)->hs.peer_legacy_version = server_version; | 862 | s->s3->hs.peer_legacy_version = server_version; |
863 | s->version = server_version; | 863 | s->version = server_version; |
864 | 864 | ||
865 | S3I(s)->hs.negotiated_tls_version = ssl_tls_version(server_version); | 865 | s->s3->hs.negotiated_tls_version = ssl_tls_version(server_version); |
866 | if (S3I(s)->hs.negotiated_tls_version == 0) { | 866 | if (s->s3->hs.negotiated_tls_version == 0) { |
867 | SSLerror(s, ERR_R_INTERNAL_ERROR); | 867 | SSLerror(s, ERR_R_INTERNAL_ERROR); |
868 | goto err; | 868 | goto err; |
869 | } | 869 | } |
@@ -881,8 +881,8 @@ ssl3_get_server_hello(SSL *s) | |||
881 | sizeof(s->s3->server_random), NULL)) | 881 | sizeof(s->s3->server_random), NULL)) |
882 | goto err; | 882 | goto err; |
883 | 883 | ||
884 | if (S3I(s)->hs.our_max_tls_version >= TLS1_2_VERSION && | 884 | if (s->s3->hs.our_max_tls_version >= TLS1_2_VERSION && |
885 | S3I(s)->hs.negotiated_tls_version < S3I(s)->hs.our_max_tls_version) { | 885 | s->s3->hs.negotiated_tls_version < s->s3->hs.our_max_tls_version) { |
886 | /* | 886 | /* |
887 | * RFC 8446 section 4.1.3. We must not downgrade if the server | 887 | * RFC 8446 section 4.1.3. We must not downgrade if the server |
888 | * random value contains the TLS 1.2 or TLS 1.1 magical value. | 888 | * random value contains the TLS 1.2 or TLS 1.1 magical value. |
@@ -890,7 +890,7 @@ ssl3_get_server_hello(SSL *s) | |||
890 | if (!CBS_skip(&server_random, | 890 | if (!CBS_skip(&server_random, |
891 | CBS_len(&server_random) - sizeof(tls13_downgrade_12))) | 891 | CBS_len(&server_random) - sizeof(tls13_downgrade_12))) |
892 | goto err; | 892 | goto err; |
893 | if (S3I(s)->hs.negotiated_tls_version == TLS1_2_VERSION && | 893 | if (s->s3->hs.negotiated_tls_version == TLS1_2_VERSION && |
894 | CBS_mem_equal(&server_random, tls13_downgrade_12, | 894 | CBS_mem_equal(&server_random, tls13_downgrade_12, |
895 | sizeof(tls13_downgrade_12))) { | 895 | sizeof(tls13_downgrade_12))) { |
896 | al = SSL_AD_ILLEGAL_PARAMETER; | 896 | al = SSL_AD_ILLEGAL_PARAMETER; |
@@ -981,7 +981,7 @@ ssl3_get_server_hello(SSL *s) | |||
981 | 981 | ||
982 | /* TLS v1.2 only ciphersuites require v1.2 or later. */ | 982 | /* TLS v1.2 only ciphersuites require v1.2 or later. */ |
983 | if ((cipher->algorithm_ssl & SSL_TLSV1_2) && | 983 | if ((cipher->algorithm_ssl & SSL_TLSV1_2) && |
984 | S3I(s)->hs.negotiated_tls_version < TLS1_2_VERSION) { | 984 | s->s3->hs.negotiated_tls_version < TLS1_2_VERSION) { |
985 | al = SSL_AD_ILLEGAL_PARAMETER; | 985 | al = SSL_AD_ILLEGAL_PARAMETER; |
986 | SSLerror(s, SSL_R_WRONG_CIPHER_RETURNED); | 986 | SSLerror(s, SSL_R_WRONG_CIPHER_RETURNED); |
987 | goto fatal_err; | 987 | goto fatal_err; |
@@ -1006,7 +1006,7 @@ ssl3_get_server_hello(SSL *s) | |||
1006 | SSLerror(s, SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED); | 1006 | SSLerror(s, SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED); |
1007 | goto fatal_err; | 1007 | goto fatal_err; |
1008 | } | 1008 | } |
1009 | S3I(s)->hs.cipher = cipher; | 1009 | s->s3->hs.cipher = cipher; |
1010 | 1010 | ||
1011 | if (!tls1_transcript_hash_init(s)) | 1011 | if (!tls1_transcript_hash_init(s)) |
1012 | goto err; | 1012 | goto err; |
@@ -1015,7 +1015,7 @@ ssl3_get_server_hello(SSL *s) | |||
1015 | * Don't digest cached records if no sigalgs: we may need them for | 1015 | * Don't digest cached records if no sigalgs: we may need them for |
1016 | * client authentication. | 1016 | * client authentication. |
1017 | */ | 1017 | */ |
1018 | alg_k = S3I(s)->hs.cipher->algorithm_mkey; | 1018 | alg_k = s->s3->hs.cipher->algorithm_mkey; |
1019 | if (!(SSL_USE_SIGALGS(s) || (alg_k & SSL_kGOST))) | 1019 | if (!(SSL_USE_SIGALGS(s) || (alg_k & SSL_kGOST))) |
1020 | tls1_transcript_free(s); | 1020 | tls1_transcript_free(s); |
1021 | 1021 | ||
@@ -1044,7 +1044,7 @@ ssl3_get_server_hello(SSL *s) | |||
1044 | * which doesn't support RI so for the immediate future tolerate RI | 1044 | * which doesn't support RI so for the immediate future tolerate RI |
1045 | * absence on initial connect only. | 1045 | * absence on initial connect only. |
1046 | */ | 1046 | */ |
1047 | if (!S3I(s)->renegotiate_seen && | 1047 | if (!s->s3->renegotiate_seen && |
1048 | !(s->internal->options & SSL_OP_LEGACY_SERVER_CONNECT)) { | 1048 | !(s->internal->options & SSL_OP_LEGACY_SERVER_CONNECT)) { |
1049 | al = SSL_AD_HANDSHAKE_FAILURE; | 1049 | al = SSL_AD_HANDSHAKE_FAILURE; |
1050 | SSLerror(s, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED); | 1050 | SSLerror(s, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED); |
@@ -1085,12 +1085,12 @@ ssl3_get_server_certificate(SSL *s) | |||
1085 | 1085 | ||
1086 | ret = -1; | 1086 | ret = -1; |
1087 | 1087 | ||
1088 | if (S3I(s)->hs.tls12.message_type == SSL3_MT_SERVER_KEY_EXCHANGE) { | 1088 | if (s->s3->hs.tls12.message_type == SSL3_MT_SERVER_KEY_EXCHANGE) { |
1089 | S3I(s)->hs.tls12.reuse_message = 1; | 1089 | s->s3->hs.tls12.reuse_message = 1; |
1090 | return (1); | 1090 | return (1); |
1091 | } | 1091 | } |
1092 | 1092 | ||
1093 | if (S3I(s)->hs.tls12.message_type != SSL3_MT_CERTIFICATE) { | 1093 | if (s->s3->hs.tls12.message_type != SSL3_MT_CERTIFICATE) { |
1094 | al = SSL_AD_UNEXPECTED_MESSAGE; | 1094 | al = SSL_AD_UNEXPECTED_MESSAGE; |
1095 | SSLerror(s, SSL_R_BAD_MESSAGE_TYPE); | 1095 | SSLerror(s, SSL_R_BAD_MESSAGE_TYPE); |
1096 | goto fatal_err; | 1096 | goto fatal_err; |
@@ -1208,11 +1208,11 @@ ssl3_get_server_kex_dhe(SSL *s, CBS *cbs) | |||
1208 | int decode_error, invalid_params, invalid_key; | 1208 | int decode_error, invalid_params, invalid_key; |
1209 | int nid = NID_dhKeyAgreement; | 1209 | int nid = NID_dhKeyAgreement; |
1210 | 1210 | ||
1211 | tls_key_share_free(S3I(s)->hs.key_share); | 1211 | tls_key_share_free(s->s3->hs.key_share); |
1212 | if ((S3I(s)->hs.key_share = tls_key_share_new_nid(nid)) == NULL) | 1212 | if ((s->s3->hs.key_share = tls_key_share_new_nid(nid)) == NULL) |
1213 | goto err; | 1213 | goto err; |
1214 | 1214 | ||
1215 | if (!tls_key_share_peer_params(S3I(s)->hs.key_share, cbs, | 1215 | if (!tls_key_share_peer_params(s->s3->hs.key_share, cbs, |
1216 | &decode_error, &invalid_params)) { | 1216 | &decode_error, &invalid_params)) { |
1217 | if (decode_error) { | 1217 | if (decode_error) { |
1218 | SSLerror(s, SSL_R_BAD_PACKET_LENGTH); | 1218 | SSLerror(s, SSL_R_BAD_PACKET_LENGTH); |
@@ -1220,7 +1220,7 @@ ssl3_get_server_kex_dhe(SSL *s, CBS *cbs) | |||
1220 | } | 1220 | } |
1221 | goto err; | 1221 | goto err; |
1222 | } | 1222 | } |
1223 | if (!tls_key_share_peer_public(S3I(s)->hs.key_share, cbs, | 1223 | if (!tls_key_share_peer_public(s->s3->hs.key_share, cbs, |
1224 | &decode_error, &invalid_key)) { | 1224 | &decode_error, &invalid_key)) { |
1225 | if (decode_error) { | 1225 | if (decode_error) { |
1226 | SSLerror(s, SSL_R_BAD_PACKET_LENGTH); | 1226 | SSLerror(s, SSL_R_BAD_PACKET_LENGTH); |
@@ -1279,11 +1279,11 @@ ssl3_get_server_kex_ecdhe(SSL *s, CBS *cbs) | |||
1279 | goto err; | 1279 | goto err; |
1280 | } | 1280 | } |
1281 | 1281 | ||
1282 | tls_key_share_free(S3I(s)->hs.key_share); | 1282 | tls_key_share_free(s->s3->hs.key_share); |
1283 | if ((S3I(s)->hs.key_share = tls_key_share_new(curve_id)) == NULL) | 1283 | if ((s->s3->hs.key_share = tls_key_share_new(curve_id)) == NULL) |
1284 | goto err; | 1284 | goto err; |
1285 | 1285 | ||
1286 | if (!tls_key_share_peer_public(S3I(s)->hs.key_share, &public, | 1286 | if (!tls_key_share_peer_public(s->s3->hs.key_share, &public, |
1287 | &decode_error, NULL)) { | 1287 | &decode_error, NULL)) { |
1288 | if (decode_error) | 1288 | if (decode_error) |
1289 | goto decode_err; | 1289 | goto decode_err; |
@@ -1309,8 +1309,8 @@ ssl3_get_server_key_exchange(SSL *s) | |||
1309 | long alg_k, alg_a; | 1309 | long alg_k, alg_a; |
1310 | int al, ret; | 1310 | int al, ret; |
1311 | 1311 | ||
1312 | alg_k = S3I(s)->hs.cipher->algorithm_mkey; | 1312 | alg_k = s->s3->hs.cipher->algorithm_mkey; |
1313 | alg_a = S3I(s)->hs.cipher->algorithm_auth; | 1313 | alg_a = s->s3->hs.cipher->algorithm_auth; |
1314 | 1314 | ||
1315 | /* | 1315 | /* |
1316 | * Use same message size as in ssl3_get_certificate_request() | 1316 | * Use same message size as in ssl3_get_certificate_request() |
@@ -1328,7 +1328,7 @@ ssl3_get_server_key_exchange(SSL *s) | |||
1328 | 1328 | ||
1329 | CBS_init(&cbs, s->internal->init_msg, s->internal->init_num); | 1329 | CBS_init(&cbs, s->internal->init_msg, s->internal->init_num); |
1330 | 1330 | ||
1331 | if (S3I(s)->hs.tls12.message_type != SSL3_MT_SERVER_KEY_EXCHANGE) { | 1331 | if (s->s3->hs.tls12.message_type != SSL3_MT_SERVER_KEY_EXCHANGE) { |
1332 | /* | 1332 | /* |
1333 | * Do not skip server key exchange if this cipher suite uses | 1333 | * Do not skip server key exchange if this cipher suite uses |
1334 | * ephemeral keys. | 1334 | * ephemeral keys. |
@@ -1339,7 +1339,7 @@ ssl3_get_server_key_exchange(SSL *s) | |||
1339 | goto fatal_err; | 1339 | goto fatal_err; |
1340 | } | 1340 | } |
1341 | 1341 | ||
1342 | S3I(s)->hs.tls12.reuse_message = 1; | 1342 | s->s3->hs.tls12.reuse_message = 1; |
1343 | EVP_MD_CTX_free(md_ctx); | 1343 | EVP_MD_CTX_free(md_ctx); |
1344 | return (1); | 1344 | return (1); |
1345 | } | 1345 | } |
@@ -1398,7 +1398,7 @@ ssl3_get_server_key_exchange(SSL *s) | |||
1398 | al = SSL_AD_DECODE_ERROR; | 1398 | al = SSL_AD_DECODE_ERROR; |
1399 | goto fatal_err; | 1399 | goto fatal_err; |
1400 | } | 1400 | } |
1401 | S3I(s)->hs.peer_sigalg = sigalg; | 1401 | s->s3->hs.peer_sigalg = sigalg; |
1402 | 1402 | ||
1403 | if (!EVP_DigestVerifyInit(md_ctx, &pctx, sigalg->md(), | 1403 | if (!EVP_DigestVerifyInit(md_ctx, &pctx, sigalg->md(), |
1404 | NULL, pkey)) | 1404 | NULL, pkey)) |
@@ -1462,10 +1462,10 @@ ssl3_get_certificate_request(SSL *s) | |||
1462 | 1462 | ||
1463 | ret = 0; | 1463 | ret = 0; |
1464 | 1464 | ||
1465 | S3I(s)->hs.tls12.cert_request = 0; | 1465 | s->s3->hs.tls12.cert_request = 0; |
1466 | 1466 | ||
1467 | if (S3I(s)->hs.tls12.message_type == SSL3_MT_SERVER_DONE) { | 1467 | if (s->s3->hs.tls12.message_type == SSL3_MT_SERVER_DONE) { |
1468 | S3I(s)->hs.tls12.reuse_message = 1; | 1468 | s->s3->hs.tls12.reuse_message = 1; |
1469 | /* | 1469 | /* |
1470 | * If we get here we don't need any cached handshake records | 1470 | * If we get here we don't need any cached handshake records |
1471 | * as we wont be doing client auth. | 1471 | * as we wont be doing client auth. |
@@ -1474,14 +1474,14 @@ ssl3_get_certificate_request(SSL *s) | |||
1474 | return (1); | 1474 | return (1); |
1475 | } | 1475 | } |
1476 | 1476 | ||
1477 | if (S3I(s)->hs.tls12.message_type != SSL3_MT_CERTIFICATE_REQUEST) { | 1477 | if (s->s3->hs.tls12.message_type != SSL3_MT_CERTIFICATE_REQUEST) { |
1478 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE); | 1478 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE); |
1479 | SSLerror(s, SSL_R_WRONG_MESSAGE_TYPE); | 1479 | SSLerror(s, SSL_R_WRONG_MESSAGE_TYPE); |
1480 | goto err; | 1480 | goto err; |
1481 | } | 1481 | } |
1482 | 1482 | ||
1483 | /* TLS does not like anon-DH with client cert */ | 1483 | /* TLS does not like anon-DH with client cert */ |
1484 | if (S3I(s)->hs.cipher->algorithm_auth & SSL_aNULL) { | 1484 | if (s->s3->hs.cipher->algorithm_auth & SSL_aNULL) { |
1485 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE); | 1485 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE); |
1486 | SSLerror(s, SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER); | 1486 | SSLerror(s, SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER); |
1487 | goto err; | 1487 | goto err; |
@@ -1516,8 +1516,8 @@ ssl3_get_certificate_request(SSL *s) | |||
1516 | SSLerror(s, SSL_R_SIGNATURE_ALGORITHMS_ERROR); | 1516 | SSLerror(s, SSL_R_SIGNATURE_ALGORITHMS_ERROR); |
1517 | goto err; | 1517 | goto err; |
1518 | } | 1518 | } |
1519 | if (!CBS_stow(&sigalgs, &S3I(s)->hs.sigalgs, | 1519 | if (!CBS_stow(&sigalgs, &s->s3->hs.sigalgs, |
1520 | &S3I(s)->hs.sigalgs_len)) | 1520 | &s->s3->hs.sigalgs_len)) |
1521 | goto err; | 1521 | goto err; |
1522 | } | 1522 | } |
1523 | 1523 | ||
@@ -1569,9 +1569,9 @@ ssl3_get_certificate_request(SSL *s) | |||
1569 | } | 1569 | } |
1570 | 1570 | ||
1571 | /* we should setup a certificate to return.... */ | 1571 | /* we should setup a certificate to return.... */ |
1572 | S3I(s)->hs.tls12.cert_request = 1; | 1572 | s->s3->hs.tls12.cert_request = 1; |
1573 | sk_X509_NAME_pop_free(S3I(s)->hs.tls12.ca_names, X509_NAME_free); | 1573 | sk_X509_NAME_pop_free(s->s3->hs.tls12.ca_names, X509_NAME_free); |
1574 | S3I(s)->hs.tls12.ca_names = ca_sk; | 1574 | s->s3->hs.tls12.ca_names = ca_sk; |
1575 | ca_sk = NULL; | 1575 | ca_sk = NULL; |
1576 | 1576 | ||
1577 | ret = 1; | 1577 | ret = 1; |
@@ -1602,11 +1602,11 @@ ssl3_get_new_session_ticket(SSL *s) | |||
1602 | SSL3_ST_CR_SESSION_TICKET_B, -1, 16384)) <= 0) | 1602 | SSL3_ST_CR_SESSION_TICKET_B, -1, 16384)) <= 0) |
1603 | return ret; | 1603 | return ret; |
1604 | 1604 | ||
1605 | if (S3I(s)->hs.tls12.message_type == SSL3_MT_FINISHED) { | 1605 | if (s->s3->hs.tls12.message_type == SSL3_MT_FINISHED) { |
1606 | S3I(s)->hs.tls12.reuse_message = 1; | 1606 | s->s3->hs.tls12.reuse_message = 1; |
1607 | return (1); | 1607 | return (1); |
1608 | } | 1608 | } |
1609 | if (S3I(s)->hs.tls12.message_type != SSL3_MT_NEWSESSION_TICKET) { | 1609 | if (s->s3->hs.tls12.message_type != SSL3_MT_NEWSESSION_TICKET) { |
1610 | al = SSL_AD_UNEXPECTED_MESSAGE; | 1610 | al = SSL_AD_UNEXPECTED_MESSAGE; |
1611 | SSLerror(s, SSL_R_BAD_MESSAGE_TYPE); | 1611 | SSLerror(s, SSL_R_BAD_MESSAGE_TYPE); |
1612 | goto fatal_err; | 1612 | goto fatal_err; |
@@ -1673,7 +1673,7 @@ ssl3_get_cert_status(SSL *s) | |||
1673 | SSL3_ST_CR_CERT_STATUS_B, -1, 16384)) <= 0) | 1673 | SSL3_ST_CR_CERT_STATUS_B, -1, 16384)) <= 0) |
1674 | return ret; | 1674 | return ret; |
1675 | 1675 | ||
1676 | if (S3I(s)->hs.tls12.message_type == SSL3_MT_SERVER_KEY_EXCHANGE) { | 1676 | if (s->s3->hs.tls12.message_type == SSL3_MT_SERVER_KEY_EXCHANGE) { |
1677 | /* | 1677 | /* |
1678 | * Tell the callback the server did not send us an OSCP | 1678 | * Tell the callback the server did not send us an OSCP |
1679 | * response, and has decided to head directly to key exchange. | 1679 | * response, and has decided to head directly to key exchange. |
@@ -1696,12 +1696,12 @@ ssl3_get_cert_status(SSL *s) | |||
1696 | goto fatal_err; | 1696 | goto fatal_err; |
1697 | } | 1697 | } |
1698 | } | 1698 | } |
1699 | S3I(s)->hs.tls12.reuse_message = 1; | 1699 | s->s3->hs.tls12.reuse_message = 1; |
1700 | return (1); | 1700 | return (1); |
1701 | } | 1701 | } |
1702 | 1702 | ||
1703 | if (S3I(s)->hs.tls12.message_type != SSL3_MT_CERTIFICATE && | 1703 | if (s->s3->hs.tls12.message_type != SSL3_MT_CERTIFICATE && |
1704 | S3I(s)->hs.tls12.message_type != SSL3_MT_CERTIFICATE_STATUS) { | 1704 | s->s3->hs.tls12.message_type != SSL3_MT_CERTIFICATE_STATUS) { |
1705 | al = SSL_AD_UNEXPECTED_MESSAGE; | 1705 | al = SSL_AD_UNEXPECTED_MESSAGE; |
1706 | SSLerror(s, SSL_R_BAD_MESSAGE_TYPE); | 1706 | SSLerror(s, SSL_R_BAD_MESSAGE_TYPE); |
1707 | goto fatal_err; | 1707 | goto fatal_err; |
@@ -1858,17 +1858,17 @@ ssl3_send_client_kex_dhe(SSL *s, CBB *cbb) | |||
1858 | int ret = 0; | 1858 | int ret = 0; |
1859 | 1859 | ||
1860 | /* Ensure that we have an ephemeral key from the server for DHE. */ | 1860 | /* Ensure that we have an ephemeral key from the server for DHE. */ |
1861 | if (S3I(s)->hs.key_share == NULL) { | 1861 | if (s->s3->hs.key_share == NULL) { |
1862 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); | 1862 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); |
1863 | SSLerror(s, SSL_R_UNABLE_TO_FIND_DH_PARAMETERS); | 1863 | SSLerror(s, SSL_R_UNABLE_TO_FIND_DH_PARAMETERS); |
1864 | goto err; | 1864 | goto err; |
1865 | } | 1865 | } |
1866 | 1866 | ||
1867 | if (!tls_key_share_generate(S3I(s)->hs.key_share)) | 1867 | if (!tls_key_share_generate(s->s3->hs.key_share)) |
1868 | goto err; | 1868 | goto err; |
1869 | if (!tls_key_share_public(S3I(s)->hs.key_share, cbb)) | 1869 | if (!tls_key_share_public(s->s3->hs.key_share, cbb)) |
1870 | goto err; | 1870 | goto err; |
1871 | if (!tls_key_share_derive(S3I(s)->hs.key_share, &key, &key_len)) | 1871 | if (!tls_key_share_derive(s->s3->hs.key_share, &key, &key_len)) |
1872 | goto err; | 1872 | goto err; |
1873 | 1873 | ||
1874 | if (!tls12_derive_master_secret(s, key, key_len)) | 1874 | if (!tls12_derive_master_secret(s, key, key_len)) |
@@ -1891,23 +1891,23 @@ ssl3_send_client_kex_ecdhe(SSL *s, CBB *cbb) | |||
1891 | int ret = 0; | 1891 | int ret = 0; |
1892 | 1892 | ||
1893 | /* Ensure that we have an ephemeral key for ECDHE. */ | 1893 | /* Ensure that we have an ephemeral key for ECDHE. */ |
1894 | if (S3I(s)->hs.key_share == NULL) { | 1894 | if (s->s3->hs.key_share == NULL) { |
1895 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); | 1895 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); |
1896 | SSLerror(s, ERR_R_INTERNAL_ERROR); | 1896 | SSLerror(s, ERR_R_INTERNAL_ERROR); |
1897 | goto err; | 1897 | goto err; |
1898 | } | 1898 | } |
1899 | 1899 | ||
1900 | if (!tls_key_share_generate(S3I(s)->hs.key_share)) | 1900 | if (!tls_key_share_generate(s->s3->hs.key_share)) |
1901 | goto err; | 1901 | goto err; |
1902 | 1902 | ||
1903 | if (!CBB_add_u8_length_prefixed(cbb, &public)) | 1903 | if (!CBB_add_u8_length_prefixed(cbb, &public)) |
1904 | return 0; | 1904 | return 0; |
1905 | if (!tls_key_share_public(S3I(s)->hs.key_share, &public)) | 1905 | if (!tls_key_share_public(s->s3->hs.key_share, &public)) |
1906 | goto err; | 1906 | goto err; |
1907 | if (!CBB_flush(cbb)) | 1907 | if (!CBB_flush(cbb)) |
1908 | goto err; | 1908 | goto err; |
1909 | 1909 | ||
1910 | if (!tls_key_share_derive(S3I(s)->hs.key_share, &key, &key_len)) | 1910 | if (!tls_key_share_derive(s->s3->hs.key_share, &key, &key_len)) |
1911 | goto err; | 1911 | goto err; |
1912 | 1912 | ||
1913 | if (!tls12_derive_master_secret(s, key, key_len)) | 1913 | if (!tls12_derive_master_secret(s, key, key_len)) |
@@ -1960,7 +1960,7 @@ ssl3_send_client_kex_gost(SSL *s, CBB *cbb) | |||
1960 | * If we have client certificate, use its secret as peer key. | 1960 | * If we have client certificate, use its secret as peer key. |
1961 | * XXX - this presumably lacks PFS. | 1961 | * XXX - this presumably lacks PFS. |
1962 | */ | 1962 | */ |
1963 | if (S3I(s)->hs.tls12.cert_request != 0 && | 1963 | if (s->s3->hs.tls12.cert_request != 0 && |
1964 | s->cert->key->privatekey != NULL) { | 1964 | s->cert->key->privatekey != NULL) { |
1965 | if (EVP_PKEY_derive_set_peer(pkey_ctx, | 1965 | if (EVP_PKEY_derive_set_peer(pkey_ctx, |
1966 | s->cert->key->privatekey) <=0) { | 1966 | s->cert->key->privatekey) <=0) { |
@@ -1981,7 +1981,7 @@ ssl3_send_client_kex_gost(SSL *s, CBB *cbb) | |||
1981 | } | 1981 | } |
1982 | 1982 | ||
1983 | /* XXX check handshake hash instead. */ | 1983 | /* XXX check handshake hash instead. */ |
1984 | if (S3I(s)->hs.cipher->algorithm2 & SSL_HANDSHAKE_MAC_GOST94) | 1984 | if (s->s3->hs.cipher->algorithm2 & SSL_HANDSHAKE_MAC_GOST94) |
1985 | nid = NID_id_GostR3411_94; | 1985 | nid = NID_id_GostR3411_94; |
1986 | else | 1986 | else |
1987 | nid = NID_id_tc26_gost3411_2012_256; | 1987 | nid = NID_id_tc26_gost3411_2012_256; |
@@ -2042,8 +2042,8 @@ ssl3_send_client_key_exchange(SSL *s) | |||
2042 | 2042 | ||
2043 | memset(&cbb, 0, sizeof(cbb)); | 2043 | memset(&cbb, 0, sizeof(cbb)); |
2044 | 2044 | ||
2045 | if (S3I(s)->hs.state == SSL3_ST_CW_KEY_EXCH_A) { | 2045 | if (s->s3->hs.state == SSL3_ST_CW_KEY_EXCH_A) { |
2046 | alg_k = S3I(s)->hs.cipher->algorithm_mkey; | 2046 | alg_k = s->s3->hs.cipher->algorithm_mkey; |
2047 | 2047 | ||
2048 | if (!ssl3_handshake_msg_start(s, &cbb, &kex, | 2048 | if (!ssl3_handshake_msg_start(s, &cbb, &kex, |
2049 | SSL3_MT_CLIENT_KEY_EXCHANGE)) | 2049 | SSL3_MT_CLIENT_KEY_EXCHANGE)) |
@@ -2071,7 +2071,7 @@ ssl3_send_client_key_exchange(SSL *s) | |||
2071 | if (!ssl3_handshake_msg_finish(s, &cbb)) | 2071 | if (!ssl3_handshake_msg_finish(s, &cbb)) |
2072 | goto err; | 2072 | goto err; |
2073 | 2073 | ||
2074 | S3I(s)->hs.state = SSL3_ST_CW_KEY_EXCH_B; | 2074 | s->s3->hs.state = SSL3_ST_CW_KEY_EXCH_B; |
2075 | } | 2075 | } |
2076 | 2076 | ||
2077 | /* SSL3_ST_CW_KEY_EXCH_B */ | 2077 | /* SSL3_ST_CW_KEY_EXCH_B */ |
@@ -2302,7 +2302,7 @@ ssl3_send_client_verify(SSL *s) | |||
2302 | 2302 | ||
2303 | memset(&cbb, 0, sizeof(cbb)); | 2303 | memset(&cbb, 0, sizeof(cbb)); |
2304 | 2304 | ||
2305 | if (S3I(s)->hs.state == SSL3_ST_CW_CERT_VRFY_A) { | 2305 | if (s->s3->hs.state == SSL3_ST_CW_CERT_VRFY_A) { |
2306 | if (!ssl3_handshake_msg_start(s, &cbb, &cert_verify, | 2306 | if (!ssl3_handshake_msg_start(s, &cbb, &cert_verify, |
2307 | SSL3_MT_CERTIFICATE_VERIFY)) | 2307 | SSL3_MT_CERTIFICATE_VERIFY)) |
2308 | goto err; | 2308 | goto err; |
@@ -2312,7 +2312,7 @@ ssl3_send_client_verify(SSL *s) | |||
2312 | SSLerror(s, SSL_R_SIGNATURE_ALGORITHMS_ERROR); | 2312 | SSLerror(s, SSL_R_SIGNATURE_ALGORITHMS_ERROR); |
2313 | goto err; | 2313 | goto err; |
2314 | } | 2314 | } |
2315 | S3I(s)->hs.our_sigalg = sigalg; | 2315 | s->s3->hs.our_sigalg = sigalg; |
2316 | 2316 | ||
2317 | /* | 2317 | /* |
2318 | * For TLS v1.2 send signature algorithm and signature using | 2318 | * For TLS v1.2 send signature algorithm and signature using |
@@ -2344,7 +2344,7 @@ ssl3_send_client_verify(SSL *s) | |||
2344 | if (!ssl3_handshake_msg_finish(s, &cbb)) | 2344 | if (!ssl3_handshake_msg_finish(s, &cbb)) |
2345 | goto err; | 2345 | goto err; |
2346 | 2346 | ||
2347 | S3I(s)->hs.state = SSL3_ST_CW_CERT_VRFY_B; | 2347 | s->s3->hs.state = SSL3_ST_CW_CERT_VRFY_B; |
2348 | } | 2348 | } |
2349 | 2349 | ||
2350 | return (ssl3_handshake_write(s)); | 2350 | return (ssl3_handshake_write(s)); |
@@ -2365,16 +2365,16 @@ ssl3_send_client_certificate(SSL *s) | |||
2365 | 2365 | ||
2366 | memset(&cbb, 0, sizeof(cbb)); | 2366 | memset(&cbb, 0, sizeof(cbb)); |
2367 | 2367 | ||
2368 | if (S3I(s)->hs.state == SSL3_ST_CW_CERT_A) { | 2368 | if (s->s3->hs.state == SSL3_ST_CW_CERT_A) { |
2369 | if (s->cert->key->x509 == NULL || | 2369 | if (s->cert->key->x509 == NULL || |
2370 | s->cert->key->privatekey == NULL) | 2370 | s->cert->key->privatekey == NULL) |
2371 | S3I(s)->hs.state = SSL3_ST_CW_CERT_B; | 2371 | s->s3->hs.state = SSL3_ST_CW_CERT_B; |
2372 | else | 2372 | else |
2373 | S3I(s)->hs.state = SSL3_ST_CW_CERT_C; | 2373 | s->s3->hs.state = SSL3_ST_CW_CERT_C; |
2374 | } | 2374 | } |
2375 | 2375 | ||
2376 | /* We need to get a client cert */ | 2376 | /* We need to get a client cert */ |
2377 | if (S3I(s)->hs.state == SSL3_ST_CW_CERT_B) { | 2377 | if (s->s3->hs.state == SSL3_ST_CW_CERT_B) { |
2378 | /* | 2378 | /* |
2379 | * If we get an error, we need to | 2379 | * If we get an error, we need to |
2380 | * ssl->internal->rwstate = SSL_X509_LOOKUP; return(-1); | 2380 | * ssl->internal->rwstate = SSL_X509_LOOKUP; return(-1); |
@@ -2387,7 +2387,7 @@ ssl3_send_client_certificate(SSL *s) | |||
2387 | } | 2387 | } |
2388 | s->internal->rwstate = SSL_NOTHING; | 2388 | s->internal->rwstate = SSL_NOTHING; |
2389 | if ((i == 1) && (pkey != NULL) && (x509 != NULL)) { | 2389 | if ((i == 1) && (pkey != NULL) && (x509 != NULL)) { |
2390 | S3I(s)->hs.state = SSL3_ST_CW_CERT_B; | 2390 | s->s3->hs.state = SSL3_ST_CW_CERT_B; |
2391 | if (!SSL_use_certificate(s, x509) || | 2391 | if (!SSL_use_certificate(s, x509) || |
2392 | !SSL_use_PrivateKey(s, pkey)) | 2392 | !SSL_use_PrivateKey(s, pkey)) |
2393 | i = 0; | 2393 | i = 0; |
@@ -2399,27 +2399,27 @@ ssl3_send_client_certificate(SSL *s) | |||
2399 | X509_free(x509); | 2399 | X509_free(x509); |
2400 | EVP_PKEY_free(pkey); | 2400 | EVP_PKEY_free(pkey); |
2401 | if (i == 0) { | 2401 | if (i == 0) { |
2402 | S3I(s)->hs.tls12.cert_request = 2; | 2402 | s->s3->hs.tls12.cert_request = 2; |
2403 | 2403 | ||
2404 | /* There is no client certificate to verify. */ | 2404 | /* There is no client certificate to verify. */ |
2405 | tls1_transcript_free(s); | 2405 | tls1_transcript_free(s); |
2406 | } | 2406 | } |
2407 | 2407 | ||
2408 | /* Ok, we have a cert */ | 2408 | /* Ok, we have a cert */ |
2409 | S3I(s)->hs.state = SSL3_ST_CW_CERT_C; | 2409 | s->s3->hs.state = SSL3_ST_CW_CERT_C; |
2410 | } | 2410 | } |
2411 | 2411 | ||
2412 | if (S3I(s)->hs.state == SSL3_ST_CW_CERT_C) { | 2412 | if (s->s3->hs.state == SSL3_ST_CW_CERT_C) { |
2413 | if (!ssl3_handshake_msg_start(s, &cbb, &client_cert, | 2413 | if (!ssl3_handshake_msg_start(s, &cbb, &client_cert, |
2414 | SSL3_MT_CERTIFICATE)) | 2414 | SSL3_MT_CERTIFICATE)) |
2415 | goto err; | 2415 | goto err; |
2416 | if (!ssl3_output_cert_chain(s, &client_cert, | 2416 | if (!ssl3_output_cert_chain(s, &client_cert, |
2417 | (S3I(s)->hs.tls12.cert_request == 2) ? NULL : s->cert->key)) | 2417 | (s->s3->hs.tls12.cert_request == 2) ? NULL : s->cert->key)) |
2418 | goto err; | 2418 | goto err; |
2419 | if (!ssl3_handshake_msg_finish(s, &cbb)) | 2419 | if (!ssl3_handshake_msg_finish(s, &cbb)) |
2420 | goto err; | 2420 | goto err; |
2421 | 2421 | ||
2422 | S3I(s)->hs.state = SSL3_ST_CW_CERT_D; | 2422 | s->s3->hs.state = SSL3_ST_CW_CERT_D; |
2423 | } | 2423 | } |
2424 | 2424 | ||
2425 | /* SSL3_ST_CW_CERT_D */ | 2425 | /* SSL3_ST_CW_CERT_D */ |
@@ -2440,15 +2440,15 @@ ssl3_check_cert_and_algorithm(SSL *s) | |||
2440 | int nid = NID_undef; | 2440 | int nid = NID_undef; |
2441 | int i; | 2441 | int i; |
2442 | 2442 | ||
2443 | alg_k = S3I(s)->hs.cipher->algorithm_mkey; | 2443 | alg_k = s->s3->hs.cipher->algorithm_mkey; |
2444 | alg_a = S3I(s)->hs.cipher->algorithm_auth; | 2444 | alg_a = s->s3->hs.cipher->algorithm_auth; |
2445 | 2445 | ||
2446 | /* We don't have a certificate. */ | 2446 | /* We don't have a certificate. */ |
2447 | if (alg_a & SSL_aNULL) | 2447 | if (alg_a & SSL_aNULL) |
2448 | return (1); | 2448 | return (1); |
2449 | 2449 | ||
2450 | if (S3I(s)->hs.key_share != NULL) | 2450 | if (s->s3->hs.key_share != NULL) |
2451 | nid = tls_key_share_nid(S3I(s)->hs.key_share); | 2451 | nid = tls_key_share_nid(s->s3->hs.key_share); |
2452 | 2452 | ||
2453 | /* This is the passed certificate. */ | 2453 | /* This is the passed certificate. */ |
2454 | 2454 | ||
@@ -2505,9 +2505,9 @@ ssl3_check_finished(SSL *s) | |||
2505 | SSL3_ST_CR_CERT_B, -1, s->internal->max_cert_list)) <= 0) | 2505 | SSL3_ST_CR_CERT_B, -1, s->internal->max_cert_list)) <= 0) |
2506 | return ret; | 2506 | return ret; |
2507 | 2507 | ||
2508 | S3I(s)->hs.tls12.reuse_message = 1; | 2508 | s->s3->hs.tls12.reuse_message = 1; |
2509 | if ((S3I(s)->hs.tls12.message_type == SSL3_MT_FINISHED) || | 2509 | if ((s->s3->hs.tls12.message_type == SSL3_MT_FINISHED) || |
2510 | (S3I(s)->hs.tls12.message_type == SSL3_MT_NEWSESSION_TICKET)) | 2510 | (s->s3->hs.tls12.message_type == SSL3_MT_NEWSESSION_TICKET)) |
2511 | return (2); | 2511 | return (2); |
2512 | 2512 | ||
2513 | return (1); | 2513 | return (1); |