diff -cr openssl-0.9.6a.clean/apps/enc.c openssl-0.9.6a/apps/enc.c
*** openssl-0.9.6a.clean/apps/enc.c Thu Apr  5 14:08:56 2001
--- openssl-0.9.6a/apps/enc.c Mon Apr 23 16:10:20 2001
***************
*** 66,74 ****
  #include <openssl/objects.h>
  #include <openssl/x509.h>
  #include <openssl/rand.h>
- #ifndef NO_MD5
- #include <openssl/md5.h>
- #endif
  #include <openssl/pem.h>
  
  int set_hex(char *in,unsigned char *out,int size);
--- 66,71 ----
diff -cr openssl-0.9.6a.clean/apps/passwd.c openssl-0.9.6a/apps/passwd.c
*** openssl-0.9.6a.clean/apps/passwd.c Thu Apr  5 14:09:00 2001
--- openssl-0.9.6a/apps/passwd.c Mon Apr 23 16:05:48 2001
***************
*** 20,26 ****
  # include <openssl/des.h>
  #endif
  #ifndef NO_MD5CRYPT_1
! # include <openssl/md5.h>
  #endif
  
  
--- 20,26 ----
  # include <openssl/des.h>
  #endif
  #ifndef NO_MD5CRYPT_1
! # include <openssl/evp.h>
  #endif
  
  
***************
*** 305,311 ****
  	unsigned char buf[MD5_DIGEST_LENGTH];
  	char *salt_out;
  	int n, i;
! 	MD5_CTX md;
  	size_t passwd_len, salt_len;
  
  	passwd_len = strlen(passwd);
--- 305,311 ----
  	unsigned char buf[MD5_DIGEST_LENGTH];
  	char *salt_out;
  	int n, i;
! 	EVP_MD_CTX md;
  	size_t passwd_len, salt_len;
  
  	passwd_len = strlen(passwd);
***************
*** 320,367 ****
  	salt_len = strlen(salt_out);
  	assert(salt_len <= 8);
  	
! 	MD5_Init(&md);
! 	MD5_Update(&md, passwd, passwd_len);
! 	MD5_Update(&md, "$", 1);
! 	MD5_Update(&md, magic, strlen(magic));
! 	MD5_Update(&md, "$", 1);
! 	MD5_Update(&md, salt_out, salt_len);
  	
  	 {
! 		MD5_CTX md2;
  
! 		MD5_Init(&md2);
! 		MD5_Update(&md2, passwd, passwd_len);
! 		MD5_Update(&md2, salt_out, salt_len);
! 		MD5_Update(&md2, passwd, passwd_len);
! 		MD5_Final(buf, &md2);
  	 }
  	for (i = passwd_len; i > sizeof buf; i -= sizeof buf)
! 		MD5_Update(&md, buf, sizeof buf);
! 	MD5_Update(&md, buf, i);
  	
  	n = passwd_len;
  	while (n)
  		{
! 		MD5_Update(&md, (n & 1) ? "\0" : passwd, 1);
  		n >>= 1;
  		}
! 	MD5_Final(buf, &md);
  
  	for (i = 0; i < 1000; i++)
  		{
! 		MD5_CTX md2;
  
! 		MD5_Init(&md2);
! 		MD5_Update(&md2, (i & 1) ? (unsigned char *) passwd : buf,
  		                 (i & 1) ? passwd_len : sizeof buf);
  		if (i % 3)
! 			MD5_Update(&md2, salt_out, salt_len);
  		if (i % 7)
! 			MD5_Update(&md2, passwd, passwd_len);
! 		MD5_Update(&md2, (i & 1) ? buf : (unsigned char *) passwd,
  		                 (i & 1) ? sizeof buf : passwd_len);
! 		MD5_Final(buf, &md2);
  		}
  	
  	 {
--- 320,367 ----
  	salt_len = strlen(salt_out);
  	assert(salt_len <= 8);
  	
! 	EVP_DigestInit(&md,EVP_md5());
! 	EVP_DigestUpdate(&md, passwd, passwd_len);
! 	EVP_DigestUpdate(&md, "$", 1);
! 	EVP_DigestUpdate(&md, magic, strlen(magic));
! 	EVP_DigestUpdate(&md, "$", 1);
! 	EVP_DigestUpdate(&md, salt_out, salt_len);
  	
  	 {
! 		EVP_MD_CTX md2;
  
! 		EVP_DigestInit(&md2,EVP_md5());
! 		EVP_DigestUpdate(&md2, passwd, passwd_len);
! 		EVP_DigestUpdate(&md2, salt_out, salt_len);
! 		EVP_DigestUpdate(&md2, passwd, passwd_len);
! 		EVP_DigestFinal(&md2, buf, NULL);
  	 }
  	for (i = passwd_len; i > sizeof buf; i -= sizeof buf)
! 		EVP_DigestUpdate(&md, buf, sizeof buf);
! 	EVP_DigestUpdate(&md, buf, i);
  	
  	n = passwd_len;
  	while (n)
  		{
! 		EVP_DigestUpdate(&md, (n & 1) ? "\0" : passwd, 1);
  		n >>= 1;
  		}
! 	EVP_DigestFinal(&md, buf, NULL);
  
  	for (i = 0; i < 1000; i++)
  		{
! 		EVP_MD_CTX md2;
  
! 		EVP_DigestInit(&md2,EVP_md5());
! 		EVP_DigestUpdate(&md2, (i & 1) ? (unsigned char *) passwd : buf,
  		                 (i & 1) ? passwd_len : sizeof buf);
  		if (i % 3)
! 			EVP_DigestUpdate(&md2, salt_out, salt_len);
  		if (i % 7)
! 			EVP_DigestUpdate(&md2, passwd, passwd_len);
! 		EVP_DigestUpdate(&md2, (i & 1) ? buf : (unsigned char *) passwd,
  		                 (i & 1) ? sizeof buf : passwd_len);
! 		EVP_DigestFinal(&md2, buf, NULL);
  		}
  	
  	 {
diff -cr openssl-0.9.6a.clean/apps/speed.c openssl-0.9.6a/apps/speed.c
*** openssl-0.9.6a.clean/apps/speed.c Thu Apr  5 14:09:18 2001
--- openssl-0.9.6a/apps/speed.c Mon Apr 23 15:59:56 2001
***************
*** 871,877 ****
  			print_message(names[D_MD2],c[D_MD2][j],lengths[j]);
  			Time_F(START,usertime);
  			for (count=0,run=1; COND(c[D_MD2][j]); count++)
! 				MD2(buf,(unsigned long)lengths[j],&(md2[0]));
  			d=Time_F(STOP,usertime);
  			BIO_printf(bio_err,"%ld %s's in %.2fs\n",
  				count,names[D_MD2],d);
--- 871,877 ----
  			print_message(names[D_MD2],c[D_MD2][j],lengths[j]);
  			Time_F(START,usertime);
  			for (count=0,run=1; COND(c[D_MD2][j]); count++)
! 				EVP_Digest(buf,(unsigned long)lengths[j],&(md2[0]),EVP_md2());
  			d=Time_F(STOP,usertime);
  			BIO_printf(bio_err,"%ld %s's in %.2fs\n",
  				count,names[D_MD2],d);
***************
*** 887,893 ****
  			print_message(names[D_MDC2],c[D_MDC2][j],lengths[j]);
  			Time_F(START,usertime);
  			for (count=0,run=1; COND(c[D_MDC2][j]); count++)
! 				MDC2(buf,(unsigned long)lengths[j],&(mdc2[0]));
  			d=Time_F(STOP,usertime);
  			BIO_printf(bio_err,"%ld %s's in %.2fs\n",
  				count,names[D_MDC2],d);
--- 887,893 ----
  			print_message(names[D_MDC2],c[D_MDC2][j],lengths[j]);
  			Time_F(START,usertime);
  			for (count=0,run=1; COND(c[D_MDC2][j]); count++)
! 				EVP_Digest(buf,(unsigned long)lengths[j],&(mdc2[0]),EVP_mdc2());
  			d=Time_F(STOP,usertime);
  			BIO_printf(bio_err,"%ld %s's in %.2fs\n",
  				count,names[D_MDC2],d);
***************
*** 904,910 ****
  			print_message(names[D_MD4],c[D_MD4][j],lengths[j]);
  			Time_F(START,usertime);
  			for (count=0,run=1; COND(c[D_MD4][j]); count++)
! 				MD4(&(buf[0]),(unsigned long)lengths[j],&(md4[0]));
  			d=Time_F(STOP,usertime);
  			BIO_printf(bio_err,"%ld %s's in %.2fs\n",
  				count,names[D_MD4],d);
--- 904,910 ----
  			print_message(names[D_MD4],c[D_MD4][j],lengths[j]);
  			Time_F(START,usertime);
  			for (count=0,run=1; COND(c[D_MD4][j]); count++)
! 				EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md4[0]),EVP_md4());
  			d=Time_F(STOP,usertime);
  			BIO_printf(bio_err,"%ld %s's in %.2fs\n",
  				count,names[D_MD4],d);
