diff options
author | jsing <> | 2014-12-06 14:24:26 +0000 |
---|---|---|
committer | jsing <> | 2014-12-06 14:24:26 +0000 |
commit | 7b858dee1df9a704b4fd1755b70c8f53352dcbeb (patch) | |
tree | 16f00a61036316c6d0afc1976c7e1dfaf932cde4 | |
parent | a657ba9d9f7c27a3001f24d121b111838c1dc856 (diff) | |
download | openbsd-7b858dee1df9a704b4fd1755b70c8f53352dcbeb.tar.gz openbsd-7b858dee1df9a704b4fd1755b70c8f53352dcbeb.tar.bz2 openbsd-7b858dee1df9a704b4fd1755b70c8f53352dcbeb.zip |
Remove client handling of RSA in ServerKeyExchange messages, along with
the associated peer_rsa_tmp goop.
This was only needed for export cipher handling and intentional RFC
violations. The export cipher suites have already been removed and
previous cleanup means that we will never send ServerKeyExchange messages
from the server side for RSA.
-rw-r--r-- | src/lib/libssl/d1_clnt.c | 24 | ||||
-rw-r--r-- | src/lib/libssl/s3_clnt.c | 95 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/d1_clnt.c | 24 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_clnt.c | 95 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_cert.c | 3 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_locl.h | 3 | ||||
-rw-r--r-- | src/lib/libssl/ssl_cert.c | 3 | ||||
-rw-r--r-- | src/lib/libssl/ssl_locl.h | 3 |
8 files changed, 52 insertions, 198 deletions
diff --git a/src/lib/libssl/d1_clnt.c b/src/lib/libssl/d1_clnt.c index de5721851e..a73995ccda 100644 --- a/src/lib/libssl/d1_clnt.c +++ b/src/lib/libssl/d1_clnt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_clnt.c,v 1.38 2014/11/27 16:03:03 jsing Exp $ */ | 1 | /* $OpenBSD: d1_clnt.c,v 1.39 2014/12/06 14:24:26 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -946,20 +946,16 @@ dtls1_send_client_key_exchange(SSL *s) | |||
946 | RSA *rsa; | 946 | RSA *rsa; |
947 | unsigned char tmp_buf[SSL_MAX_MASTER_KEY_LENGTH]; | 947 | unsigned char tmp_buf[SSL_MAX_MASTER_KEY_LENGTH]; |
948 | 948 | ||
949 | if (s->session->sess_cert->peer_rsa_tmp != NULL) | 949 | pkey = X509_get_pubkey(s->session->sess_cert->peer_pkeys[SSL_PKEY_RSA_ENC].x509); |
950 | rsa = s->session->sess_cert->peer_rsa_tmp; | 950 | if ((pkey == NULL) || |
951 | else { | 951 | (pkey->type != EVP_PKEY_RSA) || |
952 | pkey = X509_get_pubkey(s->session->sess_cert->peer_pkeys[SSL_PKEY_RSA_ENC].x509); | 952 | (pkey->pkey.rsa == NULL)) { |
953 | if ((pkey == NULL) || | 953 | SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE, |
954 | (pkey->type != EVP_PKEY_RSA) || | 954 | ERR_R_INTERNAL_ERROR); |
955 | (pkey->pkey.rsa == NULL)) { | 955 | goto err; |
956 | SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE, | ||
957 | ERR_R_INTERNAL_ERROR); | ||
958 | goto err; | ||
959 | } | ||
960 | rsa = pkey->pkey.rsa; | ||
961 | EVP_PKEY_free(pkey); | ||
962 | } | 956 | } |
957 | rsa = pkey->pkey.rsa; | ||
958 | EVP_PKEY_free(pkey); | ||
963 | 959 | ||
964 | tmp_buf[0] = s->client_version >> 8; | 960 | tmp_buf[0] = s->client_version >> 8; |
965 | tmp_buf[1] = s->client_version&0xff; | 961 | tmp_buf[1] = s->client_version&0xff; |
diff --git a/src/lib/libssl/s3_clnt.c b/src/lib/libssl/s3_clnt.c index 1b94200f14..b3dbe32745 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.96 2014/11/27 16:13:36 jsing Exp $ */ | 1 | /* $OpenBSD: s3_clnt.c,v 1.97 2014/12/06 14:24:26 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 | * |
@@ -1191,9 +1191,6 @@ ssl3_get_key_exchange(SSL *s) | |||
1191 | 1191 | ||
1192 | param = p = (unsigned char *)s->init_msg; | 1192 | param = p = (unsigned char *)s->init_msg; |
1193 | if (s->session->sess_cert != NULL) { | 1193 | if (s->session->sess_cert != NULL) { |
1194 | RSA_free(s->session->sess_cert->peer_rsa_tmp); | ||
1195 | s->session->sess_cert->peer_rsa_tmp = NULL; | ||
1196 | |||
1197 | DH_free(s->session->sess_cert->peer_dh_tmp); | 1194 | DH_free(s->session->sess_cert->peer_dh_tmp); |
1198 | s->session->sess_cert->peer_dh_tmp = NULL; | 1195 | s->session->sess_cert->peer_dh_tmp = NULL; |
1199 | 1196 | ||
@@ -1210,63 +1207,7 @@ ssl3_get_key_exchange(SSL *s) | |||
1210 | alg_a = s->s3->tmp.new_cipher->algorithm_auth; | 1207 | alg_a = s->s3->tmp.new_cipher->algorithm_auth; |
1211 | EVP_MD_CTX_init(&md_ctx); | 1208 | EVP_MD_CTX_init(&md_ctx); |
1212 | 1209 | ||
1213 | if (alg_k & SSL_kRSA) { | 1210 | if (alg_k & SSL_kDHE) { |
1214 | if ((rsa = RSA_new()) == NULL) { | ||
1215 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, | ||
1216 | ERR_R_MALLOC_FAILURE); | ||
1217 | goto err; | ||
1218 | } | ||
1219 | if (2 > n) | ||
1220 | goto truncated; | ||
1221 | n2s(p, i); | ||
1222 | param_len = i + 2; | ||
1223 | if (param_len > n) { | ||
1224 | al = SSL_AD_DECODE_ERROR; | ||
1225 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, | ||
1226 | SSL_R_BAD_RSA_MODULUS_LENGTH); | ||
1227 | goto f_err; | ||
1228 | } | ||
1229 | if (!(rsa->n = BN_bin2bn(p, i, rsa->n))) { | ||
1230 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, | ||
1231 | ERR_R_BN_LIB); | ||
1232 | goto err; | ||
1233 | } | ||
1234 | p += i; | ||
1235 | |||
1236 | if (param_len + 2 > n) | ||
1237 | goto truncated; | ||
1238 | n2s(p, i); | ||
1239 | param_len += i + 2; | ||
1240 | if (param_len > n) { | ||
1241 | al = SSL_AD_DECODE_ERROR; | ||
1242 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, | ||
1243 | SSL_R_BAD_RSA_E_LENGTH); | ||
1244 | goto f_err; | ||
1245 | } | ||
1246 | if (!(rsa->e = BN_bin2bn(p, i, rsa->e))) { | ||
1247 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, | ||
1248 | ERR_R_BN_LIB); | ||
1249 | goto err; | ||
1250 | } | ||
1251 | p += i; | ||
1252 | n -= param_len; | ||
1253 | |||
1254 | /* | ||
1255 | * This should be because we are using an | ||
1256 | * export cipher | ||
1257 | */ | ||
1258 | if (alg_a & SSL_aRSA) | ||
1259 | pkey = X509_get_pubkey( | ||
1260 | s->session->sess_cert->peer_pkeys[ | ||
1261 | SSL_PKEY_RSA_ENC].x509); | ||
1262 | else { | ||
1263 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, | ||
1264 | ERR_R_INTERNAL_ERROR); | ||
1265 | goto err; | ||
1266 | } | ||
1267 | s->session->sess_cert->peer_rsa_tmp = rsa; | ||
1268 | rsa = NULL; | ||
1269 | } else if (alg_k & SSL_kDHE) { | ||
1270 | if ((dh = DH_new()) == NULL) { | 1211 | if ((dh = DH_new()) == NULL) { |
1271 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, | 1212 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, |
1272 | ERR_R_DH_LIB); | 1213 | ERR_R_DH_LIB); |
@@ -1976,24 +1917,19 @@ ssl3_send_client_key_exchange(SSL *s) | |||
1976 | RSA *rsa; | 1917 | RSA *rsa; |
1977 | unsigned char tmp_buf[SSL_MAX_MASTER_KEY_LENGTH]; | 1918 | unsigned char tmp_buf[SSL_MAX_MASTER_KEY_LENGTH]; |
1978 | 1919 | ||
1979 | if (s->session->sess_cert->peer_rsa_tmp != NULL) | 1920 | pkey = X509_get_pubkey( |
1980 | rsa = s->session->sess_cert->peer_rsa_tmp; | 1921 | s->session->sess_cert->peer_pkeys[ |
1981 | else { | 1922 | SSL_PKEY_RSA_ENC].x509); |
1982 | pkey = X509_get_pubkey( | 1923 | if ((pkey == NULL) || |
1983 | s->session->sess_cert->peer_pkeys[ | 1924 | (pkey->type != EVP_PKEY_RSA) || |
1984 | SSL_PKEY_RSA_ENC].x509); | 1925 | (pkey->pkey.rsa == NULL)) { |
1985 | if ((pkey == NULL) || | 1926 | SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, |
1986 | (pkey->type != EVP_PKEY_RSA) || | 1927 | ERR_R_INTERNAL_ERROR); |
1987 | (pkey->pkey.rsa == NULL)) { | ||
1988 | SSLerr( | ||
1989 | SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, | ||
1990 | ERR_R_INTERNAL_ERROR); | ||
1991 | EVP_PKEY_free(pkey); | ||
1992 | goto err; | ||
1993 | } | ||
1994 | rsa = pkey->pkey.rsa; | ||
1995 | EVP_PKEY_free(pkey); | 1928 | EVP_PKEY_free(pkey); |
1929 | goto err; | ||
1996 | } | 1930 | } |
1931 | rsa = pkey->pkey.rsa; | ||
1932 | EVP_PKEY_free(pkey); | ||
1997 | 1933 | ||
1998 | tmp_buf[0] = s->client_version >> 8; | 1934 | tmp_buf[0] = s->client_version >> 8; |
1999 | tmp_buf[1] = s->client_version & 0xff; | 1935 | tmp_buf[1] = s->client_version & 0xff; |
@@ -2631,7 +2567,6 @@ ssl3_check_cert_and_algorithm(SSL *s) | |||
2631 | long alg_k, alg_a; | 2567 | long alg_k, alg_a; |
2632 | EVP_PKEY *pkey = NULL; | 2568 | EVP_PKEY *pkey = NULL; |
2633 | SESS_CERT *sc; | 2569 | SESS_CERT *sc; |
2634 | RSA *rsa; | ||
2635 | DH *dh; | 2570 | DH *dh; |
2636 | 2571 | ||
2637 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 2572 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; |
@@ -2647,8 +2582,6 @@ ssl3_check_cert_and_algorithm(SSL *s) | |||
2647 | ERR_R_INTERNAL_ERROR); | 2582 | ERR_R_INTERNAL_ERROR); |
2648 | goto err; | 2583 | goto err; |
2649 | } | 2584 | } |
2650 | |||
2651 | rsa = s->session->sess_cert->peer_rsa_tmp; | ||
2652 | dh = s->session->sess_cert->peer_dh_tmp; | 2585 | dh = s->session->sess_cert->peer_dh_tmp; |
2653 | 2586 | ||
2654 | /* This is the passed certificate. */ | 2587 | /* This is the passed certificate. */ |
@@ -2681,7 +2614,7 @@ ssl3_check_cert_and_algorithm(SSL *s) | |||
2681 | goto f_err; | 2614 | goto f_err; |
2682 | } | 2615 | } |
2683 | if ((alg_k & SSL_kRSA) && | 2616 | if ((alg_k & SSL_kRSA) && |
2684 | !(has_bits(i, EVP_PK_RSA|EVP_PKT_ENC) || (rsa != NULL))) { | 2617 | !has_bits(i, EVP_PK_RSA|EVP_PKT_ENC)) { |
2685 | SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM, | 2618 | SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM, |
2686 | SSL_R_MISSING_RSA_ENCRYPTING_CERT); | 2619 | SSL_R_MISSING_RSA_ENCRYPTING_CERT); |
2687 | goto f_err; | 2620 | goto f_err; |
diff --git a/src/lib/libssl/src/ssl/d1_clnt.c b/src/lib/libssl/src/ssl/d1_clnt.c index de5721851e..a73995ccda 100644 --- a/src/lib/libssl/src/ssl/d1_clnt.c +++ b/src/lib/libssl/src/ssl/d1_clnt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_clnt.c,v 1.38 2014/11/27 16:03:03 jsing Exp $ */ | 1 | /* $OpenBSD: d1_clnt.c,v 1.39 2014/12/06 14:24:26 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -946,20 +946,16 @@ dtls1_send_client_key_exchange(SSL *s) | |||
946 | RSA *rsa; | 946 | RSA *rsa; |
947 | unsigned char tmp_buf[SSL_MAX_MASTER_KEY_LENGTH]; | 947 | unsigned char tmp_buf[SSL_MAX_MASTER_KEY_LENGTH]; |
948 | 948 | ||
949 | if (s->session->sess_cert->peer_rsa_tmp != NULL) | 949 | pkey = X509_get_pubkey(s->session->sess_cert->peer_pkeys[SSL_PKEY_RSA_ENC].x509); |
950 | rsa = s->session->sess_cert->peer_rsa_tmp; | 950 | if ((pkey == NULL) || |
951 | else { | 951 | (pkey->type != EVP_PKEY_RSA) || |
952 | pkey = X509_get_pubkey(s->session->sess_cert->peer_pkeys[SSL_PKEY_RSA_ENC].x509); | 952 | (pkey->pkey.rsa == NULL)) { |
953 | if ((pkey == NULL) || | 953 | SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE, |
954 | (pkey->type != EVP_PKEY_RSA) || | 954 | ERR_R_INTERNAL_ERROR); |
955 | (pkey->pkey.rsa == NULL)) { | 955 | goto err; |
956 | SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE, | ||
957 | ERR_R_INTERNAL_ERROR); | ||
958 | goto err; | ||
959 | } | ||
960 | rsa = pkey->pkey.rsa; | ||
961 | EVP_PKEY_free(pkey); | ||
962 | } | 956 | } |
957 | rsa = pkey->pkey.rsa; | ||
958 | EVP_PKEY_free(pkey); | ||
963 | 959 | ||
964 | tmp_buf[0] = s->client_version >> 8; | 960 | tmp_buf[0] = s->client_version >> 8; |
965 | tmp_buf[1] = s->client_version&0xff; | 961 | tmp_buf[1] = s->client_version&0xff; |
diff --git a/src/lib/libssl/src/ssl/s3_clnt.c b/src/lib/libssl/src/ssl/s3_clnt.c index 1b94200f14..b3dbe32745 100644 --- a/src/lib/libssl/src/ssl/s3_clnt.c +++ b/src/lib/libssl/src/ssl/s3_clnt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_clnt.c,v 1.96 2014/11/27 16:13:36 jsing Exp $ */ | 1 | /* $OpenBSD: s3_clnt.c,v 1.97 2014/12/06 14:24:26 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 | * |
@@ -1191,9 +1191,6 @@ ssl3_get_key_exchange(SSL *s) | |||
1191 | 1191 | ||
1192 | param = p = (unsigned char *)s->init_msg; | 1192 | param = p = (unsigned char *)s->init_msg; |
1193 | if (s->session->sess_cert != NULL) { | 1193 | if (s->session->sess_cert != NULL) { |
1194 | RSA_free(s->session->sess_cert->peer_rsa_tmp); | ||
1195 | s->session->sess_cert->peer_rsa_tmp = NULL; | ||
1196 | |||
1197 | DH_free(s->session->sess_cert->peer_dh_tmp); | 1194 | DH_free(s->session->sess_cert->peer_dh_tmp); |
1198 | s->session->sess_cert->peer_dh_tmp = NULL; | 1195 | s->session->sess_cert->peer_dh_tmp = NULL; |
1199 | 1196 | ||
@@ -1210,63 +1207,7 @@ ssl3_get_key_exchange(SSL *s) | |||
1210 | alg_a = s->s3->tmp.new_cipher->algorithm_auth; | 1207 | alg_a = s->s3->tmp.new_cipher->algorithm_auth; |
1211 | EVP_MD_CTX_init(&md_ctx); | 1208 | EVP_MD_CTX_init(&md_ctx); |
1212 | 1209 | ||
1213 | if (alg_k & SSL_kRSA) { | 1210 | if (alg_k & SSL_kDHE) { |
1214 | if ((rsa = RSA_new()) == NULL) { | ||
1215 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, | ||
1216 | ERR_R_MALLOC_FAILURE); | ||
1217 | goto err; | ||
1218 | } | ||
1219 | if (2 > n) | ||
1220 | goto truncated; | ||
1221 | n2s(p, i); | ||
1222 | param_len = i + 2; | ||
1223 | if (param_len > n) { | ||
1224 | al = SSL_AD_DECODE_ERROR; | ||
1225 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, | ||
1226 | SSL_R_BAD_RSA_MODULUS_LENGTH); | ||
1227 | goto f_err; | ||
1228 | } | ||
1229 | if (!(rsa->n = BN_bin2bn(p, i, rsa->n))) { | ||
1230 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, | ||
1231 | ERR_R_BN_LIB); | ||
1232 | goto err; | ||
1233 | } | ||
1234 | p += i; | ||
1235 | |||
1236 | if (param_len + 2 > n) | ||
1237 | goto truncated; | ||
1238 | n2s(p, i); | ||
1239 | param_len += i + 2; | ||
1240 | if (param_len > n) { | ||
1241 | al = SSL_AD_DECODE_ERROR; | ||
1242 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, | ||
1243 | SSL_R_BAD_RSA_E_LENGTH); | ||
1244 | goto f_err; | ||
1245 | } | ||
1246 | if (!(rsa->e = BN_bin2bn(p, i, rsa->e))) { | ||
1247 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, | ||
1248 | ERR_R_BN_LIB); | ||
1249 | goto err; | ||
1250 | } | ||
1251 | p += i; | ||
1252 | n -= param_len; | ||
1253 | |||
1254 | /* | ||
1255 | * This should be because we are using an | ||
1256 | * export cipher | ||
1257 | */ | ||
1258 | if (alg_a & SSL_aRSA) | ||
1259 | pkey = X509_get_pubkey( | ||
1260 | s->session->sess_cert->peer_pkeys[ | ||
1261 | SSL_PKEY_RSA_ENC].x509); | ||
1262 | else { | ||
1263 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, | ||
1264 | ERR_R_INTERNAL_ERROR); | ||
1265 | goto err; | ||
1266 | } | ||
1267 | s->session->sess_cert->peer_rsa_tmp = rsa; | ||
1268 | rsa = NULL; | ||
1269 | } else if (alg_k & SSL_kDHE) { | ||
1270 | if ((dh = DH_new()) == NULL) { | 1211 | if ((dh = DH_new()) == NULL) { |
1271 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, | 1212 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, |
1272 | ERR_R_DH_LIB); | 1213 | ERR_R_DH_LIB); |
@@ -1976,24 +1917,19 @@ ssl3_send_client_key_exchange(SSL *s) | |||
1976 | RSA *rsa; | 1917 | RSA *rsa; |
1977 | unsigned char tmp_buf[SSL_MAX_MASTER_KEY_LENGTH]; | 1918 | unsigned char tmp_buf[SSL_MAX_MASTER_KEY_LENGTH]; |
1978 | 1919 | ||
1979 | if (s->session->sess_cert->peer_rsa_tmp != NULL) | 1920 | pkey = X509_get_pubkey( |
1980 | rsa = s->session->sess_cert->peer_rsa_tmp; | 1921 | s->session->sess_cert->peer_pkeys[ |
1981 | else { | 1922 | SSL_PKEY_RSA_ENC].x509); |
1982 | pkey = X509_get_pubkey( | 1923 | if ((pkey == NULL) || |
1983 | s->session->sess_cert->peer_pkeys[ | 1924 | (pkey->type != EVP_PKEY_RSA) || |
1984 | SSL_PKEY_RSA_ENC].x509); | 1925 | (pkey->pkey.rsa == NULL)) { |
1985 | if ((pkey == NULL) || | 1926 | SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, |
1986 | (pkey->type != EVP_PKEY_RSA) || | 1927 | ERR_R_INTERNAL_ERROR); |
1987 | (pkey->pkey.rsa == NULL)) { | ||
1988 | SSLerr( | ||
1989 | SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, | ||
1990 | ERR_R_INTERNAL_ERROR); | ||
1991 | EVP_PKEY_free(pkey); | ||
1992 | goto err; | ||
1993 | } | ||
1994 | rsa = pkey->pkey.rsa; | ||
1995 | EVP_PKEY_free(pkey); | 1928 | EVP_PKEY_free(pkey); |
1929 | goto err; | ||
1996 | } | 1930 | } |
1931 | rsa = pkey->pkey.rsa; | ||
1932 | EVP_PKEY_free(pkey); | ||
1997 | 1933 | ||
1998 | tmp_buf[0] = s->client_version >> 8; | 1934 | tmp_buf[0] = s->client_version >> 8; |
1999 | tmp_buf[1] = s->client_version & 0xff; | 1935 | tmp_buf[1] = s->client_version & 0xff; |
@@ -2631,7 +2567,6 @@ ssl3_check_cert_and_algorithm(SSL *s) | |||
2631 | long alg_k, alg_a; | 2567 | long alg_k, alg_a; |
2632 | EVP_PKEY *pkey = NULL; | 2568 | EVP_PKEY *pkey = NULL; |
2633 | SESS_CERT *sc; | 2569 | SESS_CERT *sc; |
2634 | RSA *rsa; | ||
2635 | DH *dh; | 2570 | DH *dh; |
2636 | 2571 | ||
2637 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 2572 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; |
@@ -2647,8 +2582,6 @@ ssl3_check_cert_and_algorithm(SSL *s) | |||
2647 | ERR_R_INTERNAL_ERROR); | 2582 | ERR_R_INTERNAL_ERROR); |
2648 | goto err; | 2583 | goto err; |
2649 | } | 2584 | } |
2650 | |||
2651 | rsa = s->session->sess_cert->peer_rsa_tmp; | ||
2652 | dh = s->session->sess_cert->peer_dh_tmp; | 2585 | dh = s->session->sess_cert->peer_dh_tmp; |
2653 | 2586 | ||
2654 | /* This is the passed certificate. */ | 2587 | /* This is the passed certificate. */ |
@@ -2681,7 +2614,7 @@ ssl3_check_cert_and_algorithm(SSL *s) | |||
2681 | goto f_err; | 2614 | goto f_err; |
2682 | } | 2615 | } |
2683 | if ((alg_k & SSL_kRSA) && | 2616 | if ((alg_k & SSL_kRSA) && |
2684 | !(has_bits(i, EVP_PK_RSA|EVP_PKT_ENC) || (rsa != NULL))) { | 2617 | !has_bits(i, EVP_PK_RSA|EVP_PKT_ENC)) { |
2685 | SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM, | 2618 | SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM, |
2686 | SSL_R_MISSING_RSA_ENCRYPTING_CERT); | 2619 | SSL_R_MISSING_RSA_ENCRYPTING_CERT); |
2687 | goto f_err; | 2620 | goto f_err; |
diff --git a/src/lib/libssl/src/ssl/ssl_cert.c b/src/lib/libssl/src/ssl/ssl_cert.c index 8bbfcd85d1..8f830d990a 100644 --- a/src/lib/libssl/src/ssl/ssl_cert.c +++ b/src/lib/libssl/src/ssl/ssl_cert.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_cert.c,v 1.46 2014/11/18 05:33:43 miod Exp $ */ | 1 | /* $OpenBSD: ssl_cert.c,v 1.47 2014/12/06 14:24:26 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 | * |
@@ -406,7 +406,6 @@ ssl_sess_cert_free(SESS_CERT *sc) | |||
406 | X509_free(sc->peer_pkeys[i].x509); | 406 | X509_free(sc->peer_pkeys[i].x509); |
407 | } | 407 | } |
408 | 408 | ||
409 | RSA_free(sc->peer_rsa_tmp); | ||
410 | DH_free(sc->peer_dh_tmp); | 409 | DH_free(sc->peer_dh_tmp); |
411 | EC_KEY_free(sc->peer_ecdh_tmp); | 410 | EC_KEY_free(sc->peer_ecdh_tmp); |
412 | 411 | ||
diff --git a/src/lib/libssl/src/ssl/ssl_locl.h b/src/lib/libssl/src/ssl/ssl_locl.h index c425f67a5a..dcc17963ee 100644 --- a/src/lib/libssl/src/ssl/ssl_locl.h +++ b/src/lib/libssl/src/ssl/ssl_locl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_locl.h,v 1.78 2014/12/06 13:51:06 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.79 2014/12/06 14:24:26 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 | * |
@@ -467,7 +467,6 @@ typedef struct sess_cert_st { | |||
467 | /* Obviously we don't have the private keys of these, | 467 | /* Obviously we don't have the private keys of these, |
468 | * so maybe we shouldn't even use the CERT_PKEY type here. */ | 468 | * so maybe we shouldn't even use the CERT_PKEY type here. */ |
469 | 469 | ||
470 | RSA *peer_rsa_tmp; | ||
471 | DH *peer_dh_tmp; | 470 | DH *peer_dh_tmp; |
472 | EC_KEY *peer_ecdh_tmp; | 471 | EC_KEY *peer_ecdh_tmp; |
473 | 472 | ||
diff --git a/src/lib/libssl/ssl_cert.c b/src/lib/libssl/ssl_cert.c index 8bbfcd85d1..8f830d990a 100644 --- a/src/lib/libssl/ssl_cert.c +++ b/src/lib/libssl/ssl_cert.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_cert.c,v 1.46 2014/11/18 05:33:43 miod Exp $ */ | 1 | /* $OpenBSD: ssl_cert.c,v 1.47 2014/12/06 14:24:26 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 | * |
@@ -406,7 +406,6 @@ ssl_sess_cert_free(SESS_CERT *sc) | |||
406 | X509_free(sc->peer_pkeys[i].x509); | 406 | X509_free(sc->peer_pkeys[i].x509); |
407 | } | 407 | } |
408 | 408 | ||
409 | RSA_free(sc->peer_rsa_tmp); | ||
410 | DH_free(sc->peer_dh_tmp); | 409 | DH_free(sc->peer_dh_tmp); |
411 | EC_KEY_free(sc->peer_ecdh_tmp); | 410 | EC_KEY_free(sc->peer_ecdh_tmp); |
412 | 411 | ||
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index c425f67a5a..dcc17963ee 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.78 2014/12/06 13:51:06 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.79 2014/12/06 14:24:26 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 | * |
@@ -467,7 +467,6 @@ typedef struct sess_cert_st { | |||
467 | /* Obviously we don't have the private keys of these, | 467 | /* Obviously we don't have the private keys of these, |
468 | * so maybe we shouldn't even use the CERT_PKEY type here. */ | 468 | * so maybe we shouldn't even use the CERT_PKEY type here. */ |
469 | 469 | ||
470 | RSA *peer_rsa_tmp; | ||
471 | DH *peer_dh_tmp; | 470 | DH *peer_dh_tmp; |
472 | EC_KEY *peer_ecdh_tmp; | 471 | EC_KEY *peer_ecdh_tmp; |
473 | 472 | ||