summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_clnt.c
diff options
context:
space:
mode:
authorjsing <>2017-03-05 14:24:12 +0000
committerjsing <>2017-03-05 14:24:12 +0000
commitb7e97f3829f43765f12691c1665b5e6017d75d28 (patch)
tree6fbb1cdc98eee28de2283fa4a24cba271159b124 /src/lib/libssl/ssl_clnt.c
parent09f0e9b21348ea5dac5102d84e10045c88358c5c (diff)
downloadopenbsd-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.c41
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:
2619int 2619int
2620ssl3_send_next_proto(SSL *s) 2620ssl3_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/*