***************
*** 921,927 ****
  			print_message(names[D_MD5],c[D_MD5][j],lengths[j]);
  			Time_F(START,usertime);
  			for (count=0,run=1; COND(c[D_MD5][j]); count++)
! 				MD5(&(buf[0]),(unsigned long)lengths[j],&(md5[0]));
  			d=Time_F(STOP,usertime);
  			BIO_printf(bio_err,"%ld %s's in %.2fs\n",
  				count,names[D_MD5],d);
--- 921,927 ----
  			print_message(names[D_MD5],c[D_MD5][j],lengths[j]);
  			Time_F(START,usertime);
  			for (count=0,run=1; COND(c[D_MD5][j]); count++)
! 				EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md5[0]),EVP_md5());
  			d=Time_F(STOP,usertime);
  			BIO_printf(bio_err,"%ld %s's in %.2fs\n",
  				count,names[D_MD5],d);
***************
*** 962,968 ****
  			print_message(names[D_SHA1],c[D_SHA1][j],lengths[j]);
  			Time_F(START,usertime);
  			for (count=0,run=1; COND(c[D_SHA1][j]); count++)
! 				SHA1(buf,(unsigned long)lengths[j],&(sha[0]));
  			d=Time_F(STOP,usertime);
  			BIO_printf(bio_err,"%ld %s's in %.2fs\n",
  				count,names[D_SHA1],d);
--- 962,968 ----
  			print_message(names[D_SHA1],c[D_SHA1][j],lengths[j]);
  			Time_F(START,usertime);
  			for (count=0,run=1; COND(c[D_SHA1][j]); count++)
! 				EVP_Digest(buf,(unsigned long)lengths[j],&(sha[0]),EVP_sha1());
  			d=Time_F(STOP,usertime);
  			BIO_printf(bio_err,"%ld %s's in %.2fs\n",
  				count,names[D_SHA1],d);
***************
*** 979,984 ****
--- 979,985 ----
  			Time_F(START,usertime);
  			for (count=0,run=1; COND(c[D_RMD160][j]); count++)
  				RIPEMD160(buf,(unsigned long)lengths[j],&(rmd160[0]));
+ 				EVP_Digest(buf,(unsigned long)lengths[j],&(rmd160[0]),EVP_ripemd160());
  			d=Time_F(STOP,usertime);
  			BIO_printf(bio_err,"%ld %s's in %.2fs\n",
  				count,names[D_RMD160],d);
diff -cr openssl-0.9.6a.clean/crypto/dsa/dsa_gen.c openssl-0.9.6a/crypto/dsa/dsa_gen.c
*** openssl-0.9.6a.clean/crypto/dsa/dsa_gen.c Sat Feb  5 07:17:28 2000
--- openssl-0.9.6a/crypto/dsa/dsa_gen.c Mon Apr 23 15:19:02 2001
***************
*** 61,72 ****
  #ifdef GENUINE_DSA
  /* Parameter generation follows the original release of FIPS PUB 186,
   * Appendix 2.2 (i.e. use SHA as defined in FIPS PUB 180) */
! #define HASH    SHA
  #else
  /* Parameter generation follows the updated Appendix 2.2 for FIPS PUB 186,
   * also Appendix 2.2 of FIPS PUB 186-1 (i.e. use SHA as defined in
   * FIPS PUB 180-1) */
! #define HASH    SHA1
  #endif 
  
  #ifndef NO_SHA
--- 61,72 ----
  #ifdef GENUINE_DSA
  /* Parameter generation follows the original release of FIPS PUB 186,
   * Appendix 2.2 (i.e. use SHA as defined in FIPS PUB 180) */
! #define HASH	EVP_sha()
  #else
  /* Parameter generation follows the updated Appendix 2.2 for FIPS PUB 186,
   * also Appendix 2.2 of FIPS PUB 186-1 (i.e. use SHA as defined in
   * FIPS PUB 180-1) */
! #define HASH	EVP_sha1()
  #endif 
  
  #ifndef NO_SHA
***************
*** 74,80 ****
  #include <stdio.h>
  #include <time.h>
  #include "cryptlib.h"
! #include <openssl/sha.h>
  #include <openssl/bn.h>
  #include <openssl/dsa.h>
  #include <openssl/rand.h>
--- 74,80 ----
  #include <stdio.h>
  #include <time.h>
  #include "cryptlib.h"
! #include <openssl/evp.h>
  #include <openssl/bn.h>
  #include <openssl/dsa.h>
  #include <openssl/rand.h>
***************
*** 157,164 ****
  				}
  
  			/* step 2 */
! 			HASH(seed,SHA_DIGEST_LENGTH,md);
! 			HASH(buf,SHA_DIGEST_LENGTH,buf2);
  			for (i=0; i<SHA_DIGEST_LENGTH; i++)
  				md[i]^=buf2[i];
  
--- 157,164 ----
  				}
  
  			/* step 2 */
! 			EVP_Digest(seed,SHA_DIGEST_LENGTH,md,HASH);
! 			EVP_Digest(buf,SHA_DIGEST_LENGTH,buf2,HASH);
  			for (i=0; i<SHA_DIGEST_LENGTH; i++)
  				md[i]^=buf2[i];
  
***************
*** 205,211 ****
  					if (buf[i] != 0) break;
  					}
  
! 				HASH(buf,SHA_DIGEST_LENGTH,md);
  
  				/* step 8 */
  				if (!BN_bin2bn(md,SHA_DIGEST_LENGTH,r0))
--- 205,211 ----
  					if (buf[i] != 0) break;
  					}
  
