1 /* apps/speed.c -*- mode:C; c-file-style: "eay" -*- */
2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
59 /* most of this code has been pilfered from my libdes speed.c program */
63 #define RSA_SECONDS 10
64 #define DSA_SECONDS 10
66 /* 11-Sep-92 Andrew Daviel Support for Silicon Graphics IRIX added */
67 /* 06-Apr-92 Luke Brennan Support for VMS and add extra signal calls */
70 #define PROG speed_main
78 #ifdef OPENSSL_NO_STDIO
81 #include <openssl/crypto.h>
82 #include <openssl/rand.h>
83 #include <openssl/err.h>
84 #include <openssl/evp.h>
85 #include <openssl/objects.h>
86 #include OPENSSL_UNISTD
88 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(OPENSSL_SYS_MACOSX)
90 #elif !defined(OPENSSL_SYS_MSDOS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC))
93 #if !defined(_UNICOS) && !defined(__OpenBSD__) && !defined(sgi) && !defined(__FreeBSD__) && !(defined(__bsdi) || defined(__bsdi__)) && !defined(_AIX) && !defined(OPENSSL_SYS_MPE) && !defined(__NetBSD__) /* FIXME */
101 # include <sys/types.h>
102 # include <sys/times.h>
105 # include <sys/time.h>
106 # include <sys/resource.h>
109 /* Depending on the VMS version, the tms structure is perhaps defined.
110 The __TMS macro will show if it was. If it wasn't defined, we should
111 undefine TIMES, since that tells the rest of the program how things
112 should be handled. -- Richard Levitte */
113 #if defined(OPENSSL_SYS_VMS_DECC) && !defined(__TMS)
118 #include <sys/timeb.h>
121 #if !defined(TIMES) && !defined(TIMEB) && !defined(USE_TOD)
122 #error "It seems neither struct tms nor struct timeb is supported in this platform!"
125 #if defined(sun) || defined(__ultrix)
126 #define _POSIX_SOURCE
128 #include <sys/param.h>
131 #ifndef OPENSSL_NO_DES
132 #include <openssl/des_old.h>
134 #ifndef OPENSSL_NO_MD2
135 #include <openssl/md2.h>
137 #ifndef OPENSSL_NO_MDC2
138 #include <openssl/mdc2.h>
140 #ifndef OPENSSL_NO_MD4
141 #include <openssl/md4.h>
143 #ifndef OPENSSL_NO_MD5
144 #include <openssl/md5.h>
146 #ifndef OPENSSL_NO_HMAC
147 #include <openssl/hmac.h>
149 #include <openssl/evp.h>
150 #ifndef OPENSSL_NO_SHA
151 #include <openssl/sha.h>
153 #ifndef OPENSSL_NO_RIPEMD
154 #include <openssl/ripemd.h>
156 #ifndef OPENSSL_NO_RC4
157 #include <openssl/rc4.h>
159 #ifndef OPENSSL_NO_RC5
160 #include <openssl/rc5.h>
162 #ifndef OPENSSL_NO_RC2
163 #include <openssl/rc2.h>
165 #ifndef OPENSSL_NO_IDEA
166 #include <openssl/idea.h>
168 #ifndef OPENSSL_NO_BF
169 #include <openssl/blowfish.h>
171 #ifndef OPENSSL_NO_CAST
172 #include <openssl/cast.h>
174 #ifndef OPENSSL_NO_RSA
175 #include <openssl/rsa.h>
176 #include "./testrsa.h"
178 #include <openssl/x509.h>
179 #ifndef OPENSSL_NO_DSA
180 #include "./testdsa.h"
183 /* The following if from times(3) man page. It may need to be changed */
186 # define HZ ((double)sysconf(_SC_CLK_TCK))
189 # ifndef _BSD_CLK_TCK_ /* FreeBSD hack */
191 # else /* _BSD_CLK_TCK_ */
192 # define HZ ((double)_BSD_CLK_TCK_)
195 # define HZ ((double)CLK_TCK)
201 #define BUFSIZE ((long)1024*8+1)
204 static char ftime_used = 0, times_used = 0, gettimeofday_used = 0, getrusage_used = 0;
206 static double Time_F(int s, int usertime);
207 static void print_message(const char *s,long num,int length);
208 static void pkey_print_message(char *str,char *str2,long num,int bits,int sec);
210 #if defined(__STDC__) || defined(sgi) || defined(_AIX)
211 #define SIGRETTYPE void
213 #define SIGRETTYPE int
216 static SIGRETTYPE sig_done(int sig);
217 static SIGRETTYPE sig_done(int sig)
219 signal(SIGALRM,sig_done);
230 static double Time_F(int s, int usertime)
237 static struct rusage tstart,tend;
242 getrusage(RUSAGE_SELF,&tstart);
249 getrusage(RUSAGE_SELF,&tend);
250 i=(long)tend.ru_utime.tv_usec-(long)tstart.ru_utime.tv_usec;
251 ret=((double)(tend.ru_utime.tv_sec-tstart.ru_utime.tv_sec))
252 +((double)i)/1000000.0;
253 return((ret < 0.001)?0.001:ret);
258 static struct timeval tstart,tend;
261 gettimeofday_used = 1;
264 gettimeofday(&tstart,NULL);
269 gettimeofday(&tend,NULL);
270 i=(long)tend.tv_usec-(long)tstart.tv_usec;
271 ret=((double)(tend.tv_sec-tstart.tv_sec))+((double)i)/1000000.0;
272 return((ret < 0.001)?0.001:ret);
275 #else /* ndef USE_TOD */
280 static struct tms tstart,tend;
291 ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
292 return((ret < 1e-3)?1e-3:ret);
295 # endif /* times() */
296 # if defined(TIMES) && defined(TIMEB)
301 static struct timeb tstart,tend;
313 i=(long)tend.millitm-(long)tstart.millitm;
314 ret=((double)(tend.time-tstart.time))+((double)i)/1000.0;
315 return((ret < 0.001)?0.001:ret);
322 int MAIN(int, char **);
324 int MAIN(int argc, char **argv)
327 unsigned char *buf=NULL,*buf2=NULL;
333 long count,rsa_count,save_count=0;
335 #ifndef OPENSSL_NO_RSA
338 #ifndef OPENSSL_NO_MD2
339 unsigned char md2[MD2_DIGEST_LENGTH];
341 #ifndef OPENSSL_NO_MDC2
342 unsigned char mdc2[MDC2_DIGEST_LENGTH];
344 #ifndef OPENSSL_NO_MD4
345 unsigned char md4[MD4_DIGEST_LENGTH];
347 #ifndef OPENSSL_NO_MD5
348 unsigned char md5[MD5_DIGEST_LENGTH];
349 unsigned char hmac[MD5_DIGEST_LENGTH];
351 #ifndef OPENSSL_NO_SHA
352 unsigned char sha[SHA_DIGEST_LENGTH];
354 #ifndef OPENSSL_NO_RIPEMD
355 unsigned char rmd160[RIPEMD160_DIGEST_LENGTH];
357 #ifndef OPENSSL_NO_RC4
360 #ifndef OPENSSL_NO_RC5
363 #ifndef OPENSSL_NO_RC2
366 #ifndef OPENSSL_NO_IDEA
367 IDEA_KEY_SCHEDULE idea_ks;
369 #ifndef OPENSSL_NO_BF
372 #ifndef OPENSSL_NO_CAST
375 static unsigned char key16[16]=
376 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
377 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
379 #ifndef OPENSSL_NO_DES
380 DES_cblock *buf_as_des_cblock = NULL;
381 static des_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};
382 static des_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
383 static des_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
384 DES_key_schedule sch;
385 DES_key_schedule sch2;
386 DES_key_schedule sch3;
398 #define D_CBC_IDEA 10
402 #define D_CBC_CAST 14
404 double d,results[ALGOR_NUM][SIZE_NUM];
405 static int lengths[SIZE_NUM]={8,64,256,1024,8*1024};
406 long c[ALGOR_NUM][SIZE_NUM];
407 static const char *names[ALGOR_NUM]={
408 "md2","mdc2","md4","md5","hmac(md5)","sha1","rmd160","rc4",
409 "des cbc","des ede3","idea cbc",
410 "rc2 cbc","rc5-32/12 cbc","blowfish cbc","cast cbc"};
418 #ifndef OPENSSL_NO_RSA
419 RSA *rsa_key[RSA_NUM];
420 long rsa_c[RSA_NUM][2];
421 double rsa_results[RSA_NUM][2];
422 static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,4096};
423 static unsigned char *rsa_data[RSA_NUM]=
424 {test512,test1024,test2048,test4096};
425 static int rsa_data_length[RSA_NUM]={
426 sizeof(test512),sizeof(test1024),
427 sizeof(test2048),sizeof(test4096)};
429 #ifndef OPENSSL_NO_DSA
430 DSA *dsa_key[DSA_NUM];
431 long dsa_c[DSA_NUM][2];
432 double dsa_results[DSA_NUM][2];
433 static unsigned int dsa_bits[DSA_NUM]={512,1024,2048};
435 int rsa_doit[RSA_NUM];
436 int dsa_doit[DSA_NUM];
440 const EVP_CIPHER *evp=NULL;
448 memset(results, 0, sizeof(results));
449 #ifndef OPENSSL_NO_DSA
450 memset(dsa_key,0,sizeof(dsa_key));
454 if ((bio_err=BIO_new(BIO_s_file())) != NULL)
455 BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
457 #ifndef OPENSSL_NO_RSA
458 memset(rsa_key,0,sizeof(rsa_key));
459 for (i=0; i<RSA_NUM; i++)
463 if ((buf=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
465 BIO_printf(bio_err,"out of memory\n");
468 #ifndef OPENSSL_NO_DES
469 buf_as_des_cblock = (des_cblock *)buf;
471 if ((buf2=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
473 BIO_printf(bio_err,"out of memory\n");
477 memset(c,0,sizeof(c));
478 memset(iv,0,sizeof(iv));
480 for (i=0; i<ALGOR_NUM; i++)
482 for (i=0; i<RSA_NUM; i++)
484 for (i=0; i<DSA_NUM; i++)
492 if ((argc > 0) && (strcmp(*argv,"-elapsed") == 0))
495 j--; /* Otherwise, -elapsed gets confused with
498 else if ((argc > 0) && (strcmp(*argv,"-evp") == 0))
504 BIO_printf(bio_err,"no EVP given\n");
507 evp=EVP_get_cipherbyname(*argv);
510 BIO_printf(bio_err,"%s is an unknown cipher\n",*argv);
515 else if (argc > 0 && !strcmp(*argv,"-decrypt"))
518 j--; /* Otherwise, -elapsed gets confused with
521 else if ((argc > 0) && (strcmp(*argv,"-engine") == 0))
527 BIO_printf(bio_err,"no engine given\n");
530 e = setup_engine(bio_err, *argv, 0);
531 /* j will be increased again further down. We just
532 don't want speed to confuse an engine with an
533 algorithm, especially when none is given (which
534 means all of them should be run) */
538 #ifndef OPENSSL_NO_MD2
539 if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1;
542 #ifndef OPENSSL_NO_MDC2
543 if (strcmp(*argv,"mdc2") == 0) doit[D_MDC2]=1;
546 #ifndef OPENSSL_NO_MD4
547 if (strcmp(*argv,"md4") == 0) doit[D_MD4]=1;
550 #ifndef OPENSSL_NO_MD5
551 if (strcmp(*argv,"md5") == 0) doit[D_MD5]=1;
554 #ifndef OPENSSL_NO_MD5
555 if (strcmp(*argv,"hmac") == 0) doit[D_HMAC]=1;
558 #ifndef OPENSSL_NO_SHA
559 if (strcmp(*argv,"sha1") == 0) doit[D_SHA1]=1;
561 if (strcmp(*argv,"sha") == 0) doit[D_SHA1]=1;
564 #ifndef OPENSSL_NO_RIPEMD
565 if (strcmp(*argv,"ripemd") == 0) doit[D_RMD160]=1;
567 if (strcmp(*argv,"rmd160") == 0) doit[D_RMD160]=1;
569 if (strcmp(*argv,"ripemd160") == 0) doit[D_RMD160]=1;
572 #ifndef OPENSSL_NO_RC4
573 if (strcmp(*argv,"rc4") == 0) doit[D_RC4]=1;
576 #ifndef OPENSSL_NO_DES
577 if (strcmp(*argv,"des-cbc") == 0) doit[D_CBC_DES]=1;
578 else if (strcmp(*argv,"des-ede3") == 0) doit[D_EDE3_DES]=1;
581 #ifndef OPENSSL_NO_RSA
582 #if 0 /* was: #ifdef RSAref */
583 if (strcmp(*argv,"rsaref") == 0)
585 RSA_set_default_openssl_method(RSA_PKCS1_RSAref());
591 if (strcmp(*argv,"openssl") == 0)
593 RSA_set_default_method(RSA_PKCS1_SSLeay());
598 #endif /* !OPENSSL_NO_RSA */
599 if (strcmp(*argv,"dsa512") == 0) dsa_doit[R_DSA_512]=2;
600 else if (strcmp(*argv,"dsa1024") == 0) dsa_doit[R_DSA_1024]=2;
601 else if (strcmp(*argv,"dsa2048") == 0) dsa_doit[R_DSA_2048]=2;
602 else if (strcmp(*argv,"rsa512") == 0) rsa_doit[R_RSA_512]=2;
603 else if (strcmp(*argv,"rsa1024") == 0) rsa_doit[R_RSA_1024]=2;
604 else if (strcmp(*argv,"rsa2048") == 0) rsa_doit[R_RSA_2048]=2;
605 else if (strcmp(*argv,"rsa4096") == 0) rsa_doit[R_RSA_4096]=2;
607 #ifndef OPENSSL_NO_RC2
608 if (strcmp(*argv,"rc2-cbc") == 0) doit[D_CBC_RC2]=1;
609 else if (strcmp(*argv,"rc2") == 0) doit[D_CBC_RC2]=1;
612 #ifndef OPENSSL_NO_RC5
613 if (strcmp(*argv,"rc5-cbc") == 0) doit[D_CBC_RC5]=1;
614 else if (strcmp(*argv,"rc5") == 0) doit[D_CBC_RC5]=1;
617 #ifndef OPENSSL_NO_IDEA
618 if (strcmp(*argv,"idea-cbc") == 0) doit[D_CBC_IDEA]=1;
619 else if (strcmp(*argv,"idea") == 0) doit[D_CBC_IDEA]=1;
622 #ifndef OPENSSL_NO_BF
623 if (strcmp(*argv,"bf-cbc") == 0) doit[D_CBC_BF]=1;
624 else if (strcmp(*argv,"blowfish") == 0) doit[D_CBC_BF]=1;
625 else if (strcmp(*argv,"bf") == 0) doit[D_CBC_BF]=1;
628 #ifndef OPENSSL_NO_CAST
629 if (strcmp(*argv,"cast-cbc") == 0) doit[D_CBC_CAST]=1;
630 else if (strcmp(*argv,"cast") == 0) doit[D_CBC_CAST]=1;
631 else if (strcmp(*argv,"cast5") == 0) doit[D_CBC_CAST]=1;
634 #ifndef OPENSSL_NO_DES
635 if (strcmp(*argv,"des") == 0)
642 #ifndef OPENSSL_NO_RSA
643 if (strcmp(*argv,"rsa") == 0)
645 rsa_doit[R_RSA_512]=1;
646 rsa_doit[R_RSA_1024]=1;
647 rsa_doit[R_RSA_2048]=1;
648 rsa_doit[R_RSA_4096]=1;
652 #ifndef OPENSSL_NO_DSA
653 if (strcmp(*argv,"dsa") == 0)
655 dsa_doit[R_DSA_512]=1;
656 dsa_doit[R_DSA_1024]=1;
661 BIO_printf(bio_err,"Error: bad option or value\n");
662 BIO_printf(bio_err,"\n");
663 BIO_printf(bio_err,"Available values:\n");
664 #ifndef OPENSSL_NO_MD2
665 BIO_printf(bio_err,"md2 ");
667 #ifndef OPENSSL_NO_MDC2
668 BIO_printf(bio_err,"mdc2 ");
670 #ifndef OPENSSL_NO_MD4
671 BIO_printf(bio_err,"md4 ");
673 #ifndef OPENSSL_NO_MD5
674 BIO_printf(bio_err,"md5 ");
675 #ifndef OPENSSL_NO_HMAC
676 BIO_printf(bio_err,"hmac ");
679 #ifndef OPENSSL_NO_SHA1
680 BIO_printf(bio_err,"sha1 ");
682 #ifndef OPENSSL_NO_RIPEMD160
683 BIO_printf(bio_err,"rmd160");
685 #if !defined(OPENSSL_NO_MD2) || !defined(OPENSSL_NO_MDC2) || \
686 !defined(OPENSSL_NO_MD4) || !defined(OPENSSL_NO_MD5) || \
687 !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160)
688 BIO_printf(bio_err,"\n");
691 #ifndef OPENSSL_NO_IDEA
692 BIO_printf(bio_err,"idea-cbc ");
694 #ifndef OPENSSL_NO_RC2
695 BIO_printf(bio_err,"rc2-cbc ");
697 #ifndef OPENSSL_NO_RC5
698 BIO_printf(bio_err,"rc5-cbc ");
700 #ifndef OPENSSL_NO_BF
701 BIO_printf(bio_err,"bf-cbc");
703 #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_RC2) || \
704 !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_RC5)
705 BIO_printf(bio_err,"\n");
708 BIO_printf(bio_err,"des-cbc des-ede3 ");
709 #ifndef OPENSSL_NO_RC4
710 BIO_printf(bio_err,"rc4");
712 BIO_printf(bio_err,"\n");
714 #ifndef OPENSSL_NO_RSA
715 BIO_printf(bio_err,"rsa512 rsa1024 rsa2048 rsa4096\n");
718 #ifndef OPENSSL_NO_DSA
719 BIO_printf(bio_err,"dsa512 dsa1024 dsa2048\n");
722 #ifndef OPENSSL_NO_IDEA
723 BIO_printf(bio_err,"idea ");
725 #ifndef OPENSSL_NO_RC2
726 BIO_printf(bio_err,"rc2 ");
728 #ifndef OPENSSL_NO_DES
729 BIO_printf(bio_err,"des ");
731 #ifndef OPENSSL_NO_RSA
732 BIO_printf(bio_err,"rsa ");
734 #ifndef OPENSSL_NO_BF
735 BIO_printf(bio_err,"blowfish");
737 #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_RC2) || \
738 !defined(OPENSSL_NO_DES) || !defined(OPENSSL_NO_RSA) || \
739 !defined(OPENSSL_NO_BF)
740 BIO_printf(bio_err,"\n");
743 BIO_printf(bio_err,"\n");
744 BIO_printf(bio_err,"Available options:\n");
746 BIO_printf(bio_err,"-elapsed measure time in real time instead of CPU user time.\n");
748 BIO_printf(bio_err,"-engine e use engine e, possibly a hardware device.\n");
758 for (i=0; i<ALGOR_NUM; i++)
763 for (i=0; i<RSA_NUM; i++)
765 for (i=0; i<DSA_NUM; i++)
768 for (i=0; i<ALGOR_NUM; i++)
769 if (doit[i]) pr_header++;
772 BIO_printf(bio_err,"You have chosen to measure elapsed time instead of user CPU time.\n");
775 BIO_printf(bio_err,"To get the most accurate results, try to run this\n");
776 BIO_printf(bio_err,"program when this computer is idle.\n");
779 #ifndef OPENSSL_NO_RSA
780 for (i=0; i<RSA_NUM; i++)
782 const unsigned char *p;
785 rsa_key[i]=d2i_RSAPrivateKey(NULL,&p,rsa_data_length[i]);
786 if (rsa_key[i] == NULL)
788 BIO_printf(bio_err,"internal error loading RSA key number %d\n",i);
794 BIO_printf(bio_err,"Loaded RSA key, %d bit modulus and e= 0x",BN_num_bits(rsa_key[i]->n));
795 BN_print(bio_err,rsa_key[i]->e);
796 BIO_printf(bio_err,"\n");
802 #ifndef OPENSSL_NO_DSA
803 dsa_key[0]=get_dsa512();
804 dsa_key[1]=get_dsa1024();
805 dsa_key[2]=get_dsa2048();
808 #ifndef OPENSSL_NO_DES
809 DES_set_key_unchecked(&key,&sch);
810 DES_set_key_unchecked(&key2,&sch2);
811 DES_set_key_unchecked(&key3,&sch3);
813 #ifndef OPENSSL_NO_IDEA
814 idea_set_encrypt_key(key16,&idea_ks);
816 #ifndef OPENSSL_NO_RC4
817 RC4_set_key(&rc4_ks,16,key16);
819 #ifndef OPENSSL_NO_RC2
820 RC2_set_key(&rc2_ks,16,key16,128);
822 #ifndef OPENSSL_NO_RC5
823 RC5_32_set_key(&rc5_ks,16,key16,12);
825 #ifndef OPENSSL_NO_BF
826 BF_set_key(&bf_ks,16,key16);
828 #ifndef OPENSSL_NO_CAST
829 CAST_set_key(&cast_ks,16,key16);
831 #ifndef OPENSSL_NO_RSA
832 memset(rsa_c,0,sizeof(rsa_c));
835 #ifndef OPENSSL_NO_DES
836 BIO_printf(bio_err,"First we calculate the approximate speed ...\n");
841 Time_F(START,usertime);
842 for (i=count; i; i--)
843 des_ecb_encrypt(buf_as_des_cblock,buf_as_des_cblock,
845 d=Time_F(STOP,usertime);
848 c[D_MD2][0]=count/10;
849 c[D_MDC2][0]=count/10;
854 c[D_RMD160][0]=count;
856 c[D_CBC_DES][0]=count;
857 c[D_EDE3_DES][0]=count/3;
858 c[D_CBC_IDEA][0]=count;
859 c[D_CBC_RC2][0]=count;
860 c[D_CBC_RC5][0]=count;
861 c[D_CBC_BF][0]=count;
862 c[D_CBC_CAST][0]=count;
864 for (i=1; i<SIZE_NUM; i++)
866 c[D_MD2][i]=c[D_MD2][0]*4*lengths[0]/lengths[i];
867 c[D_MDC2][i]=c[D_MDC2][0]*4*lengths[0]/lengths[i];
868 c[D_MD4][i]=c[D_MD4][0]*4*lengths[0]/lengths[i];
869 c[D_MD5][i]=c[D_MD5][0]*4*lengths[0]/lengths[i];
870 c[D_HMAC][i]=c[D_HMAC][0]*4*lengths[0]/lengths[i];
871 c[D_SHA1][i]=c[D_SHA1][0]*4*lengths[0]/lengths[i];
872 c[D_RMD160][i]=c[D_RMD160][0]*4*lengths[0]/lengths[i];
874 for (i=1; i<SIZE_NUM; i++)
878 l0=(long)lengths[i-1];
880 c[D_RC4][i]=c[D_RC4][i-1]*l0/l1;
881 c[D_CBC_DES][i]=c[D_CBC_DES][i-1]*l0/l1;
882 c[D_EDE3_DES][i]=c[D_EDE3_DES][i-1]*l0/l1;
883 c[D_CBC_IDEA][i]=c[D_CBC_IDEA][i-1]*l0/l1;
884 c[D_CBC_RC2][i]=c[D_CBC_RC2][i-1]*l0/l1;
885 c[D_CBC_RC5][i]=c[D_CBC_RC5][i-1]*l0/l1;
886 c[D_CBC_BF][i]=c[D_CBC_BF][i-1]*l0/l1;
887 c[D_CBC_CAST][i]=c[D_CBC_CAST][i-1]*l0/l1;
889 #ifndef OPENSSL_NO_RSA
890 rsa_c[R_RSA_512][0]=count/2000;
891 rsa_c[R_RSA_512][1]=count/400;
892 for (i=1; i<RSA_NUM; i++)
894 rsa_c[i][0]=rsa_c[i-1][0]/8;
895 rsa_c[i][1]=rsa_c[i-1][1]/4;
896 if ((rsa_doit[i] <= 1) && (rsa_c[i][0] == 0))
900 if (rsa_c[i][0] == 0)
909 #ifndef OPENSSL_NO_DSA
910 dsa_c[R_DSA_512][0]=count/1000;
911 dsa_c[R_DSA_512][1]=count/1000/2;
912 for (i=1; i<DSA_NUM; i++)
914 dsa_c[i][0]=dsa_c[i-1][0]/4;
915 dsa_c[i][1]=dsa_c[i-1][1]/4;
916 if ((dsa_doit[i] <= 1) && (dsa_c[i][0] == 0))
929 #define COND(d) (count < (d))
932 /* not worth fixing */
933 # error "You cannot disable DES on systems without SIGALRM."
934 #endif /* OPENSSL_NO_DES */
936 #define COND(c) (run)
937 #define COUNT(d) (count)
938 signal(SIGALRM,sig_done);
941 #ifndef OPENSSL_NO_MD2
944 for (j=0; j<SIZE_NUM; j++)
946 print_message(names[D_MD2],c[D_MD2][j],lengths[j]);
947 Time_F(START,usertime);
948 for (count=0,run=1; COND(c[D_MD2][j]); count++)
949 EVP_Digest(buf,(unsigned long)lengths[j],&(md2[0]),NULL,EVP_md2(), NULL);
950 d=Time_F(STOP,usertime);
951 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
952 count,names[D_MD2],d);
953 results[D_MD2][j]=((double)count)/d*lengths[j];
957 #ifndef OPENSSL_NO_MDC2
960 for (j=0; j<SIZE_NUM; j++)
962 print_message(names[D_MDC2],c[D_MDC2][j],lengths[j]);
963 Time_F(START,usertime);
964 for (count=0,run=1; COND(c[D_MDC2][j]); count++)
965 EVP_Digest(buf,(unsigned long)lengths[j],&(mdc2[0]),NULL,EVP_mdc2(), NULL);
966 d=Time_F(STOP,usertime);
967 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
968 count,names[D_MDC2],d);
969 results[D_MDC2][j]=((double)count)/d*lengths[j];
974 #ifndef OPENSSL_NO_MD4
977 for (j=0; j<SIZE_NUM; j++)
979 print_message(names[D_MD4],c[D_MD4][j],lengths[j]);
980 Time_F(START,usertime);
981 for (count=0,run=1; COND(c[D_MD4][j]); count++)
982 EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md4[0]),NULL,EVP_md4(), NULL);
983 d=Time_F(STOP,usertime);
984 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
985 count,names[D_MD4],d);
986 results[D_MD4][j]=((double)count)/d*lengths[j];
991 #ifndef OPENSSL_NO_MD5
994 for (j=0; j<SIZE_NUM; j++)
996 print_message(names[D_MD5],c[D_MD5][j],lengths[j]);
997 Time_F(START,usertime);
998 for (count=0,run=1; COND(c[D_MD5][j]); count++)
999 EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md5[0]),NULL,
1000 EVP_get_digestbyname("md5"), NULL);
1001 d=Time_F(STOP,usertime);
1002 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1003 count,names[D_MD5],d);
1004 results[D_MD5][j]=((double)count)/d*lengths[j];
1009 #if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_HMAC)
1014 HMAC_CTX_init(&hctx);
1015 HMAC_Init(&hctx,(unsigned char *)"This is a key...",
1018 for (j=0; j<SIZE_NUM; j++)
1020 print_message(names[D_HMAC],c[D_HMAC][j],lengths[j]);
1021 Time_F(START,usertime);
1022 for (count=0,run=1; COND(c[D_HMAC][j]); count++)
1024 HMAC_Init(&hctx,NULL,0,NULL);
1025 HMAC_Update(&hctx,buf,lengths[j]);
1026 HMAC_Final(&hctx,&(hmac[0]),NULL);
1028 d=Time_F(STOP,usertime);
1029 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1030 count,names[D_HMAC],d);
1031 results[D_HMAC][j]=((double)count)/d*lengths[j];
1033 HMAC_CTX_cleanup(&hctx);
1036 #ifndef OPENSSL_NO_SHA
1039 for (j=0; j<SIZE_NUM; j++)
1041 print_message(names[D_SHA1],c[D_SHA1][j],lengths[j]);
1042 Time_F(START,usertime);
1043 for (count=0,run=1; COND(c[D_SHA1][j]); count++)
1044 EVP_Digest(buf,(unsigned long)lengths[j],&(sha[0]),NULL,EVP_sha1(), NULL);
1045 d=Time_F(STOP,usertime);
1046 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1047 count,names[D_SHA1],d);
1048 results[D_SHA1][j]=((double)count)/d*lengths[j];
1052 #ifndef OPENSSL_NO_RIPEMD
1055 for (j=0; j<SIZE_NUM; j++)
1057 print_message(names[D_RMD160],c[D_RMD160][j],lengths[j]);
1058 Time_F(START,usertime);
1059 for (count=0,run=1; COND(c[D_RMD160][j]); count++)
1060 EVP_Digest(buf,(unsigned long)lengths[j],&(rmd160[0]),NULL,EVP_ripemd160(), NULL);
1061 d=Time_F(STOP,usertime);
1062 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1063 count,names[D_RMD160],d);
1064 results[D_RMD160][j]=((double)count)/d*lengths[j];
1068 #ifndef OPENSSL_NO_RC4
1071 for (j=0; j<SIZE_NUM; j++)
1073 print_message(names[D_RC4],c[D_RC4][j],lengths[j]);
1074 Time_F(START,usertime);
1075 for (count=0,run=1; COND(c[D_RC4][j]); count++)
1076 RC4(&rc4_ks,(unsigned int)lengths[j],
1078 d=Time_F(STOP,usertime);
1079 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1080 count,names[D_RC4],d);
1081 results[D_RC4][j]=((double)count)/d*lengths[j];
1085 #ifndef OPENSSL_NO_DES
1086 if (doit[D_CBC_DES])
1088 for (j=0; j<SIZE_NUM; j++)
1090 print_message(names[D_CBC_DES],c[D_CBC_DES][j],lengths[j]);
1091 Time_F(START,usertime);
1092 for (count=0,run=1; COND(c[D_CBC_DES][j]); count++)
1093 DES_ncbc_encrypt(buf,buf,lengths[j],&sch,
1095 d=Time_F(STOP,usertime);
1096 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1097 count,names[D_CBC_DES],d);
1098 results[D_CBC_DES][j]=((double)count)/d*lengths[j];
1102 if (doit[D_EDE3_DES])
1104 for (j=0; j<SIZE_NUM; j++)
1106 print_message(names[D_EDE3_DES],c[D_EDE3_DES][j],lengths[j]);
1107 Time_F(START,usertime);
1108 for (count=0,run=1; COND(c[D_EDE3_DES][j]); count++)
1109 DES_ede3_cbc_encrypt(buf,buf,lengths[j],
1112 d=Time_F(STOP,usertime);
1113 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1114 count,names[D_EDE3_DES],d);
1115 results[D_EDE3_DES][j]=((double)count)/d*lengths[j];
1119 #ifndef OPENSSL_NO_IDEA
1120 if (doit[D_CBC_IDEA])
1122 for (j=0; j<SIZE_NUM; j++)
1124 print_message(names[D_CBC_IDEA],c[D_CBC_IDEA][j],lengths[j]);
1125 Time_F(START,usertime);
1126 for (count=0,run=1; COND(c[D_CBC_IDEA][j]); count++)
1127 idea_cbc_encrypt(buf,buf,
1128 (unsigned long)lengths[j],&idea_ks,
1130 d=Time_F(STOP,usertime);
1131 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1132 count,names[D_CBC_IDEA],d);
1133 results[D_CBC_IDEA][j]=((double)count)/d*lengths[j];
1137 #ifndef OPENSSL_NO_RC2
1138 if (doit[D_CBC_RC2])
1140 for (j=0; j<SIZE_NUM; j++)
1142 print_message(names[D_CBC_RC2],c[D_CBC_RC2][j],lengths[j]);
1143 Time_F(START,usertime);
1144 for (count=0,run=1; COND(c[D_CBC_RC2][j]); count++)
1145 RC2_cbc_encrypt(buf,buf,
1146 (unsigned long)lengths[j],&rc2_ks,
1148 d=Time_F(STOP,usertime);
1149 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1150 count,names[D_CBC_RC2],d);
1151 results[D_CBC_RC2][j]=((double)count)/d*lengths[j];
1155 #ifndef OPENSSL_NO_RC5
1156 if (doit[D_CBC_RC5])
1158 for (j=0; j<SIZE_NUM; j++)
1160 print_message(names[D_CBC_RC5],c[D_CBC_RC5][j],lengths[j]);
1161 Time_F(START,usertime);
1162 for (count=0,run=1; COND(c[D_CBC_RC5][j]); count++)
1163 RC5_32_cbc_encrypt(buf,buf,
1164 (unsigned long)lengths[j],&rc5_ks,
1166 d=Time_F(STOP,usertime);
1167 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1168 count,names[D_CBC_RC5],d);
1169 results[D_CBC_RC5][j]=((double)count)/d*lengths[j];
1173 #ifndef OPENSSL_NO_BF
1176 for (j=0; j<SIZE_NUM; j++)
1178 print_message(names[D_CBC_BF],c[D_CBC_BF][j],lengths[j]);
1179 Time_F(START,usertime);
1180 for (count=0,run=1; COND(c[D_CBC_BF][j]); count++)
1181 BF_cbc_encrypt(buf,buf,
1182 (unsigned long)lengths[j],&bf_ks,
1184 d=Time_F(STOP,usertime);
1185 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1186 count,names[D_CBC_BF],d);
1187 results[D_CBC_BF][j]=((double)count)/d*lengths[j];
1191 #ifndef OPENSSL_NO_CAST
1192 if (doit[D_CBC_CAST])
1194 for (j=0; j<SIZE_NUM; j++)
1196 print_message(names[D_CBC_CAST],c[D_CBC_CAST][j],lengths[j]);
1197 Time_F(START,usertime);
1198 for (count=0,run=1; COND(c[D_CBC_CAST][j]); count++)
1199 CAST_cbc_encrypt(buf,buf,
1200 (unsigned long)lengths[j],&cast_ks,
1202 d=Time_F(STOP,usertime);
1203 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1204 count,names[D_CBC_CAST],d);
1205 results[D_CBC_CAST][j]=((double)count)/d*lengths[j];
1212 for (j=0; j<SIZE_NUM; j++)
1217 names[D_EVP]=OBJ_nid2ln(evp->nid);
1218 print_message(names[D_EVP],save_count,
1220 EVP_CIPHER_CTX_init(&ctx);
1222 EVP_DecryptInit_ex(&ctx,evp,NULL,key16,iv);
1224 EVP_EncryptInit_ex(&ctx,evp,NULL,key16,iv);
1226 Time_F(START,usertime);
1228 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1229 EVP_DecryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
1231 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1232 EVP_EncryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
1234 EVP_DecryptFinal_ex(&ctx,buf,&outl);
1236 EVP_EncryptFinal_ex(&ctx,buf,&outl);
1237 d=Time_F(STOP,usertime);
1238 EVP_CIPHER_CTX_cleanup(&ctx);
1239 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1240 count,names[D_EVP],d);
1241 results[D_EVP][j]=((double)count)/d*lengths[j];
1245 RAND_pseudo_bytes(buf,36);
1246 #ifndef OPENSSL_NO_RSA
1247 for (j=0; j<RSA_NUM; j++)
1250 if (!rsa_doit[j]) continue;
1251 ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num, rsa_key[j]);
1254 BIO_printf(bio_err,"RSA sign failure. No RSA sign will be done.\n");
1255 ERR_print_errors(bio_err);
1260 pkey_print_message("private","rsa",
1261 rsa_c[j][0],rsa_bits[j],
1263 /* RSA_blinding_on(rsa_key[j],NULL); */
1264 Time_F(START,usertime);
1265 for (count=0,run=1; COND(rsa_c[j][0]); count++)
1267 ret=RSA_sign(NID_md5_sha1, buf,36, buf2,
1268 &rsa_num, rsa_key[j]);
1272 "RSA sign failure\n");
1273 ERR_print_errors(bio_err);
1278 d=Time_F(STOP,usertime);
1280 "%ld %d bit private RSA's in %.2fs\n",
1281 count,rsa_bits[j],d);
1282 rsa_results[j][0]=d/(double)count;
1287 ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num, rsa_key[j]);
1290 BIO_printf(bio_err,"RSA verify failure. No RSA verify will be done.\n");
1291 ERR_print_errors(bio_err);
1296 pkey_print_message("public","rsa",
1297 rsa_c[j][1],rsa_bits[j],
1299 Time_F(START,usertime);
1300 for (count=0,run=1; COND(rsa_c[j][1]); count++)
1302 ret=RSA_verify(NID_md5_sha1, buf,36, buf2,
1303 rsa_num, rsa_key[j]);
1307 "RSA verify failure\n");
1308 ERR_print_errors(bio_err);
1313 d=Time_F(STOP,usertime);
1315 "%ld %d bit public RSA's in %.2fs\n",
1316 count,rsa_bits[j],d);
1317 rsa_results[j][1]=d/(double)count;
1323 /* if longer than 10s, don't do any more */
1324 for (j++; j<RSA_NUM; j++)
1330 RAND_pseudo_bytes(buf,20);
1331 #ifndef OPENSSL_NO_DSA
1332 if (RAND_status() != 1)
1334 RAND_seed(rnd_seed, sizeof rnd_seed);
1337 for (j=0; j<DSA_NUM; j++)
1342 if (!dsa_doit[j]) continue;
1343 /* DSA_generate_key(dsa_key[j]); */
1344 /* DSA_sign_setup(dsa_key[j],NULL); */
1345 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
1349 BIO_printf(bio_err,"DSA sign failure. No DSA sign will be done.\n");
1350 ERR_print_errors(bio_err);
1355 pkey_print_message("sign","dsa",
1356 dsa_c[j][0],dsa_bits[j],
1358 Time_F(START,usertime);
1359 for (count=0,run=1; COND(dsa_c[j][0]); count++)
1361 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
1366 "DSA sign failure\n");
1367 ERR_print_errors(bio_err);
1372 d=Time_F(STOP,usertime);
1373 BIO_printf(bio_err,"%ld %d bit DSA signs in %.2fs\n",
1374 count,dsa_bits[j],d);
1375 dsa_results[j][0]=d/(double)count;
1379 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
1383 BIO_printf(bio_err,"DSA verify failure. No DSA verify will be done.\n");
1384 ERR_print_errors(bio_err);
1389 pkey_print_message("verify","dsa",
1390 dsa_c[j][1],dsa_bits[j],
1392 Time_F(START,usertime);
1393 for (count=0,run=1; COND(dsa_c[j][1]); count++)
1395 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
1400 "DSA verify failure\n");
1401 ERR_print_errors(bio_err);
1406 d=Time_F(STOP,usertime);
1407 BIO_printf(bio_err,"%ld %d bit DSA verify in %.2fs\n",
1408 count,dsa_bits[j],d);
1409 dsa_results[j][1]=d/(double)count;
1414 /* if longer than 10s, don't do any more */
1415 for (j++; j<DSA_NUM; j++)
1419 if (rnd_fake) RAND_cleanup();
1422 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_VERSION));
1423 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_BUILT_ON));
1425 printf("%s ",BN_options());
1426 #ifndef OPENSSL_NO_MD2
1427 printf("%s ",MD2_options());
1429 #ifndef OPENSSL_NO_RC4
1430 printf("%s ",RC4_options());
1432 #ifndef OPENSSL_NO_DES
1433 printf("%s ",des_options());
1435 #ifndef OPENSSL_NO_IDEA
1436 printf("%s ",idea_options());
1438 #ifndef OPENSSL_NO_BF
1439 printf("%s ",BF_options());
1441 fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS));
1442 printf("available timing options: ");
1453 #define as_string(s) (#s)
1454 printf("HZ=%g", HZ);
1456 printf(" [sysconf value]");
1460 printf("timing function used: %s%s%s%s%s%s%s\n",
1461 (ftime_used ? "ftime" : ""),
1462 (ftime_used + times_used > 1 ? "," : ""),
1463 (times_used ? "times" : ""),
1464 (ftime_used + times_used + gettimeofday_used > 1 ? "," : ""),
1465 (gettimeofday_used ? "gettimeofday" : ""),
1466 (ftime_used + times_used + gettimeofday_used + getrusage_used > 1 ? "," : ""),
1467 (getrusage_used ? "getrusage" : ""));
1472 fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n");
1473 fprintf(stdout,"type ");
1474 for (j=0; j<SIZE_NUM; j++)
1475 fprintf(stdout,"%7d bytes",lengths[j]);
1476 fprintf(stdout,"\n");
1479 for (k=0; k<ALGOR_NUM; k++)
1481 if (!doit[k]) continue;
1482 fprintf(stdout,"%-13s",names[k]);
1483 for (j=0; j<SIZE_NUM; j++)
1485 if (results[k][j] > 10000)
1486 fprintf(stdout," %11.2fk",results[k][j]/1e3);
1488 fprintf(stdout," %11.2f ",results[k][j]);
1490 fprintf(stdout,"\n");
1492 #ifndef OPENSSL_NO_RSA
1494 for (k=0; k<RSA_NUM; k++)
1496 if (!rsa_doit[k]) continue;
1499 printf("%18ssign verify sign/s verify/s\n"," ");
1502 fprintf(stdout,"rsa %4u bits %8.4fs %8.4fs %8.1f %8.1f",
1503 rsa_bits[k],rsa_results[k][0],rsa_results[k][1],
1504 1.0/rsa_results[k][0],1.0/rsa_results[k][1]);
1505 fprintf(stdout,"\n");
1508 #ifndef OPENSSL_NO_DSA
1510 for (k=0; k<DSA_NUM; k++)
1512 if (!dsa_doit[k]) continue;
1514 printf("%18ssign verify sign/s verify/s\n"," ");
1517 fprintf(stdout,"dsa %4u bits %8.4fs %8.4fs %8.1f %8.1f",
1518 dsa_bits[k],dsa_results[k][0],dsa_results[k][1],
1519 1.0/dsa_results[k][0],1.0/dsa_results[k][1]);
1520 fprintf(stdout,"\n");
1525 ERR_print_errors(bio_err);
1526 if (buf != NULL) OPENSSL_free(buf);
1527 if (buf2 != NULL) OPENSSL_free(buf2);
1528 #ifndef OPENSSL_NO_RSA
1529 for (i=0; i<RSA_NUM; i++)
1530 if (rsa_key[i] != NULL)
1531 RSA_free(rsa_key[i]);
1533 #ifndef OPENSSL_NO_DSA
1534 for (i=0; i<DSA_NUM; i++)
1535 if (dsa_key[i] != NULL)
1536 DSA_free(dsa_key[i]);
1542 static void print_message(const char *s, long num, int length)
1545 BIO_printf(bio_err,"Doing %s for %ds on %d size blocks: ",s,SECONDS,length);
1546 (void)BIO_flush(bio_err);
1549 BIO_printf(bio_err,"Doing %s %ld times on %d size blocks: ",s,num,length);
1550 (void)BIO_flush(bio_err);
1557 static void pkey_print_message(char *str, char *str2, long num, int bits,
1561 BIO_printf(bio_err,"Doing %d bit %s %s's for %ds: ",bits,str,str2,tm);
1562 (void)BIO_flush(bio_err);
1565 BIO_printf(bio_err,"Doing %ld %d bit %s %s's: ",num,bits,str,str2);
1566 (void)BIO_flush(bio_err);