projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Metrowerks for Motorola tune-up.
[openssl.git]
/
ssl
/
s3_clnt.c
diff --git
a/ssl/s3_clnt.c
b/ssl/s3_clnt.c
index de07ac76c98f5b80c10f1c3abf82d521dc1804ef..af4bd15194f2abad19e2a36f9bc65179bb06c65e 100644
(file)
--- a/
ssl/s3_clnt.c
+++ b/
ssl/s3_clnt.c
@@
-254,6
+254,7
@@
int ssl3_connect(SSL *s)
case SSL3_ST_CW_CERT_A:
case SSL3_ST_CW_CERT_B:
case SSL3_ST_CW_CERT_C:
case SSL3_ST_CW_CERT_A:
case SSL3_ST_CW_CERT_B:
case SSL3_ST_CW_CERT_C:
+ case SSL3_ST_CW_CERT_D:
ret=ssl3_send_client_certificate(s);
if (ret <= 0) goto end;
s->state=SSL3_ST_CW_KEY_EXCH_A;
ret=ssl3_send_client_certificate(s);
if (ret <= 0) goto end;
s->state=SSL3_ST_CW_KEY_EXCH_A;
@@
-757,7
+758,7
@@
static int ssl3_get_server_certificate(SSL *s)
}
i=ssl_verify_cert_chain(s,sk);
}
i=ssl_verify_cert_chain(s,sk);
-
if ((s->verify_mode != SSL_VERIFY_NONE) && (!i))
+ if ((s->verify_mode != SSL_VERIFY_NONE) && (!i))
{
al=ssl_verify_alarm_type(s->verify_result);
SSLerr(SSL_F_SSL3_GET_SERVER_CERTIFICATE,SSL_R_CERTIFICATE_VERIFY_FAILED);
{
al=ssl_verify_alarm_type(s->verify_result);
SSLerr(SSL_F_SSL3_GET_SERVER_CERTIFICATE,SSL_R_CERTIFICATE_VERIFY_FAILED);
@@
-929,6
+930,7
@@
static int ssl3_get_key_exchange(SSL *s)
goto err;
}
s->session->sess_cert->peer_rsa_tmp=rsa;
goto err;
}
s->session->sess_cert->peer_rsa_tmp=rsa;
+ rsa=NULL;
}
else
#endif
}
else
#endif
@@
-1051,15
+1053,15
@@
static int ssl3_get_key_exchange(SSL *s)
q+=i;
j+=i;
}
q+=i;
j+=i;
}
- i=RSA_
public_decrypt((int)n,p,p,pkey->pkey.rsa
,
-
RSA_PKCS1_PADDING
);
- if (i <
=
0)
+ i=RSA_
verify(NID_md5_sha1, md_buf, j, p, n
,
+
pkey->pkey.rsa
);
+ if (i < 0)
{
al=SSL_AD_DECRYPT_ERROR;
SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_RSA_DECRYPT);
goto f_err;
}
{
al=SSL_AD_DECRYPT_ERROR;
SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_RSA_DECRYPT);
goto f_err;
}
- if (
(j != i) || (memcmp(p,md_buf,i) != 0)
)
+ if (
i == 0
)
{
/* bad signature */
al=SSL_AD_DECRYPT_ERROR;
{
/* bad signature */
al=SSL_AD_DECRYPT_ERROR;
@@
-1113,6
+1115,14
@@
f_err:
ssl3_send_alert(s,SSL3_AL_FATAL,al);
err:
EVP_PKEY_free(pkey);
ssl3_send_alert(s,SSL3_AL_FATAL,al);
err:
EVP_PKEY_free(pkey);
+#ifndef NO_RSA
+ if (rsa != NULL)
+ RSA_free(rsa);
+#endif
+#ifndef NO_DH
+ if (dh != NULL)
+ DH_free(dh);
+#endif
return(-1);
}
return(-1);
}
@@
-1326,6
+1336,7
@@
static int ssl3_send_client_key_exchange(SSL *s)
goto err;
}
rsa=pkey->pkey.rsa;
goto err;
}
rsa=pkey->pkey.rsa;
+ EVP_PKEY_free(pkey);
}
tmp_buf[0]=s->client_version>>8;
}
tmp_buf[0]=s->client_version>>8;
@@
-1449,7
+1460,7
@@
static int ssl3_send_client_verify(SSL *s)
unsigned char data[MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH];
EVP_PKEY *pkey;
#ifndef NO_RSA
unsigned char data[MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH];
EVP_PKEY *pkey;
#ifndef NO_RSA
-
int i
=0;
+
unsigned u
=0;
#endif
unsigned long n;
#ifndef NO_DSA
#endif
unsigned long n;
#ifndef NO_DSA
@@
-1470,17
+1481,15
@@
static int ssl3_send_client_verify(SSL *s)
{
s->method->ssl3_enc->cert_verify_mac(s,
&(s->s3->finish_dgst1),&(data[0]));
{
s->method->ssl3_enc->cert_verify_mac(s,
&(s->s3->finish_dgst1),&(data[0]));
- i=RSA_private_encrypt(
- MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH,
- data,&(p[2]),pkey->pkey.rsa,
- RSA_PKCS1_PADDING);
- if (i <= 0)
+ if (RSA_sign(NID_md5_sha1, data,
+ MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH,
+ &(p[2]), &u, pkey->pkey.rsa) <= 0 )
{
SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,ERR_R_RSA_LIB);
goto err;
}
{
SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,ERR_R_RSA_LIB);
goto err;
}
- s2n(
i
,p);
- n=
i
+2;
+ s2n(
u
,p);
+ n=
u
+2;
}
else
#endif
}
else
#endif