diff options
Diffstat (limited to 'src/lib/libssl/s3_clnt.c')
-rw-r--r-- | src/lib/libssl/s3_clnt.c | 19 |
1 files changed, 5 insertions, 14 deletions
diff --git a/src/lib/libssl/s3_clnt.c b/src/lib/libssl/s3_clnt.c index 264cb012d5..d7cd37dec8 100644 --- a/src/lib/libssl/s3_clnt.c +++ b/src/lib/libssl/s3_clnt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_clnt.c,v 1.138 2016/03/27 00:55:38 mmcc Exp $ */ | 1 | /* $OpenBSD: s3_clnt.c,v 1.139 2016/10/19 16:38:40 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 | * |
@@ -1968,13 +1968,12 @@ err: | |||
1968 | } | 1968 | } |
1969 | 1969 | ||
1970 | static int | 1970 | static int |
1971 | ssl3_send_client_kex_ecdh(SSL *s, SESS_CERT *sess_cert, unsigned char *p, | 1971 | ssl3_send_client_kex_ecdhe(SSL *s, SESS_CERT *sess_cert, unsigned char *p, |
1972 | int *outlen) | 1972 | int *outlen) |
1973 | { | 1973 | { |
1974 | EC_KEY *tkey, *clnt_ecdh = NULL; | 1974 | EC_KEY *tkey, *clnt_ecdh = NULL; |
1975 | const EC_GROUP *srvr_group = NULL; | 1975 | const EC_GROUP *srvr_group = NULL; |
1976 | const EC_POINT *srvr_ecpoint = NULL; | 1976 | const EC_POINT *srvr_ecpoint = NULL; |
1977 | EVP_PKEY *srvr_pub_pkey = NULL; | ||
1978 | BN_CTX *bn_ctx = NULL; | 1977 | BN_CTX *bn_ctx = NULL; |
1979 | unsigned char *encodedPoint = NULL; | 1978 | unsigned char *encodedPoint = NULL; |
1980 | unsigned char *key = NULL; | 1979 | unsigned char *key = NULL; |
@@ -1994,14 +1993,6 @@ ssl3_send_client_kex_ecdh(SSL *s, SESS_CERT *sess_cert, unsigned char *p, | |||
1994 | } | 1993 | } |
1995 | tkey = sess_cert->peer_ecdh_tmp; | 1994 | tkey = sess_cert->peer_ecdh_tmp; |
1996 | 1995 | ||
1997 | if (alg_k & (SSL_kECDHr|SSL_kECDHe)) { | ||
1998 | /* Get the Server Public Key from certificate. */ | ||
1999 | srvr_pub_pkey = X509_get_pubkey( | ||
2000 | sess_cert->peer_pkeys[SSL_PKEY_ECC].x509); | ||
2001 | if (srvr_pub_pkey != NULL && srvr_pub_pkey->type == EVP_PKEY_EC) | ||
2002 | tkey = srvr_pub_pkey->pkey.ec; | ||
2003 | } | ||
2004 | |||
2005 | if (tkey == NULL) { | 1996 | if (tkey == NULL) { |
2006 | SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, | 1997 | SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, |
2007 | ERR_R_INTERNAL_ERROR); | 1998 | ERR_R_INTERNAL_ERROR); |
@@ -2093,7 +2084,6 @@ err: | |||
2093 | BN_CTX_free(bn_ctx); | 2084 | BN_CTX_free(bn_ctx); |
2094 | free(encodedPoint); | 2085 | free(encodedPoint); |
2095 | EC_KEY_free(clnt_ecdh); | 2086 | EC_KEY_free(clnt_ecdh); |
2096 | EVP_PKEY_free(srvr_pub_pkey); | ||
2097 | 2087 | ||
2098 | return (ret); | 2088 | return (ret); |
2099 | } | 2089 | } |
@@ -2242,8 +2232,9 @@ ssl3_send_client_key_exchange(SSL *s) | |||
2242 | } else if (alg_k & SSL_kDHE) { | 2232 | } else if (alg_k & SSL_kDHE) { |
2243 | if (ssl3_send_client_kex_dhe(s, sess_cert, p, &n) != 1) | 2233 | if (ssl3_send_client_kex_dhe(s, sess_cert, p, &n) != 1) |
2244 | goto err; | 2234 | goto err; |
2245 | } else if (alg_k & (SSL_kECDHE|SSL_kECDHr|SSL_kECDHe)) { | 2235 | } else if (alg_k & SSL_kECDHE) { |
2246 | if (ssl3_send_client_kex_ecdh(s, sess_cert, p, &n) != 1) | 2236 | if (ssl3_send_client_kex_ecdhe(s, sess_cert, p, |
2237 | &n) != 1) | ||
2247 | goto err; | 2238 | goto err; |
2248 | } else if (alg_k & SSL_kGOST) { | 2239 | } else if (alg_k & SSL_kGOST) { |
2249 | if (ssl3_send_client_kex_gost(s, sess_cert, p, &n) != 1) | 2240 | if (ssl3_send_client_kex_gost(s, sess_cert, p, &n) != 1) |