diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libssl/d1_srvr.c | 58 | ||||
| -rw-r--r-- | src/lib/libssl/s3_lib.c | 103 | ||||
| -rw-r--r-- | src/lib/libssl/s3_srvr.c | 94 | ||||
| -rw-r--r-- | src/lib/libssl/src/ssl/d1_srvr.c | 58 | ||||
| -rw-r--r-- | src/lib/libssl/src/ssl/s3_lib.c | 103 | ||||
| -rw-r--r-- | src/lib/libssl/src/ssl/s3_srvr.c | 94 | ||||
| -rw-r--r-- | src/lib/libssl/src/ssl/ssl3.h | 4 | ||||
| -rw-r--r-- | src/lib/libssl/src/ssl/ssl_cert.c | 10 | ||||
| -rw-r--r-- | src/lib/libssl/src/ssl/ssl_lib.c | 7 | ||||
| -rw-r--r-- | src/lib/libssl/src/ssl/ssl_locl.h | 5 | ||||
| -rw-r--r-- | src/lib/libssl/ssl3.h | 4 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_cert.c | 10 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_lib.c | 7 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_locl.h | 5 | 
14 files changed, 88 insertions, 474 deletions
| diff --git a/src/lib/libssl/d1_srvr.c b/src/lib/libssl/d1_srvr.c index a85715753c..d2f642f877 100644 --- a/src/lib/libssl/d1_srvr.c +++ b/src/lib/libssl/d1_srvr.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: d1_srvr.c,v 1.40 2014/10/18 16:13:16 jsing Exp $ */ | 1 | /* $OpenBSD: d1_srvr.c,v 1.41 2014/10/31 14:51:01 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. | 
| @@ -446,27 +446,8 @@ dtls1_accept(SSL *s) | |||
| 446 | case SSL3_ST_SW_KEY_EXCH_B: | 446 | case SSL3_ST_SW_KEY_EXCH_B: | 
| 447 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 447 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 
| 448 | 448 | ||
| 449 | /* clear this, it may get reset by | 449 | /* Only send if using a DH key exchange. */ | 
| 450 | * send_server_key_exchange */ | 450 | if (alg_k & (SSL_kDHE|SSL_kECDHE)) { | 
| 451 | if ((s->options & SSL_OP_EPHEMERAL_RSA) | ||
| 452 | ) | ||
| 453 | /* option SSL_OP_EPHEMERAL_RSA sends temporary RSA key | ||
| 454 | * even when forbidden by protocol specs | ||
| 455 | * (handshake may fail as clients are not required to | ||
| 456 | * be able to handle this) */ | ||
| 457 | s->s3->tmp.use_rsa_tmp = 1; | ||
| 458 | else | ||
| 459 | s->s3->tmp.use_rsa_tmp = 0; | ||
| 460 | |||
| 461 | /* only send if a DH key exchange or | ||
| 462 | * RSA but we have a sign only certificate */ | ||
| 463 | if (s->s3->tmp.use_rsa_tmp | ||
| 464 | || (alg_k & (SSL_kDHE|SSL_kECDHE)) | ||
| 465 | || ((alg_k & SSL_kRSA) | ||
| 466 | && (s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL | ||
| 467 | ) | ||
| 468 | ) | ||
| 469 | ) { | ||
| 470 | dtls1_start_timer(s); | 451 | dtls1_start_timer(s); | 
| 471 | ret = dtls1_send_server_key_exchange(s); | 452 | ret = dtls1_send_server_key_exchange(s); | 
| 472 | if (ret <= 0) | 453 | if (ret <= 0) | 
| @@ -994,7 +975,6 @@ dtls1_send_server_key_exchange(SSL *s) | |||
| 994 | { | 975 | { | 
| 995 | unsigned char *q; | 976 | unsigned char *q; | 
| 996 | int j, num; | 977 | int j, num; | 
| 997 | RSA *rsa; | ||
| 998 | unsigned char md_buf[MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH]; | 978 | unsigned char md_buf[MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH]; | 
| 999 | unsigned int u; | 979 | unsigned int u; | 
| 1000 | DH *dh = NULL, *dhp; | 980 | DH *dh = NULL, *dhp; | 
| @@ -1024,28 +1004,7 @@ dtls1_send_server_key_exchange(SSL *s) | |||
| 1024 | 1004 | ||
| 1025 | r[0] = r[1] = r[2] = r[3] = NULL; | 1005 | r[0] = r[1] = r[2] = r[3] = NULL; | 
| 1026 | n = 0; | 1006 | n = 0; | 
| 1027 | if (type & SSL_kRSA) { | 1007 | |
| 1028 | rsa = cert->rsa_tmp; | ||
| 1029 | if ((rsa == NULL) && (s->cert->rsa_tmp_cb != NULL)) { | ||
| 1030 | rsa = s->cert->rsa_tmp_cb(s, 0, | ||
| 1031 | SSL_C_PKEYLENGTH(s->s3->tmp.new_cipher)); | ||
| 1032 | if (rsa == NULL) { | ||
| 1033 | al = SSL_AD_HANDSHAKE_FAILURE; | ||
| 1034 | SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE, SSL_R_ERROR_GENERATING_TMP_RSA_KEY); | ||
| 1035 | goto f_err; | ||
| 1036 | } | ||
| 1037 | RSA_up_ref(rsa); | ||
| 1038 | cert->rsa_tmp = rsa; | ||
| 1039 | } | ||
| 1040 | if (rsa == NULL) { | ||
| 1041 | al = SSL_AD_HANDSHAKE_FAILURE; | ||
| 1042 | SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE, SSL_R_MISSING_TMP_RSA_KEY); | ||
| 1043 | goto f_err; | ||
| 1044 | } | ||
| 1045 | r[0] = rsa->n; | ||
| 1046 | r[1] = rsa->e; | ||
| 1047 | s->s3->tmp.use_rsa_tmp = 1; | ||
| 1048 | } else | ||
| 1049 | if (type & SSL_kDHE) { | 1008 | if (type & SSL_kDHE) { | 
| 1050 | dhp = cert->dh_tmp; | 1009 | dhp = cert->dh_tmp; | 
| 1051 | if ((dhp == NULL) && (s->cert->dh_tmp_cb != NULL)) | 1010 | if ((dhp == NULL) && (s->cert->dh_tmp_cb != NULL)) | 
| @@ -1087,8 +1046,7 @@ dtls1_send_server_key_exchange(SSL *s) | |||
| 1087 | r[0] = dh->p; | 1046 | r[0] = dh->p; | 
| 1088 | r[1] = dh->g; | 1047 | r[1] = dh->g; | 
| 1089 | r[2] = dh->pub_key; | 1048 | r[2] = dh->pub_key; | 
| 1090 | } else | 1049 | } else if (type & SSL_kECDHE) { | 
| 1091 | if (type & SSL_kECDHE) { | ||
| 1092 | const EC_GROUP *group; | 1050 | const EC_GROUP *group; | 
| 1093 | 1051 | ||
| 1094 | ecdhp = cert->ecdh_tmp; | 1052 | ecdhp = cert->ecdh_tmp; | 
| @@ -1185,10 +1143,10 @@ dtls1_send_server_key_exchange(SSL *s) | |||
| 1185 | r[1] = NULL; | 1143 | r[1] = NULL; | 
| 1186 | r[2] = NULL; | 1144 | r[2] = NULL; | 
| 1187 | r[3] = NULL; | 1145 | r[3] = NULL; | 
| 1188 | } else | 1146 | } else { | 
| 1189 | { | ||
| 1190 | al = SSL_AD_HANDSHAKE_FAILURE; | 1147 | al = SSL_AD_HANDSHAKE_FAILURE; | 
| 1191 | SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE, SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE); | 1148 | SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE, | 
| 1149 | SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE); | ||
| 1192 | goto f_err; | 1150 | goto f_err; | 
| 1193 | } | 1151 | } | 
| 1194 | for (i = 0; r[i] != NULL; i++) { | 1152 | for (i = 0; r[i] != NULL; i++) { | 
| diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index 42f8074f8c..08c5111129 100644 --- a/src/lib/libssl/s3_lib.c +++ b/src/lib/libssl/s3_lib.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: s3_lib.c,v 1.82 2014/10/03 13:58:17 jsing Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.83 2014/10/31 14:51:01 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 | * | 
| @@ -1934,8 +1934,7 @@ ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
| 1934 | { | 1934 | { | 
| 1935 | int ret = 0; | 1935 | int ret = 0; | 
| 1936 | 1936 | ||
| 1937 | if (cmd == SSL_CTRL_SET_TMP_RSA || cmd == SSL_CTRL_SET_TMP_RSA_CB || | 1937 | if (cmd == SSL_CTRL_SET_TMP_DH || cmd == SSL_CTRL_SET_TMP_DH_CB) { | 
| 1938 | cmd == SSL_CTRL_SET_TMP_DH || cmd == SSL_CTRL_SET_TMP_DH_CB) { | ||
| 1939 | if (!ssl_cert_inst(&s->cert)) { | 1938 | if (!ssl_cert_inst(&s->cert)) { | 
| 1940 | SSLerr(SSL_F_SSL3_CTRL, | 1939 | SSLerr(SSL_F_SSL3_CTRL, | 
| 1941 | ERR_R_MALLOC_FAILURE); | 1940 | ERR_R_MALLOC_FAILURE); | 
| @@ -1963,36 +1962,11 @@ ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
| 1963 | ret = (int)(s->s3->flags); | 1962 | ret = (int)(s->s3->flags); | 
| 1964 | break; | 1963 | break; | 
| 1965 | case SSL_CTRL_NEED_TMP_RSA: | 1964 | case SSL_CTRL_NEED_TMP_RSA: | 
| 1966 | if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) && | 1965 | ret = 0; | 
| 1967 | ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || | ||
| 1968 | (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) | ||
| 1969 | > (512 / 8)))) | ||
| 1970 | ret = 1; | ||
| 1971 | break; | 1966 | break; | 
| 1972 | case SSL_CTRL_SET_TMP_RSA: | 1967 | case SSL_CTRL_SET_TMP_RSA: | 
| 1973 | { | ||
| 1974 | RSA *rsa = (RSA *)parg; | ||
| 1975 | if (rsa == NULL) { | ||
| 1976 | SSLerr(SSL_F_SSL3_CTRL, | ||
| 1977 | ERR_R_PASSED_NULL_PARAMETER); | ||
| 1978 | return (ret); | ||
| 1979 | } | ||
| 1980 | if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) { | ||
| 1981 | SSLerr(SSL_F_SSL3_CTRL, | ||
| 1982 | ERR_R_RSA_LIB); | ||
| 1983 | return (ret); | ||
| 1984 | } | ||
| 1985 | RSA_free(s->cert->rsa_tmp); | ||
| 1986 | s->cert->rsa_tmp = rsa; | ||
| 1987 | ret = 1; | ||
| 1988 | } | ||
| 1989 | break; | ||
| 1990 | case SSL_CTRL_SET_TMP_RSA_CB: | 1968 | case SSL_CTRL_SET_TMP_RSA_CB: | 
| 1991 | { | 1969 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 
| 1992 | SSLerr(SSL_F_SSL3_CTRL, | ||
| 1993 | ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | ||
| 1994 | return (ret); | ||
| 1995 | } | ||
| 1996 | break; | 1970 | break; | 
| 1997 | case SSL_CTRL_SET_TMP_DH: | 1971 | case SSL_CTRL_SET_TMP_DH: | 
| 1998 | { | 1972 | { | 
| @@ -2144,7 +2118,7 @@ ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) | |||
| 2144 | { | 2118 | { | 
| 2145 | int ret = 0; | 2119 | int ret = 0; | 
| 2146 | 2120 | ||
| 2147 | if (cmd == SSL_CTRL_SET_TMP_RSA_CB || cmd == SSL_CTRL_SET_TMP_DH_CB) { | 2121 | if (cmd == SSL_CTRL_SET_TMP_DH_CB) { | 
| 2148 | if (!ssl_cert_inst(&s->cert)) { | 2122 | if (!ssl_cert_inst(&s->cert)) { | 
| 2149 | SSLerr(SSL_F_SSL3_CALLBACK_CTRL, | 2123 | SSLerr(SSL_F_SSL3_CALLBACK_CTRL, | 
| 2150 | ERR_R_MALLOC_FAILURE); | 2124 | ERR_R_MALLOC_FAILURE); | 
| @@ -2154,20 +2128,13 @@ ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) | |||
| 2154 | 2128 | ||
| 2155 | switch (cmd) { | 2129 | switch (cmd) { | 
| 2156 | case SSL_CTRL_SET_TMP_RSA_CB: | 2130 | case SSL_CTRL_SET_TMP_RSA_CB: | 
| 2157 | { | 2131 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 
| 2158 | s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; | ||
| 2159 | } | ||
| 2160 | break; | 2132 | break; | 
| 2161 | case SSL_CTRL_SET_TMP_DH_CB: | 2133 | case SSL_CTRL_SET_TMP_DH_CB: | 
| 2162 | { | 2134 | s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | 
| 2163 | s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | ||
| 2164 | } | ||
| 2165 | break; | 2135 | break; | 
| 2166 | case SSL_CTRL_SET_TMP_ECDH_CB: | 2136 | case SSL_CTRL_SET_TMP_ECDH_CB: | 
| 2167 | { | 2137 | s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; | 
| 2168 | s->cert->ecdh_tmp_cb = | ||
| 2169 | (EC_KEY *(*)(SSL *, int, int))fp; | ||
| 2170 | } | ||
| 2171 | break; | 2138 | break; | 
| 2172 | case SSL_CTRL_SET_TLSEXT_DEBUG_CB: | 2139 | case SSL_CTRL_SET_TLSEXT_DEBUG_CB: | 
| 2173 | s->tlsext_debug_cb = (void (*)(SSL *, int , int, | 2140 | s->tlsext_debug_cb = (void (*)(SSL *, int , int, | 
| @@ -2188,45 +2155,11 @@ ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
| 2188 | 2155 | ||
| 2189 | switch (cmd) { | 2156 | switch (cmd) { | 
| 2190 | case SSL_CTRL_NEED_TMP_RSA: | 2157 | case SSL_CTRL_NEED_TMP_RSA: | 
| 2191 | if ((cert->rsa_tmp == NULL) && | 2158 | return (0); | 
| 2192 | ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || | ||
| 2193 | (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > | ||
| 2194 | (512 / 8)))) | ||
| 2195 | return (1); | ||
| 2196 | else | ||
| 2197 | return (0); | ||
| 2198 | /* break; */ | ||
| 2199 | case SSL_CTRL_SET_TMP_RSA: | 2159 | case SSL_CTRL_SET_TMP_RSA: | 
| 2200 | { | ||
| 2201 | RSA *rsa; | ||
| 2202 | int i; | ||
| 2203 | |||
| 2204 | rsa = (RSA *)parg; | ||
| 2205 | i = 1; | ||
| 2206 | if (rsa == NULL) | ||
| 2207 | i = 0; | ||
| 2208 | else { | ||
| 2209 | if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) | ||
| 2210 | i = 0; | ||
| 2211 | } | ||
| 2212 | if (!i) { | ||
| 2213 | SSLerr(SSL_F_SSL3_CTX_CTRL, | ||
| 2214 | ERR_R_RSA_LIB); | ||
| 2215 | return (0); | ||
| 2216 | } else { | ||
| 2217 | RSA_free(cert->rsa_tmp); | ||
| 2218 | cert->rsa_tmp = rsa; | ||
| 2219 | return (1); | ||
| 2220 | } | ||
| 2221 | } | ||
| 2222 | /* break; */ | ||
| 2223 | case SSL_CTRL_SET_TMP_RSA_CB: | 2160 | case SSL_CTRL_SET_TMP_RSA_CB: | 
| 2224 | { | 2161 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 
| 2225 | SSLerr(SSL_F_SSL3_CTX_CTRL, | 2162 | return (0); | 
| 2226 | ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | ||
| 2227 | return (0); | ||
| 2228 | } | ||
| 2229 | break; | ||
| 2230 | case SSL_CTRL_SET_TMP_DH: | 2163 | case SSL_CTRL_SET_TMP_DH: | 
| 2231 | { | 2164 | { | 
| 2232 | DH *new = NULL, *dh; | 2165 | DH *new = NULL, *dh; | 
| @@ -2366,19 +2299,13 @@ ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) | |||
| 2366 | 2299 | ||
| 2367 | switch (cmd) { | 2300 | switch (cmd) { | 
| 2368 | case SSL_CTRL_SET_TMP_RSA_CB: | 2301 | case SSL_CTRL_SET_TMP_RSA_CB: | 
| 2369 | { | 2302 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 
| 2370 | cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; | 2303 | return (0); | 
| 2371 | } | ||
| 2372 | break; | ||
| 2373 | case SSL_CTRL_SET_TMP_DH_CB: | 2304 | case SSL_CTRL_SET_TMP_DH_CB: | 
| 2374 | { | 2305 | cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | 
| 2375 | cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | ||
| 2376 | } | ||
| 2377 | break; | 2306 | break; | 
| 2378 | case SSL_CTRL_SET_TMP_ECDH_CB: | 2307 | case SSL_CTRL_SET_TMP_ECDH_CB: | 
| 2379 | { | 2308 | cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; | 
| 2380 | cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; | ||
| 2381 | } | ||
| 2382 | break; | 2309 | break; | 
| 2383 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB: | 2310 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB: | 
| 2384 | ctx->tlsext_servername_callback = | 2311 | ctx->tlsext_servername_callback = | 
| diff --git a/src/lib/libssl/s3_srvr.c b/src/lib/libssl/s3_srvr.c index 719b4c56c1..1b97895f76 100644 --- a/src/lib/libssl/s3_srvr.c +++ b/src/lib/libssl/s3_srvr.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: s3_srvr.c,v 1.87 2014/10/18 16:13:16 jsing Exp $ */ | 1 | /* $OpenBSD: s3_srvr.c,v 1.88 2014/10/31 14:51:01 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 | * | 
| @@ -392,37 +392,14 @@ ssl3_accept(SSL *s) | |||
| 392 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 392 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 
| 393 | 393 | ||
| 394 | /* | 394 | /* | 
| 395 | * Clear this, it may get reset by | 395 | * Only send if using a DH key exchange. | 
| 396 | * send_server_key_exchange. | ||
| 397 | */ | ||
| 398 | if ((s->options & SSL_OP_EPHEMERAL_RSA) | ||
| 399 | ) | ||
| 400 | /* | ||
| 401 | * option SSL_OP_EPHEMERAL_RSA sends temporary | ||
| 402 | * RSA key even when forbidden by protocol | ||
| 403 | * specs (handshake may fail as clients are | ||
| 404 | * not required to be able to handle this) | ||
| 405 | */ | ||
| 406 | s->s3->tmp.use_rsa_tmp = 1; | ||
| 407 | else | ||
| 408 | s->s3->tmp.use_rsa_tmp = 0; | ||
| 409 | |||
| 410 | |||
| 411 | /* | ||
| 412 | * Only send if a DH key exchange, fortezza or | ||
| 413 | * RSA but we have a sign only certificate. | ||
| 414 | * | 396 | * | 
| 415 | * For ECC ciphersuites, we send a serverKeyExchange | 397 | * For ECC ciphersuites, we send a ServerKeyExchange | 
| 416 | * message only if the cipher suite is either | 398 | * message only if the cipher suite is ECDHE. In other | 
| 417 | * ECDH-anon or ECDHE. In other cases, the | 399 | * cases, the server certificate contains the server's | 
| 418 | * server certificate contains the server's | ||
| 419 | * public key for key exchange. | 400 | * public key for key exchange. | 
| 420 | */ | 401 | */ | 
| 421 | if (s->s3->tmp.use_rsa_tmp || | 402 | if (alg_k & (SSL_kDHE|SSL_kECDHE)) { | 
| 422 | (alg_k & (SSL_kDHE|SSL_kECDHE)) || | ||
| 423 | ((alg_k & SSL_kRSA) && | ||
| 424 | (s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == | ||
| 425 | NULL))) { | ||
| 426 | ret = ssl3_send_server_key_exchange(s); | 403 | ret = ssl3_send_server_key_exchange(s); | 
| 427 | if (ret <= 0) | 404 | if (ret <= 0) | 
| 428 | goto end; | 405 | goto end; | 
| @@ -1352,7 +1329,6 @@ ssl3_send_server_key_exchange(SSL *s) | |||
| 1352 | { | 1329 | { | 
| 1353 | unsigned char *q; | 1330 | unsigned char *q; | 
| 1354 | int j, num; | 1331 | int j, num; | 
| 1355 | RSA *rsa; | ||
| 1356 | unsigned char md_buf[MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH]; | 1332 | unsigned char md_buf[MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH]; | 
| 1357 | unsigned int u; | 1333 | unsigned int u; | 
| 1358 | DH *dh = NULL, *dhp; | 1334 | DH *dh = NULL, *dhp; | 
| @@ -1383,31 +1359,6 @@ ssl3_send_server_key_exchange(SSL *s) | |||
| 1383 | 1359 | ||
| 1384 | r[0] = r[1] = r[2] = r[3] = NULL; | 1360 | r[0] = r[1] = r[2] = r[3] = NULL; | 
| 1385 | n = 0; | 1361 | n = 0; | 
| 1386 | if (type & SSL_kRSA) { | ||
| 1387 | rsa = cert->rsa_tmp; | ||
| 1388 | if ((rsa == NULL) && (s->cert->rsa_tmp_cb != NULL)) { | ||
| 1389 | rsa = s->cert->rsa_tmp_cb(s, 0, | ||
| 1390 | SSL_C_PKEYLENGTH(s->s3->tmp.new_cipher)); | ||
| 1391 | if (rsa == NULL) { | ||
| 1392 | al = SSL_AD_HANDSHAKE_FAILURE; | ||
| 1393 | SSLerr( | ||
| 1394 | SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, | ||
| 1395 | SSL_R_ERROR_GENERATING_TMP_RSA_KEY); | ||
| 1396 | goto f_err; | ||
| 1397 | } | ||
| 1398 | RSA_up_ref(rsa); | ||
| 1399 | cert->rsa_tmp = rsa; | ||
| 1400 | } | ||
| 1401 | if (rsa == NULL) { | ||
| 1402 | al = SSL_AD_HANDSHAKE_FAILURE; | ||
| 1403 | SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, | ||
| 1404 | SSL_R_MISSING_TMP_RSA_KEY); | ||
| 1405 | goto f_err; | ||
| 1406 | } | ||
| 1407 | r[0] = rsa->n; | ||
| 1408 | r[1] = rsa->e; | ||
| 1409 | s->s3->tmp.use_rsa_tmp = 1; | ||
| 1410 | } else | ||
| 1411 | if (type & SSL_kDHE) { | 1362 | if (type & SSL_kDHE) { | 
| 1412 | dhp = cert->dh_tmp; | 1363 | dhp = cert->dh_tmp; | 
| 1413 | if ((dhp == NULL) && (s->cert->dh_tmp_cb != NULL)) | 1364 | if ((dhp == NULL) && (s->cert->dh_tmp_cb != NULL)) | 
| @@ -1855,32 +1806,15 @@ ssl3_get_client_key_exchange(SSL *s) | |||
| 1855 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 1806 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 
| 1856 | 1807 | ||
| 1857 | if (alg_k & SSL_kRSA) { | 1808 | if (alg_k & SSL_kRSA) { | 
| 1858 | /* FIX THIS UP EAY EAY EAY EAY */ | 1809 | pkey = s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey; | 
| 1859 | if (s->s3->tmp.use_rsa_tmp) { | 1810 | if ((pkey == NULL) || (pkey->type != EVP_PKEY_RSA) || | 
| 1860 | if ((s->cert != NULL) && (s->cert->rsa_tmp != NULL)) | 1811 | (pkey->pkey.rsa == NULL)) { | 
| 1861 | rsa = s->cert->rsa_tmp; | 1812 | al = SSL_AD_HANDSHAKE_FAILURE; | 
| 1862 | /* | 1813 | SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, | 
| 1863 | * Don't do a callback because rsa_tmp should | 1814 | SSL_R_MISSING_RSA_CERTIFICATE); | 
| 1864 | * be sent already | 1815 | goto f_err; | 
| 1865 | */ | ||
| 1866 | if (rsa == NULL) { | ||
| 1867 | al = SSL_AD_HANDSHAKE_FAILURE; | ||
| 1868 | SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, | ||
| 1869 | SSL_R_MISSING_TMP_RSA_PKEY); | ||
| 1870 | goto f_err; | ||
| 1871 | |||
| 1872 | } | ||
| 1873 | } else { | ||
| 1874 | pkey = s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey; | ||
| 1875 | if ((pkey == NULL) || (pkey->type != EVP_PKEY_RSA) || | ||
| 1876 | (pkey->pkey.rsa == NULL)) { | ||
| 1877 | al = SSL_AD_HANDSHAKE_FAILURE; | ||
| 1878 | SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, | ||
| 1879 | SSL_R_MISSING_RSA_CERTIFICATE); | ||
| 1880 | goto f_err; | ||
| 1881 | } | ||
| 1882 | rsa = pkey->pkey.rsa; | ||
| 1883 | } | 1816 | } | 
| 1817 | rsa = pkey->pkey.rsa; | ||
| 1884 | 1818 | ||
| 1885 | /* TLS and [incidentally] DTLS{0xFEFF} */ | 1819 | /* TLS and [incidentally] DTLS{0xFEFF} */ | 
| 1886 | if (s->version > SSL3_VERSION && s->version != DTLS1_BAD_VER) { | 1820 | if (s->version > SSL3_VERSION && s->version != DTLS1_BAD_VER) { | 
| diff --git a/src/lib/libssl/src/ssl/d1_srvr.c b/src/lib/libssl/src/ssl/d1_srvr.c index a85715753c..d2f642f877 100644 --- a/src/lib/libssl/src/ssl/d1_srvr.c +++ b/src/lib/libssl/src/ssl/d1_srvr.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: d1_srvr.c,v 1.40 2014/10/18 16:13:16 jsing Exp $ */ | 1 | /* $OpenBSD: d1_srvr.c,v 1.41 2014/10/31 14:51:01 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. | 
| @@ -446,27 +446,8 @@ dtls1_accept(SSL *s) | |||
| 446 | case SSL3_ST_SW_KEY_EXCH_B: | 446 | case SSL3_ST_SW_KEY_EXCH_B: | 
| 447 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 447 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 
| 448 | 448 | ||
| 449 | /* clear this, it may get reset by | 449 | /* Only send if using a DH key exchange. */ | 
| 450 | * send_server_key_exchange */ | 450 | if (alg_k & (SSL_kDHE|SSL_kECDHE)) { | 
| 451 | if ((s->options & SSL_OP_EPHEMERAL_RSA) | ||
| 452 | ) | ||
| 453 | /* option SSL_OP_EPHEMERAL_RSA sends temporary RSA key | ||
| 454 | * even when forbidden by protocol specs | ||
| 455 | * (handshake may fail as clients are not required to | ||
| 456 | * be able to handle this) */ | ||
| 457 | s->s3->tmp.use_rsa_tmp = 1; | ||
| 458 | else | ||
| 459 | s->s3->tmp.use_rsa_tmp = 0; | ||
| 460 | |||
| 461 | /* only send if a DH key exchange or | ||
| 462 | * RSA but we have a sign only certificate */ | ||
| 463 | if (s->s3->tmp.use_rsa_tmp | ||
| 464 | || (alg_k & (SSL_kDHE|SSL_kECDHE)) | ||
| 465 | || ((alg_k & SSL_kRSA) | ||
| 466 | && (s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL | ||
| 467 | ) | ||
| 468 | ) | ||
| 469 | ) { | ||
| 470 | dtls1_start_timer(s); | 451 | dtls1_start_timer(s); | 
| 471 | ret = dtls1_send_server_key_exchange(s); | 452 | ret = dtls1_send_server_key_exchange(s); | 
| 472 | if (ret <= 0) | 453 | if (ret <= 0) | 
| @@ -994,7 +975,6 @@ dtls1_send_server_key_exchange(SSL *s) | |||
| 994 | { | 975 | { | 
| 995 | unsigned char *q; | 976 | unsigned char *q; | 
| 996 | int j, num; | 977 | int j, num; | 
| 997 | RSA *rsa; | ||
| 998 | unsigned char md_buf[MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH]; | 978 | unsigned char md_buf[MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH]; | 
| 999 | unsigned int u; | 979 | unsigned int u; | 
| 1000 | DH *dh = NULL, *dhp; | 980 | DH *dh = NULL, *dhp; | 
| @@ -1024,28 +1004,7 @@ dtls1_send_server_key_exchange(SSL *s) | |||
| 1024 | 1004 | ||
| 1025 | r[0] = r[1] = r[2] = r[3] = NULL; | 1005 | r[0] = r[1] = r[2] = r[3] = NULL; | 
| 1026 | n = 0; | 1006 | n = 0; | 
| 1027 | if (type & SSL_kRSA) { | 1007 | |
| 1028 | rsa = cert->rsa_tmp; | ||
| 1029 | if ((rsa == NULL) && (s->cert->rsa_tmp_cb != NULL)) { | ||
| 1030 | rsa = s->cert->rsa_tmp_cb(s, 0, | ||
| 1031 | SSL_C_PKEYLENGTH(s->s3->tmp.new_cipher)); | ||
| 1032 | if (rsa == NULL) { | ||
| 1033 | al = SSL_AD_HANDSHAKE_FAILURE; | ||
| 1034 | SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE, SSL_R_ERROR_GENERATING_TMP_RSA_KEY); | ||
| 1035 | goto f_err; | ||
| 1036 | } | ||
| 1037 | RSA_up_ref(rsa); | ||
| 1038 | cert->rsa_tmp = rsa; | ||
| 1039 | } | ||
| 1040 | if (rsa == NULL) { | ||
| 1041 | al = SSL_AD_HANDSHAKE_FAILURE; | ||
| 1042 | SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE, SSL_R_MISSING_TMP_RSA_KEY); | ||
| 1043 | goto f_err; | ||
| 1044 | } | ||
| 1045 | r[0] = rsa->n; | ||
| 1046 | r[1] = rsa->e; | ||
| 1047 | s->s3->tmp.use_rsa_tmp = 1; | ||
| 1048 | } else | ||
| 1049 | if (type & SSL_kDHE) { | 1008 | if (type & SSL_kDHE) { | 
| 1050 | dhp = cert->dh_tmp; | 1009 | dhp = cert->dh_tmp; | 
| 1051 | if ((dhp == NULL) && (s->cert->dh_tmp_cb != NULL)) | 1010 | if ((dhp == NULL) && (s->cert->dh_tmp_cb != NULL)) | 
| @@ -1087,8 +1046,7 @@ dtls1_send_server_key_exchange(SSL *s) | |||
| 1087 | r[0] = dh->p; | 1046 | r[0] = dh->p; | 
| 1088 | r[1] = dh->g; | 1047 | r[1] = dh->g; | 
| 1089 | r[2] = dh->pub_key; | 1048 | r[2] = dh->pub_key; | 
| 1090 | } else | 1049 | } else if (type & SSL_kECDHE) { | 
| 1091 | if (type & SSL_kECDHE) { | ||
| 1092 | const EC_GROUP *group; | 1050 | const EC_GROUP *group; | 
| 1093 | 1051 | ||
| 1094 | ecdhp = cert->ecdh_tmp; | 1052 | ecdhp = cert->ecdh_tmp; | 
| @@ -1185,10 +1143,10 @@ dtls1_send_server_key_exchange(SSL *s) | |||
| 1185 | r[1] = NULL; | 1143 | r[1] = NULL; | 
| 1186 | r[2] = NULL; | 1144 | r[2] = NULL; | 
| 1187 | r[3] = NULL; | 1145 | r[3] = NULL; | 
| 1188 | } else | 1146 | } else { | 
| 1189 | { | ||
| 1190 | al = SSL_AD_HANDSHAKE_FAILURE; | 1147 | al = SSL_AD_HANDSHAKE_FAILURE; | 
| 1191 | SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE, SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE); | 1148 | SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE, | 
| 1149 | SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE); | ||
| 1192 | goto f_err; | 1150 | goto f_err; | 
| 1193 | } | 1151 | } | 
| 1194 | for (i = 0; r[i] != NULL; i++) { | 1152 | for (i = 0; r[i] != NULL; i++) { | 
| diff --git a/src/lib/libssl/src/ssl/s3_lib.c b/src/lib/libssl/src/ssl/s3_lib.c index 42f8074f8c..08c5111129 100644 --- a/src/lib/libssl/src/ssl/s3_lib.c +++ b/src/lib/libssl/src/ssl/s3_lib.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: s3_lib.c,v 1.82 2014/10/03 13:58:17 jsing Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.83 2014/10/31 14:51:01 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 | * | 
| @@ -1934,8 +1934,7 @@ ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
| 1934 | { | 1934 | { | 
| 1935 | int ret = 0; | 1935 | int ret = 0; | 
| 1936 | 1936 | ||
| 1937 | if (cmd == SSL_CTRL_SET_TMP_RSA || cmd == SSL_CTRL_SET_TMP_RSA_CB || | 1937 | if (cmd == SSL_CTRL_SET_TMP_DH || cmd == SSL_CTRL_SET_TMP_DH_CB) { | 
| 1938 | cmd == SSL_CTRL_SET_TMP_DH || cmd == SSL_CTRL_SET_TMP_DH_CB) { | ||
| 1939 | if (!ssl_cert_inst(&s->cert)) { | 1938 | if (!ssl_cert_inst(&s->cert)) { | 
| 1940 | SSLerr(SSL_F_SSL3_CTRL, | 1939 | SSLerr(SSL_F_SSL3_CTRL, | 
| 1941 | ERR_R_MALLOC_FAILURE); | 1940 | ERR_R_MALLOC_FAILURE); | 
| @@ -1963,36 +1962,11 @@ ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
| 1963 | ret = (int)(s->s3->flags); | 1962 | ret = (int)(s->s3->flags); | 
| 1964 | break; | 1963 | break; | 
| 1965 | case SSL_CTRL_NEED_TMP_RSA: | 1964 | case SSL_CTRL_NEED_TMP_RSA: | 
| 1966 | if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) && | 1965 | ret = 0; | 
| 1967 | ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || | ||
| 1968 | (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) | ||
| 1969 | > (512 / 8)))) | ||
| 1970 | ret = 1; | ||
| 1971 | break; | 1966 | break; | 
| 1972 | case SSL_CTRL_SET_TMP_RSA: | 1967 | case SSL_CTRL_SET_TMP_RSA: | 
| 1973 | { | ||
| 1974 | RSA *rsa = (RSA *)parg; | ||
| 1975 | if (rsa == NULL) { | ||
| 1976 | SSLerr(SSL_F_SSL3_CTRL, | ||
| 1977 | ERR_R_PASSED_NULL_PARAMETER); | ||
| 1978 | return (ret); | ||
| 1979 | } | ||
| 1980 | if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) { | ||
| 1981 | SSLerr(SSL_F_SSL3_CTRL, | ||
| 1982 | ERR_R_RSA_LIB); | ||
| 1983 | return (ret); | ||
| 1984 | } | ||
| 1985 | RSA_free(s->cert->rsa_tmp); | ||
| 1986 | s->cert->rsa_tmp = rsa; | ||
| 1987 | ret = 1; | ||
| 1988 | } | ||
| 1989 | break; | ||
| 1990 | case SSL_CTRL_SET_TMP_RSA_CB: | 1968 | case SSL_CTRL_SET_TMP_RSA_CB: | 
| 1991 | { | 1969 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 
| 1992 | SSLerr(SSL_F_SSL3_CTRL, | ||
| 1993 | ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | ||
| 1994 | return (ret); | ||
| 1995 | } | ||
| 1996 | break; | 1970 | break; | 
| 1997 | case SSL_CTRL_SET_TMP_DH: | 1971 | case SSL_CTRL_SET_TMP_DH: | 
| 1998 | { | 1972 | { | 
| @@ -2144,7 +2118,7 @@ ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) | |||
| 2144 | { | 2118 | { | 
| 2145 | int ret = 0; | 2119 | int ret = 0; | 
| 2146 | 2120 | ||
| 2147 | if (cmd == SSL_CTRL_SET_TMP_RSA_CB || cmd == SSL_CTRL_SET_TMP_DH_CB) { | 2121 | if (cmd == SSL_CTRL_SET_TMP_DH_CB) { | 
| 2148 | if (!ssl_cert_inst(&s->cert)) { | 2122 | if (!ssl_cert_inst(&s->cert)) { | 
| 2149 | SSLerr(SSL_F_SSL3_CALLBACK_CTRL, | 2123 | SSLerr(SSL_F_SSL3_CALLBACK_CTRL, | 
| 2150 | ERR_R_MALLOC_FAILURE); | 2124 | ERR_R_MALLOC_FAILURE); | 
| @@ -2154,20 +2128,13 @@ ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) | |||
| 2154 | 2128 | ||
| 2155 | switch (cmd) { | 2129 | switch (cmd) { | 
| 2156 | case SSL_CTRL_SET_TMP_RSA_CB: | 2130 | case SSL_CTRL_SET_TMP_RSA_CB: | 
| 2157 | { | 2131 | SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 
| 2158 | s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; | ||
| 2159 | } | ||
| 2160 | break; | 2132 | break; | 
| 2161 | case SSL_CTRL_SET_TMP_DH_CB: | 2133 | case SSL_CTRL_SET_TMP_DH_CB: | 
| 2162 | { | 2134 | s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | 
| 2163 | s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | ||
| 2164 | } | ||
| 2165 | break; | 2135 | break; | 
| 2166 | case SSL_CTRL_SET_TMP_ECDH_CB: | 2136 | case SSL_CTRL_SET_TMP_ECDH_CB: | 
| 2167 | { | 2137 | s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; | 
| 2168 | s->cert->ecdh_tmp_cb = | ||
| 2169 | (EC_KEY *(*)(SSL *, int, int))fp; | ||
| 2170 | } | ||
| 2171 | break; | 2138 | break; | 
| 2172 | case SSL_CTRL_SET_TLSEXT_DEBUG_CB: | 2139 | case SSL_CTRL_SET_TLSEXT_DEBUG_CB: | 
| 2173 | s->tlsext_debug_cb = (void (*)(SSL *, int , int, | 2140 | s->tlsext_debug_cb = (void (*)(SSL *, int , int, | 
| @@ -2188,45 +2155,11 @@ ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
| 2188 | 2155 | ||
| 2189 | switch (cmd) { | 2156 | switch (cmd) { | 
| 2190 | case SSL_CTRL_NEED_TMP_RSA: | 2157 | case SSL_CTRL_NEED_TMP_RSA: | 
| 2191 | if ((cert->rsa_tmp == NULL) && | 2158 | return (0); | 
| 2192 | ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) || | ||
| 2193 | (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > | ||
| 2194 | (512 / 8)))) | ||
| 2195 | return (1); | ||
| 2196 | else | ||
| 2197 | return (0); | ||
| 2198 | /* break; */ | ||
| 2199 | case SSL_CTRL_SET_TMP_RSA: | 2159 | case SSL_CTRL_SET_TMP_RSA: | 
| 2200 | { | ||
| 2201 | RSA *rsa; | ||
| 2202 | int i; | ||
| 2203 | |||
| 2204 | rsa = (RSA *)parg; | ||
| 2205 | i = 1; | ||
| 2206 | if (rsa == NULL) | ||
| 2207 | i = 0; | ||
| 2208 | else { | ||
| 2209 | if ((rsa = RSAPrivateKey_dup(rsa)) == NULL) | ||
| 2210 | i = 0; | ||
| 2211 | } | ||
| 2212 | if (!i) { | ||
| 2213 | SSLerr(SSL_F_SSL3_CTX_CTRL, | ||
| 2214 | ERR_R_RSA_LIB); | ||
| 2215 | return (0); | ||
| 2216 | } else { | ||
| 2217 | RSA_free(cert->rsa_tmp); | ||
| 2218 | cert->rsa_tmp = rsa; | ||
| 2219 | return (1); | ||
| 2220 | } | ||
| 2221 | } | ||
| 2222 | /* break; */ | ||
| 2223 | case SSL_CTRL_SET_TMP_RSA_CB: | 2160 | case SSL_CTRL_SET_TMP_RSA_CB: | 
| 2224 | { | 2161 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 
| 2225 | SSLerr(SSL_F_SSL3_CTX_CTRL, | 2162 | return (0); | 
| 2226 | ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | ||
| 2227 | return (0); | ||
| 2228 | } | ||
| 2229 | break; | ||
| 2230 | case SSL_CTRL_SET_TMP_DH: | 2163 | case SSL_CTRL_SET_TMP_DH: | 
| 2231 | { | 2164 | { | 
| 2232 | DH *new = NULL, *dh; | 2165 | DH *new = NULL, *dh; | 
| @@ -2366,19 +2299,13 @@ ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) | |||
| 2366 | 2299 | ||
| 2367 | switch (cmd) { | 2300 | switch (cmd) { | 
| 2368 | case SSL_CTRL_SET_TMP_RSA_CB: | 2301 | case SSL_CTRL_SET_TMP_RSA_CB: | 
| 2369 | { | 2302 | SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | 
| 2370 | cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp; | 2303 | return (0); | 
| 2371 | } | ||
| 2372 | break; | ||
| 2373 | case SSL_CTRL_SET_TMP_DH_CB: | 2304 | case SSL_CTRL_SET_TMP_DH_CB: | 
| 2374 | { | 2305 | cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | 
| 2375 | cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp; | ||
| 2376 | } | ||
| 2377 | break; | 2306 | break; | 
| 2378 | case SSL_CTRL_SET_TMP_ECDH_CB: | 2307 | case SSL_CTRL_SET_TMP_ECDH_CB: | 
| 2379 | { | 2308 | cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; | 
| 2380 | cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp; | ||
| 2381 | } | ||
| 2382 | break; | 2309 | break; | 
| 2383 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB: | 2310 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB: | 
| 2384 | ctx->tlsext_servername_callback = | 2311 | ctx->tlsext_servername_callback = | 
| diff --git a/src/lib/libssl/src/ssl/s3_srvr.c b/src/lib/libssl/src/ssl/s3_srvr.c index 719b4c56c1..1b97895f76 100644 --- a/src/lib/libssl/src/ssl/s3_srvr.c +++ b/src/lib/libssl/src/ssl/s3_srvr.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: s3_srvr.c,v 1.87 2014/10/18 16:13:16 jsing Exp $ */ | 1 | /* $OpenBSD: s3_srvr.c,v 1.88 2014/10/31 14:51:01 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 | * | 
| @@ -392,37 +392,14 @@ ssl3_accept(SSL *s) | |||
| 392 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 392 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 
| 393 | 393 | ||
| 394 | /* | 394 | /* | 
| 395 | * Clear this, it may get reset by | 395 | * Only send if using a DH key exchange. | 
| 396 | * send_server_key_exchange. | ||
| 397 | */ | ||
| 398 | if ((s->options & SSL_OP_EPHEMERAL_RSA) | ||
| 399 | ) | ||
| 400 | /* | ||
| 401 | * option SSL_OP_EPHEMERAL_RSA sends temporary | ||
| 402 | * RSA key even when forbidden by protocol | ||
| 403 | * specs (handshake may fail as clients are | ||
| 404 | * not required to be able to handle this) | ||
| 405 | */ | ||
| 406 | s->s3->tmp.use_rsa_tmp = 1; | ||
| 407 | else | ||
| 408 | s->s3->tmp.use_rsa_tmp = 0; | ||
| 409 | |||
| 410 | |||
| 411 | /* | ||
| 412 | * Only send if a DH key exchange, fortezza or | ||
| 413 | * RSA but we have a sign only certificate. | ||
| 414 | * | 396 | * | 
| 415 | * For ECC ciphersuites, we send a serverKeyExchange | 397 | * For ECC ciphersuites, we send a ServerKeyExchange | 
| 416 | * message only if the cipher suite is either | 398 | * message only if the cipher suite is ECDHE. In other | 
| 417 | * ECDH-anon or ECDHE. In other cases, the | 399 | * cases, the server certificate contains the server's | 
| 418 | * server certificate contains the server's | ||
| 419 | * public key for key exchange. | 400 | * public key for key exchange. | 
| 420 | */ | 401 | */ | 
| 421 | if (s->s3->tmp.use_rsa_tmp || | 402 | if (alg_k & (SSL_kDHE|SSL_kECDHE)) { | 
| 422 | (alg_k & (SSL_kDHE|SSL_kECDHE)) || | ||
| 423 | ((alg_k & SSL_kRSA) && | ||
| 424 | (s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == | ||
| 425 | NULL))) { | ||
| 426 | ret = ssl3_send_server_key_exchange(s); | 403 | ret = ssl3_send_server_key_exchange(s); | 
| 427 | if (ret <= 0) | 404 | if (ret <= 0) | 
| 428 | goto end; | 405 | goto end; | 
| @@ -1352,7 +1329,6 @@ ssl3_send_server_key_exchange(SSL *s) | |||
| 1352 | { | 1329 | { | 
| 1353 | unsigned char *q; | 1330 | unsigned char *q; | 
| 1354 | int j, num; | 1331 | int j, num; | 
| 1355 | RSA *rsa; | ||
| 1356 | unsigned char md_buf[MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH]; | 1332 | unsigned char md_buf[MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH]; | 
| 1357 | unsigned int u; | 1333 | unsigned int u; | 
| 1358 | DH *dh = NULL, *dhp; | 1334 | DH *dh = NULL, *dhp; | 
| @@ -1383,31 +1359,6 @@ ssl3_send_server_key_exchange(SSL *s) | |||
| 1383 | 1359 | ||
| 1384 | r[0] = r[1] = r[2] = r[3] = NULL; | 1360 | r[0] = r[1] = r[2] = r[3] = NULL; | 
| 1385 | n = 0; | 1361 | n = 0; | 
| 1386 | if (type & SSL_kRSA) { | ||
| 1387 | rsa = cert->rsa_tmp; | ||
| 1388 | if ((rsa == NULL) && (s->cert->rsa_tmp_cb != NULL)) { | ||
| 1389 | rsa = s->cert->rsa_tmp_cb(s, 0, | ||
| 1390 | SSL_C_PKEYLENGTH(s->s3->tmp.new_cipher)); | ||
| 1391 | if (rsa == NULL) { | ||
| 1392 | al = SSL_AD_HANDSHAKE_FAILURE; | ||
| 1393 | SSLerr( | ||
| 1394 | SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, | ||
| 1395 | SSL_R_ERROR_GENERATING_TMP_RSA_KEY); | ||
| 1396 | goto f_err; | ||
| 1397 | } | ||
| 1398 | RSA_up_ref(rsa); | ||
| 1399 | cert->rsa_tmp = rsa; | ||
| 1400 | } | ||
| 1401 | if (rsa == NULL) { | ||
| 1402 | al = SSL_AD_HANDSHAKE_FAILURE; | ||
| 1403 | SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, | ||
| 1404 | SSL_R_MISSING_TMP_RSA_KEY); | ||
| 1405 | goto f_err; | ||
| 1406 | } | ||
| 1407 | r[0] = rsa->n; | ||
| 1408 | r[1] = rsa->e; | ||
| 1409 | s->s3->tmp.use_rsa_tmp = 1; | ||
| 1410 | } else | ||
| 1411 | if (type & SSL_kDHE) { | 1362 | if (type & SSL_kDHE) { | 
| 1412 | dhp = cert->dh_tmp; | 1363 | dhp = cert->dh_tmp; | 
| 1413 | if ((dhp == NULL) && (s->cert->dh_tmp_cb != NULL)) | 1364 | if ((dhp == NULL) && (s->cert->dh_tmp_cb != NULL)) | 
| @@ -1855,32 +1806,15 @@ ssl3_get_client_key_exchange(SSL *s) | |||
| 1855 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 1806 | alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | 
| 1856 | 1807 | ||
| 1857 | if (alg_k & SSL_kRSA) { | 1808 | if (alg_k & SSL_kRSA) { | 
| 1858 | /* FIX THIS UP EAY EAY EAY EAY */ | 1809 | pkey = s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey; | 
| 1859 | if (s->s3->tmp.use_rsa_tmp) { | 1810 | if ((pkey == NULL) || (pkey->type != EVP_PKEY_RSA) || | 
| 1860 | if ((s->cert != NULL) && (s->cert->rsa_tmp != NULL)) | 1811 | (pkey->pkey.rsa == NULL)) { | 
| 1861 | rsa = s->cert->rsa_tmp; | 1812 | al = SSL_AD_HANDSHAKE_FAILURE; | 
| 1862 | /* | 1813 | SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, | 
| 1863 | * Don't do a callback because rsa_tmp should | 1814 | SSL_R_MISSING_RSA_CERTIFICATE); | 
| 1864 | * be sent already | 1815 | goto f_err; | 
| 1865 | */ | ||
| 1866 | if (rsa == NULL) { | ||
| 1867 | al = SSL_AD_HANDSHAKE_FAILURE; | ||
| 1868 | SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, | ||
| 1869 | SSL_R_MISSING_TMP_RSA_PKEY); | ||
| 1870 | goto f_err; | ||
| 1871 | |||
| 1872 | } | ||
| 1873 | } else { | ||
| 1874 | pkey = s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey; | ||
| 1875 | if ((pkey == NULL) || (pkey->type != EVP_PKEY_RSA) || | ||
| 1876 | (pkey->pkey.rsa == NULL)) { | ||
| 1877 | al = SSL_AD_HANDSHAKE_FAILURE; | ||
| 1878 | SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, | ||
| 1879 | SSL_R_MISSING_RSA_CERTIFICATE); | ||
| 1880 | goto f_err; | ||
| 1881 | } | ||
| 1882 | rsa = pkey->pkey.rsa; | ||
| 1883 | } | 1816 | } | 
| 1817 | rsa = pkey->pkey.rsa; | ||
| 1884 | 1818 | ||
| 1885 | /* TLS and [incidentally] DTLS{0xFEFF} */ | 1819 | /* TLS and [incidentally] DTLS{0xFEFF} */ | 
| 1886 | if (s->version > SSL3_VERSION && s->version != DTLS1_BAD_VER) { | 1820 | if (s->version > SSL3_VERSION && s->version != DTLS1_BAD_VER) { | 
| diff --git a/src/lib/libssl/src/ssl/ssl3.h b/src/lib/libssl/src/ssl/ssl3.h index 9a28b4701f..18afa304c9 100644 --- a/src/lib/libssl/src/ssl/ssl3.h +++ b/src/lib/libssl/src/ssl/ssl3.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl3.h,v 1.26 2014/08/11 01:10:42 jsing Exp $ */ | 1 | /* $OpenBSD: ssl3.h,v 1.27 2014/10/31 14:51:01 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 | * | 
| @@ -473,7 +473,7 @@ typedef struct ssl3_state_st { | |||
| 473 | char ctype[SSL3_CT_NUMBER]; | 473 | char ctype[SSL3_CT_NUMBER]; | 
| 474 | STACK_OF(X509_NAME) *ca_names; | 474 | STACK_OF(X509_NAME) *ca_names; | 
| 475 | 475 | ||
| 476 | int use_rsa_tmp; | 476 | int use_rsa_tmp; /* XXX - remove at next bump. */ | 
| 477 | 477 | ||
| 478 | int key_block_length; | 478 | int key_block_length; | 
| 479 | unsigned char *key_block; | 479 | unsigned char *key_block; | 
| diff --git a/src/lib/libssl/src/ssl/ssl_cert.c b/src/lib/libssl/src/ssl/ssl_cert.c index 6f1815067b..beea31c64b 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.42 2014/10/03 13:58:18 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_cert.c,v 1.43 2014/10/31 14:51:01 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 | * | 
| @@ -205,12 +205,6 @@ ssl_cert_dup(CERT *cert) | |||
| 205 | ret->mask_k = cert->mask_k; | 205 | ret->mask_k = cert->mask_k; | 
| 206 | ret->mask_a = cert->mask_a; | 206 | ret->mask_a = cert->mask_a; | 
| 207 | 207 | ||
| 208 | if (cert->rsa_tmp != NULL) { | ||
| 209 | RSA_up_ref(cert->rsa_tmp); | ||
| 210 | ret->rsa_tmp = cert->rsa_tmp; | ||
| 211 | } | ||
| 212 | ret->rsa_tmp_cb = cert->rsa_tmp_cb; | ||
| 213 | |||
| 214 | if (cert->dh_tmp != NULL) { | 208 | if (cert->dh_tmp != NULL) { | 
| 215 | ret->dh_tmp = DHparams_dup(cert->dh_tmp); | 209 | ret->dh_tmp = DHparams_dup(cert->dh_tmp); | 
| 216 | if (ret->dh_tmp == NULL) { | 210 | if (ret->dh_tmp == NULL) { | 
| @@ -305,7 +299,6 @@ ssl_cert_dup(CERT *cert) | |||
| 305 | return (ret); | 299 | return (ret); | 
| 306 | 300 | ||
| 307 | err: | 301 | err: | 
| 308 | RSA_free(ret->rsa_tmp); | ||
| 309 | DH_free(ret->dh_tmp); | 302 | DH_free(ret->dh_tmp); | 
| 310 | EC_KEY_free(ret->ecdh_tmp); | 303 | EC_KEY_free(ret->ecdh_tmp); | 
| 311 | 304 | ||
| @@ -331,7 +324,6 @@ ssl_cert_free(CERT *c) | |||
| 331 | if (i > 0) | 324 | if (i > 0) | 
| 332 | return; | 325 | return; | 
| 333 | 326 | ||
| 334 | RSA_free(c->rsa_tmp); | ||
| 335 | DH_free(c->dh_tmp); | 327 | DH_free(c->dh_tmp); | 
| 336 | EC_KEY_free(c->ecdh_tmp); | 328 | EC_KEY_free(c->ecdh_tmp); | 
| 337 | 329 | ||
| diff --git a/src/lib/libssl/src/ssl/ssl_lib.c b/src/lib/libssl/src/ssl/ssl_lib.c index 3fa8f5039f..579c005cc3 100644 --- a/src/lib/libssl/src/ssl/ssl_lib.c +++ b/src/lib/libssl/src/ssl/ssl_lib.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_lib.c,v 1.87 2014/10/18 16:13:16 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_lib.c,v 1.88 2014/10/31 14:51:01 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 | * | 
| @@ -1931,7 +1931,7 @@ void | |||
| 1931 | ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | 1931 | ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | 
| 1932 | { | 1932 | { | 
| 1933 | CERT_PKEY *cpk; | 1933 | CERT_PKEY *cpk; | 
| 1934 | int rsa_enc, rsa_tmp, rsa_sign, dh_tmp, dsa_sign; | 1934 | int rsa_enc, rsa_sign, dh_tmp, dsa_sign; | 
| 1935 | unsigned long mask_k, mask_a; | 1935 | unsigned long mask_k, mask_a; | 
| 1936 | int have_ecc_cert, ecdh_ok, ecdsa_ok; | 1936 | int have_ecc_cert, ecdh_ok, ecdsa_ok; | 
| 1937 | int have_ecdh_tmp; | 1937 | int have_ecdh_tmp; | 
| @@ -1942,7 +1942,6 @@ ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | |||
| 1942 | if (c == NULL) | 1942 | if (c == NULL) | 
| 1943 | return; | 1943 | return; | 
| 1944 | 1944 | ||
| 1945 | rsa_tmp = (c->rsa_tmp != NULL || c->rsa_tmp_cb != NULL); | ||
| 1946 | dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL); | 1945 | dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL); | 
| 1947 | 1946 | ||
| 1948 | have_ecdh_tmp = (c->ecdh_tmp != NULL || c->ecdh_tmp_cb != NULL || | 1947 | have_ecdh_tmp = (c->ecdh_tmp != NULL || c->ecdh_tmp_cb != NULL || | 
| @@ -1970,7 +1969,7 @@ ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | |||
| 1970 | mask_a |= SSL_aGOST94; | 1969 | mask_a |= SSL_aGOST94; | 
| 1971 | } | 1970 | } | 
| 1972 | 1971 | ||
| 1973 | if (rsa_enc || (rsa_tmp && rsa_sign)) | 1972 | if (rsa_enc) | 
| 1974 | mask_k|=SSL_kRSA; | 1973 | mask_k|=SSL_kRSA; | 
| 1975 | 1974 | ||
| 1976 | if (dh_tmp) | 1975 | if (dh_tmp) | 
| diff --git a/src/lib/libssl/src/ssl/ssl_locl.h b/src/lib/libssl/src/ssl/ssl_locl.h index 976f835c92..955c169244 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.71 2014/10/03 13:58:18 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.72 2014/10/31 14:51:01 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 | * | 
| @@ -440,9 +440,6 @@ typedef struct cert_st { | |||
| 440 | unsigned long mask_k; | 440 | unsigned long mask_k; | 
| 441 | unsigned long mask_a; | 441 | unsigned long mask_a; | 
| 442 | 442 | ||
| 443 | RSA *rsa_tmp; | ||
| 444 | RSA *(*rsa_tmp_cb)(SSL *ssl, int is_export, int keysize); | ||
| 445 | |||
| 446 | DH *dh_tmp; | 443 | DH *dh_tmp; | 
| 447 | DH *(*dh_tmp_cb)(SSL *ssl, int is_export, int keysize); | 444 | DH *(*dh_tmp_cb)(SSL *ssl, int is_export, int keysize); | 
| 448 | 445 | ||
| diff --git a/src/lib/libssl/ssl3.h b/src/lib/libssl/ssl3.h index 9a28b4701f..18afa304c9 100644 --- a/src/lib/libssl/ssl3.h +++ b/src/lib/libssl/ssl3.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl3.h,v 1.26 2014/08/11 01:10:42 jsing Exp $ */ | 1 | /* $OpenBSD: ssl3.h,v 1.27 2014/10/31 14:51:01 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 | * | 
| @@ -473,7 +473,7 @@ typedef struct ssl3_state_st { | |||
| 473 | char ctype[SSL3_CT_NUMBER]; | 473 | char ctype[SSL3_CT_NUMBER]; | 
| 474 | STACK_OF(X509_NAME) *ca_names; | 474 | STACK_OF(X509_NAME) *ca_names; | 
| 475 | 475 | ||
| 476 | int use_rsa_tmp; | 476 | int use_rsa_tmp; /* XXX - remove at next bump. */ | 
| 477 | 477 | ||
| 478 | int key_block_length; | 478 | int key_block_length; | 
| 479 | unsigned char *key_block; | 479 | unsigned char *key_block; | 
| diff --git a/src/lib/libssl/ssl_cert.c b/src/lib/libssl/ssl_cert.c index 6f1815067b..beea31c64b 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.42 2014/10/03 13:58:18 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_cert.c,v 1.43 2014/10/31 14:51:01 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 | * | 
| @@ -205,12 +205,6 @@ ssl_cert_dup(CERT *cert) | |||
| 205 | ret->mask_k = cert->mask_k; | 205 | ret->mask_k = cert->mask_k; | 
| 206 | ret->mask_a = cert->mask_a; | 206 | ret->mask_a = cert->mask_a; | 
| 207 | 207 | ||
| 208 | if (cert->rsa_tmp != NULL) { | ||
| 209 | RSA_up_ref(cert->rsa_tmp); | ||
| 210 | ret->rsa_tmp = cert->rsa_tmp; | ||
| 211 | } | ||
| 212 | ret->rsa_tmp_cb = cert->rsa_tmp_cb; | ||
| 213 | |||
| 214 | if (cert->dh_tmp != NULL) { | 208 | if (cert->dh_tmp != NULL) { | 
| 215 | ret->dh_tmp = DHparams_dup(cert->dh_tmp); | 209 | ret->dh_tmp = DHparams_dup(cert->dh_tmp); | 
| 216 | if (ret->dh_tmp == NULL) { | 210 | if (ret->dh_tmp == NULL) { | 
| @@ -305,7 +299,6 @@ ssl_cert_dup(CERT *cert) | |||
| 305 | return (ret); | 299 | return (ret); | 
| 306 | 300 | ||
| 307 | err: | 301 | err: | 
| 308 | RSA_free(ret->rsa_tmp); | ||
| 309 | DH_free(ret->dh_tmp); | 302 | DH_free(ret->dh_tmp); | 
| 310 | EC_KEY_free(ret->ecdh_tmp); | 303 | EC_KEY_free(ret->ecdh_tmp); | 
| 311 | 304 | ||
| @@ -331,7 +324,6 @@ ssl_cert_free(CERT *c) | |||
| 331 | if (i > 0) | 324 | if (i > 0) | 
| 332 | return; | 325 | return; | 
| 333 | 326 | ||
| 334 | RSA_free(c->rsa_tmp); | ||
| 335 | DH_free(c->dh_tmp); | 327 | DH_free(c->dh_tmp); | 
| 336 | EC_KEY_free(c->ecdh_tmp); | 328 | EC_KEY_free(c->ecdh_tmp); | 
| 337 | 329 | ||
| diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c index 3fa8f5039f..579c005cc3 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.87 2014/10/18 16:13:16 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_lib.c,v 1.88 2014/10/31 14:51:01 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 | * | 
| @@ -1931,7 +1931,7 @@ void | |||
| 1931 | ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | 1931 | ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | 
| 1932 | { | 1932 | { | 
| 1933 | CERT_PKEY *cpk; | 1933 | CERT_PKEY *cpk; | 
| 1934 | int rsa_enc, rsa_tmp, rsa_sign, dh_tmp, dsa_sign; | 1934 | int rsa_enc, rsa_sign, dh_tmp, dsa_sign; | 
| 1935 | unsigned long mask_k, mask_a; | 1935 | unsigned long mask_k, mask_a; | 
| 1936 | int have_ecc_cert, ecdh_ok, ecdsa_ok; | 1936 | int have_ecc_cert, ecdh_ok, ecdsa_ok; | 
| 1937 | int have_ecdh_tmp; | 1937 | int have_ecdh_tmp; | 
| @@ -1942,7 +1942,6 @@ ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | |||
| 1942 | if (c == NULL) | 1942 | if (c == NULL) | 
| 1943 | return; | 1943 | return; | 
| 1944 | 1944 | ||
| 1945 | rsa_tmp = (c->rsa_tmp != NULL || c->rsa_tmp_cb != NULL); | ||
| 1946 | dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL); | 1945 | dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL); | 
| 1947 | 1946 | ||
| 1948 | have_ecdh_tmp = (c->ecdh_tmp != NULL || c->ecdh_tmp_cb != NULL || | 1947 | have_ecdh_tmp = (c->ecdh_tmp != NULL || c->ecdh_tmp_cb != NULL || | 
| @@ -1970,7 +1969,7 @@ ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher) | |||
| 1970 | mask_a |= SSL_aGOST94; | 1969 | mask_a |= SSL_aGOST94; | 
| 1971 | } | 1970 | } | 
| 1972 | 1971 | ||
| 1973 | if (rsa_enc || (rsa_tmp && rsa_sign)) | 1972 | if (rsa_enc) | 
| 1974 | mask_k|=SSL_kRSA; | 1973 | mask_k|=SSL_kRSA; | 
| 1975 | 1974 | ||
| 1976 | if (dh_tmp) | 1975 | if (dh_tmp) | 
| diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index 976f835c92..955c169244 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.71 2014/10/03 13:58:18 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.72 2014/10/31 14:51:01 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 | * | 
| @@ -440,9 +440,6 @@ typedef struct cert_st { | |||
| 440 | unsigned long mask_k; | 440 | unsigned long mask_k; | 
| 441 | unsigned long mask_a; | 441 | unsigned long mask_a; | 
| 442 | 442 | ||
| 443 | RSA *rsa_tmp; | ||
| 444 | RSA *(*rsa_tmp_cb)(SSL *ssl, int is_export, int keysize); | ||
| 445 | |||
| 446 | DH *dh_tmp; | 443 | DH *dh_tmp; | 
| 447 | DH *(*dh_tmp_cb)(SSL *ssl, int is_export, int keysize); | 444 | DH *(*dh_tmp_cb)(SSL *ssl, int is_export, int keysize); | 
| 448 | 445 | ||
