diff options
Diffstat (limited to 'src/lib/libssl/ssl_clnt.c')
-rw-r--r-- | src/lib/libssl/ssl_clnt.c | 56 |
1 files changed, 3 insertions, 53 deletions
diff --git a/src/lib/libssl/ssl_clnt.c b/src/lib/libssl/ssl_clnt.c index 865c961db7..ec4a4104fc 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.15 2017/08/12 02:55:22 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_clnt.c,v 1.16 2017/08/12 21:03:08 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 | * |
@@ -407,14 +407,11 @@ ssl3_connect(SSL *s) | |||
407 | case SSL3_ST_CW_CHANGE_A: | 407 | case SSL3_ST_CW_CHANGE_A: |
408 | case SSL3_ST_CW_CHANGE_B: | 408 | case SSL3_ST_CW_CHANGE_B: |
409 | ret = ssl3_send_change_cipher_spec(s, | 409 | ret = ssl3_send_change_cipher_spec(s, |
410 | SSL3_ST_CW_CHANGE_A, SSL3_ST_CW_CHANGE_B); | 410 | SSL3_ST_CW_CHANGE_A, SSL3_ST_CW_CHANGE_B); |
411 | if (ret <= 0) | 411 | if (ret <= 0) |
412 | goto end; | 412 | goto end; |
413 | 413 | ||
414 | if (S3I(s)->next_proto_neg_seen) | 414 | S3I(s)->hs.state = SSL3_ST_CW_FINISHED_A; |
415 | S3I(s)->hs.state = SSL3_ST_CW_NEXT_PROTO_A; | ||
416 | else | ||
417 | S3I(s)->hs.state = SSL3_ST_CW_FINISHED_A; | ||
418 | s->internal->init_num = 0; | 415 | s->internal->init_num = 0; |
419 | 416 | ||
420 | s->session->cipher = S3I(s)->hs.new_cipher; | 417 | s->session->cipher = S3I(s)->hs.new_cipher; |
@@ -431,14 +428,6 @@ ssl3_connect(SSL *s) | |||
431 | 428 | ||
432 | break; | 429 | break; |
433 | 430 | ||
434 | case SSL3_ST_CW_NEXT_PROTO_A: | ||
435 | case SSL3_ST_CW_NEXT_PROTO_B: | ||
436 | ret = ssl3_send_next_proto(s); | ||
437 | if (ret <= 0) | ||
438 | goto end; | ||
439 | S3I(s)->hs.state = SSL3_ST_CW_FINISHED_A; | ||
440 | break; | ||
441 | |||
442 | case SSL3_ST_CW_FINISHED_A: | 431 | case SSL3_ST_CW_FINISHED_A: |
443 | case SSL3_ST_CW_FINISHED_B: | 432 | case SSL3_ST_CW_FINISHED_B: |
444 | ret = ssl3_send_finished(s, SSL3_ST_CW_FINISHED_A, | 433 | ret = ssl3_send_finished(s, SSL3_ST_CW_FINISHED_A, |
@@ -2599,45 +2588,6 @@ err: | |||
2599 | return (0); | 2588 | return (0); |
2600 | } | 2589 | } |
2601 | 2590 | ||
2602 | int | ||
2603 | ssl3_send_next_proto(SSL *s) | ||
2604 | { | ||
2605 | CBB cbb, nextproto, npn, padding; | ||
2606 | size_t pad_len; | ||
2607 | uint8_t *pad; | ||
2608 | |||
2609 | memset(&cbb, 0, sizeof(cbb)); | ||
2610 | |||
2611 | if (S3I(s)->hs.state == SSL3_ST_CW_NEXT_PROTO_A) { | ||
2612 | pad_len = 32 - ((s->internal->next_proto_negotiated_len + 2) % 32); | ||
2613 | |||
2614 | if (!ssl3_handshake_msg_start_cbb(s, &cbb, &nextproto, | ||
2615 | SSL3_MT_NEXT_PROTO)) | ||
2616 | goto err; | ||
2617 | if (!CBB_add_u8_length_prefixed(&nextproto, &npn)) | ||
2618 | goto err; | ||
2619 | if (!CBB_add_bytes(&npn, s->internal->next_proto_negotiated, | ||
2620 | s->internal->next_proto_negotiated_len)) | ||
2621 | goto err; | ||
2622 | if (!CBB_add_u8_length_prefixed(&nextproto, &padding)) | ||
2623 | goto err; | ||
2624 | if (!CBB_add_space(&padding, &pad, pad_len)) | ||
2625 | goto err; | ||
2626 | memset(pad, 0, pad_len); | ||
2627 | if (!ssl3_handshake_msg_finish_cbb(s, &cbb)) | ||
2628 | goto err; | ||
2629 | |||
2630 | S3I(s)->hs.state = SSL3_ST_CW_NEXT_PROTO_B; | ||
2631 | } | ||
2632 | |||
2633 | return (ssl3_handshake_write(s)); | ||
2634 | |||
2635 | err: | ||
2636 | CBB_cleanup(&cbb); | ||
2637 | |||
2638 | return (-1); | ||
2639 | } | ||
2640 | |||
2641 | /* | 2591 | /* |
2642 | * Check to see if handshake is full or resumed. Usually this is just a | 2592 | * Check to see if handshake is full or resumed. Usually this is just a |
2643 | * case of checking to see if a cache hit has occurred. In the case of | 2593 | * case of checking to see if a cache hit has occurred. In the case of |