summaryrefslogtreecommitdiff
path: root/src/lib/libssl/t1_lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/t1_lib.c')
-rw-r--r--src/lib/libssl/t1_lib.c45
1 files changed, 44 insertions, 1 deletions
diff --git a/src/lib/libssl/t1_lib.c b/src/lib/libssl/t1_lib.c
index 38f7fcfe7b..20f576e796 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.57 2014/09/26 14:58:42 jsing Exp $ */ 1/* $OpenBSD: t1_lib.c,v 1.58 2014/09/27 11:01:06 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 *
@@ -364,6 +364,49 @@ tls1_get_formatlist(SSL *s, const unsigned char **pformats, size_t *pformatslen)
364} 364}
365 365
366/* 366/*
367 * Return the appropriate curve list. If client_curves is non-zero, return
368 * the client/session curves. Otherwise return the custom curve list if one
369 * exists, or the default curves if a custom list has not been specified.
370 */
371static void
372tls1_get_curvelist(SSL *s, int client_curves, const unsigned char **pcurves,
373 size_t *pcurveslen)
374{
375 if (client_curves != 0) {
376 *pcurves = s->session->tlsext_ellipticcurvelist;
377 *pcurveslen = s->session->tlsext_ellipticcurvelist_length;
378 return;
379 }
380
381 *pcurves = s->tlsext_ellipticcurvelist;
382 *pcurveslen = s->tlsext_ellipticcurvelist_length;
383 if (*pcurves == NULL) {
384 *pcurves = eccurves_default;
385 *pcurveslen = sizeof(eccurves_default);
386 }
387}
388
389/* Check that a curve is one of our preferences. */
390int
391tls1_check_curve(SSL *s, const unsigned char *p, size_t len)
392{
393 const unsigned char *curves;
394 size_t curveslen, i;
395
396 /* Only named curves are supported. */
397 if (len != 3 || p[0] != NAMED_CURVE_TYPE)
398 return (0);
399
400 tls1_get_curvelist(s, 0, &curves, &curveslen);
401
402 for (i = 0; i < curveslen; i += 2, curves += 2) {
403 if (p[1] == curves[0] && p[2] == curves[1])
404 return (1);
405 }
406 return (0);
407}
408
409/*
367 * List of supported signature algorithms and hashes. Should make this 410 * List of supported signature algorithms and hashes. Should make this
368 * customisable at some point, for now include everything we support. 411 * customisable at some point, for now include everything we support.
369 */ 412 */