DSA_generate_key(dsa_key[j]);
int MAIN(int argc, char **argv)	{	ENGINE *e;	unsigned char *buf=NULL,*buf2=NULL;	int mret=1;#define ALGOR_NUM	16#define SIZE_NUM	5#define RSA_NUM		4#define DSA_NUM		3	long count,rsa_count,save_count=0;	int i,j,k;#ifndef OPENSSL_NO_RSA	unsigned rsa_num;#endif#ifndef OPENSSL_NO_MD2	unsigned char md2[MD2_DIGEST_LENGTH];#endif#ifndef OPENSSL_NO_MDC2	unsigned char mdc2[MDC2_DIGEST_LENGTH];#endif#ifndef OPENSSL_NO_MD4	unsigned char md4[MD4_DIGEST_LENGTH];#endif#ifndef OPENSSL_NO_MD5	unsigned char md5[MD5_DIGEST_LENGTH];	unsigned char hmac[MD5_DIGEST_LENGTH];#endif#ifndef OPENSSL_NO_SHA	unsigned char sha[SHA_DIGEST_LENGTH];#endif#ifndef OPENSSL_NO_RIPEMD	unsigned char rmd160[RIPEMD160_DIGEST_LENGTH];#endif#ifndef OPENSSL_NO_RC4	RC4_KEY rc4_ks;#endif#ifndef OPENSSL_NO_RC5	RC5_32_KEY rc5_ks;#endif#ifndef OPENSSL_NO_RC2	RC2_KEY rc2_ks;#endif#ifndef OPENSSL_NO_IDEA	IDEA_KEY_SCHEDULE idea_ks;#endif#ifndef OPENSSL_NO_BF	BF_KEY bf_ks;#endif#ifndef OPENSSL_NO_CAST	CAST_KEY cast_ks;#endif	static unsigned char key16[16]=		{0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,		 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};	unsigned char iv[8];#ifndef OPENSSL_NO_DES	des_cblock *buf_as_des_cblock = NULL;	static des_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};	static des_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};	static des_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};	des_key_schedule sch,sch2,sch3;#endif#define	D_MD2		0#define	D_MDC2		1#define	D_MD4		2#define	D_MD5		3#define	D_HMAC		4#define	D_SHA1		5#define D_RMD160	6#define	D_RC4		7#define	D_CBC_DES	8#define	D_EDE3_DES	9#define	D_CBC_IDEA	10#define	D_CBC_RC2	11#define	D_CBC_RC5	12#define	D_CBC_BF	13#define	D_CBC_CAST	14#define D_EVP		15	double d,results[ALGOR_NUM][SIZE_NUM];	static int lengths[SIZE_NUM]={8,64,256,1024,8*1024};	long c[ALGOR_NUM][SIZE_NUM];	static const char *names[ALGOR_NUM]={		"md2","mdc2","md4","md5","hmac(md5)","sha1","rmd160","rc4",		"des cbc","des ede3","idea cbc",		"rc2 cbc","rc5-32/12 cbc","blowfish cbc","cast cbc"};#define	R_DSA_512	0#define	R_DSA_1024	1#define	R_DSA_2048	2#define	R_RSA_512	0#define	R_RSA_1024	1#define	R_RSA_2048	2#define	R_RSA_4096	3#ifndef OPENSSL_NO_RSA	RSA *rsa_key[RSA_NUM];	long rsa_c[RSA_NUM][2];	double rsa_results[RSA_NUM][2];	static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,4096};	static unsigned char *rsa_data[RSA_NUM]=		{test512,test1024,test2048,test4096};	static int rsa_data_length[RSA_NUM]={		sizeof(test512),sizeof(test1024),		sizeof(test2048),sizeof(test4096)};#endif#ifndef OPENSSL_NO_DSA	DSA *dsa_key[DSA_NUM];	long dsa_c[DSA_NUM][2];	double dsa_results[DSA_NUM][2];	static unsigned int dsa_bits[DSA_NUM]={512,1024,2048};#endif	int rsa_doit[RSA_NUM];	int dsa_doit[DSA_NUM];	int doit[ALGOR_NUM];	int pr_header=0;	int usertime=1;	const EVP_CIPHER *evp=NULL;	int decrypt=0;#ifndef TIMES	usertime=-1;#endif	apps_startup();	memset(results, 0, sizeof(results));#ifndef OPENSSL_NO_DSA	memset(dsa_key,0,sizeof(dsa_key));#endif	if (bio_err == NULL)		if ((bio_err=BIO_new(BIO_s_file())) != NULL)			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);#ifndef OPENSSL_NO_RSA	memset(rsa_key,0,sizeof(rsa_key));	for (i=0; i<RSA_NUM; i++)		rsa_key[i]=NULL;#endif	if ((buf=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)		{		BIO_printf(bio_err,"out of memory\n");		goto end;		}#ifndef OPENSSL_NO_DES	buf_as_des_cblock = (des_cblock *)buf;#endif	if ((buf2=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)		{		BIO_printf(bio_err,"out of memory\n");		goto end;		}	memset(c,0,sizeof(c));	memset(iv,0,sizeof(iv));	for (i=0; i<ALGOR_NUM; i++)		doit[i]=0;	for (i=0; i<RSA_NUM; i++)		rsa_doit[i]=0;	for (i=0; i<DSA_NUM; i++)		dsa_doit[i]=0;		j=0;	argc--;	argv++;	while (argc)		{		if	((argc > 0) && (strcmp(*argv,"-elapsed") == 0))			usertime = 0;		else if	((argc > 0) && (strcmp(*argv,"-evp") == 0))			{			argc--;			argv++;			if(argc == 0)				{				BIO_printf(bio_err,"no EVP given\n");				goto end;				}			evp=EVP_get_cipherbyname(*argv);			if(!evp)				{				BIO_printf(bio_err,"%s is an unknown cipher\n",*argv);				goto end;				}			doit[D_EVP]=1;			}		else if(argc > 0 && !strcmp(*argv,"-decrypt"))			decrypt=1;		else		if	((argc > 0) && (strcmp(*argv,"-engine") == 0))			{			argc--;			argv++;			if(argc == 0)				{				BIO_printf(bio_err,"no engine given\n");				goto end;				}                        e = setup_engine(bio_err, *argv, 0);			/* j will be increased again further down.  We just			   don't want speed to confuse an engine with an			   algorithm, especially when none is given (which			   means all of them should be run) */			j--;			}		else#ifndef OPENSSL_NO_MD2		if	(strcmp(*argv,"md2") == 0) doit[D_MD2]=1;		else#endif#ifndef OPENSSL_NO_MDC2			if (strcmp(*argv,"mdc2") == 0) doit[D_MDC2]=1;		else#endif#ifndef OPENSSL_NO_MD4			if (strcmp(*argv,"md4") == 0) doit[D_MD4]=1;		else#endif#ifndef OPENSSL_NO_MD5			if (strcmp(*argv,"md5") == 0) doit[D_MD5]=1;		else#endif#ifndef OPENSSL_NO_MD5			if (strcmp(*argv,"hmac") == 0) doit[D_HMAC]=1;		else#endif#ifndef OPENSSL_NO_SHA			if (strcmp(*argv,"sha1") == 0) doit[D_SHA1]=1;		else			if (strcmp(*argv,"sha") == 0) doit[D_SHA1]=1;		else#endif#ifndef OPENSSL_NO_RIPEMD			if (strcmp(*argv,"ripemd") == 0) doit[D_RMD160]=1;		else			if (strcmp(*argv,"rmd160") == 0) doit[D_RMD160]=1;		else			if (strcmp(*argv,"ripemd160") == 0) doit[D_RMD160]=1;		else#endif#ifndef OPENSSL_NO_RC4			if (strcmp(*argv,"rc4") == 0) doit[D_RC4]=1;		else #endif#ifndef OPENSSL_NO_DES			if (strcmp(*argv,"des-cbc") == 0) doit[D_CBC_DES]=1;		else	if (strcmp(*argv,"des-ede3") == 0) doit[D_EDE3_DES]=1;		else#endif#ifndef OPENSSL_NO_RSA#if 0 /* was: #ifdef RSAref */			if (strcmp(*argv,"rsaref") == 0) 			{			RSA_set_default_openssl_method(RSA_PKCS1_RSAref());			j--;			}		else#endif#ifndef RSA_NULL			if (strcmp(*argv,"openssl") == 0) 			{			RSA_set_default_openssl_method(RSA_PKCS1_SSLeay());			j--;			}		else#endif#endif /* !OPENSSL_NO_RSA */		     if (strcmp(*argv,"dsa512") == 0) dsa_doit[R_DSA_512]=2;		else if (strcmp(*argv,"dsa1024") == 0) dsa_doit[R_DSA_1024]=2;		else if (strcmp(*argv,"dsa2048") == 0) dsa_doit[R_DSA_2048]=2;		else if (strcmp(*argv,"rsa512") == 0) rsa_doit[R_RSA_512]=2;		else if (strcmp(*argv,"rsa1024") == 0) rsa_doit[R_RSA_1024]=2;		else if (strcmp(*argv,"rsa2048") == 0) rsa_doit[R_RSA_2048]=2;		else if (strcmp(*argv,"rsa4096") == 0) rsa_doit[R_RSA_4096]=2;		else#ifndef OPENSSL_NO_RC2		     if (strcmp(*argv,"rc2-cbc") == 0) doit[D_CBC_RC2]=1;		else if (strcmp(*argv,"rc2") == 0) doit[D_CBC_RC2]=1;		else#endif#ifndef OPENSSL_NO_RC5		     if (strcmp(*argv,"rc5-cbc") == 0) doit[D_CBC_RC5]=1;		else if (strcmp(*argv,"rc5") == 0) doit[D_CBC_RC5]=1;		else#endif#ifndef OPENSSL_NO_IDEA		     if (strcmp(*argv,"idea-cbc") == 0) doit[D_CBC_IDEA]=1;		else if (strcmp(*argv,"idea") == 0) doit[D_CBC_IDEA]=1;		else#endif#ifndef OPENSSL_NO_BF		     if (strcmp(*argv,"bf-cbc") == 0) doit[D_CBC_BF]=1;		else if (strcmp(*argv,"blowfish") == 0) doit[D_CBC_BF]=1;		else if (strcmp(*argv,"bf") == 0) doit[D_CBC_BF]=1;		else#endif#ifndef OPENSSL_NO_CAST		     if (strcmp(*argv,"cast-cbc") == 0) doit[D_CBC_CAST]=1;		else if (strcmp(*argv,"cast") == 0) doit[D_CBC_CAST]=1;		else if (strcmp(*argv,"cast5") == 0) doit[D_CBC_CAST]=1;		else#endif#ifndef OPENSSL_NO_DES			if (strcmp(*argv,"des") == 0)			{			doit[D_CBC_DES]=1;			doit[D_EDE3_DES]=1;			}		else#endif#ifndef OPENSSL_NO_RSA			if (strcmp(*argv,"rsa") == 0)			{			rsa_doit[R_RSA_512]=1;			rsa_doit[R_RSA_1024]=1;			rsa_doit[R_RSA_2048]=1;			rsa_doit[R_RSA_4096]=1;			}		else#endif#ifndef OPENSSL_NO_DSA			if (strcmp(*argv,"dsa") == 0)			{			dsa_doit[R_DSA_512]=1;			dsa_doit[R_DSA_1024]=1;			}		else#endif			{			BIO_printf(bio_err,"Error: bad option or value\n");			BIO_printf(bio_err,"\n");			BIO_printf(bio_err,"Available values:\n");#ifndef OPENSSL_NO_MD2			BIO_printf(bio_err,"md2      ");#endif#ifndef OPENSSL_NO_MDC2			BIO_printf(bio_err,"mdc2     ");#endif#ifndef OPENSSL_NO_MD4			BIO_printf(bio_err,"md4      ");#endif#ifndef OPENSSL_NO_MD5			BIO_printf(bio_err,"md5      ");#ifndef OPENSSL_NO_HMAC			BIO_printf(bio_err,"hmac     ");#endif#endif#ifndef OPENSSL_NO_SHA1			BIO_printf(bio_err,"sha1     ");#endif#ifndef OPENSSL_NO_RIPEMD160			BIO_printf(bio_err,"rmd160");#endif#if !defined(OPENSSL_NO_MD2) || !defined(OPENSSL_NO_MDC2) || \    !defined(OPENSSL_NO_MD4) || !defined(OPENSSL_NO_MD5) || \    !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160)			BIO_printf(bio_err,"\n");#endif#ifndef OPENSSL_NO_IDEA			BIO_printf(bio_err,"idea-cbc ");#endif#ifndef OPENSSL_NO_RC2			BIO_printf(bio_err,"rc2-cbc  ");#endif#ifndef OPENSSL_NO_RC5			BIO_printf(bio_err,"rc5-cbc  ");#endif#ifndef OPENSSL_NO_BF			BIO_printf(bio_err,"bf-cbc");#endif#if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_RC2) || \    !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_RC5)			BIO_printf(bio_err,"\n");#endif			BIO_printf(bio_err,"des-cbc  des-ede3 ");#ifndef OPENSSL_NO_RC4			BIO_printf(bio_err,"rc4");#endif			BIO_printf(bio_err,"\n");#ifndef OPENSSL_NO_RSA			BIO_printf(bio_err,"rsa512   rsa1024  rsa2048  rsa4096\n");#endif#ifndef OPENSSL_NO_DSA			BIO_printf(bio_err,"dsa512   dsa1024  dsa2048\n");#endif#ifndef OPENSSL_NO_IDEA			BIO_printf(bio_err,"idea     ");#endif#ifndef OPENSSL_NO_RC2			BIO_printf(bio_err,"rc2      ");#endif#ifndef OPENSSL_NO_DES			BIO_printf(bio_err,"des      ");#endif#ifndef OPENSSL_NO_RSA			BIO_printf(bio_err,"rsa      ");#endif#ifndef OPENSSL_NO_BF			BIO_printf(bio_err,"blowfish");#endif#if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_RC2) || \    !defined(OPENSSL_NO_DES) || !defined(OPENSSL_NO_RSA) || \    !defined(OPENSSL_NO_BF)			BIO_printf(bio_err,"\n");#endif			BIO_printf(bio_err,"\n");			BIO_printf(bio_err,"Available options:\n");#ifdef TIMES			BIO_printf(bio_err,"-elapsed        measure time in real time instead of CPU user time.\n");#endif			BIO_printf(bio_err,"-engine e       use engine e, possibly a hardware device.\n");			goto end;			}		argc--;		argv++;		j++;		}	if (j == 0)		{		for (i=0; i<ALGOR_NUM; i++)			{			if (i != D_EVP)				doit[i]=1;			}		for (i=0; i<RSA_NUM; i++)			rsa_doit[i]=1;		for (i=0; i<DSA_NUM; i++)			dsa_doit[i]=1;		}	for (i=0; i<ALGOR_NUM; i++)		if (doit[i]) pr_header++;	if (usertime == 0)		BIO_printf(bio_err,"You have chosen to measure elapsed time instead of user CPU time.\n");	if (usertime <= 0)		{		BIO_printf(bio_err,"To get the most accurate results, try to run this\n");		BIO_printf(bio_err,"program when this computer is idle.\n");		}#ifndef OPENSSL_NO_RSA	for (i=0; i<RSA_NUM; i++)		{		const unsigned char *p;		p=rsa_data[i];		rsa_key[i]=d2i_RSAPrivateKey(NULL,&p,rsa_data_length[i]);		if (rsa_key[i] == NULL)			{			BIO_printf(bio_err,"internal error loading RSA key number %d\n",i);			goto end;			}#if 0		else			{			BIO_printf(bio_err,"Loaded RSA key, %d bit modulus and e= 0x",BN_num_bits(rsa_key[i]->n));			BN_print(bio_err,rsa_key[i]->e);			BIO_printf(bio_err,"\n");			}#endif		}#endif#ifndef OPENSSL_NO_DSA	dsa_key[0]=get_dsa512();	dsa_key[1]=get_dsa1024();	dsa_key[2]=get_dsa2048();#endif#ifndef OPENSSL_NO_DES	des_set_key_unchecked(&key,sch);	des_set_key_unchecked(&key2,sch2);	des_set_key_unchecked(&key3,sch3);#endif#ifndef OPENSSL_NO_IDEA	idea_set_encrypt_key(key16,&idea_ks);#endif#ifndef OPENSSL_NO_RC4	RC4_set_key(&rc4_ks,16,key16);#endif#ifndef OPENSSL_NO_RC2	RC2_set_key(&rc2_ks,16,key16,128);#endif#ifndef OPENSSL_NO_RC5	RC5_32_set_key(&rc5_ks,16,key16,12);#endif#ifndef OPENSSL_NO_BF	BF_set_key(&bf_ks,16,key16);#endif#ifndef OPENSSL_NO_CAST	CAST_set_key(&cast_ks,16,key16);#endif#ifndef OPENSSL_NO_RSA	memset(rsa_c,0,sizeof(rsa_c));#endif#ifndef SIGALRM#ifndef OPENSSL_NO_DES	BIO_printf(bio_err,"First we calculate the approximate speed ...\n");	count=10;	do	{		long i;		count*=2;		Time_F(START,usertime);		for (i=count; i; i--)			des_ecb_encrypt(buf_as_des_cblock,buf_as_des_cblock,				&(sch[0]),DES_ENCRYPT);		d=Time_F(STOP,usertime);		} while (d <3);	save_count=count;	c[D_MD2][0]=count/10;	c[D_MDC2][0]=count/10;	c[D_MD4][0]=count;	c[D_MD5][0]=count;	c[D_HMAC][0]=count;	c[D_SHA1][0]=count;	c[D_RMD160][0]=count;	c[D_RC4][0]=count*5;	c[D_CBC_DES][0]=count;	c[D_EDE3_DES][0]=count/3;	c[D_CBC_IDEA][0]=count;	c[D_CBC_RC2][0]=count;	c[D_CBC_RC5][0]=count;	c[D_CBC_BF][0]=count;	c[D_CBC_CAST][0]=count;	for (i=1; i<SIZE_NUM; i++)		{		c[D_MD2][i]=c[D_MD2][0]*4*lengths[0]/lengths[i];		c[D_MDC2][i]=c[D_MDC2][0]*4*lengths[0]/lengths[i];		c[D_MD4][i]=c[D_MD4][0]*4*lengths[0]/lengths[i];		c[D_MD5][i]=c[D_MD5][0]*4*lengths[0]/lengths[i];		c[D_HMAC][i]=c[D_HMAC][0]*4*lengths[0]/lengths[i];		c[D_SHA1][i]=c[D_SHA1][0]*4*lengths[0]/lengths[i];		c[D_RMD160][i]=c[D_RMD160][0]*4*lengths[0]/lengths[i];		}	for (i=1; i<SIZE_NUM; i++)		{		long l0,l1;		l0=(long)lengths[i-1];		l1=(long)lengths[i];		c[D_RC4][i]=c[D_RC4][i-1]*l0/l1;		c[D_CBC_DES][i]=c[D_CBC_DES][i-1]*l0/l1;		c[D_EDE3_DES][i]=c[D_EDE3_DES][i-1]*l0/l1;		c[D_CBC_IDEA][i]=c[D_CBC_IDEA][i-1]*l0/l1;		c[D_CBC_RC2][i]=c[D_CBC_RC2][i-1]*l0/l1;		c[D_CBC_RC5][i]=c[D_CBC_RC5][i-1]*l0/l1;		c[D_CBC_BF][i]=c[D_CBC_BF][i-1]*l0/l1;		c[D_CBC_CAST][i]=c[D_CBC_CAST][i-1]*l0/l1;		}#ifndef OPENSSL_NO_RSA	rsa_c[R_RSA_512][0]=count/2000;	rsa_c[R_RSA_512][1]=count/400;	for (i=1; i<RSA_NUM; i++)		{		rsa_c[i][0]=rsa_c[i-1][0]/8;		rsa_c[i][1]=rsa_c[i-1][1]/4;		if ((rsa_doit[i] <= 1) && (rsa_c[i][0] == 0))			rsa_doit[i]=0;		else			{			if (rsa_c[i][0] == 0)				{				rsa_c[i][0]=1;				rsa_c[i][1]=20;				}			}						}#endif#ifndef OPENSSL_NO_DSA	dsa_c[R_DSA_512][0]=count/1000;	dsa_c[R_DSA_512][1]=count/1000/2;	for (i=1; i<DSA_NUM; i++)		{		dsa_c[i][0]=dsa_c[i-1][0]/4;		dsa_c[i][1]=dsa_c[i-1][1]/4;		if ((dsa_doit[i] <= 1) && (dsa_c[i][0] == 0))			dsa_doit[i]=0;		else			{			if (dsa_c[i] == 0)				{				dsa_c[i][0]=1;				dsa_c[i][1]=1;				}			}						}#endif#define COND(d)	(count < (d))#define COUNT(d) (d)#else/* not worth fixing */# error "You cannot disable DES on systems without SIGALRM."#endif /* OPENSSL_NO_DES */#else#define COND(c)	(run)#define COUNT(d) (count)	signal(SIGALRM,sig_done);#endif /* SIGALRM */#ifndef OPENSSL_NO_MD2	if (doit[D_MD2])		{		for (j=0; j<SIZE_NUM; j++)			{			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]),NULL,EVP_md2());			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %s's in %.2fs\n",				count,names[D_MD2],d);			results[D_MD2][j]=((double)count)/d*lengths[j];			}		}#endif#ifndef OPENSSL_NO_MDC2	if (doit[D_MDC2])		{		for (j=0; j<SIZE_NUM; j++)			{			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]),NULL,EVP_mdc2());			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %s's in %.2fs\n",				count,names[D_MDC2],d);			results[D_MDC2][j]=((double)count)/d*lengths[j];			}		}#endif#ifndef OPENSSL_NO_MD4	if (doit[D_MD4])		{		for (j=0; j<SIZE_NUM; j++)			{			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]),NULL,EVP_md4());			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %s's in %.2fs\n",				count,names[D_MD4],d);			results[D_MD4][j]=((double)count)/d*lengths[j];			}		}#endif#ifndef OPENSSL_NO_MD5	if (doit[D_MD5])		{		for (j=0; j<SIZE_NUM; j++)			{			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]),NULL,EVP_md5());			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %s's in %.2fs\n",				count,names[D_MD5],d);			results[D_MD5][j]=((double)count)/d*lengths[j];			}		}#endif#if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_HMAC)	if (doit[D_HMAC])		{		HMAC_CTX hctx;		HMAC_Init(&hctx,(unsigned char *)"This is a key...",			16,EVP_md5());		for (j=0; j<SIZE_NUM; j++)			{			print_message(names[D_HMAC],c[D_HMAC][j],lengths[j]);			Time_F(START,usertime);			for (count=0,run=1; COND(c[D_HMAC][j]); count++)				{				HMAC_Init(&hctx,NULL,0,NULL);                                HMAC_Update(&hctx,buf,lengths[j]);                                HMAC_Final(&hctx,&(hmac[0]),NULL);				}			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %s's in %.2fs\n",				count,names[D_HMAC],d);			results[D_HMAC][j]=((double)count)/d*lengths[j];			}		HMAC_cleanup(&hctx);		}#endif#ifndef OPENSSL_NO_SHA	if (doit[D_SHA1])		{		for (j=0; j<SIZE_NUM; j++)			{			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]),NULL,EVP_sha1());			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %s's in %.2fs\n",				count,names[D_SHA1],d);			results[D_SHA1][j]=((double)count)/d*lengths[j];			}		}#endif#ifndef OPENSSL_NO_RIPEMD	if (doit[D_RMD160])		{		for (j=0; j<SIZE_NUM; j++)			{			print_message(names[D_RMD160],c[D_RMD160][j],lengths[j]);			Time_F(START,usertime);			for (count=0,run=1; COND(c[D_RMD160][j]); count++)				EVP_Digest(buf,(unsigned long)lengths[j],&(rmd160[0]),NULL,EVP_ripemd160());			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %s's in %.2fs\n",				count,names[D_RMD160],d);			results[D_RMD160][j]=((double)count)/d*lengths[j];			}		}#endif#ifndef OPENSSL_NO_RC4	if (doit[D_RC4])		{		for (j=0; j<SIZE_NUM; j++)			{			print_message(names[D_RC4],c[D_RC4][j],lengths[j]);			Time_F(START,usertime);			for (count=0,run=1; COND(c[D_RC4][j]); count++)				RC4(&rc4_ks,(unsigned int)lengths[j],					buf,buf);			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %s's in %.2fs\n",				count,names[D_RC4],d);			results[D_RC4][j]=((double)count)/d*lengths[j];			}		}#endif#ifndef OPENSSL_NO_DES	if (doit[D_CBC_DES])		{		for (j=0; j<SIZE_NUM; j++)			{			print_message(names[D_CBC_DES],c[D_CBC_DES][j],lengths[j]);			Time_F(START,usertime);			for (count=0,run=1; COND(c[D_CBC_DES][j]); count++)				des_ncbc_encrypt(buf,buf,lengths[j],sch,						 &iv,DES_ENCRYPT);			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %s's in %.2fs\n",				count,names[D_CBC_DES],d);			results[D_CBC_DES][j]=((double)count)/d*lengths[j];			}		}	if (doit[D_EDE3_DES])		{		for (j=0; j<SIZE_NUM; j++)			{			print_message(names[D_EDE3_DES],c[D_EDE3_DES][j],lengths[j]);			Time_F(START,usertime);			for (count=0,run=1; COND(c[D_EDE3_DES][j]); count++)				des_ede3_cbc_encrypt(buf,buf,lengths[j],						     sch,sch2,sch3,						     &iv,DES_ENCRYPT);			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %s's in %.2fs\n",				count,names[D_EDE3_DES],d);			results[D_EDE3_DES][j]=((double)count)/d*lengths[j];			}		}#endif#ifndef OPENSSL_NO_IDEA	if (doit[D_CBC_IDEA])		{		for (j=0; j<SIZE_NUM; j++)			{			print_message(names[D_CBC_IDEA],c[D_CBC_IDEA][j],lengths[j]);			Time_F(START,usertime);			for (count=0,run=1; COND(c[D_CBC_IDEA][j]); count++)				idea_cbc_encrypt(buf,buf,					(unsigned long)lengths[j],&idea_ks,					iv,IDEA_ENCRYPT);			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %s's in %.2fs\n",				count,names[D_CBC_IDEA],d);			results[D_CBC_IDEA][j]=((double)count)/d*lengths[j];			}		}#endif#ifndef OPENSSL_NO_RC2	if (doit[D_CBC_RC2])		{		for (j=0; j<SIZE_NUM; j++)			{			print_message(names[D_CBC_RC2],c[D_CBC_RC2][j],lengths[j]);			Time_F(START,usertime);			for (count=0,run=1; COND(c[D_CBC_RC2][j]); count++)				RC2_cbc_encrypt(buf,buf,					(unsigned long)lengths[j],&rc2_ks,					iv,RC2_ENCRYPT);			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %s's in %.2fs\n",				count,names[D_CBC_RC2],d);			results[D_CBC_RC2][j]=((double)count)/d*lengths[j];			}		}#endif#ifndef OPENSSL_NO_RC5	if (doit[D_CBC_RC5])		{		for (j=0; j<SIZE_NUM; j++)			{			print_message(names[D_CBC_RC5],c[D_CBC_RC5][j],lengths[j]);			Time_F(START,usertime);			for (count=0,run=1; COND(c[D_CBC_RC5][j]); count++)				RC5_32_cbc_encrypt(buf,buf,					(unsigned long)lengths[j],&rc5_ks,					iv,RC5_ENCRYPT);			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %s's in %.2fs\n",				count,names[D_CBC_RC5],d);			results[D_CBC_RC5][j]=((double)count)/d*lengths[j];			}		}#endif#ifndef OPENSSL_NO_BF	if (doit[D_CBC_BF])		{		for (j=0; j<SIZE_NUM; j++)			{			print_message(names[D_CBC_BF],c[D_CBC_BF][j],lengths[j]);			Time_F(START,usertime);			for (count=0,run=1; COND(c[D_CBC_BF][j]); count++)				BF_cbc_encrypt(buf,buf,					(unsigned long)lengths[j],&bf_ks,					iv,BF_ENCRYPT);			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %s's in %.2fs\n",				count,names[D_CBC_BF],d);			results[D_CBC_BF][j]=((double)count)/d*lengths[j];			}		}#endif#ifndef OPENSSL_NO_CAST	if (doit[D_CBC_CAST])		{		for (j=0; j<SIZE_NUM; j++)			{			print_message(names[D_CBC_CAST],c[D_CBC_CAST][j],lengths[j]);			Time_F(START,usertime);			for (count=0,run=1; COND(c[D_CBC_CAST][j]); count++)				CAST_cbc_encrypt(buf,buf,					(unsigned long)lengths[j],&cast_ks,					iv,CAST_ENCRYPT);			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %s's in %.2fs\n",				count,names[D_CBC_CAST],d);			results[D_CBC_CAST][j]=((double)count)/d*lengths[j];			}		}#endif	if (doit[D_EVP])		{		for (j=0; j<SIZE_NUM; j++)			{			EVP_CIPHER_CTX ctx;			int outl;			names[D_EVP]=OBJ_nid2ln(evp->nid);			print_message(names[D_EVP],save_count,						  lengths[j]);			if(decrypt)				EVP_DecryptInit(&ctx,evp,key16,iv);			else				EVP_EncryptInit(&ctx,evp,key16,iv);							Time_F(START,usertime);			if(decrypt)				for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)					EVP_DecryptUpdate(&ctx,buf,&outl,buf,lengths[j]);			else				for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)					EVP_EncryptUpdate(&ctx,buf,&outl,buf,lengths[j]);			if(decrypt)				EVP_DecryptFinal(&ctx,buf,&outl);			else				EVP_EncryptFinal(&ctx,buf,&outl);			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %s's in %.2fs\n",					   count,names[D_EVP],d);			results[D_EVP][j]=((double)count)/d*lengths[j];			}		}	RAND_pseudo_bytes(buf,36);#ifndef OPENSSL_NO_RSA	for (j=0; j<RSA_NUM; j++)		{		int ret;		if (!rsa_doit[j]) continue;		ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num, rsa_key[j]);		if (ret == 0)			{			BIO_printf(bio_err,"RSA sign failure.  No RSA sign will be done.\n");			ERR_print_errors(bio_err);			rsa_count=1;			}		else			{			pkey_print_message("private","rsa",				rsa_c[j][0],rsa_bits[j],				RSA_SECONDS);/*			RSA_blinding_on(rsa_key[j],NULL); */			Time_F(START,usertime);			for (count=0,run=1; COND(rsa_c[j][0]); count++)				{				ret=RSA_sign(NID_md5_sha1, buf,36, buf2,					&rsa_num, rsa_key[j]);				if (ret == 0)					{					BIO_printf(bio_err,						"RSA sign failure\n");					ERR_print_errors(bio_err);					count=1;					break;					}				}			d=Time_F(STOP,usertime);			BIO_printf(bio_err,				"%ld %d bit private RSA's in %.2fs\n",				count,rsa_bits[j],d);			rsa_results[j][0]=d/(double)count;			rsa_count=count;			}#if 1		ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num, rsa_key[j]);		if (ret <= 0)			{			BIO_printf(bio_err,"RSA verify failure.  No RSA verify will be done.\n");			ERR_print_errors(bio_err);			rsa_doit[j] = 0;			}		else			{			pkey_print_message("public","rsa",				rsa_c[j][1],rsa_bits[j],				RSA_SECONDS);			Time_F(START,usertime);			for (count=0,run=1; COND(rsa_c[j][1]); count++)				{				ret=RSA_verify(NID_md5_sha1, buf,36, buf2,					rsa_num, rsa_key[j]);				if (ret == 0)					{					BIO_printf(bio_err,						"RSA verify failure\n");					ERR_print_errors(bio_err);					count=1;					break;					}				}			d=Time_F(STOP,usertime);			BIO_printf(bio_err,				"%ld %d bit public RSA's in %.2fs\n",				count,rsa_bits[j],d);			rsa_results[j][1]=d/(double)count;			}#endif		if (rsa_count <= 1)			{			/* if longer than 10s, don't do any more */			for (j++; j<RSA_NUM; j++)				rsa_doit[j]=0;			}		}#endif	RAND_pseudo_bytes(buf,20);#ifndef OPENSSL_NO_DSA	if (RAND_status() != 1)		{		RAND_seed(rnd_seed, sizeof rnd_seed);		rnd_fake = 1;		}	for (j=0; j<DSA_NUM; j++)		{		unsigned int kk;		int ret;		if (!dsa_doit[j]) continue;		DSA_generate_key(dsa_key[j]);/*		DSA_sign_setup(dsa_key[j],NULL); */		ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,			&kk,dsa_key[j]);		if (ret == 0)			{			BIO_printf(bio_err,"DSA sign failure.  No DSA sign will be done.\n");			ERR_print_errors(bio_err);			rsa_count=1;			}		else			{			pkey_print_message("sign","dsa",				dsa_c[j][0],dsa_bits[j],				DSA_SECONDS);			Time_F(START,usertime);			for (count=0,run=1; COND(dsa_c[j][0]); count++)				{				ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,					&kk,dsa_key[j]);				if (ret == 0)					{					BIO_printf(bio_err,						"DSA sign failure\n");					ERR_print_errors(bio_err);					count=1;					break;					}				}			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %d bit DSA signs in %.2fs\n",				count,dsa_bits[j],d);			dsa_results[j][0]=d/(double)count;			rsa_count=count;			}		ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,			kk,dsa_key[j]);		if (ret <= 0)			{			BIO_printf(bio_err,"DSA verify failure.  No DSA verify will be done.\n");			ERR_print_errors(bio_err);			dsa_doit[j] = 0;			}		else			{			pkey_print_message("verify","dsa",				dsa_c[j][1],dsa_bits[j],				DSA_SECONDS);			Time_F(START,usertime);			for (count=0,run=1; COND(dsa_c[j][1]); count++)				{				ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,					kk,dsa_key[j]);				if (ret <= 0)					{					BIO_printf(bio_err,						"DSA verify failure\n");					ERR_print_errors(bio_err);					count=1;					break;					}				}			d=Time_F(STOP,usertime);			BIO_printf(bio_err,"%ld %d bit DSA verify in %.2fs\n",				count,dsa_bits[j],d);			dsa_results[j][1]=d/(double)count;			}		if (rsa_count <= 1)			{			/* if longer than 10s, don't do any more */			for (j++; j<DSA_NUM; j++)				dsa_doit[j]=0;			}		}	if (rnd_fake) RAND_cleanup();#endif	fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_VERSION));        fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_BUILT_ON));	printf("options:");	printf("%s ",BN_options());#ifndef OPENSSL_NO_MD2	printf("%s ",MD2_options());#endif#ifndef OPENSSL_NO_RC4	printf("%s ",RC4_options());#endif#ifndef OPENSSL_NO_DES	printf("%s ",des_options());#endif#ifndef OPENSSL_NO_IDEA	printf("%s ",idea_options());#endif#ifndef OPENSSL_NO_BF	printf("%s ",BF_options());#endif	fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS));	if (pr_header)		{		fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n"); 		fprintf(stdout,"type        ");		for (j=0;  j<SIZE_NUM; j++)			fprintf(stdout,"%7d bytes",lengths[j]);		fprintf(stdout,"\n");		}	for (k=0; k<ALGOR_NUM; k++)		{		if (!doit[k]) continue;		fprintf(stdout,"%-13s",names[k]);		for (j=0; j<SIZE_NUM; j++)			{			if (results[k][j] > 10000)				fprintf(stdout," %11.2fk",results[k][j]/1e3);			else				fprintf(stdout," %11.2f ",results[k][j]);			}		fprintf(stdout,"\n");		}#ifndef OPENSSL_NO_RSA	j=1;	for (k=0; k<RSA_NUM; k++)		{		if (!rsa_doit[k]) continue;		if (j)			{			printf("%18ssign    verify    sign/s verify/s\n"," ");			j=0;			}		fprintf(stdout,"rsa %4u bits %8.4fs %8.4fs %8.1f %8.1f",			rsa_bits[k],rsa_results[k][0],rsa_results[k][1],			1.0/rsa_results[k][0],1.0/rsa_results[k][1]);		fprintf(stdout,"\n");		}#endif#ifndef OPENSSL_NO_DSA	j=1;	for (k=0; k<DSA_NUM; k++)		{		if (!dsa_doit[k]) continue;		if (j)	{			printf("%18ssign    verify    sign/s verify/s\n"," ");			j=0;			}		fprintf(stdout,"dsa %4u bits %8.4fs %8.4fs %8.1f %8.1f",			dsa_bits[k],dsa_results[k][0],dsa_results[k][1],			1.0/dsa_results[k][0],1.0/dsa_results[k][1]);		fprintf(stdout,"\n");		}#endif	mret=0;end:	ERR_print_errors(bio_err);	if (buf != NULL) OPENSSL_free(buf);	if (buf2 != NULL) OPENSSL_free(buf2);#ifndef OPENSSL_NO_RSA	for (i=0; i<RSA_NUM; i++)		if (rsa_key[i] != NULL)			RSA_free(rsa_key[i]);#endif#ifndef OPENSSL_NO_DSA	for (i=0; i<DSA_NUM; i++)		if (dsa_key[i] != NULL)			DSA_free(dsa_key[i]);#endif	apps_shutdown();	EXIT(mret);	}