! 				EVP_Digest(buf,SHA_DIGEST_LENGTH,md,HASH);
  
  				/* step 8 */
  				if (!BN_bin2bn(md,SHA_DIGEST_LENGTH,r0))
diff -cr openssl-0.9.6a.clean/crypto/evp/bio_ok.c openssl-0.9.6a/crypto/evp/bio_ok.c
*** openssl-0.9.6a.clean/crypto/evp/bio_ok.c Thu Apr  5 14:11:50 2001
--- openssl-0.9.6a/crypto/evp/bio_ok.c Mon Apr 23 15:42:04 2001
***************
*** 474,480 ****
  	ctx->buf_len+= md->digest->md_size;
  
  	EVP_DigestUpdate(md, WELLKNOWN, strlen(WELLKNOWN));
! 	md->digest->final(&(ctx->buf[ctx->buf_len]), &(md->md.base[0]));
  	ctx->buf_len+= md->digest->md_size;
  	ctx->blockout= 1;
  	ctx->sigio= 0;
--- 474,480 ----
  	ctx->buf_len+= md->digest->md_size;
  
  	EVP_DigestUpdate(md, WELLKNOWN, strlen(WELLKNOWN));
! 	EVP_DigestFinal(md, &(ctx->buf[ctx->buf_len]), NULL);
  	ctx->buf_len+= md->digest->md_size;
  	ctx->blockout= 1;
  	ctx->sigio= 0;
***************
*** 498,504 ****
  	ctx->buf_off+= md->digest->md_size;
  
  	EVP_DigestUpdate(md, WELLKNOWN, strlen(WELLKNOWN));
! 	md->digest->final(tmp, &(md->md.base[0]));
  	ret= memcmp(&(ctx->buf[ctx->buf_off]), tmp, md->digest->md_size) == 0;
  	ctx->buf_off+= md->digest->md_size;
  	if(ret == 1)
--- 498,504 ----
  	ctx->buf_off+= md->digest->md_size;
  
  	EVP_DigestUpdate(md, WELLKNOWN, strlen(WELLKNOWN));
! 	EVP_DigestFinal(md, tmp, NULL);
  	ret= memcmp(&(ctx->buf[ctx->buf_off]), tmp, md->digest->md_size) == 0;
  	ctx->buf_off+= md->digest->md_size;
  	if(ret == 1)
***************
*** 531,537 ****
  	memcpy(ctx->buf, &tl, OK_BLOCK_BLOCK);
  	tl= swapem(tl);
  	EVP_DigestUpdate(md, (unsigned char*) &(ctx->buf[OK_BLOCK_BLOCK]), tl);
! 	md->digest->final(&(ctx->buf[ctx->buf_len]), &(md->md.base[0]));
  	ctx->buf_len+= md->digest->md_size;
  	ctx->blockout= 1;
  	}
--- 531,537 ----
  	memcpy(ctx->buf, &tl, OK_BLOCK_BLOCK);
  	tl= swapem(tl);
  	EVP_DigestUpdate(md, (unsigned char*) &(ctx->buf[OK_BLOCK_BLOCK]), tl);
! 	EVP_DigestFinal(md, &(ctx->buf[ctx->buf_len]), NULL);
  	ctx->buf_len+= md->digest->md_size;
  	ctx->blockout= 1;
  	}
***************
*** 551,557 ****
  	if (ctx->buf_len < tl+ OK_BLOCK_BLOCK+ md->digest->md_size) return;
   
  	EVP_DigestUpdate(md, (unsigned char*) &(ctx->buf[OK_BLOCK_BLOCK]), tl);
! 	md->digest->final(tmp, &(md->md.base[0]));
  	if(memcmp(&(ctx->buf[tl+ OK_BLOCK_BLOCK]), tmp, md->digest->md_size) == 0)
  		{
  		/* there might be parts from next block lurking around ! */
--- 551,557 ----
  	if (ctx->buf_len < tl+ OK_BLOCK_BLOCK+ md->digest->md_size) return;
   
  	EVP_DigestUpdate(md, (unsigned char*) &(ctx->buf[OK_BLOCK_BLOCK]), tl);
! 	EVP_DigestFinal(md, tmp, NULL);
  	if(memcmp(&(ctx->buf[tl+ OK_BLOCK_BLOCK]), tmp, md->digest->md_size) == 0)
  		{
  		/* there might be parts from next block lurking around ! */
diff -cr openssl-0.9.6a.clean/crypto/evp/digest.c openssl-0.9.6a/crypto/evp/digest.c
*** openssl-0.9.6a.clean/crypto/evp/digest.c Sat Jun  5 06:16:32 1999
--- openssl-0.9.6a/crypto/evp/digest.c Mon Apr 23 13:54:18 2001
***************
*** 90,92 ****
--- 90,107 ----
      memcpy((char *)out,(char *)in,in->digest->ctx_size);
      return 1;
  }    
+ 
+ unsigned char *EVP_Digest(const unsigned char *d, unsigned long n,
+ 						  unsigned char *md, const EVP_MD *type)
+ {
+ 	EVP_MD_CTX c;
+ 	// Be safe on the size (even though it is overkill)
+ 	static unsigned char m[SHA_DIGEST_LENGTH+MD5_DIGEST_LENGTH];
+ 
+ 	if (md == NULL) md=m;
+ 	EVP_DigestInit(&c, type);
+ 	EVP_DigestUpdate(&c,d,n);
+ 	EVP_DigestFinal(&c, md, NULL);
+ 	memset(&c,0,sizeof(c));
+ 	return(md);
+ }
diff -cr openssl-0.9.6a.clean/crypto/evp/evp.h openssl-0.9.6a/crypto/evp/evp.h
*** openssl-0.9.6a.clean/crypto/evp/evp.h Thu Apr  5 14:11:58 2001
--- openssl-0.9.6a/crypto/evp/evp.h Mon Apr 23 14:07:20 2001
***************
*** 549,554 ****
--- 549,556 ----
  void	EVP_DigestUpdate(EVP_MD_CTX *ctx,const void *d,
  			 unsigned int cnt);
  void	EVP_DigestFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s);
+ unsigned char *EVP_Digest(const unsigned char *d, unsigned long n,
+ 						  unsigned char *md, const EVP_MD *type);
  
  int	EVP_read_pw_string(char *buf,int length,const char *prompt,int verify);
  void	EVP_set_pw_prompt(char *prompt);
diff -cr openssl-0.9.6a.clean/crypto/md2/md2test.c openssl-0.9.6a/crypto/md2/md2test.c
*** openssl-0.9.6a.clean/crypto/md2/md2test.c Wed Sep  8 15:58:08 1999
--- openssl-0.9.6a/crypto/md2/md2test.c Mon Apr 23 16:20:44 2001
***************
*** 67,73 ****
      return(0);
  }
  #else
! #include <openssl/md2.h>
  
  #ifdef CHARSET_EBCDIC
  #include <openssl/ebcdic.h>
--- 67,73 ----
      return(0);
  }
  #else
! #include <openssl/evp.h>
  
  #ifdef CHARSET_EBCDIC
  #include <openssl/ebcdic.h>
