diff options
Diffstat (limited to 'src/lib/libssl/s3_clnt.c')
-rw-r--r-- | src/lib/libssl/s3_clnt.c | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/src/lib/libssl/s3_clnt.c b/src/lib/libssl/s3_clnt.c index d3e6b4d1e5..279d2c0198 100644 --- a/src/lib/libssl/s3_clnt.c +++ b/src/lib/libssl/s3_clnt.c | |||
@@ -110,7 +110,7 @@ int ssl3_connect(SSL *s) | |||
110 | int ret= -1; | 110 | int ret= -1; |
111 | int new_state,state,skip=0;; | 111 | int new_state,state,skip=0;; |
112 | 112 | ||
113 | RAND_seed(&Time,sizeof(Time)); | 113 | RAND_add(&Time,sizeof(Time),0); |
114 | ERR_clear_error(); | 114 | ERR_clear_error(); |
115 | clear_sys_error(); | 115 | clear_sys_error(); |
116 | 116 | ||
@@ -325,8 +325,8 @@ int ssl3_connect(SSL *s) | |||
325 | case SSL3_ST_CW_FINISHED_B: | 325 | case SSL3_ST_CW_FINISHED_B: |
326 | ret=ssl3_send_finished(s, | 326 | ret=ssl3_send_finished(s, |
327 | SSL3_ST_CW_FINISHED_A,SSL3_ST_CW_FINISHED_B, | 327 | SSL3_ST_CW_FINISHED_A,SSL3_ST_CW_FINISHED_B, |
328 | s->method->ssl3_enc->client_finished, | 328 | s->method->ssl3_enc->client_finished_label, |
329 | s->method->ssl3_enc->client_finished_len); | 329 | s->method->ssl3_enc->client_finished_label_len); |
330 | if (ret <= 0) goto end; | 330 | if (ret <= 0) goto end; |
331 | s->state=SSL3_ST_CW_FLUSH; | 331 | s->state=SSL3_ST_CW_FLUSH; |
332 | 332 | ||
@@ -466,7 +466,7 @@ static int ssl3_client_hello(SSL *s) | |||
466 | p=s->s3->client_random; | 466 | p=s->s3->client_random; |
467 | Time=time(NULL); /* Time */ | 467 | Time=time(NULL); /* Time */ |
468 | l2n(Time,p); | 468 | l2n(Time,p); |
469 | RAND_bytes(p,SSL3_RANDOM_SIZE-sizeof(Time)); | 469 | RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-sizeof(Time)); |
470 | 470 | ||
471 | /* Do the message type and length last */ | 471 | /* Do the message type and length last */ |
472 | d=p= &(buf[4]); | 472 | d=p= &(buf[4]); |
@@ -1053,15 +1053,15 @@ static int ssl3_get_key_exchange(SSL *s) | |||
1053 | q+=i; | 1053 | q+=i; |
1054 | j+=i; | 1054 | j+=i; |
1055 | } | 1055 | } |
1056 | i=RSA_public_decrypt((int)n,p,p,pkey->pkey.rsa, | 1056 | i=RSA_verify(NID_md5_sha1, md_buf, j, p, n, |
1057 | RSA_PKCS1_PADDING); | 1057 | pkey->pkey.rsa); |
1058 | if (i <= 0) | 1058 | if (i < 0) |
1059 | { | 1059 | { |
1060 | al=SSL_AD_DECRYPT_ERROR; | 1060 | al=SSL_AD_DECRYPT_ERROR; |
1061 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_RSA_DECRYPT); | 1061 | SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_RSA_DECRYPT); |
1062 | goto f_err; | 1062 | goto f_err; |
1063 | } | 1063 | } |
1064 | if ((j != i) || (memcmp(p,md_buf,i) != 0)) | 1064 | if (i == 0) |
1065 | { | 1065 | { |
1066 | /* bad signature */ | 1066 | /* bad signature */ |
1067 | al=SSL_AD_DECRYPT_ERROR; | 1067 | al=SSL_AD_DECRYPT_ERROR; |
@@ -1225,7 +1225,7 @@ fclose(out); | |||
1225 | 1225 | ||
1226 | if ((xn=d2i_X509_NAME(NULL,&q,l)) == NULL) | 1226 | if ((xn=d2i_X509_NAME(NULL,&q,l)) == NULL) |
1227 | { | 1227 | { |
1228 | /* If netscape tollerance is on, ignore errors */ | 1228 | /* If netscape tolerance is on, ignore errors */ |
1229 | if (s->options & SSL_OP_NETSCAPE_CA_DN_BUG) | 1229 | if (s->options & SSL_OP_NETSCAPE_CA_DN_BUG) |
1230 | goto cont; | 1230 | goto cont; |
1231 | else | 1231 | else |
@@ -1258,7 +1258,7 @@ cont: | |||
1258 | ERR_clear_error(); | 1258 | ERR_clear_error(); |
1259 | } | 1259 | } |
1260 | 1260 | ||
1261 | /* we should setup a certficate to return.... */ | 1261 | /* we should setup a certificate to return.... */ |
1262 | s->s3->tmp.cert_req=1; | 1262 | s->s3->tmp.cert_req=1; |
1263 | s->s3->tmp.ctype_num=ctype_num; | 1263 | s->s3->tmp.ctype_num=ctype_num; |
1264 | if (s->s3->tmp.ca_names != NULL) | 1264 | if (s->s3->tmp.ca_names != NULL) |
@@ -1341,7 +1341,8 @@ static int ssl3_send_client_key_exchange(SSL *s) | |||
1341 | 1341 | ||
1342 | tmp_buf[0]=s->client_version>>8; | 1342 | tmp_buf[0]=s->client_version>>8; |
1343 | tmp_buf[1]=s->client_version&0xff; | 1343 | tmp_buf[1]=s->client_version&0xff; |
1344 | RAND_bytes(&(tmp_buf[2]),SSL_MAX_MASTER_KEY_LENGTH-2); | 1344 | if (RAND_bytes(&(tmp_buf[2]),SSL_MAX_MASTER_KEY_LENGTH-2) <= 0) |
1345 | goto err; | ||
1345 | 1346 | ||
1346 | s->session->master_key_length=SSL_MAX_MASTER_KEY_LENGTH; | 1347 | s->session->master_key_length=SSL_MAX_MASTER_KEY_LENGTH; |
1347 | 1348 | ||
@@ -1460,7 +1461,7 @@ static int ssl3_send_client_verify(SSL *s) | |||
1460 | unsigned char data[MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH]; | 1461 | unsigned char data[MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH]; |
1461 | EVP_PKEY *pkey; | 1462 | EVP_PKEY *pkey; |
1462 | #ifndef NO_RSA | 1463 | #ifndef NO_RSA |
1463 | int i=0; | 1464 | unsigned u=0; |
1464 | #endif | 1465 | #endif |
1465 | unsigned long n; | 1466 | unsigned long n; |
1466 | #ifndef NO_DSA | 1467 | #ifndef NO_DSA |
@@ -1481,17 +1482,15 @@ static int ssl3_send_client_verify(SSL *s) | |||
1481 | { | 1482 | { |
1482 | s->method->ssl3_enc->cert_verify_mac(s, | 1483 | s->method->ssl3_enc->cert_verify_mac(s, |
1483 | &(s->s3->finish_dgst1),&(data[0])); | 1484 | &(s->s3->finish_dgst1),&(data[0])); |
1484 | i=RSA_private_encrypt( | 1485 | if (RSA_sign(NID_md5_sha1, data, |
1485 | MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH, | 1486 | MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH, |
1486 | data,&(p[2]),pkey->pkey.rsa, | 1487 | &(p[2]), &u, pkey->pkey.rsa) <= 0 ) |
1487 | RSA_PKCS1_PADDING); | ||
1488 | if (i <= 0) | ||
1489 | { | 1488 | { |
1490 | SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,ERR_R_RSA_LIB); | 1489 | SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,ERR_R_RSA_LIB); |
1491 | goto err; | 1490 | goto err; |
1492 | } | 1491 | } |
1493 | s2n(i,p); | 1492 | s2n(u,p); |
1494 | n=i+2; | 1493 | n=u+2; |
1495 | } | 1494 | } |
1496 | else | 1495 | else |
1497 | #endif | 1496 | #endif |
@@ -1689,13 +1688,13 @@ static int ssl3_check_cert_and_algorithm(SSL *s) | |||
1689 | #endif | 1688 | #endif |
1690 | #endif | 1689 | #endif |
1691 | 1690 | ||
1692 | if (SSL_IS_EXPORT(algs) && !has_bits(i,EVP_PKT_EXP)) | 1691 | if (SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) && !has_bits(i,EVP_PKT_EXP)) |
1693 | { | 1692 | { |
1694 | #ifndef NO_RSA | 1693 | #ifndef NO_RSA |
1695 | if (algs & SSL_kRSA) | 1694 | if (algs & SSL_kRSA) |
1696 | { | 1695 | { |
1697 | if (rsa == NULL | 1696 | if (rsa == NULL |
1698 | || RSA_size(rsa) > SSL_EXPORT_PKEYLENGTH(algs)) | 1697 | || RSA_size(rsa) > SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher)) |
1699 | { | 1698 | { |
1700 | SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_MISSING_EXPORT_TMP_RSA_KEY); | 1699 | SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_MISSING_EXPORT_TMP_RSA_KEY); |
1701 | goto f_err; | 1700 | goto f_err; |
@@ -1707,7 +1706,7 @@ static int ssl3_check_cert_and_algorithm(SSL *s) | |||
1707 | if (algs & (SSL_kEDH|SSL_kDHr|SSL_kDHd)) | 1706 | if (algs & (SSL_kEDH|SSL_kDHr|SSL_kDHd)) |
1708 | { | 1707 | { |
1709 | if (dh == NULL | 1708 | if (dh == NULL |
1710 | || DH_size(dh) > SSL_EXPORT_PKEYLENGTH(algs)) | 1709 | || DH_size(dh) > SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher)) |
1711 | { | 1710 | { |
1712 | SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_MISSING_EXPORT_TMP_DH_KEY); | 1711 | SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_MISSING_EXPORT_TMP_DH_KEY); |
1713 | goto f_err; | 1712 | goto f_err; |