diff -ru1 curl-7.69.1/include/curl/curl.h curl-7.69.1-oqs/include/curl/curl.h --- curl-7.69.1/include/curl/curl.h 2020-03-09 16:31:01.000000000 +0100 +++ curl-7.69.1-oqs/include/curl/curl.h 2020-04-23 08:36:12.113925652 +0200 @@ -1951,2 +1951,5 @@ + /* The (EC) curve [list] to select. */ + CURLOPT(CURLOPT_CURVES, CURLOPTTYPE_STRINGPOINT, 291), + CURLOPT_LASTENTRY /* the last unused */ diff -ru1 curl-7.69.1/include/curl/typecheck-gcc.h curl-7.69.1-oqs/include/curl/typecheck-gcc.h --- curl-7.69.1/include/curl/typecheck-gcc.h 2020-03-09 16:31:01.000000000 +0100 +++ curl-7.69.1-oqs/include/curl/typecheck-gcc.h 2020-04-23 08:26:04.119881518 +0200 @@ -258,2 +258,3 @@ (option) == CURLOPT_CAINFO || \ + (option) == CURLOPT_CURVES || \ (option) == CURLOPT_CAPATH || \ diff -ru1 curl-7.69.1/lib/doh.c curl-7.69.1-oqs/lib/doh.c --- curl-7.69.1/lib/doh.c 2020-03-09 16:31:01.000000000 +0100 +++ curl-7.69.1-oqs/lib/doh.c 2020-04-23 11:45:32.699437012 +0200 @@ -333,2 +333,6 @@ } + if(data->set.str[STRING_SSL_CURVES]) { + ERROR_CHECK_SETOPT(CURLOPT_CURVES, + data->set.str[STRING_SSL_CURVES]); + } if(data->set.str[STRING_SSL_CAPATH_ORIG]) { diff -ru1 curl-7.69.1/lib/setopt.c curl-7.69.1-oqs/lib/setopt.c --- curl-7.69.1/lib/setopt.c 2020-03-09 16:31:01.000000000 +0100 +++ curl-7.69.1-oqs/lib/setopt.c 2020-04-23 13:33:06.451767244 +0200 @@ -1906,2 +1906,10 @@ break; + case CURLOPT_CURVES: + /* + * Set accepted curves SSL connection setup. + * Specify colon-delimited list of curve algorithm names. + */ + result = Curl_setstropt(&data->set.str[STRING_SSL_CURVES], + va_arg(param, char *)); + break; #ifndef CURL_DISABLE_PROXY diff -ru1 curl-7.69.1/lib/url.c curl-7.69.1-oqs/lib/url.c --- curl-7.69.1/lib/url.c 2020-03-09 16:31:01.000000000 +0100 +++ curl-7.69.1-oqs/lib/url.c 2020-04-23 13:27:02.289943670 +0200 @@ -3556,2 +3556,3 @@ data->set.ssl.primary.CAfile = data->set.str[STRING_SSL_CAFILE_ORIG]; + data->set.ssl.primary.curves = data->set.str[STRING_SSL_CURVES]; data->set.proxy_ssl.primary.CAfile = data->set.str[STRING_SSL_CAFILE_PROXY]; diff -ru1 curl-7.69.1/lib/urldata.h curl-7.69.1-oqs/lib/urldata.h --- curl-7.69.1/lib/urldata.h 2020-03-10 23:54:05.000000000 +0100 +++ curl-7.69.1-oqs/lib/urldata.h 2020-04-23 10:46:24.405234607 +0200 @@ -230,2 +230,3 @@ char *cipher_list; /* list of ciphers to use */ + char *curves; /* list of curves to use */ char *cipher_list13; /* list of TLS 1.3 cipher suites to use */ @@ -1583,2 +1584,3 @@ STRING_DNS_LOCAL_IP6, + STRING_SSL_CURVES, diff -ru1 curl-7.69.1/lib/vtls/openssl.c curl-7.69.1-oqs/lib/vtls/openssl.c --- curl-7.69.1/lib/vtls/openssl.c 2020-03-09 16:31:01.000000000 +0100 +++ curl-7.69.1-oqs/lib/vtls/openssl.c 2020-04-23 13:30:18.529091612 +0200 @@ -2678,2 +2678,14 @@ + { + char *curves = SSL_CONN_CONFIG(curves); + if(curves) { + if(!SSL_CTX_set1_curves_list(BACKEND->ctx, curves)) { + failf(data, "failed setting curves list: '%s'", curves); + return CURLE_SSL_CIPHER; + } + } + } + + + #ifdef HAVE_SSL_CTX_SET_CIPHERSUITES diff -ru1 curl-7.69.1/lib/vtls/vtls.c curl-7.69.1-oqs/lib/vtls/vtls.c --- curl-7.69.1/lib/vtls/vtls.c 2020-03-09 16:31:01.000000000 +0100 +++ curl-7.69.1-oqs/lib/vtls/vtls.c 2020-04-23 11:08:09.247851176 +0200 @@ -119,2 +119,3 @@ CLONE_STRING(CAfile); + CLONE_STRING(curves); CLONE_STRING(clientcert); @@ -133,2 +134,3 @@ Curl_safefree(sslc->CAfile); + Curl_safefree(sslc->curves); Curl_safefree(sslc->clientcert); diff -ru1 curl-7.69.1/src/tool_cfgable.c curl-7.69.1-oqs/src/tool_cfgable.c --- curl-7.69.1/src/tool_cfgable.c 2020-03-09 16:31:01.000000000 +0100 +++ curl-7.69.1-oqs/src/tool_cfgable.c 2020-04-23 09:22:59.335567962 +0200 @@ -114,2 +114,3 @@ Curl_safefree(config->cacert); + Curl_safefree(config->curves); Curl_safefree(config->proxy_cacert); diff -ru1 curl-7.69.1/src/tool_cfgable.h curl-7.69.1-oqs/src/tool_cfgable.h --- curl-7.69.1/src/tool_cfgable.h 2020-03-09 16:31:01.000000000 +0100 +++ curl-7.69.1-oqs/src/tool_cfgable.h 2020-04-23 08:31:31.348904910 +0200 @@ -143,2 +143,3 @@ char *cacert; + char *curves; char *proxy_cacert; diff -ru1 curl-7.69.1/src/tool_getparam.c curl-7.69.1-oqs/src/tool_getparam.c --- curl-7.69.1/src/tool_getparam.c 2020-03-09 16:31:01.000000000 +0100 +++ curl-7.69.1-oqs/src/tool_getparam.c 2020-04-23 13:16:57.139953643 +0200 @@ -272,2 +272,3 @@ {"ED", "etag-compare", ARG_FILENAME}, + {"EE", "curves", ARG_STRING}, {"f", "fail", ARG_BOOL}, @@ -1715,2 +1716,6 @@ break; + + case 'E': + GetStr(&config->curves, nextarg); + break; diff -ru1 curl-7.69.1/src/tool_help.c curl-7.69.1-oqs/src/tool_help.c --- curl-7.69.1/src/tool_help.c 2020-03-09 16:31:01.000000000 +0100 +++ curl-7.69.1-oqs/src/tool_help.c 2020-04-23 13:34:57.981537597 +0200 @@ -63,2 +63,4 @@ "CA certificate to verify peer against"}, + {" --curves ", + "Curves to accept during session setup"}, {" --capath ", diff -ru1 curl-7.69.1/src/tool_operate.c curl-7.69.1-oqs/src/tool_operate.c --- curl-7.69.1/src/tool_operate.c 2020-03-09 16:31:01.000000000 +0100 +++ curl-7.69.1-oqs/src/tool_operate.c 2020-04-23 13:32:23.995092017 +0200 @@ -1469,2 +1469,4 @@ my_setopt_str(curl, CURLOPT_CAINFO, config->cacert); + if(config->curves) + my_setopt_str(curl, CURLOPT_CURVES, config->curves); if(config->proxy_cacert)