Use less complicated arrangement for data strutures related to Finished
messages.
This commit is contained in:
parent
f2d9a32cf4
commit
9fb617e252
@ -70,19 +70,6 @@ int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen)
|
|||||||
unsigned char *p,*d;
|
unsigned char *p,*d;
|
||||||
int i;
|
int i;
|
||||||
unsigned long l;
|
unsigned long l;
|
||||||
unsigned char *finish_md;
|
|
||||||
int *finish_md_len;
|
|
||||||
|
|
||||||
if (s->state & SSL_ST_ACCEPT)
|
|
||||||
{
|
|
||||||
finish_md = s->s3->tmp.server_finish_md;
|
|
||||||
finish_md_len = &s->s3->tmp.server_finish_md_len;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
finish_md = s->s3->tmp.client_finish_md;
|
|
||||||
finish_md_len = &s->s3->tmp.client_finish_md_len;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s->state == a)
|
if (s->state == a)
|
||||||
{
|
{
|
||||||
@ -92,9 +79,9 @@ int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen)
|
|||||||
i=s->method->ssl3_enc->final_finish_mac(s,
|
i=s->method->ssl3_enc->final_finish_mac(s,
|
||||||
&(s->s3->finish_dgst1),
|
&(s->s3->finish_dgst1),
|
||||||
&(s->s3->finish_dgst2),
|
&(s->s3->finish_dgst2),
|
||||||
sender,slen,finish_md);
|
sender,slen,s->s3->tmp.finish_md);
|
||||||
*finish_md_len = i;
|
s->s3->tmp.finish_md_len = i;
|
||||||
memcpy(p, finish_md, i);
|
memcpy(p, s->s3->tmp.finish_md, i);
|
||||||
p+=i;
|
p+=i;
|
||||||
l=i;
|
l=i;
|
||||||
|
|
||||||
@ -122,22 +109,9 @@ int ssl3_get_finished(SSL *s, int a, int b)
|
|||||||
int al,i,ok;
|
int al,i,ok;
|
||||||
long n;
|
long n;
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
unsigned char *finish_md;
|
|
||||||
int *finish_md_len;
|
|
||||||
|
|
||||||
if (s->state & SSL_ST_ACCEPT)
|
|
||||||
{
|
|
||||||
finish_md = s->s3->tmp.client_finish_md;
|
|
||||||
finish_md_len = &s->s3->tmp.client_finish_md_len;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
finish_md = s->s3->tmp.server_finish_md;
|
|
||||||
finish_md_len = &s->s3->tmp.server_finish_md_len;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* the mac has already been generated when we received the
|
/* the mac has already been generated when we received the
|
||||||
* change cipher spec message and is in finish_md
|
* change cipher spec message and is in s->s3->tmp.peer_finish_md
|
||||||
*/
|
*/
|
||||||
|
|
||||||
n=ssl3_get_message(s,
|
n=ssl3_get_message(s,
|
||||||
@ -158,9 +132,8 @@ int ssl3_get_finished(SSL *s, int a, int b)
|
|||||||
}
|
}
|
||||||
s->s3->change_cipher_spec=0;
|
s->s3->change_cipher_spec=0;
|
||||||
|
|
||||||
p=(unsigned char *)s->init_buf->data;
|
p = (unsigned char *)s->init_buf->data;
|
||||||
|
i = s->s3->tmp.peer_finish_md_len;
|
||||||
i=*finish_md_len;
|
|
||||||
|
|
||||||
if (i != n)
|
if (i != n)
|
||||||
{
|
{
|
||||||
@ -169,7 +142,7 @@ int ssl3_get_finished(SSL *s, int a, int b)
|
|||||||
goto f_err;
|
goto f_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (memcmp(p, finish_md, i) != 0)
|
if (memcmp(p, s->s3->tmp.peer_finish_md, i) != 0)
|
||||||
{
|
{
|
||||||
al=SSL_AD_DECRYPT_ERROR;
|
al=SSL_AD_DECRYPT_ERROR;
|
||||||
SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_DIGEST_CHECK_FAILED);
|
SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_DIGEST_CHECK_FAILED);
|
||||||
|
10
ssl/s3_pkt.c
10
ssl/s3_pkt.c
@ -937,8 +937,6 @@ static int do_change_cipher_spec(SSL *s)
|
|||||||
int i;
|
int i;
|
||||||
const char *sender;
|
const char *sender;
|
||||||
int slen;
|
int slen;
|
||||||
unsigned char *finish_md;
|
|
||||||
int *finish_md_len;
|
|
||||||
|
|
||||||
if (s->state & SSL_ST_ACCEPT)
|
if (s->state & SSL_ST_ACCEPT)
|
||||||
i=SSL3_CHANGE_CIPHER_SERVER_READ;
|
i=SSL3_CHANGE_CIPHER_SERVER_READ;
|
||||||
@ -961,21 +959,17 @@ static int do_change_cipher_spec(SSL *s)
|
|||||||
{
|
{
|
||||||
sender=s->method->ssl3_enc->server_finished_label;
|
sender=s->method->ssl3_enc->server_finished_label;
|
||||||
slen=s->method->ssl3_enc->server_finished_label_len;
|
slen=s->method->ssl3_enc->server_finished_label_len;
|
||||||
finish_md = s->s3->tmp.server_finish_md;
|
|
||||||
finish_md_len = &s->s3->tmp.server_finish_md_len;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sender=s->method->ssl3_enc->client_finished_label;
|
sender=s->method->ssl3_enc->client_finished_label;
|
||||||
slen=s->method->ssl3_enc->client_finished_label_len;
|
slen=s->method->ssl3_enc->client_finished_label_len;
|
||||||
finish_md = s->s3->tmp.client_finish_md;
|
|
||||||
finish_md_len = &s->s3->tmp.client_finish_md_len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*finish_md_len = s->method->ssl3_enc->final_finish_mac(s,
|
s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s,
|
||||||
&(s->s3->finish_dgst1),
|
&(s->s3->finish_dgst1),
|
||||||
&(s->s3->finish_dgst2),
|
&(s->s3->finish_dgst2),
|
||||||
sender,slen,finish_md);
|
sender,slen,s->s3->tmp.peer_finish_md);
|
||||||
|
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
@ -318,10 +318,10 @@ typedef struct ssl3_ctx_st
|
|||||||
unsigned char cert_verify_md[EVP_MAX_MD_SIZE*2];
|
unsigned char cert_verify_md[EVP_MAX_MD_SIZE*2];
|
||||||
|
|
||||||
/* actually only need to be 16+20 for SSLv3 and 12 for TLS */
|
/* actually only need to be 16+20 for SSLv3 and 12 for TLS */
|
||||||
unsigned char server_finish_md[EVP_MAX_MD_SIZE*2];
|
unsigned char finish_md[EVP_MAX_MD_SIZE*2];
|
||||||
int server_finish_md_len;
|
int finish_md_len;
|
||||||
unsigned char client_finish_md[EVP_MAX_MD_SIZE*2];
|
unsigned char peer_finish_md[EVP_MAX_MD_SIZE*2];
|
||||||
int client_finish_md_len;
|
int peer_finish_md_len;
|
||||||
|
|
||||||
unsigned long message_size;
|
unsigned long message_size;
|
||||||
int message_type;
|
int message_type;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user