***************
*** 101,112 ****
  	char **P,**R;
  	char *p;
  
  	P=test;
  	R=ret;
  	i=1;
  	while (*P != NULL)
  		{
! 		p=pt(MD2((unsigned char *)*P,(unsigned long)strlen(*P),NULL));
  		if (strcmp(p,*R) != 0)
  			{
  			printf("error calculating MD2 on '%s'\n",*P);
--- 101,113 ----
  	char **P,**R;
  	char *p;
  
+ 	EVP_add_digest(EVP_md2());
  	P=test;
  	R=ret;
  	i=1;
  	while (*P != NULL)
  		{
! 		p=pt(EVP_Digest((unsigned char *)*P,(unsigned long)strlen(*P),NULL,EVP_md2()));
  		if (strcmp(p,*R) != 0)
  			{
  			printf("error calculating MD2 on '%s'\n",*P);
***************
*** 119,124 ****
--- 120,126 ----
  		R++;
  		P++;
  		}
+ 	EVP_cleanup();
  	exit(err);
  	return(0);
  	}
diff -cr openssl-0.9.6a.clean/crypto/md4/md4test.c openssl-0.9.6a/crypto/md4/md4test.c
*** openssl-0.9.6a.clean/crypto/md4/md4test.c Thu Apr  5 14:12:10 2001
--- openssl-0.9.6a/crypto/md4/md4test.c Mon Apr 23 17:09:48 2001
***************
*** 67,73 ****
      return(0);
  }
  #else
! #include <openssl/md4.h>
  
  static char *test[]={
  	"",
--- 67,73 ----
      return(0);
  }
  #else
! #include <openssl/evp.h>
  
  static char *test[]={
  	"",
***************
*** 97,108 ****
  	unsigned char **P,**R;
  	char *p;
  
  	P=(unsigned char **)test;
  	R=(unsigned char **)ret;
  	i=1;
  	while (*P != NULL)
  		{
! 		p=pt(MD4(&(P[0][0]),(unsigned long)strlen((char *)*P),NULL));
  		if (strcmp(p,(char *)*R) != 0)
  			{
  			printf("error calculating MD4 on '%s'\n",*P);
--- 97,109 ----
  	unsigned char **P,**R;
  	char *p;
  
+ 	EVP_add_digest(EVP_md4());
  	P=(unsigned char **)test;
  	R=(unsigned char **)ret;
  	i=1;
  	while (*P != NULL)
  		{
! 		p=pt(EVP_Digest(&(P[0][0]),(unsigned long)strlen((char *)*P),NULL,EVP_md4()));
  		if (strcmp(p,(char *)*R) != 0)
  			{
  			printf("error calculating MD4 on '%s'\n",*P);
***************
*** 115,120 ****
--- 116,122 ----
  		R++;
  		P++;
  		}
+ 	EVP_cleanup();
  	exit(err);
  	return(0);
  	}
diff -cr openssl-0.9.6a.clean/crypto/md5/md5test.c openssl-0.9.6a/crypto/md5/md5test.c
*** openssl-0.9.6a.clean/crypto/md5/md5test.c Wed Sep  8 15:58:08 1999
--- openssl-0.9.6a/crypto/md5/md5test.c Mon Apr 23 16:24:32 2001
***************
*** 67,73 ****
      return(0);
  }
  #else
! #include <openssl/md5.h>
  
  static char *test[]={
  	"",
--- 67,73 ----
      return(0);
  }
  #else
! #include <openssl/evp.h>
  
  static char *test[]={
  	"",
***************
*** 97,108 ****
  	unsigned char **P,**R;
  	char *p;
  
  	P=(unsigned char **)test;
  	R=(unsigned char **)ret;
  	i=1;
  	while (*P != NULL)
  		{
! 		p=pt(MD5(&(P[0][0]),(unsigned long)strlen((char *)*P),NULL));
  		if (strcmp(p,(char *)*R) != 0)
  			{
  			printf("error calculating MD5 on '%s'\n",*P);
--- 97,109 ----
  	unsigned char **P,**R;
  	char *p;
  
+ 	EVP_add_digest(EVP_md5());
  	P=(unsigned char **)test;
  	R=(unsigned char **)ret;
  	i=1;
  	while (*P != NULL)
  		{
! 		p=pt(EVP_Digest(&(P[0][0]),(unsigned long)strlen((char *)*P),NULL,EVP_md5()));
  		if (strcmp(p,(char *)*R) != 0)
  			{
  			printf("error calculating MD5 on '%s'\n",*P);
***************
*** 115,120 ****
--- 116,122 ----
  		R++;
  		P++;
  		}
+ 	EVP_cleanup();
  	exit(err);
  	return(0);
  	}
diff -cr openssl-0.9.6a.clean/crypto/mdc2/mdc2test.c openssl-0.9.6a/crypto/mdc2/mdc2test.c
*** openssl-0.9.6a.clean/crypto/mdc2/mdc2test.c Thu Jan 20 17:03:30 2000
--- openssl-0.9.6a/crypto/mdc2/mdc2test.c Mon Apr 23 16:30:30 2001
***************
*** 72,77 ****
--- 72,78 ----
  }
  #else
  #include <openssl/mdc2.h>
+ #include <openssl/evp.h>
  
  #ifdef CHARSET_EBCDIC
  #include <openssl/ebcdic.h>
***************
*** 92,98 ****
  	int ret=0;
  	unsigned char md[MDC2_DIGEST_LENGTH];
  	int i;
! 	MDC2_CTX c;
  	static char *text="Now is the time for all ";
  
  #ifdef CHARSET_EBCDIC
--- 93,99 ----
  	int ret=0;
  	unsigned char md[MDC2_DIGEST_LENGTH];
  	int i;
! 	EVP_MD_CTX c;
  	static char *text="Now is the time for all ";
  
  #ifdef CHARSET_EBCDIC
***************
*** 99,107 ****
  	ebcdic2ascii(text,text,strlen(text));
  #endif
  
! 	MDC2_Init(&c);
! 	MDC2_Update(&c,(unsigned char *)text,strlen(text));
! 	MDC2_Final(&(md[0]),&c);
  
  	if (memcmp(md,pad1,MDC2_DIGEST_LENGTH) != 0)
  		{
--- 100,109 ----
  	ebcdic2ascii(text,text,strlen(text));
  #endif
  
! 	EVP_add_digest(EVP_mdc2());
! 	EVP_DigestInit(&c,EVP_mdc2());
! 	EVP_DigestUpdate(&c,(unsigned char *)text,strlen(text));
! 	EVP_DigestFinal(&c,&(md[0]),NULL);
  
  	if (memcmp(md,pad1,MDC2_DIGEST_LENGTH) != 0)
  		{
***************
*** 116,125 ****
  	else
  		printf("pad1 - ok\n");
  
! 	MDC2_Init(&c);
! 	c.pad_type=2;
! 	MDC2_Update(&c,(unsigned char *)text,strlen(text));
! 	MDC2_Final(&(md[0]),&c);
  
  	if (memcmp(md,pad2,MDC2_DIGEST_LENGTH) != 0)
  		{
--- 118,127 ----
  	else
  		printf("pad1 - ok\n");
  
! 	EVP_DigestInit(&c,EVP_mdc2());
! 	c.md.mdc2.pad_type=2;
! 	EVP_DigestUpdate(&c,(unsigned char *)text,strlen(text));
! 	EVP_DigestFinal(&c,&(md[0]),NULL);
  
  	if (memcmp(md,pad2,MDC2_DIGEST_LENGTH) != 0)
  		{
***************
*** 134,139 ****
--- 136,142 ----
  	else
  		printf("pad2 - ok\n");
  
+ 	EVP_cleanup();
  	exit(ret);
  	return(ret);
  	}
diff -cr openssl-0.9.6a.clean/crypto/ripemd/rmdtest.c openssl-0.9.6a/crypto/ripemd/rmdtest.c
*** openssl-0.9.6a.clean/crypto/ripemd/rmdtest.c Wed Sep  8 15:58:10 1999
--- openssl-0.9.6a/crypto/ripemd/rmdtest.c Mon Apr 23 16:38:00 2001
***************
*** 67,73 ****
      return(0);
  }
  #else
! #include <openssl/ripemd.h>
  
  #ifdef CHARSET_EBCDIC
  #include <openssl/ebcdic.h>
--- 67,73 ----
      return(0);
  }
  #else
! #include <openssl/evp.h>
  
  #ifdef CHARSET_EBCDIC
  #include <openssl/ebcdic.h>
***************
*** 103,108 ****
--- 103,109 ----
  	unsigned char **P,**R;
  	char *p;
  
+ 	EVP_add_digest(EVP_ripemd160());
  	P=(unsigned char **)test;
  	R=(unsigned char **)ret;
  	i=1;
***************
*** 111,117 ****
  #ifdef CHARSET_EBCDIC
  		ebcdic2ascii((char *)*P, (char *)*P, strlen((char *)*P));
  #endif
! 		p=pt(RIPEMD160(&(P[0][0]),(unsigned long)strlen((char *)*P),NULL));
  		if (strcmp(p,(char *)*R) != 0)
  			{
  			printf("error calculating RIPEMD160 on '%s'\n",*P);
--- 112,118 ----
  #ifdef CHARSET_EBCDIC
  		ebcdic2ascii((char *)*P, (char *)*P, strlen((char *)*P));
  #endif
! 		p=pt(EVP_Digest(&(P[0][0]),(unsigned long)strlen((char *)*P),NULL,EVP_ripemd160()));
  		if (strcmp(p,(char *)*R) != 0)
  			{
  			printf("error calculating RIPEMD160 on '%s'\n",*P);
***************
*** 124,129 ****
--- 125,131 ----
  		R++;
  		P++;
  		}
+ 	EVP_cleanup();
  	exit(err);
  	return(0);
  	}
diff -cr openssl-0.9.6a.clean/crypto/rsa/rsa_oaep.c openssl-0.9.6a/crypto/rsa/rsa_oaep.c
*** openssl-0.9.6a.clean/crypto/rsa/rsa_oaep.c Thu Apr  5 14:13:10 2001
--- openssl-0.9.6a/crypto/rsa/rsa_oaep.c Mon Apr 23 15:29:30 2001
***************
*** 9,15 ****
  #include "cryptlib.h"
  #include <openssl/bn.h>
  #include <openssl/rsa.h>
! #include <openssl/sha.h>
  #include <openssl/rand.h>
  
  int MGF1(unsigned char *mask, long len, unsigned char *seed, long seedlen);
--- 9,15 ----
  #include "cryptlib.h"
  #include <openssl/bn.h>
  #include <openssl/rsa.h>
! #include <openssl/evp.h>
  #include <openssl/rand.h>
  
  int MGF1(unsigned char *mask, long len, unsigned char *seed, long seedlen);
***************
*** 45,51 ****
      seed = to + 1;
      db = to + SHA_DIGEST_LENGTH + 1;
  
!     SHA1(param, plen, db);
      memset(db + SHA_DIGEST_LENGTH, 0,
  	   emlen - flen - 2 * SHA_DIGEST_LENGTH - 1);
      db[emlen - flen - SHA_DIGEST_LENGTH - 1] = 0x01;
--- 45,51 ----
      seed = to + 1;
      db = to + SHA_DIGEST_LENGTH + 1;
  
!     EVP_Digest(param, plen, db, EVP_sha1());
      memset(db + SHA_DIGEST_LENGTH, 0,
  	   emlen - flen - 2 * SHA_DIGEST_LENGTH - 1);
      db[emlen - flen - SHA_DIGEST_LENGTH - 1] = 0x01;
***************
*** 104,110 ****
      for (i = 0; i < dblen; i++)
  	db[i] ^= maskeddb[i];
  
!     SHA1(param, plen, phash);
  
      if (memcmp(db, phash, SHA_DIGEST_LENGTH) != 0)
  	RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP, RSA_R_OAEP_DECODING_ERROR);
--- 104,110 ----
      for (i = 0; i < dblen; i++)
  	db[i] ^= maskeddb[i];
  
!     EVP_Digest(param, plen, phash, EVP_sha1());
  
      if (memcmp(db, phash, SHA_DIGEST_LENGTH) != 0)
  	RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP, RSA_R_OAEP_DECODING_ERROR);
***************
*** 136,142 ****
      {
      long i, outlen = 0;
      unsigned char cnt[4];
!     SHA_CTX c;
      unsigned char md[SHA_DIGEST_LENGTH];
  
      for (i = 0; outlen < len; i++)
--- 136,142 ----
      {
      long i, outlen = 0;
      unsigned char cnt[4];
!     EVP_MD_CTX c;
      unsigned char md[SHA_DIGEST_LENGTH];
  
      for (i = 0; outlen < len; i++)
***************
*** 143,159 ****
  	{
  	cnt[0] = (i >> 24) & 255, cnt[1] = (i >> 16) & 255,
  	  cnt[2] = (i >> 8) & 255, cnt[3] = i & 255;
! 	SHA1_Init(&c);
! 	SHA1_Update(&c, seed, seedlen);
! 	SHA1_Update(&c, cnt, 4);
  	if (outlen + SHA_DIGEST_LENGTH <= len)
  	    {
! 	    SHA1_Final(mask + outlen, &c);
  	    outlen += SHA_DIGEST_LENGTH;
  	    }
  	else
  	    {
! 	    SHA1_Final(md, &c);
  	    memcpy(mask + outlen, md, len - outlen);
  	    outlen = len;
  	    }
--- 143,159 ----
  	{
  	cnt[0] = (i >> 24) & 255, cnt[1] = (i >> 16) & 255,
  	  cnt[2] = (i >> 8) & 255, cnt[3] = i & 255;
! 	EVP_DigestInit(&c, EVP_sha1());
! 	EVP_DigestUpdate(&c, seed, seedlen);
! 	EVP_DigestUpdate(&c, cnt, 4);
  	if (outlen + SHA_DIGEST_LENGTH <= len)
  	    {
! 	    EVP_DigestFinal(&c, mask + outlen, NULL);
  	    outlen += SHA_DIGEST_LENGTH;
  	    }
  	else
  	    {
! 	    EVP_DigestFinal(&c, md, NULL);
  	    memcpy(mask + outlen, md, len - outlen);
  	    outlen = len;
  	    }
diff -cr openssl-0.9.6a.clean/crypto/sha/sha1test.c openssl-0.9.6a/crypto/sha/sha1test.c
*** openssl-0.9.6a.clean/crypto/sha/sha1test.c Wed Sep  8 15:58:10 1999
--- openssl-0.9.6a/crypto/sha/sha1test.c Mon Apr 23 16:35:28 2001
***************
*** 67,73 ****
      return(0);
  }
  #else
! #include <openssl/sha.h>
  
  #ifdef CHARSET_EBCDIC
  #include <openssl/ebcdic.h>
--- 67,73 ----
      return(0);
  }
  #else
! #include <openssl/evp.h>
  
  #ifdef CHARSET_EBCDIC
  #include <openssl/ebcdic.h>
***************
*** 106,112 ****
  	unsigned char **P,**R;
  	static unsigned char buf[1000];
  	char *p,*r;
! 	SHA_CTX c;
  	unsigned char md[SHA_DIGEST_LENGTH];
  
  #ifdef CHARSET_EBCDIC
--- 106,112 ----
  	unsigned char **P,**R;
  	static unsigned char buf[1000];
  	char *p,*r;
! 	EVP_MD_CTX c;
  	unsigned char md[SHA_DIGEST_LENGTH];
  
  #ifdef CHARSET_EBCDIC
***************
*** 114,125 ****
  	ebcdic2ascii(test[1], test[1], strlen(test[1]));
  #endif
  
  	P=(unsigned char **)test;
  	R=(unsigned char **)ret;
  	i=1;
  	while (*P != NULL)
  		{
! 		p=pt(SHA1(*P,(unsigned long)strlen((char *)*P),NULL));
  		if (strcmp(p,(char *)*R) != 0)
  			{
  			printf("error calculating SHA1 on '%s'\n",*P);
--- 114,126 ----
  	ebcdic2ascii(test[1], test[1], strlen(test[1]));
  #endif
  
+ 	EVP_add_digest(EVP_sha1());
  	P=(unsigned char **)test;
  	R=(unsigned char **)ret;
  	i=1;
  	while (*P != NULL)
  		{
! 		p=pt(EVP_Digest(*P,(unsigned long)strlen((char *)*P),NULL,EVP_sha1()));
  		if (strcmp(p,(char *)*R) != 0)
  			{
  			printf("error calculating SHA1 on '%s'\n",*P);
***************
*** 137,146 ****
  #ifdef CHARSET_EBCDIC
  	ebcdic2ascii(buf, buf, 1000);
  #endif /*CHARSET_EBCDIC*/
! 	SHA1_Init(&c);
  	for (i=0; i<1000; i++)
! 		SHA1_Update(&c,buf,1000);
! 	SHA1_Final(md,&c);
  	p=pt(md);
  
  	r=bigret;
--- 138,147 ----
  #ifdef CHARSET_EBCDIC
  	ebcdic2ascii(buf, buf, 1000);
  #endif /*CHARSET_EBCDIC*/
! 	EVP_DigestInit(&c,EVP_sha1());
  	for (i=0; i<1000; i++)
! 		EVP_DigestUpdate(&c,buf,1000);
! 	EVP_DigestFinal(&c,md,NULL);
  	p=pt(md);
  
  	r=bigret;
***************
*** 152,157 ****
--- 153,159 ----
  		}
  	else
  		printf("test 3 ok\n");
+ 	EVP_cleanup();
  	exit(err);
  	return(0);
  	}
diff -cr openssl-0.9.6a.clean/crypto/sha/shatest.c openssl-0.9.6a/crypto/sha/shatest.c
*** openssl-0.9.6a.clean/crypto/sha/shatest.c Wed Sep  8 15:58:10 1999
--- openssl-0.9.6a/crypto/sha/shatest.c Mon Apr 23 16:35:36 2001
***************
*** 67,73 ****
      return(0);
  }
  #else
! #include <openssl/sha.h>
  
  #ifdef CHARSET_EBCDIC
  #include <openssl/ebcdic.h>
--- 67,73 ----
      return(0);
  }
  #else
! #include <openssl/evp.h>
  
  #ifdef CHARSET_EBCDIC
  #include <openssl/ebcdic.h>
***************
*** 106,112 ****
  	unsigned char **P,**R;
  	static unsigned char buf[1000];
  	char *p,*r;
! 	SHA_CTX c;
  	unsigned char md[SHA_DIGEST_LENGTH];
  
  #ifdef CHARSET_EBCDIC
--- 106,112 ----
  	unsigned char **P,**R;
  	static unsigned char buf[1000];
  	char *p,*r;
! 	EVP_MD_CTX c;
  	unsigned char md[SHA_DIGEST_LENGTH];
  
  #ifdef CHARSET_EBCDIC
***************
*** 114,125 ****
  	ebcdic2ascii(test[1], test[1], strlen(test[1]));
  #endif
  
  	P=(unsigned char **)test;
  	R=(unsigned char **)ret;
  	i=1;
  	while (*P != NULL)
  		{
! 		p=pt(SHA(*P,(unsigned long)strlen((char *)*P),NULL));
  		if (strcmp(p,(char *)*R) != 0)
  			{
  			printf("error calculating SHA on '%s'\n",*P);
--- 114,126 ----
  	ebcdic2ascii(test[1], test[1], strlen(test[1]));
  #endif
  
+ 	EVP_add_digest(EVP_sha());
  	P=(unsigned char **)test;
  	R=(unsigned char **)ret;
  	i=1;
  	while (*P != NULL)
  		{
! 		p=pt(EVP_Digest(*P,(unsigned long)strlen((char *)*P),NULL,EVP_sha()));
  		if (strcmp(p,(char *)*R) != 0)
  			{
  			printf("error calculating SHA on '%s'\n",*P);
***************
*** 137,146 ****
  #ifdef CHARSET_EBCDIC
  	ebcdic2ascii(buf, buf, 1000);
  #endif /*CHARSET_EBCDIC*/
! 	SHA_Init(&c);
  	for (i=0; i<1000; i++)
! 		SHA_Update(&c,buf,1000);
! 	SHA_Final(md,&c);
  	p=pt(md);
  
  	r=bigret;
--- 138,147 ----
  #ifdef CHARSET_EBCDIC
  	ebcdic2ascii(buf, buf, 1000);
  #endif /*CHARSET_EBCDIC*/
! 	EVP_DigestInit(&c,EVP_sha());
  	for (i=0; i<1000; i++)
! 		EVP_DigestUpdate(&c,buf,1000);
! 	EVP_DigestFinal(&c,md,NULL);
  	p=pt(md);
  
  	r=bigret;
***************
*** 152,157 ****
--- 153,159 ----
  		}
  	else
  		printf("test 3 ok\n");
+ 	EVP_cleanup();
  	exit(err);
  	return(0);
  	}
diff -cr openssl-0.9.6a.clean/crypto/x509/x509_cmp.c openssl-0.9.6a/crypto/x509/x509_cmp.c
*** openssl-0.9.6a.clean/crypto/x509/x509_cmp.c Thu Apr  5 14:13:28 2001
--- openssl-0.9.6a/crypto/x509/x509_cmp.c Mon Apr 23 15:47:34 2001
***************
*** 79,95 ****
  unsigned long X509_issuer_and_serial_hash(X509 *a)
  	{
  	unsigned long ret=0;
! 	MD5_CTX ctx;
  	unsigned char md[16];
  	char str[256];
  
  	X509_NAME_oneline(a->cert_info->issuer,str,256);
  	ret=strlen(str);
! 	MD5_Init(&ctx);
! 	MD5_Update(&ctx,(unsigned char *)str,ret);
! 	MD5_Update(&ctx,(unsigned char *)a->cert_info->serialNumber->data,
  		(unsigned long)a->cert_info->serialNumber->length);
! 	MD5_Final(&(md[0]),&ctx);
  	ret=(	((unsigned long)md[0]     )|((unsigned long)md[1]<<8L)|
  		((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L)
  		)&0xffffffffL;
--- 79,95 ----
  unsigned long X509_issuer_and_serial_hash(X509 *a)
  	{
  	unsigned long ret=0;
! 	EVP_MD_CTX ctx;
  	unsigned char md[16];
  	char str[256];
  
  	X509_NAME_oneline(a->cert_info->issuer,str,256);
  	ret=strlen(str);
! 	EVP_DigestInit(&ctx, EVP_md5());
! 	EVP_DigestUpdate(&ctx,(unsigned char *)str,ret);
! 	EVP_DigestUpdate(&ctx,(unsigned char *)a->cert_info->serialNumber->data,
  		(unsigned long)a->cert_info->serialNumber->length);
! 	EVP_DigestFinal(&ctx,&(md[0]),NULL);
  	ret=(	((unsigned long)md[0]     )|((unsigned long)md[1]<<8L)|
  		((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L)
  		)&0xffffffffL;
***************
*** 205,211 ****
  	/* Use cached encoding directly rather than copying: this should
  	 * keep libsafe happy.
  	 */
! 	MD5((unsigned char *)x->bytes->data,x->bytes->length,&(md[0]));
  
  	ret=(	((unsigned long)md[0]     )|((unsigned long)md[1]<<8L)|
  		((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L)
--- 205,211 ----
  	/* Use cached encoding directly rather than copying: this should
  	 * keep libsafe happy.
  	 */
! 	EVP_Digest((unsigned char *)x->bytes->data,x->bytes->length,&(md[0]), EVP_md5());
  
  	ret=(	((unsigned long)md[0]     )|((unsigned long)md[1]<<8L)|
  		((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L)
diff -cr openssl-0.9.6a.clean/inc32/openssl/evp.h openssl-0.9.6a/inc32/openssl/evp.h
*** openssl-0.9.6a.clean/inc32/openssl/evp.h Thu Apr 12 08:52:50 2001
--- openssl-0.9.6a/inc32/openssl/evp.h Mon Apr 23 16:39:40 2001
***************
*** 549,554 ****
--- 549,556 ----
  void	EVP_DigestUpdate(EVP_MD_CTX *ctx,const void *d,
  			 unsigned int cnt);
  void	EVP_DigestFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s);
+ unsigned char *EVP_Digest(const unsigned char *d, unsigned long n,
+ 						  unsigned char *md, const EVP_MD *type);
  
  int	EVP_read_pw_string(char *buf,int length,const char *prompt,int verify);
  void	EVP_set_pw_prompt(char *prompt);
diff -cr openssl-0.9.6a.clean/ssl/s2_lib.c openssl-0.9.6a/ssl/s2_lib.c
*** openssl-0.9.6a.clean/ssl/s2_lib.c Thu Apr  5 14:14:48 2001
--- openssl-0.9.6a/ssl/s2_lib.c Mon Apr 23 14:22:22 2001
***************
*** 61,67 ****
  #include <stdio.h>
  #include <openssl/rsa.h>
  #include <openssl/objects.h>
! #include <openssl/md5.h>
  
  static long ssl2_default_timeout(void );
  const char *ssl2_version_str="SSLv2" OPENSSL_VERSION_PTEXT;
--- 61,67 ----
  #include <stdio.h>
  #include <openssl/rsa.h>
  #include <openssl/objects.h>
! #include <openssl/evp.h>
  
  static long ssl2_default_timeout(void );
  const char *ssl2_version_str="SSLv2" OPENSSL_VERSION_PTEXT;
***************
*** 415,421 ****
  void ssl2_generate_key_material(SSL *s)
  	{
  	unsigned int i;
! 	MD5_CTX ctx;
  	unsigned char *km;
  	unsigned char c='0';
  
--- 415,421 ----
  void ssl2_generate_key_material(SSL *s)
  	{
  	unsigned int i;
! 	EVP_MD_CTX ctx;
  	unsigned char *km;
  	unsigned char c='0';
  
***************
*** 427,440 ****
  	km=s->s2->key_material;
  	for (i=0; i<s->s2->key_material_length; i+=MD5_DIGEST_LENGTH)
  		{
! 		MD5_Init(&ctx);
  
! 		MD5_Update(&ctx,s->session->master_key,s->session->master_key_length);
! 		MD5_Update(&ctx,&c,1);
  		c++;
! 		MD5_Update(&ctx,s->s2->challenge,s->s2->challenge_length);
! 		MD5_Update(&ctx,s->s2->conn_id,s->s2->conn_id_length);
! 		MD5_Final(km,&ctx);
  		km+=MD5_DIGEST_LENGTH;
  		}
  	}
--- 427,440 ----
  	km=s->s2->key_material;
  	for (i=0; i<s->s2->key_material_length; i+=MD5_DIGEST_LENGTH)
  		{
! 		EVP_DigestInit(&ctx, EVP_md5());
  
! 		EVP_DigestUpdate(&ctx,s->session->master_key,s->session->master_key_length);
! 		EVP_DigestUpdate(&ctx,&c,1);
  		c++;
! 		EVP_DigestUpdate(&ctx,s->s2->challenge,s->s2->challenge_length);
! 		EVP_DigestUpdate(&ctx,s->s2->conn_id,s->s2->conn_id_length);
! 		EVP_DigestFinal(&ctx,km,NULL);
  		km+=MD5_DIGEST_LENGTH;
  		}
  	}
diff -cr openssl-0.9.6a.clean/ssl/s3_clnt.c openssl-0.9.6a/ssl/s3_clnt.c
*** openssl-0.9.6a.clean/ssl/s3_clnt.c Thu Apr  5 14:14:52 2001
--- openssl-0.9.6a/ssl/s3_clnt.c Mon Apr 23 14:59:44 2001
***************
*** 60,67 ****
  #include <openssl/buffer.h>
  #include <openssl/rand.h>
  #include <openssl/objects.h>
- #include <openssl/md5.h>
- #include <openssl/sha.h>
  #include <openssl/evp.h>
  #include "ssl_locl.h"
  
--- 60,65 ----
diff -cr openssl-0.9.6a.clean/ssl/s3_enc.c openssl-0.9.6a/ssl/s3_enc.c
*** openssl-0.9.6a.clean/ssl/s3_enc.c Thu Apr  5 14:14:54 2001
--- openssl-0.9.6a/ssl/s3_enc.c Mon Apr 23 14:19:06 2001
***************
*** 57,64 ****
   */
  
  #include <stdio.h>
- #include <openssl/md5.h>
- #include <openssl/sha.h>
  #include <openssl/evp.h>
  #include "ssl_locl.h"
  
--- 57,62 ----
***************
*** 83,90 ****
  
  static void ssl3_generate_key_block(SSL *s, unsigned char *km, int num)
  	{
! 	MD5_CTX m5;
! 	SHA_CTX s1;
  	unsigned char buf[8],smd[SHA_DIGEST_LENGTH];
  	unsigned char c='A';
  	int i,j,k;
--- 81,88 ----
  
  static void ssl3_generate_key_block(SSL *s, unsigned char *km, int num)
  	{
! 	EVP_MD_CTX m5;
! 	EVP_MD_CTX s1;
  	unsigned char buf[8],smd[SHA_DIGEST_LENGTH];
  	unsigned char c='A';
  	int i,j,k;
***************
*** 99,123 ****
  		for (j=0; j<k; j++)
  			buf[j]=c;
  		c++;
! 		SHA1_Init(  &s1);
! 		SHA1_Update(&s1,buf,k);
! 		SHA1_Update(&s1,s->session->master_key,
  			s->session->master_key_length);
! 		SHA1_Update(&s1,s->s3->server_random,SSL3_RANDOM_SIZE);
! 		SHA1_Update(&s1,s->s3->client_random,SSL3_RANDOM_SIZE);
! 		SHA1_Final( smd,&s1);
  
! 		MD5_Init(  &m5);
! 		MD5_Update(&m5,s->session->master_key,
  			s->session->master_key_length);
! 		MD5_Update(&m5,smd,SHA_DIGEST_LENGTH);
  		if ((i+MD5_DIGEST_LENGTH) > num)
  			{
! 			MD5_Final(smd,&m5);
  			memcpy(km,smd,(num-i));
  			}
  		else
! 			MD5_Final(km,&m5);
  
  		km+=MD5_DIGEST_LENGTH;
  		}
--- 97,121 ----
  		for (j=0; j<k; j++)
  			buf[j]=c;
  		c++;
! 		EVP_DigestInit(&s1, EVP_sha1());
! 		EVP_DigestUpdate(&s1,buf,k);
! 		EVP_DigestUpdate(&s1,s->session->master_key,
  			s->session->master_key_length);
! 		EVP_DigestUpdate(&s1,s->s3->server_random,SSL3_RANDOM_SIZE);
! 		EVP_DigestUpdate(&s1,s->s3->client_random,SSL3_RANDOM_SIZE);
! 		EVP_DigestFinal(&s1,smd,NULL);
  
! 		EVP_DigestInit(&m5,EVP_md5());
! 		EVP_DigestUpdate(&m5,s->session->master_key,
  			s->session->master_key_length);
! 		EVP_DigestUpdate(&m5,smd,SHA_DIGEST_LENGTH);
  		if ((i+MD5_DIGEST_LENGTH) > num)
  			{
! 			EVP_DigestFinal(&m5,smd,NULL);
  			memcpy(km,smd,(num-i));
  			}
  		else
! 			EVP_DigestFinal(&m5,km,NULL);
  
  		km+=MD5_DIGEST_LENGTH;
  		}
***************
*** 134,140 ****
  	const EVP_CIPHER *c;
  	COMP_METHOD *comp;
  	const EVP_MD *m;
! 	MD5_CTX md;
  	int exp,n,i,j,k,cl;
  
  	exp=SSL_C_IS_EXPORT(s->s3->tmp.new_cipher);
--- 132,138 ----
  	const EVP_CIPHER *c;
  	COMP_METHOD *comp;
  	const EVP_MD *m;
! 	EVP_MD_CTX md;
  	int exp,n,i,j,k,cl;
  
  	exp=SSL_C_IS_EXPORT(s->s3->tmp.new_cipher);
***************
*** 244,262 ****
  		/* In here I set both the read and write key/iv to the
  		 * same value since only the correct one will be used :-).
  		 */
! 		MD5_Init(&md);
! 		MD5_Update(&md,key,j);
! 		MD5_Update(&md,er1,SSL3_RANDOM_SIZE);
! 		MD5_Update(&md,er2,SSL3_RANDOM_SIZE);
! 		MD5_Final(&(exp_key[0]),&md);
  		key= &(exp_key[0]);
  
  		if (k > 0)
  			{
! 			MD5_Init(&md);
! 			MD5_Update(&md,er1,SSL3_RANDOM_SIZE);
! 			MD5_Update(&md,er2,SSL3_RANDOM_SIZE);
! 			MD5_Final(&(exp_iv[0]),&md);
  			iv= &(exp_iv[0]);
  			}
  		}
--- 242,260 ----
  		/* In here I set both the read and write key/iv to the
  		 * same value since only the correct one will be used :-).
  		 */
! 		EVP_DigestInit(&md,EVP_md5());
! 		EVP_DigestUpdate(&md,key,j);
! 		EVP_DigestUpdate(&md,er1,SSL3_RANDOM_SIZE);
! 		EVP_DigestUpdate(&md,er2,SSL3_RANDOM_SIZE);
! 		EVP_DigestFinal(&md,&(exp_key[0]),NULL);
  		key= &(exp_key[0]);
  
  		if (k > 0)
  			{
! 			EVP_DigestInit(&md,EVP_md5());
! 			EVP_DigestUpdate(&md,er1,SSL3_RANDOM_SIZE);
! 			EVP_DigestUpdate(&md,er2,SSL3_RANDOM_SIZE);
! 			EVP_DigestFinal(&md,&(exp_iv[0]),NULL);
  			iv= &(exp_iv[0]);
  			}
  		}
diff -cr openssl-0.9.6a.clean/ssl/s3_lib.c openssl-0.9.6a/ssl/s3_lib.c
*** openssl-0.9.6a.clean/ssl/s3_lib.c Thu Apr  5 14:14:54 2001
--- openssl-0.9.6a/ssl/s3_lib.c Mon Apr 23 15:01:14 2001
***************
*** 110,117 ****
   */
  
  #include <stdio.h>
- #include <openssl/md5.h>
- #include <openssl/sha.h>
  #include <openssl/objects.h>
  #include "ssl_locl.h"
  
--- 110,115 ----
diff -cr openssl-0.9.6a.clean/ssl/s3_srvr.c openssl-0.9.6a/ssl/s3_srvr.c
*** openssl-0.9.6a.clean/ssl/s3_srvr.c Thu Apr  5 14:14:58 2001
--- openssl-0.9.6a/ssl/s3_srvr.c Mon Apr 23 15:01:18 2001
***************
*** 64,71 ****
  #include <openssl/buffer.h>
  #include <openssl/rand.h>
  #include <openssl/objects.h>
- #include <openssl/md5.h>
- #include <openssl/sha.h>
  #include <openssl/evp.h>
  #include <openssl/x509.h>
  #include "ssl_locl.h"
--- 64,69 ----
diff -cr openssl-0.9.6a.clean/ssl/t1_enc.c openssl-0.9.6a/ssl/t1_enc.c
*** openssl-0.9.6a.clean/ssl/t1_enc.c Thu Apr  5 14:15:08 2001
--- openssl-0.9.6a/ssl/t1_enc.c Mon Apr 23 14:24:02 2001
***************
*** 58,65 ****
  
  #include <stdio.h>
  #include <openssl/comp.h>
- #include <openssl/md5.h>
- #include <openssl/sha.h>
  #include <openssl/evp.h>
  #include <openssl/hmac.h>
  #include "ssl_locl.h"
--- 58,63 ----
diff -cr openssl-0.9.6a.clean/util/libeay.num openssl-0.9.6a/util/libeay.num
*** openssl-0.9.6a.clean/util/libeay.num Thu Apr  5 14:15:24 2001
--- openssl-0.9.6a/util/libeay.num Mon Apr 23 14:11:02 2001
***************
*** 1873,1875 ****
--- 1873,1876 ----
  BN_bntest_rand                          2464	EXIST::FUNCTION:
  OPENSSL_issetugid                       2465	EXIST::FUNCTION:
  BN_rand_range                           2466	EXIST::FUNCTION:
+ EVP_Digest                              2467	EXIST::FUNCTION:
