summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_tlsext.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lib/libssl/ssl_tlsext.c30
1 files changed, 17 insertions, 13 deletions
diff --git a/src/lib/libssl/ssl_tlsext.c b/src/lib/libssl/ssl_tlsext.c
index 340ebeda5c..abc012d3af 100644
--- a/src/lib/libssl/ssl_tlsext.c
+++ b/src/lib/libssl/ssl_tlsext.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_tlsext.c,v 1.14 2017/08/29 19:20:13 doug Exp $ */ 1/* $OpenBSD: ssl_tlsext.c,v 1.15 2017/08/30 16:44:37 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org>
4 * Copyright (c) 2017 Doug Hogan <doug@openbsd.org> 4 * Copyright (c) 2017 Doug Hogan <doug@openbsd.org>
@@ -1300,11 +1300,12 @@ static struct tls_extension tls_extensions[] = {
1300int 1300int
1301tlsext_clienthello_build(SSL *s, CBB *cbb) 1301tlsext_clienthello_build(SSL *s, CBB *cbb)
1302{ 1302{
1303 CBB extensions, extension_data;
1303 struct tls_extension *tlsext; 1304 struct tls_extension *tlsext;
1304 CBB extension_data;
1305 size_t i; 1305 size_t i;
1306 1306
1307 memset(&extension_data, 0, sizeof(extension_data)); 1307 if (!CBB_add_u16_length_prefixed(cbb, &extensions))
1308 return 0;
1308 1309
1309 for (i = 0; i < N_TLS_EXTENSIONS; i++) { 1310 for (i = 0; i < N_TLS_EXTENSIONS; i++) {
1310 tlsext = &tls_extensions[i]; 1311 tlsext = &tls_extensions[i];
@@ -1312,16 +1313,17 @@ tlsext_clienthello_build(SSL *s, CBB *cbb)
1312 if (!tlsext->clienthello_needs(s)) 1313 if (!tlsext->clienthello_needs(s))
1313 continue; 1314 continue;
1314 1315
1315 if (!CBB_add_u16(cbb, tlsext->type)) 1316 if (!CBB_add_u16(&extensions, tlsext->type))
1316 return 0; 1317 return 0;
1317 if (!CBB_add_u16_length_prefixed(cbb, &extension_data)) 1318 if (!CBB_add_u16_length_prefixed(&extensions, &extension_data))
1318 return 0; 1319 return 0;
1319 if (!tls_extensions[i].clienthello_build(s, &extension_data)) 1320 if (!tls_extensions[i].clienthello_build(s, &extension_data))
1320 return 0; 1321 return 0;
1321 if (!CBB_flush(cbb))
1322 return 0;
1323 } 1322 }
1324 1323
1324 if (!CBB_flush(cbb))
1325 return 0;
1326
1325 return 1; 1327 return 1;
1326} 1328}
1327 1329
@@ -1353,11 +1355,12 @@ tlsext_clienthello_parse_one(SSL *s, CBS *cbs, uint16_t type, int *alert)
1353int 1355int
1354tlsext_serverhello_build(SSL *s, CBB *cbb) 1356tlsext_serverhello_build(SSL *s, CBB *cbb)
1355{ 1357{
1358 CBB extensions, extension_data;
1356 struct tls_extension *tlsext; 1359 struct tls_extension *tlsext;
1357 CBB extension_data;
1358 size_t i; 1360 size_t i;
1359 1361
1360 memset(&extension_data, 0, sizeof(extension_data)); 1362 if (!CBB_add_u16_length_prefixed(cbb, &extensions))
1363 return 0;
1361 1364
1362 for (i = 0; i < N_TLS_EXTENSIONS; i++) { 1365 for (i = 0; i < N_TLS_EXTENSIONS; i++) {
1363 tlsext = &tls_extensions[i]; 1366 tlsext = &tls_extensions[i];
@@ -1365,16 +1368,17 @@ tlsext_serverhello_build(SSL *s, CBB *cbb)
1365 if (!tlsext->serverhello_needs(s)) 1368 if (!tlsext->serverhello_needs(s))
1366 continue; 1369 continue;
1367 1370
1368 if (!CBB_add_u16(cbb, tlsext->type)) 1371 if (!CBB_add_u16(&extensions, tlsext->type))
1369 return 0; 1372 return 0;
1370 if (!CBB_add_u16_length_prefixed(cbb, &extension_data)) 1373 if (!CBB_add_u16_length_prefixed(&extensions, &extension_data))
1371 return 0; 1374 return 0;
1372 if (!tlsext->serverhello_build(s, &extension_data)) 1375 if (!tlsext->serverhello_build(s, &extension_data))
1373 return 0; 1376 return 0;
1374 if (!CBB_flush(cbb))
1375 return 0;
1376 } 1377 }
1377 1378
1379 if (!CBB_flush(cbb))
1380 return 0;
1381
1378 return 1; 1382 return 1;
1379} 1383}
1380 1384