summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libssl/Symbols.list4
-rw-r--r--src/lib/libssl/s3_lib.c31
-rw-r--r--src/lib/libssl/ssl.h15
-rw-r--r--src/lib/libssl/ssl_lib.c35
-rw-r--r--src/lib/libssl/ssl_locl.h21
-rw-r--r--src/lib/libssl/ssl_sess.c8
-rw-r--r--src/lib/libssl/t1_lib.c109
7 files changed, 197 insertions, 26 deletions
diff --git a/src/lib/libssl/Symbols.list b/src/lib/libssl/Symbols.list
index 1938c21509..042f553959 100644
--- a/src/lib/libssl/Symbols.list
+++ b/src/lib/libssl/Symbols.list
@@ -78,6 +78,8 @@ SSL_CTX_sess_set_get_cb
78SSL_CTX_sess_set_new_cb 78SSL_CTX_sess_set_new_cb
79SSL_CTX_sess_set_remove_cb 79SSL_CTX_sess_set_remove_cb
80SSL_CTX_sessions 80SSL_CTX_sessions
81SSL_CTX_set1_groups
82SSL_CTX_set1_groups_list
81SSL_CTX_set1_param 83SSL_CTX_set1_param
82SSL_CTX_set_alpn_protos 84SSL_CTX_set_alpn_protos
83SSL_CTX_set_alpn_select_cb 85SSL_CTX_set_alpn_select_cb
@@ -212,6 +214,8 @@ SSL_renegotiate_pending
212SSL_rstate_string 214SSL_rstate_string
213SSL_rstate_string_long 215SSL_rstate_string_long
214SSL_select_next_proto 216SSL_select_next_proto
217SSL_set1_groups
218SSL_set1_groups_list
215SSL_set1_param 219SSL_set1_param
216SSL_set_SSL_CTX 220SSL_set_SSL_CTX
217SSL_set_accept_state 221SSL_set_accept_state
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c
index 1b0ddc702f..9d0217e95f 100644
--- a/src/lib/libssl/s3_lib.c
+++ b/src/lib/libssl/s3_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: s3_lib.c,v 1.129 2017/01/24 03:00:54 jsing Exp $ */ 1/* $OpenBSD: s3_lib.c,v 1.130 2017/01/24 09:03:21 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 *
@@ -2154,9 +2154,24 @@ ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
2154 default: 2154 default:
2155 break; 2155 break;
2156 } 2156 }
2157
2157 return (ret); 2158 return (ret);
2158} 2159}
2159 2160
2161int
2162SSL_set1_groups(SSL *s, const int *groups, size_t groups_len)
2163{
2164 return tls1_set_groups(&s->internal->tlsext_supportedgroups,
2165 &s->internal->tlsext_supportedgroups_length, groups, groups_len);
2166}
2167
2168int
2169SSL_set1_groups_list(SSL *s, const char *groups)
2170{
2171 return tls1_set_groups_list(&s->internal->tlsext_supportedgroups,
2172 &s->internal->tlsext_supportedgroups_length, groups);
2173}
2174
2160long 2175long
2161ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) 2176ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void))
2162{ 2177{
@@ -2327,6 +2342,20 @@ ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
2327 return (1); 2342 return (1);
2328} 2343}
2329 2344
2345int
2346SSL_CTX_set1_groups(SSL_CTX *ctx, const int *groups, size_t groups_len)
2347{
2348 return tls1_set_groups(&ctx->internal->tlsext_supportedgroups,
2349 &ctx->internal->tlsext_supportedgroups_length, groups, groups_len);
2350}
2351
2352int
2353SSL_CTX_set1_groups_list(SSL_CTX *ctx, const char *groups)
2354{
2355 return tls1_set_groups_list(&ctx->internal->tlsext_supportedgroups,
2356 &ctx->internal->tlsext_supportedgroups_length, groups);
2357}
2358
2330long 2359long
2331ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) 2360ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
2332{ 2361{
diff --git a/src/lib/libssl/ssl.h b/src/lib/libssl/ssl.h
index 80e7558a2a..cf75130faf 100644
--- a/src/lib/libssl/ssl.h
+++ b/src/lib/libssl/ssl.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl.h,v 1.121 2017/01/24 02:56:17 jsing Exp $ */ 1/* $OpenBSD: ssl.h,v 1.122 2017/01/24 09:03:21 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 *
@@ -1169,6 +1169,19 @@ int PEM_write_SSL_SESSION(FILE *fp, SSL_SESSION *x);
1169#define SSL_set_ecdh_auto(s, onoff) \ 1169#define SSL_set_ecdh_auto(s, onoff) \
1170 SSL_ctrl(s,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL) 1170 SSL_ctrl(s,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL)
1171 1171
1172int SSL_CTX_set1_groups(SSL_CTX *ctx, const int *groups, size_t groups_len);
1173int SSL_CTX_set1_groups_list(SSL_CTX *ctx, const char *groups);
1174
1175int SSL_set1_groups(SSL *ssl, const int *groups, size_t groups_len);
1176int SSL_set1_groups_list(SSL *ssl, const char *groups);
1177
1178#ifndef LIBRESSL_INTERNAL
1179#define SSL_CTX_set1_curves SSL_CTX_set1_groups
1180#define SSL_CTX_set1_curves_list SSL_CTX_set1_groups_list
1181#define SSL_set1_curves SSL_set1_groups
1182#define SSL_set1_curves_list SSL_set1_groups_list
1183#endif
1184
1172#define SSL_CTX_add_extra_chain_cert(ctx,x509) \ 1185#define SSL_CTX_add_extra_chain_cert(ctx,x509) \
1173 SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509) 1186 SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509)
1174#define SSL_CTX_get_extra_chain_certs(ctx,px509) \ 1187#define SSL_CTX_get_extra_chain_certs(ctx,px509) \
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c
index b9bfd7e24d..bc04ea7f9c 100644
--- a/src/lib/libssl/ssl_lib.c
+++ b/src/lib/libssl/ssl_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_lib.c,v 1.144 2017/01/24 01:47:22 jsing Exp $ */ 1/* $OpenBSD: ssl_lib.c,v 1.145 2017/01/24 09:03:21 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 *
@@ -336,6 +336,34 @@ SSL_new(SSL_CTX *ctx)
336 s->internal->tlsext_ocsp_resplen = -1; 336 s->internal->tlsext_ocsp_resplen = -1;
337 CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX); 337 CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX);
338 s->initial_ctx = ctx; 338 s->initial_ctx = ctx;
339
340 if (ctx->internal->tlsext_ecpointformatlist != NULL) {
341 s->internal->tlsext_ecpointformatlist =
342 calloc(ctx->internal->tlsext_ecpointformatlist_length,
343 sizeof(ctx->internal->tlsext_ecpointformatlist[0]));
344 if (s->internal->tlsext_ecpointformatlist == NULL)
345 goto err;
346 memcpy(s->internal->tlsext_ecpointformatlist,
347 ctx->internal->tlsext_ecpointformatlist,
348 ctx->internal->tlsext_ecpointformatlist_length *
349 sizeof(ctx->internal->tlsext_ecpointformatlist[0]));
350 s->internal->tlsext_ecpointformatlist_length =
351 ctx->internal->tlsext_ecpointformatlist_length;
352 }
353 if (ctx->internal->tlsext_supportedgroups != NULL) {
354 s->internal->tlsext_supportedgroups =
355 calloc(ctx->internal->tlsext_supportedgroups_length,
356 sizeof(ctx->internal->tlsext_supportedgroups));
357 if (s->internal->tlsext_supportedgroups == NULL)
358 goto err;
359 memcpy(s->internal->tlsext_supportedgroups,
360 ctx->internal->tlsext_supportedgroups,
361 ctx->internal->tlsext_supportedgroups_length *
362 sizeof(ctx->internal->tlsext_supportedgroups[0]));
363 s->internal->tlsext_supportedgroups_length =
364 ctx->internal->tlsext_supportedgroups_length;
365 }
366
339 s->internal->next_proto_negotiated = NULL; 367 s->internal->next_proto_negotiated = NULL;
340 368
341 if (s->ctx->internal->alpn_client_proto_list != NULL) { 369 if (s->ctx->internal->alpn_client_proto_list != NULL) {
@@ -534,7 +562,7 @@ SSL_free(SSL *s)
534 free(s->tlsext_hostname); 562 free(s->tlsext_hostname);
535 SSL_CTX_free(s->initial_ctx); 563 SSL_CTX_free(s->initial_ctx);
536 free(s->internal->tlsext_ecpointformatlist); 564 free(s->internal->tlsext_ecpointformatlist);
537 free(s->internal->tlsext_ellipticcurvelist); 565 free(s->internal->tlsext_supportedgroups);
538 if (s->internal->tlsext_ocsp_exts) 566 if (s->internal->tlsext_ocsp_exts)
539 sk_X509_EXTENSION_pop_free(s->internal->tlsext_ocsp_exts, 567 sk_X509_EXTENSION_pop_free(s->internal->tlsext_ocsp_exts,
540 X509_EXTENSION_free); 568 X509_EXTENSION_free);
@@ -1998,6 +2026,9 @@ SSL_CTX_free(SSL_CTX *a)
1998 ENGINE_finish(a->internal->client_cert_engine); 2026 ENGINE_finish(a->internal->client_cert_engine);
1999#endif 2027#endif
2000 2028
2029 free(a->internal->tlsext_ecpointformatlist);
2030 free(a->internal->tlsext_supportedgroups);
2031
2001 free(a->internal->alpn_client_proto_list); 2032 free(a->internal->alpn_client_proto_list);
2002 2033
2003 free(a->internal); 2034 free(a->internal);
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h
index 231e0ba333..0cda709da6 100644
--- a/src/lib/libssl/ssl_locl.h
+++ b/src/lib/libssl/ssl_locl.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_locl.h,v 1.163 2017/01/23 22:34:38 beck Exp $ */ 1/* $OpenBSD: ssl_locl.h,v 1.164 2017/01/24 09:03:21 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 *
@@ -425,8 +425,8 @@ typedef struct ssl_session_internal_st {
425 425
426 size_t tlsext_ecpointformatlist_length; 426 size_t tlsext_ecpointformatlist_length;
427 uint8_t *tlsext_ecpointformatlist; /* peer's list */ 427 uint8_t *tlsext_ecpointformatlist; /* peer's list */
428 size_t tlsext_ellipticcurvelist_length; 428 size_t tlsext_supportedgroups_length;
429 uint16_t *tlsext_ellipticcurvelist; /* peer's list */ 429 uint16_t *tlsext_supportedgroups; /* peer's list */
430} SSL_SESSION_INTERNAL; 430} SSL_SESSION_INTERNAL;
431#define SSI(s) (s->session->internal) 431#define SSI(s) (s->session->internal)
432 432
@@ -603,6 +603,11 @@ typedef struct ssl_ctx_internal_st {
603 /* Client list of supported protocols in wire format. */ 603 /* Client list of supported protocols in wire format. */
604 unsigned char *alpn_client_proto_list; 604 unsigned char *alpn_client_proto_list;
605 unsigned int alpn_client_proto_list_len; 605 unsigned int alpn_client_proto_list_len;
606
607 size_t tlsext_ecpointformatlist_length;
608 uint8_t *tlsext_ecpointformatlist; /* our list */
609 size_t tlsext_supportedgroups_length;
610 uint16_t *tlsext_supportedgroups; /* our list */
606} SSL_CTX_INTERNAL; 611} SSL_CTX_INTERNAL;
607 612
608typedef struct ssl_internal_st { 613typedef struct ssl_internal_st {
@@ -745,10 +750,11 @@ typedef struct ssl_internal_st {
745 750
746 /* RFC4507 session ticket expected to be received or sent */ 751 /* RFC4507 session ticket expected to be received or sent */
747 int tlsext_ticket_expected; 752 int tlsext_ticket_expected;
753
748 size_t tlsext_ecpointformatlist_length; 754 size_t tlsext_ecpointformatlist_length;
749 uint8_t *tlsext_ecpointformatlist; /* our list */ 755 uint8_t *tlsext_ecpointformatlist; /* our list */
750 size_t tlsext_ellipticcurvelist_length; 756 size_t tlsext_supportedgroups_length;
751 uint16_t *tlsext_ellipticcurvelist; /* our list */ 757 uint16_t *tlsext_supportedgroups; /* our list */
752 758
753 /* TLS Session Ticket extension override */ 759 /* TLS Session Ticket extension override */
754 TLS_SESSION_TICKET_EXT *tlsext_session_ticket; 760 TLS_SESSION_TICKET_EXT *tlsext_session_ticket;
@@ -1304,6 +1310,11 @@ int ssl_ok(SSL *s);
1304 1310
1305int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s); 1311int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s);
1306 1312
1313int tls1_set_groups(uint16_t **out_group_ids, size_t *out_group_ids_len,
1314 const int *groups, size_t ngroups);
1315int tls1_set_groups_list(uint16_t **out_group_ids, size_t *out_group_ids_len,
1316 const char *groups);
1317
1307int tls1_ec_curve_id2nid(const uint16_t curve_id); 1318int tls1_ec_curve_id2nid(const uint16_t curve_id);
1308uint16_t tls1_ec_nid2curve_id(const int nid); 1319uint16_t tls1_ec_nid2curve_id(const int nid);
1309int tls1_check_curve(SSL *s, const uint16_t curve_id); 1320int tls1_check_curve(SSL *s, const uint16_t curve_id);
diff --git a/src/lib/libssl/ssl_sess.c b/src/lib/libssl/ssl_sess.c
index 307c730e3f..8c802b170e 100644
--- a/src/lib/libssl/ssl_sess.c
+++ b/src/lib/libssl/ssl_sess.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_sess.c,v 1.66 2017/01/24 01:44:00 jsing Exp $ */ 1/* $OpenBSD: ssl_sess.c,v 1.67 2017/01/24 09:03:21 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 *
@@ -219,8 +219,8 @@ SSL_SESSION_new(void)
219 219
220 ss->internal->tlsext_ecpointformatlist_length = 0; 220 ss->internal->tlsext_ecpointformatlist_length = 0;
221 ss->internal->tlsext_ecpointformatlist = NULL; 221 ss->internal->tlsext_ecpointformatlist = NULL;
222 ss->internal->tlsext_ellipticcurvelist_length = 0; 222 ss->internal->tlsext_supportedgroups_length = 0;
223 ss->internal->tlsext_ellipticcurvelist = NULL; 223 ss->internal->tlsext_supportedgroups = NULL;
224 224
225 CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->internal->ex_data); 225 CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->internal->ex_data);
226 226
@@ -709,7 +709,7 @@ SSL_SESSION_free(SSL_SESSION *ss)
709 free(ss->tlsext_hostname); 709 free(ss->tlsext_hostname);
710 free(ss->tlsext_tick); 710 free(ss->tlsext_tick);
711 free(ss->internal->tlsext_ecpointformatlist); 711 free(ss->internal->tlsext_ecpointformatlist);
712 free(ss->internal->tlsext_ellipticcurvelist); 712 free(ss->internal->tlsext_supportedgroups);
713 713
714 explicit_bzero(ss->internal, sizeof(*ss->internal)); 714 explicit_bzero(ss->internal, sizeof(*ss->internal));
715 free(ss->internal); 715 free(ss->internal);
diff --git a/src/lib/libssl/t1_lib.c b/src/lib/libssl/t1_lib.c
index b69e52a85c..be7c5b72a9 100644
--- a/src/lib/libssl/t1_lib.c
+++ b/src/lib/libssl/t1_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: t1_lib.c,v 1.108 2017/01/24 08:41:53 jsing Exp $ */ 1/* $OpenBSD: t1_lib.c,v 1.109 2017/01/24 09:03:21 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 *
@@ -245,13 +245,17 @@ static int nid_list[] = {
245 NID_X25519, /* X25519 (29) */ 245 NID_X25519, /* X25519 (29) */
246}; 246};
247 247
248static const uint8_t ecformats_default[] = { 248static const uint8_t ecformats_list[] = {
249 TLSEXT_ECPOINTFORMAT_uncompressed, 249 TLSEXT_ECPOINTFORMAT_uncompressed,
250 TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime, 250 TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime,
251 TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 251 TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2
252}; 252};
253 253
254static const uint16_t eccurves_default[] = { 254static const uint8_t ecformats_default[] = {
255 TLSEXT_ECPOINTFORMAT_uncompressed,
256};
257
258static const uint16_t eccurves_list[] = {
255 29, /* X25519 (29) */ 259 29, /* X25519 (29) */
256 14, /* sect571r1 (14) */ 260 14, /* sect571r1 (14) */
257 13, /* sect571k1 (13) */ 261 13, /* sect571k1 (13) */
@@ -283,6 +287,12 @@ static const uint16_t eccurves_default[] = {
283 17, /* secp160r2 (17) */ 287 17, /* secp160r2 (17) */
284}; 288};
285 289
290static const uint16_t eccurves_default[] = {
291 29, /* X25519 (29) */
292 23, /* secp256r1 (23) */
293 24, /* secp384r1 (24) */
294};
295
286int 296int
287tls1_ec_curve_id2nid(const uint16_t curve_id) 297tls1_ec_curve_id2nid(const uint16_t curve_id)
288{ 298{
@@ -394,19 +404,93 @@ tls1_get_curvelist(SSL *s, int client_curves, const uint16_t **pcurves,
394 size_t *pcurveslen) 404 size_t *pcurveslen)
395{ 405{
396 if (client_curves != 0) { 406 if (client_curves != 0) {
397 *pcurves = SSI(s)->tlsext_ellipticcurvelist; 407 *pcurves = SSI(s)->tlsext_supportedgroups;
398 *pcurveslen = SSI(s)->tlsext_ellipticcurvelist_length; 408 *pcurveslen = SSI(s)->tlsext_supportedgroups_length;
399 return; 409 return;
400 } 410 }
401 411
402 *pcurves = s->internal->tlsext_ellipticcurvelist; 412 *pcurves = s->internal->tlsext_supportedgroups;
403 *pcurveslen = s->internal->tlsext_ellipticcurvelist_length; 413 *pcurveslen = s->internal->tlsext_supportedgroups_length;
404 if (*pcurves == NULL) { 414 if (*pcurves == NULL) {
405 *pcurves = eccurves_default; 415 *pcurves = eccurves_default;
406 *pcurveslen = sizeof(eccurves_default) / 2; 416 *pcurveslen = sizeof(eccurves_default) / 2;
407 } 417 }
408} 418}
409 419
420int
421tls1_set_groups(uint16_t **out_group_ids, size_t *out_group_ids_len,
422 const int *groups, size_t ngroups)
423{
424 uint16_t *group_ids;
425 size_t i;
426
427 group_ids = calloc(ngroups, sizeof(uint16_t));
428 if (group_ids == NULL)
429 return 0;
430
431 for (i = 0; i < ngroups; i++) {
432 group_ids[i] = tls1_ec_nid2curve_id(groups[i]);
433 if (group_ids[i] == 0) {
434 free(group_ids);
435 return 0;
436 }
437 }
438
439 free(*out_group_ids);
440 *out_group_ids = group_ids;
441 *out_group_ids_len = ngroups;
442
443 return 1;
444}
445
446int
447tls1_set_groups_list(uint16_t **out_group_ids, size_t *out_group_ids_len,
448 const char *groups)
449{
450 uint16_t *new_group_ids, *group_ids = NULL;
451 size_t ngroups = 0;
452 char *gs, *p, *q;
453 int nid;
454
455 if ((gs = strdup(groups)) == NULL)
456 return 0;
457
458 q = gs;
459 while ((p = strsep(&q, ":")) != NULL) {
460 nid = OBJ_sn2nid(p);
461 if (nid == NID_undef)
462 nid = OBJ_ln2nid(p);
463 if (nid == NID_undef)
464 nid = EC_curve_nist2nid(p);
465 if (nid == NID_undef)
466 goto err;
467
468 if ((new_group_ids = reallocarray(group_ids, ngroups + 1,
469 sizeof(uint16_t))) == NULL)
470 goto err;
471 group_ids = new_group_ids;
472
473 group_ids[ngroups] = tls1_ec_nid2curve_id(nid);
474 if (group_ids[ngroups] == 0)
475 goto err;
476
477 ngroups++;
478 }
479
480 free(gs);
481 free(*out_group_ids);
482 *out_group_ids = group_ids;
483 *out_group_ids_len = ngroups;
484
485 return 1;
486
487 err:
488 free(gs);
489 free(group_ids);
490
491 return 0;
492}
493
410/* Check that a curve is one of our preferences. */ 494/* Check that a curve is one of our preferences. */
411int 495int
412tls1_check_curve(SSL *s, const uint16_t curve_id) 496tls1_check_curve(SSL *s, const uint16_t curve_id)
@@ -1378,11 +1462,11 @@ ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
1378 curveslen /= 2; 1462 curveslen /= 2;
1379 1463
1380 if (!s->internal->hit) { 1464 if (!s->internal->hit) {
1381 if (SSI(s)->tlsext_ellipticcurvelist) { 1465 if (SSI(s)->tlsext_supportedgroups) {
1382 *al = TLS1_AD_DECODE_ERROR; 1466 *al = TLS1_AD_DECODE_ERROR;
1383 return 0; 1467 return 0;
1384 } 1468 }
1385 SSI(s)->tlsext_ellipticcurvelist_length = 0; 1469 SSI(s)->tlsext_supportedgroups_length = 0;
1386 if ((curves = reallocarray(NULL, curveslen, 1470 if ((curves = reallocarray(NULL, curveslen,
1387 sizeof(uint16_t))) == NULL) { 1471 sizeof(uint16_t))) == NULL) {
1388 *al = TLS1_AD_INTERNAL_ERROR; 1472 *al = TLS1_AD_INTERNAL_ERROR;
@@ -1390,11 +1474,10 @@ ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
1390 } 1474 }
1391 for (i = 0; i < curveslen; i++) 1475 for (i = 0; i < curveslen; i++)
1392 n2s(sdata, curves[i]); 1476 n2s(sdata, curves[i]);
1393 SSI(s)->tlsext_ellipticcurvelist = curves; 1477 SSI(s)->tlsext_supportedgroups = curves;
1394 SSI(s)->tlsext_ellipticcurvelist_length = curveslen; 1478 SSI(s)->tlsext_supportedgroups_length = curveslen;
1395 } 1479 }
1396 } 1480 } else if (type == TLSEXT_TYPE_session_ticket) {
1397 else if (type == TLSEXT_TYPE_session_ticket) {
1398 if (s->internal->tls_session_ticket_ext_cb && 1481 if (s->internal->tls_session_ticket_ext_cb &&
1399 !s->internal->tls_session_ticket_ext_cb(s, data, size, s->internal->tls_session_ticket_ext_cb_arg)) { 1482 !s->internal->tls_session_ticket_ext_cb(s, data, size, s->internal->tls_session_ticket_ext_cb_arg)) {
1400 *al = TLS1_AD_INTERNAL_ERROR; 1483 *al = TLS1_AD_INTERNAL_ERROR;