summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_lib.c
diff options
context:
space:
mode:
authorjsing <>2017-08-10 17:18:38 +0000
committerjsing <>2017-08-10 17:18:38 +0000
commitf6039d62295a1c6b1188b531731d233d196faf0d (patch)
treeaa09a427af12b5b2e6c7178a34d25bab71b31269 /src/lib/libssl/ssl_lib.c
parent53bebfdbe69d92a9d3e68a860900ff0ebd428792 (diff)
downloadopenbsd-f6039d62295a1c6b1188b531731d233d196faf0d.tar.gz
openbsd-f6039d62295a1c6b1188b531731d233d196faf0d.tar.bz2
openbsd-f6039d62295a1c6b1188b531731d233d196faf0d.zip
Clean up the EC key/curve configuration handling.
Over the years OpenSSL grew multiple ways of being able to specify EC keys (and/or curves) for use with ECDH and ECDHE key exchange. You could specify a static EC key (SSL{_CTX,}_set_tmp_ecdh()), use that as a curve and generate ephemeral keys (SSL_OP_SINGLE_ECDH_USE), provide the EC key via a callback that was provided with insufficient information (SSL{_CTX,}_set_tmp_ecdh_cb()) or enable automatic selection and generation of EC keys via SSL{_CTX,}_set_ecdh_auto(). This complexity leads to problems (like ECDHE not being enabled) and potential weird configuration (like being able to do ECDHE without the ephemeral part...). We no longer support ECDH and ECDHE can be disabled by removing ECDHE ciphers from the cipher list. As such, permanently enable automatic EC curve selection and generation, effectively disabling all of the configuration knobs. The only exception is the SSL{_CTX,}_set_tmp_ecdh() functions, which retain part of their previous behaviour by configuring the curve of the given EC key as the only curve being enabled. Everything else becomes a no-op. ok beck@ doug@
Diffstat (limited to 'src/lib/libssl/ssl_lib.c')
-rw-r--r--src/lib/libssl/ssl_lib.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c
index d933acb32d..bc8b56d3be 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.162 2017/08/09 22:24:25 jsing Exp $ */ 1/* $OpenBSD: ssl_lib.c,v 1.163 2017/08/10 17:18:38 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 *
@@ -2042,7 +2042,7 @@ void
2042ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) 2042ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
2043{ 2043{
2044 int rsa_enc, rsa_sign, dh_tmp, dsa_sign; 2044 int rsa_enc, rsa_sign, dh_tmp, dsa_sign;
2045 int have_ecc_cert, have_ecdh_tmp; 2045 int have_ecc_cert;
2046 unsigned long mask_k, mask_a; 2046 unsigned long mask_k, mask_a;
2047 X509 *x = NULL; 2047 X509 *x = NULL;
2048 CERT_PKEY *cpk; 2048 CERT_PKEY *cpk;
@@ -2053,9 +2053,6 @@ ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
2053 dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL || 2053 dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL ||
2054 c->dh_tmp_auto != 0); 2054 c->dh_tmp_auto != 0);
2055 2055
2056 have_ecdh_tmp = (c->ecdh_tmp != NULL || c->ecdh_tmp_cb != NULL ||
2057 c->ecdh_tmp_auto != 0);
2058
2059 cpk = &(c->pkeys[SSL_PKEY_RSA_ENC]); 2056 cpk = &(c->pkeys[SSL_PKEY_RSA_ENC]);
2060 rsa_enc = (cpk->x509 != NULL && cpk->privatekey != NULL); 2057 rsa_enc = (cpk->x509 != NULL && cpk->privatekey != NULL);
2061 cpk = &(c->pkeys[SSL_PKEY_RSA_SIGN]); 2058 cpk = &(c->pkeys[SSL_PKEY_RSA_SIGN]);
@@ -2104,8 +2101,7 @@ ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
2104 mask_a|=SSL_aECDSA; 2101 mask_a|=SSL_aECDSA;
2105 } 2102 }
2106 2103
2107 if (have_ecdh_tmp) 2104 mask_k |= SSL_kECDHE;
2108 mask_k|=SSL_kECDHE;
2109 2105
2110 c->mask_k = mask_k; 2106 c->mask_k = mask_k;
2111 c->mask_a = mask_a; 2107 c->mask_a = mask_a;