diff options
author | jsing <> | 2017-03-05 14:24:12 +0000 |
---|---|---|
committer | jsing <> | 2017-03-05 14:24:12 +0000 |
commit | b7e97f3829f43765f12691c1665b5e6017d75d28 (patch) | |
tree | 6fbb1cdc98eee28de2283fa4a24cba271159b124 /src/lib/libssl/ssl_clnt.c | |
parent | 09f0e9b21348ea5dac5102d84e10045c88358c5c (diff) | |
download | openbsd-b7e97f3829f43765f12691c1665b5e6017d75d28.tar.gz openbsd-b7e97f3829f43765f12691c1665b5e6017d75d28.tar.bz2 openbsd-b7e97f3829f43765f12691c1665b5e6017d75d28.zip |
Convert various handshake message generation functions to CBB.
ok beck@ inoguchi@
Diffstat (limited to 'src/lib/libssl/ssl_clnt.c')
-rw-r--r-- | src/lib/libssl/ssl_clnt.c | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/src/lib/libssl/ssl_clnt.c b/src/lib/libssl/ssl_clnt.c index 65939141a2..f46b66c372 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.8 2017/03/04 16:15:02 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_clnt.c,v 1.9 2017/03/05 14:24:12 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 | * |
@@ -2619,27 +2619,40 @@ err: | |||
2619 | int | 2619 | int |
2620 | ssl3_send_next_proto(SSL *s) | 2620 | ssl3_send_next_proto(SSL *s) |
2621 | { | 2621 | { |
2622 | unsigned int len, padding_len; | 2622 | CBB cbb, nextproto, npn, padding; |
2623 | unsigned char *d, *p; | 2623 | size_t pad_len; |
2624 | uint8_t *pad; | ||
2624 | 2625 | ||
2625 | if (s->internal->state == SSL3_ST_CW_NEXT_PROTO_A) { | 2626 | memset(&cbb, 0, sizeof(cbb)); |
2626 | d = p = ssl3_handshake_msg_start(s, SSL3_MT_NEXT_PROTO); | ||
2627 | 2627 | ||
2628 | len = s->internal->next_proto_negotiated_len; | 2628 | if (s->internal->state == SSL3_ST_CW_NEXT_PROTO_A) { |
2629 | padding_len = 32 - ((len + 2) % 32); | 2629 | pad_len = 32 - ((s->internal->next_proto_negotiated_len + 2) % 32); |
2630 | *(p++) = len; | ||
2631 | memcpy(p, s->internal->next_proto_negotiated, len); | ||
2632 | p += len; | ||
2633 | *(p++) = padding_len; | ||
2634 | memset(p, 0, padding_len); | ||
2635 | p += padding_len; | ||
2636 | 2630 | ||
2637 | ssl3_handshake_msg_finish(s, p - d); | 2631 | if (!ssl3_handshake_msg_start_cbb(s, &cbb, &nextproto, |
2632 | SSL3_MT_NEXT_PROTO)) | ||
2633 | goto err; | ||
2634 | if (!CBB_add_u8_length_prefixed(&nextproto, &npn)) | ||
2635 | goto err; | ||
2636 | if (!CBB_add_bytes(&npn, s->internal->next_proto_negotiated, | ||
2637 | s->internal->next_proto_negotiated_len)) | ||
2638 | goto err; | ||
2639 | if (!CBB_add_u8_length_prefixed(&nextproto, &padding)) | ||
2640 | goto err; | ||
2641 | if (!CBB_add_space(&padding, &pad, pad_len)) | ||
2642 | goto err; | ||
2643 | memset(pad, 0, pad_len); | ||
2644 | if (!ssl3_handshake_msg_finish_cbb(s, &cbb)) | ||
2645 | goto err; | ||
2638 | 2646 | ||
2639 | s->internal->state = SSL3_ST_CW_NEXT_PROTO_B; | 2647 | s->internal->state = SSL3_ST_CW_NEXT_PROTO_B; |
2640 | } | 2648 | } |
2641 | 2649 | ||
2642 | return (ssl3_handshake_write(s)); | 2650 | return (ssl3_handshake_write(s)); |
2651 | |||
2652 | err: | ||
2653 | CBB_cleanup(&cbb); | ||
2654 | |||
2655 | return (-1); | ||
2643 | } | 2656 | } |
2644 | 2657 | ||
2645 | /* | 2658 | /* |