summaryrefslogtreecommitdiffstats
path: root/ssl/s3_enc.c
diff options
context:
space:
mode:
Diffstat (limited to 'ssl/s3_enc.c')
-rw-r--r--ssl/s3_enc.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/ssl/s3_enc.c b/ssl/s3_enc.c
index 2fbfead2cf..ab63b6c8fb 100644
--- a/ssl/s3_enc.c
+++ b/ssl/s3_enc.c
@@ -59,6 +59,7 @@
#include <stdio.h>
#include <openssl/evp.h>
#include "ssl_locl.h"
+#include <openssl/md5.h>
static unsigned char ssl3_pad_1[48]={
0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
@@ -91,6 +92,8 @@ static int ssl3_generate_key_block(SSL *s, unsigned char *km, int num)
c = os_toascii[c]; /*'A' in ASCII */
#endif
k=0;
+ EVP_MD_CTX_init(&m5);
+ EVP_MD_CTX_init(&s1);
for (i=0; i<num; i+=MD5_DIGEST_LENGTH)
{
k++;
@@ -127,6 +130,8 @@ static int ssl3_generate_key_block(SSL *s, unsigned char *km, int num)
km+=MD5_DIGEST_LENGTH;
}
memset(smd,0,SHA_DIGEST_LENGTH);
+ EVP_MD_CTX_cleanup(&m5);
+ EVP_MD_CTX_cleanup(&s1);
return 1;
}
@@ -244,6 +249,7 @@ int ssl3_change_cipher_state(SSL *s, int which)
goto err2;
}
+ EVP_MD_CTX_init(&md);
memcpy(mac_secret,ms,i);
if (exp)
{
@@ -273,6 +279,7 @@ int ssl3_change_cipher_state(SSL *s, int which)
memset(&(exp_key[0]),0,sizeof(exp_key));
memset(&(exp_iv[0]),0,sizeof(exp_iv));
+ EVP_MD_CTX_cleanup(&md);
return(1);
err:
SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE,ERR_R_MALLOC_FAILURE);
@@ -447,6 +454,7 @@ static int ssl3_handshake_mac(SSL *s, EVP_MD_CTX *in_ctx,
unsigned char md_buf[EVP_MAX_MD_SIZE];
EVP_MD_CTX ctx;
+ EVP_MD_CTX_init(&ctx);
EVP_MD_CTX_copy(&ctx,in_ctx);
n=EVP_MD_CTX_size(&ctx);
@@ -466,7 +474,7 @@ static int ssl3_handshake_mac(SSL *s, EVP_MD_CTX *in_ctx,
EVP_DigestUpdate(&ctx,md_buf,i);
EVP_DigestFinal(&ctx,p,&ret);
- memset(&ctx,0,sizeof(EVP_MD_CTX));
+ EVP_MD_CTX_cleanup(&ctx);
return((int)ret);
}
@@ -500,6 +508,7 @@ int ssl3_mac(SSL *ssl, unsigned char *md, int send)
npad=(48/md_size)*md_size;
/* Chop the digest off the end :-) */
+ EVP_MD_CTX_init(&md_ctx);
EVP_DigestInit( &md_ctx,hash);
EVP_DigestUpdate(&md_ctx,mac_sec,md_size);
@@ -519,6 +528,8 @@ int ssl3_mac(SSL *ssl, unsigned char *md, int send)
EVP_DigestUpdate(&md_ctx,md,md_size);
EVP_DigestFinal( &md_ctx,md,&md_size);
+ EVP_MD_CTX_cleanup(&md_ctx);
+
for (i=7; i>=0; i--)
{
++seq[i];
@@ -547,6 +558,7 @@ int ssl3_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p,
int i,ret=0;
unsigned int n;
+ EVP_MD_CTX_init(&ctx);
for (i=0; i<3; i++)
{
EVP_DigestInit(&ctx,s->ctx->sha1);
@@ -565,6 +577,7 @@ int ssl3_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p,
out+=n;
ret+=n;
}
+ EVP_MD_CTX_cleanup(&ctx);
return(ret);
}