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.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,sch2,sch3;
396 #define D_CBC_IDEA 10
400 #define D_CBC_CAST 14
402 double d,results[ALGOR_NUM][SIZE_NUM];
403 static int lengths[SIZE_NUM]={8,64,256,1024,8*1024};
404 long c[ALGOR_NUM][SIZE_NUM];
405 static const char *names[ALGOR_NUM]={
406 "md2","mdc2","md4","md5","hmac(md5)","sha1","rmd160","rc4",
407 "des cbc","des ede3","idea cbc",
408 "rc2 cbc","rc5-32/12 cbc","blowfish cbc","cast cbc"};
416 #ifndef OPENSSL_NO_RSA
417 RSA *rsa_key[RSA_NUM];
418 long rsa_c[RSA_NUM][2];
419 double rsa_results[RSA_NUM][2];
420 static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,4096};
421 static unsigned char *rsa_data[RSA_NUM]=
422 {test512,test1024,test2048,test4096};
423 static int rsa_data_length[RSA_NUM]={
424 sizeof(test512),sizeof(test1024),
425 sizeof(test2048),sizeof(test4096)};
427 #ifndef OPENSSL_NO_DSA
428 DSA *dsa_key[DSA_NUM];
429 long dsa_c[DSA_NUM][2];
430 double dsa_results[DSA_NUM][2];
431 static unsigned int dsa_bits[DSA_NUM]={512,1024,2048};
433 int rsa_doit[RSA_NUM];
434 int dsa_doit[DSA_NUM];
438 const EVP_CIPHER *evp=NULL;
446 memset(results, 0, sizeof(results));
447 #ifndef OPENSSL_NO_DSA
448 memset(dsa_key,0,sizeof(dsa_key));
452 if ((bio_err=BIO_new(BIO_s_file())) != NULL)
453 BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
455 #ifndef OPENSSL_NO_RSA
456 memset(rsa_key,0,sizeof(rsa_key));
457 for (i=0; i<RSA_NUM; i++)
461 if ((buf=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
463 BIO_printf(bio_err,"out of memory\n");
466 #ifndef OPENSSL_NO_DES
467 buf_as_des_cblock = (des_cblock *)buf;
469 if ((buf2=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
471 BIO_printf(bio_err,"out of memory\n");
475 memset(c,0,sizeof(c));
476 memset(iv,0,sizeof(iv));
478 for (i=0; i<ALGOR_NUM; i++)
480 for (i=0; i<RSA_NUM; i++)
482 for (i=0; i<DSA_NUM; i++)
490 if ((argc > 0) && (strcmp(*argv,"-elapsed") == 0))
493 j--; /* Otherwise, -elapsed gets confused with
496 else if ((argc > 0) && (strcmp(*argv,"-evp") == 0))
502 BIO_printf(bio_err,"no EVP given\n");
505 evp=EVP_get_cipherbyname(*argv);
508 BIO_printf(bio_err,"%s is an unknown cipher\n",*argv);
513 else if (argc > 0 && !strcmp(*argv,"-decrypt"))
516 j--; /* Otherwise, -elapsed gets confused with
519 else if ((argc > 0) && (strcmp(*argv,"-engine") == 0))
525 BIO_printf(bio_err,"no engine given\n");
528 e = setup_engine(bio_err, *argv, 0);
529 /* j will be increased again further down. We just
530 don't want speed to confuse an engine with an
531 algorithm, especially when none is given (which
532 means all of them should be run) */
536 #ifndef OPENSSL_NO_MD2
537 if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1;
540 #ifndef OPENSSL_NO_MDC2
541 if (strcmp(*argv,"mdc2") == 0) doit[D_MDC2]=1;
544 #ifndef OPENSSL_NO_MD4
545 if (strcmp(*argv,"md4") == 0) doit[D_MD4]=1;
548 #ifndef OPENSSL_NO_MD5
549 if (strcmp(*argv,"md5") == 0) doit[D_MD5]=1;
552 #ifndef OPENSSL_NO_MD5
553 if (strcmp(*argv,"hmac") == 0) doit[D_HMAC]=1;
556 #ifndef OPENSSL_NO_SHA
557 if (strcmp(*argv,"sha1") == 0) doit[D_SHA1]=1;
559 if (strcmp(*argv,"sha") == 0) doit[D_SHA1]=1;
562 #ifndef OPENSSL_NO_RIPEMD
563 if (strcmp(*argv,"ripemd") == 0) doit[D_RMD160]=1;
565 if (strcmp(*argv,"rmd160") == 0) doit[D_RMD160]=1;
567 if (strcmp(*argv,"ripemd160") == 0) doit[D_RMD160]=1;
570 #ifndef OPENSSL_NO_RC4
571 if (strcmp(*argv,"rc4") == 0) doit[D_RC4]=1;
574 #ifndef OPENSSL_NO_DES
575 if (strcmp(*argv,"des-cbc") == 0) doit[D_CBC_DES]=1;
576 else if (strcmp(*argv,"des-ede3") == 0) doit[D_EDE3_DES]=1;
579 #ifndef OPENSSL_NO_RSA
580 #if 0 /* was: #ifdef RSAref */
581 if (strcmp(*argv,"rsaref") == 0)
583 RSA_set_default_openssl_method(RSA_PKCS1_RSAref());
589 if (strcmp(*argv,"openssl") == 0)
591 RSA_set_default_method(RSA_PKCS1_SSLeay());
596 #endif /* !OPENSSL_NO_RSA */
597 if (strcmp(*argv,"dsa512") == 0) dsa_doit[R_DSA_512]=2;
598 else if (strcmp(*argv,"dsa1024") == 0) dsa_doit[R_DSA_1024]=2;
599 else if (strcmp(*argv,"dsa2048") == 0) dsa_doit[R_DSA_2048]=2;
600 else if (strcmp(*argv,"rsa512") == 0) rsa_doit[R_RSA_512]=2;
601 else if (strcmp(*argv,"rsa1024") == 0) rsa_doit[R_RSA_1024]=2;
602 else if (strcmp(*argv,"rsa2048") == 0) rsa_doit[R_RSA_2048]=2;
603 else if (strcmp(*argv,"rsa4096") == 0) rsa_doit[R_RSA_4096]=2;
605 #ifndef OPENSSL_NO_RC2
606 if (strcmp(*argv,"rc2-cbc") == 0) doit[D_CBC_RC2]=1;
607 else if (strcmp(*argv,"rc2") == 0) doit[D_CBC_RC2]=1;
610 #ifndef OPENSSL_NO_RC5
611 if (strcmp(*argv,"rc5-cbc") == 0) doit[D_CBC_RC5]=1;
612 else if (strcmp(*argv,"rc5") == 0) doit[D_CBC_RC5]=1;
615 #ifndef OPENSSL_NO_IDEA
616 if (strcmp(*argv,"idea-cbc") == 0) doit[D_CBC_IDEA]=1;
617 else if (strcmp(*argv,"idea") == 0) doit[D_CBC_IDEA]=1;
620 #ifndef OPENSSL_NO_BF
621 if (strcmp(*argv,"bf-cbc") == 0) doit[D_CBC_BF]=1;
622 else if (strcmp(*argv,"blowfish") == 0) doit[D_CBC_BF]=1;
623 else if (strcmp(*argv,"bf") == 0) doit[D_CBC_BF]=1;
626 #ifndef OPENSSL_NO_CAST
627 if (strcmp(*argv,"cast-cbc") == 0) doit[D_CBC_CAST]=1;
628 else if (strcmp(*argv,"cast") == 0) doit[D_CBC_CAST]=1;
629 else if (strcmp(*argv,"cast5") == 0) doit[D_CBC_CAST]=1;
632 #ifndef OPENSSL_NO_DES
633 if (strcmp(*argv,"des") == 0)
640 #ifndef OPENSSL_NO_RSA
641 if (strcmp(*argv,"rsa") == 0)
643 rsa_doit[R_RSA_512]=1;
644 rsa_doit[R_RSA_1024]=1;
645 rsa_doit[R_RSA_2048]=1;
646 rsa_doit[R_RSA_4096]=1;
650 #ifndef OPENSSL_NO_DSA
651 if (strcmp(*argv,"dsa") == 0)
653 dsa_doit[R_DSA_512]=1;
654 dsa_doit[R_DSA_1024]=1;
659 BIO_printf(bio_err,"Error: bad option or value\n");
660 BIO_printf(bio_err,"\n");
661 BIO_printf(bio_err,"Available values:\n");
662 #ifndef OPENSSL_NO_MD2
663 BIO_printf(bio_err,"md2 ");
665 #ifndef OPENSSL_NO_MDC2
666 BIO_printf(bio_err,"mdc2 ");
668 #ifndef OPENSSL_NO_MD4
669 BIO_printf(bio_err,"md4 ");
671 #ifndef OPENSSL_NO_MD5
672 BIO_printf(bio_err,"md5 ");
673 #ifndef OPENSSL_NO_HMAC
674 BIO_printf(bio_err,"hmac ");
677 #ifndef OPENSSL_NO_SHA1
678 BIO_printf(bio_err,"sha1 ");
680 #ifndef OPENSSL_NO_RIPEMD160
681 BIO_printf(bio_err,"rmd160");
683 #if !defined(OPENSSL_NO_MD2) || !defined(OPENSSL_NO_MDC2) || \
684 !defined(OPENSSL_NO_MD4) || !defined(OPENSSL_NO_MD5) || \
685 !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160)
686 BIO_printf(bio_err,"\n");
689 #ifndef OPENSSL_NO_IDEA
690 BIO_printf(bio_err,"idea-cbc ");
692 #ifndef OPENSSL_NO_RC2
693 BIO_printf(bio_err,"rc2-cbc ");
695 #ifndef OPENSSL_NO_RC5
696 BIO_printf(bio_err,"rc5-cbc ");
698 #ifndef OPENSSL_NO_BF
699 BIO_printf(bio_err,"bf-cbc");
701 #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_RC2) || \
702 !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_RC5)
703 BIO_printf(bio_err,"\n");
706 BIO_printf(bio_err,"des-cbc des-ede3 ");
707 #ifndef OPENSSL_NO_RC4
708 BIO_printf(bio_err,"rc4");
710 BIO_printf(bio_err,"\n");
712 #ifndef OPENSSL_NO_RSA
713 BIO_printf(bio_err,"rsa512 rsa1024 rsa2048 rsa4096\n");
716 #ifndef OPENSSL_NO_DSA
717 BIO_printf(bio_err,"dsa512 dsa1024 dsa2048\n");
720 #ifndef OPENSSL_NO_IDEA
721 BIO_printf(bio_err,"idea ");
723 #ifndef OPENSSL_NO_RC2
724 BIO_printf(bio_err,"rc2 ");
726 #ifndef OPENSSL_NO_DES
727 BIO_printf(bio_err,"des ");
729 #ifndef OPENSSL_NO_RSA
730 BIO_printf(bio_err,"rsa ");
732 #ifndef OPENSSL_NO_BF
733 BIO_printf(bio_err,"blowfish");
735 #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_RC2) || \
736 !defined(OPENSSL_NO_DES) || !defined(OPENSSL_NO_RSA) || \
737 !defined(OPENSSL_NO_BF)
738 BIO_printf(bio_err,"\n");
741 BIO_printf(bio_err,"\n");
742 BIO_printf(bio_err,"Available options:\n");
744 BIO_printf(bio_err,"-elapsed measure time in real time instead of CPU user time.\n");
746 BIO_printf(bio_err,"-engine e use engine e, possibly a hardware device.\n");
756 for (i=0; i<ALGOR_NUM; i++)
761 for (i=0; i<RSA_NUM; i++)
763 for (i=0; i<DSA_NUM; i++)
766 for (i=0; i<ALGOR_NUM; i++)
767 if (doit[i]) pr_header++;
770 BIO_printf(bio_err,"You have chosen to measure elapsed time instead of user CPU time.\n");
773 BIO_printf(bio_err,"To get the most accurate results, try to run this\n");
774 BIO_printf(bio_err,"program when this computer is idle.\n");
777 #ifndef OPENSSL_NO_RSA
778 for (i=0; i<RSA_NUM; i++)
780 const unsigned char *p;
783 rsa_key[i]=d2i_RSAPrivateKey(NULL,&p,rsa_data_length[i]);
784 if (rsa_key[i] == NULL)
786 BIO_printf(bio_err,"internal error loading RSA key number %d\n",i);
792 BIO_printf(bio_err,"Loaded RSA key, %d bit modulus and e= 0x",BN_num_bits(rsa_key[i]->n));
793 BN_print(bio_err,rsa_key[i]->e);
794 BIO_printf(bio_err,"\n");
800 #ifndef OPENSSL_NO_DSA
801 dsa_key[0]=get_dsa512();
802 dsa_key[1]=get_dsa1024();
803 dsa_key[2]=get_dsa2048();
806 #ifndef OPENSSL_NO_DES
807 des_set_key_unchecked(&key,&sch);
808 des_set_key_unchecked(&key2,&sch2);
809 des_set_key_unchecked(&key3,&sch3);
811 #ifndef OPENSSL_NO_IDEA
812 idea_set_encrypt_key(key16,&idea_ks);
814 #ifndef OPENSSL_NO_RC4
815 RC4_set_key(&rc4_ks,16,key16);
817 #ifndef OPENSSL_NO_RC2
818 RC2_set_key(&rc2_ks,16,key16,128);
820 #ifndef OPENSSL_NO_RC5
821 RC5_32_set_key(&rc5_ks,16,key16,12);
823 #ifndef OPENSSL_NO_BF
824 BF_set_key(&bf_ks,16,key16);
826 #ifndef OPENSSL_NO_CAST
827 CAST_set_key(&cast_ks,16,key16);
829 #ifndef OPENSSL_NO_RSA
830 memset(rsa_c,0,sizeof(rsa_c));
833 #ifndef OPENSSL_NO_DES
834 BIO_printf(bio_err,"First we calculate the approximate speed ...\n");
839 Time_F(START,usertime);
840 for (i=count; i; i--)
841 des_ecb_encrypt(buf_as_des_cblock,buf_as_des_cblock,
843 d=Time_F(STOP,usertime);
846 c[D_MD2][0]=count/10;
847 c[D_MDC2][0]=count/10;
852 c[D_RMD160][0]=count;
854 c[D_CBC_DES][0]=count;
855 c[D_EDE3_DES][0]=count/3;
856 c[D_CBC_IDEA][0]=count;
857 c[D_CBC_RC2][0]=count;
858 c[D_CBC_RC5][0]=count;
859 c[D_CBC_BF][0]=count;
860 c[D_CBC_CAST][0]=count;
862 for (i=1; i<SIZE_NUM; i++)
864 c[D_MD2][i]=c[D_MD2][0]*4*lengths[0]/lengths[i];
865 c[D_MDC2][i]=c[D_MDC2][0]*4*lengths[0]/lengths[i];
866 c[D_MD4][i]=c[D_MD4][0]*4*lengths[0]/lengths[i];
867 c[D_MD5][i]=c[D_MD5][0]*4*lengths[0]/lengths[i];
868 c[D_HMAC][i]=c[D_HMAC][0]*4*lengths[0]/lengths[i];
869 c[D_SHA1][i]=c[D_SHA1][0]*4*lengths[0]/lengths[i];
870 c[D_RMD160][i]=c[D_RMD160][0]*4*lengths[0]/lengths[i];
872 for (i=1; i<SIZE_NUM; i++)
876 l0=(long)lengths[i-1];
878 c[D_RC4][i]=c[D_RC4][i-1]*l0/l1;
879 c[D_CBC_DES][i]=c[D_CBC_DES][i-1]*l0/l1;
880 c[D_EDE3_DES][i]=c[D_EDE3_DES][i-1]*l0/l1;
881 c[D_CBC_IDEA][i]=c[D_CBC_IDEA][i-1]*l0/l1;
882 c[D_CBC_RC2][i]=c[D_CBC_RC2][i-1]*l0/l1;
883 c[D_CBC_RC5][i]=c[D_CBC_RC5][i-1]*l0/l1;
884 c[D_CBC_BF][i]=c[D_CBC_BF][i-1]*l0/l1;
885 c[D_CBC_CAST][i]=c[D_CBC_CAST][i-1]*l0/l1;
887 #ifndef OPENSSL_NO_RSA
888 rsa_c[R_RSA_512][0]=count/2000;
889 rsa_c[R_RSA_512][1]=count/400;
890 for (i=1; i<RSA_NUM; i++)
892 rsa_c[i][0]=rsa_c[i-1][0]/8;
893 rsa_c[i][1]=rsa_c[i-1][1]/4;
894 if ((rsa_doit[i] <= 1) && (rsa_c[i][0] == 0))
898 if (rsa_c[i][0] == 0)
907 #ifndef OPENSSL_NO_DSA
908 dsa_c[R_DSA_512][0]=count/1000;
909 dsa_c[R_DSA_512][1]=count/1000/2;
910 for (i=1; i<DSA_NUM; i++)
912 dsa_c[i][0]=dsa_c[i-1][0]/4;
913 dsa_c[i][1]=dsa_c[i-1][1]/4;
914 if ((dsa_doit[i] <= 1) && (dsa_c[i][0] == 0))
927 #define COND(d) (count < (d))
930 /* not worth fixing */
931 # error "You cannot disable DES on systems without SIGALRM."
932 #endif /* OPENSSL_NO_DES */
934 #define COND(c) (run)
935 #define COUNT(d) (count)
936 signal(SIGALRM,sig_done);
939 #ifndef OPENSSL_NO_MD2
942 for (j=0; j<SIZE_NUM; j++)
944 print_message(names[D_MD2],c[D_MD2][j],lengths[j]);
945 Time_F(START,usertime);
946 for (count=0,run=1; COND(c[D_MD2][j]); count++)
947 EVP_Digest(buf,(unsigned long)lengths[j],&(md2[0]),NULL,EVP_md2(), NULL);
948 d=Time_F(STOP,usertime);
949 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
950 count,names[D_MD2],d);
951 results[D_MD2][j]=((double)count)/d*lengths[j];
955 #ifndef OPENSSL_NO_MDC2
958 for (j=0; j<SIZE_NUM; j++)
960 print_message(names[D_MDC2],c[D_MDC2][j],lengths[j]);
961 Time_F(START,usertime);
962 for (count=0,run=1; COND(c[D_MDC2][j]); count++)
963 EVP_Digest(buf,(unsigned long)lengths[j],&(mdc2[0]),NULL,EVP_mdc2(), NULL);
964 d=Time_F(STOP,usertime);
965 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
966 count,names[D_MDC2],d);
967 results[D_MDC2][j]=((double)count)/d*lengths[j];
972 #ifndef OPENSSL_NO_MD4
975 for (j=0; j<SIZE_NUM; j++)
977 print_message(names[D_MD4],c[D_MD4][j],lengths[j]);
978 Time_F(START,usertime);
979 for (count=0,run=1; COND(c[D_MD4][j]); count++)
980 EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md4[0]),NULL,EVP_md4(), NULL);
981 d=Time_F(STOP,usertime);
982 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
983 count,names[D_MD4],d);
984 results[D_MD4][j]=((double)count)/d*lengths[j];
989 #ifndef OPENSSL_NO_MD5
992 for (j=0; j<SIZE_NUM; j++)
994 print_message(names[D_MD5],c[D_MD5][j],lengths[j]);
995 Time_F(START,usertime);
996 for (count=0,run=1; COND(c[D_MD5][j]); count++)
997 EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md5[0]),NULL,
998 EVP_get_digestbyname("md5"), NULL);
999 d=Time_F(STOP,usertime);
1000 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1001 count,names[D_MD5],d);
1002 results[D_MD5][j]=((double)count)/d*lengths[j];
1007 #if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_HMAC)
1012 HMAC_CTX_init(&hctx);
1013 HMAC_Init(&hctx,(unsigned char *)"This is a key...",
1016 for (j=0; j<SIZE_NUM; j++)
1018 print_message(names[D_HMAC],c[D_HMAC][j],lengths[j]);
1019 Time_F(START,usertime);
1020 for (count=0,run=1; COND(c[D_HMAC][j]); count++)
1022 HMAC_Init(&hctx,NULL,0,NULL);
1023 HMAC_Update(&hctx,buf,lengths[j]);
1024 HMAC_Final(&hctx,&(hmac[0]),NULL);
1026 d=Time_F(STOP,usertime);
1027 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1028 count,names[D_HMAC],d);
1029 results[D_HMAC][j]=((double)count)/d*lengths[j];
1031 HMAC_CTX_cleanup(&hctx);
1034 #ifndef OPENSSL_NO_SHA
1037 for (j=0; j<SIZE_NUM; j++)
1039 print_message(names[D_SHA1],c[D_SHA1][j],lengths[j]);
1040 Time_F(START,usertime);
1041 for (count=0,run=1; COND(c[D_SHA1][j]); count++)
1042 EVP_Digest(buf,(unsigned long)lengths[j],&(sha[0]),NULL,EVP_sha1(), NULL);
1043 d=Time_F(STOP,usertime);
1044 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1045 count,names[D_SHA1],d);
1046 results[D_SHA1][j]=((double)count)/d*lengths[j];
1050 #ifndef OPENSSL_NO_RIPEMD
1053 for (j=0; j<SIZE_NUM; j++)
1055 print_message(names[D_RMD160],c[D_RMD160][j],lengths[j]);
1056 Time_F(START,usertime);
1057 for (count=0,run=1; COND(c[D_RMD160][j]); count++)
1058 EVP_Digest(buf,(unsigned long)lengths[j],&(rmd160[0]),NULL,EVP_ripemd160(), NULL);
1059 d=Time_F(STOP,usertime);
1060 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1061 count,names[D_RMD160],d);
1062 results[D_RMD160][j]=((double)count)/d*lengths[j];
1066 #ifndef OPENSSL_NO_RC4
1069 for (j=0; j<SIZE_NUM; j++)
1071 print_message(names[D_RC4],c[D_RC4][j],lengths[j]);
1072 Time_F(START,usertime);
1073 for (count=0,run=1; COND(c[D_RC4][j]); count++)
1074 RC4(&rc4_ks,(unsigned int)lengths[j],
1076 d=Time_F(STOP,usertime);
1077 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1078 count,names[D_RC4],d);
1079 results[D_RC4][j]=((double)count)/d*lengths[j];
1083 #ifndef OPENSSL_NO_DES
1084 if (doit[D_CBC_DES])
1086 for (j=0; j<SIZE_NUM; j++)
1088 print_message(names[D_CBC_DES],c[D_CBC_DES][j],lengths[j]);
1089 Time_F(START,usertime);
1090 for (count=0,run=1; COND(c[D_CBC_DES][j]); count++)
1091 des_ncbc_encrypt(buf,buf,lengths[j],&sch,
1093 d=Time_F(STOP,usertime);
1094 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1095 count,names[D_CBC_DES],d);
1096 results[D_CBC_DES][j]=((double)count)/d*lengths[j];
1100 if (doit[D_EDE3_DES])
1102 for (j=0; j<SIZE_NUM; j++)
1104 print_message(names[D_EDE3_DES],c[D_EDE3_DES][j],lengths[j]);
1105 Time_F(START,usertime);
1106 for (count=0,run=1; COND(c[D_EDE3_DES][j]); count++)
1107 des_ede3_cbc_encrypt(buf,buf,lengths[j],
1110 d=Time_F(STOP,usertime);
1111 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1112 count,names[D_EDE3_DES],d);
1113 results[D_EDE3_DES][j]=((double)count)/d*lengths[j];
1117 #ifndef OPENSSL_NO_IDEA
1118 if (doit[D_CBC_IDEA])
1120 for (j=0; j<SIZE_NUM; j++)
1122 print_message(names[D_CBC_IDEA],c[D_CBC_IDEA][j],lengths[j]);
1123 Time_F(START,usertime);
1124 for (count=0,run=1; COND(c[D_CBC_IDEA][j]); count++)
1125 idea_cbc_encrypt(buf,buf,
1126 (unsigned long)lengths[j],&idea_ks,
1128 d=Time_F(STOP,usertime);
1129 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1130 count,names[D_CBC_IDEA],d);
1131 results[D_CBC_IDEA][j]=((double)count)/d*lengths[j];
1135 #ifndef OPENSSL_NO_RC2
1136 if (doit[D_CBC_RC2])
1138 for (j=0; j<SIZE_NUM; j++)
1140 print_message(names[D_CBC_RC2],c[D_CBC_RC2][j],lengths[j]);
1141 Time_F(START,usertime);
1142 for (count=0,run=1; COND(c[D_CBC_RC2][j]); count++)
1143 RC2_cbc_encrypt(buf,buf,
1144 (unsigned long)lengths[j],&rc2_ks,
1146 d=Time_F(STOP,usertime);
1147 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1148 count,names[D_CBC_RC2],d);
1149 results[D_CBC_RC2][j]=((double)count)/d*lengths[j];
1153 #ifndef OPENSSL_NO_RC5
1154 if (doit[D_CBC_RC5])
1156 for (j=0; j<SIZE_NUM; j++)
1158 print_message(names[D_CBC_RC5],c[D_CBC_RC5][j],lengths[j]);
1159 Time_F(START,usertime);
1160 for (count=0,run=1; COND(c[D_CBC_RC5][j]); count++)
1161 RC5_32_cbc_encrypt(buf,buf,
1162 (unsigned long)lengths[j],&rc5_ks,
1164 d=Time_F(STOP,usertime);
1165 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1166 count,names[D_CBC_RC5],d);
1167 results[D_CBC_RC5][j]=((double)count)/d*lengths[j];
1171 #ifndef OPENSSL_NO_BF
1174 for (j=0; j<SIZE_NUM; j++)
1176 print_message(names[D_CBC_BF],c[D_CBC_BF][j],lengths[j]);
1177 Time_F(START,usertime);
1178 for (count=0,run=1; COND(c[D_CBC_BF][j]); count++)
1179 BF_cbc_encrypt(buf,buf,
1180 (unsigned long)lengths[j],&bf_ks,
1182 d=Time_F(STOP,usertime);
1183 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1184 count,names[D_CBC_BF],d);
1185 results[D_CBC_BF][j]=((double)count)/d*lengths[j];
1189 #ifndef OPENSSL_NO_CAST
1190 if (doit[D_CBC_CAST])
1192 for (j=0; j<SIZE_NUM; j++)
1194 print_message(names[D_CBC_CAST],c[D_CBC_CAST][j],lengths[j]);
1195 Time_F(START,usertime);
1196 for (count=0,run=1; COND(c[D_CBC_CAST][j]); count++)
1197 CAST_cbc_encrypt(buf,buf,
1198 (unsigned long)lengths[j],&cast_ks,
1200 d=Time_F(STOP,usertime);
1201 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1202 count,names[D_CBC_CAST],d);
1203 results[D_CBC_CAST][j]=((double)count)/d*lengths[j];
1210 for (j=0; j<SIZE_NUM; j++)
1215 names[D_EVP]=OBJ_nid2ln(evp->nid);
1216 print_message(names[D_EVP],save_count,
1218 EVP_CIPHER_CTX_init(&ctx);
1220 EVP_DecryptInit_ex(&ctx,evp,NULL,key16,iv);
1222 EVP_EncryptInit_ex(&ctx,evp,NULL,key16,iv);
1224 Time_F(START,usertime);
1226 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1227 EVP_DecryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
1229 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1230 EVP_EncryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
1232 EVP_DecryptFinal_ex(&ctx,buf,&outl);
1234 EVP_EncryptFinal_ex(&ctx,buf,&outl);
1235 d=Time_F(STOP,usertime);
1236 EVP_CIPHER_CTX_cleanup(&ctx);
1237 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1238 count,names[D_EVP],d);
1239 results[D_EVP][j]=((double)count)/d*lengths[j];
1243 RAND_pseudo_bytes(buf,36);
1244 #ifndef OPENSSL_NO_RSA
1245 for (j=0; j<RSA_NUM; j++)
1248 if (!rsa_doit[j]) continue;
1249 ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num, rsa_key[j]);
1252 BIO_printf(bio_err,"RSA sign failure. No RSA sign will be done.\n");
1253 ERR_print_errors(bio_err);
1258 pkey_print_message("private","rsa",
1259 rsa_c[j][0],rsa_bits[j],
1261 /* RSA_blinding_on(rsa_key[j],NULL); */
1262 Time_F(START,usertime);
1263 for (count=0,run=1; COND(rsa_c[j][0]); count++)
1265 ret=RSA_sign(NID_md5_sha1, buf,36, buf2,
1266 &rsa_num, rsa_key[j]);
1270 "RSA sign failure\n");
1271 ERR_print_errors(bio_err);
1276 d=Time_F(STOP,usertime);
1278 "%ld %d bit private RSA's in %.2fs\n",
1279 count,rsa_bits[j],d);
1280 rsa_results[j][0]=d/(double)count;
1285 ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num, rsa_key[j]);
1288 BIO_printf(bio_err,"RSA verify failure. No RSA verify will be done.\n");
1289 ERR_print_errors(bio_err);
1294 pkey_print_message("public","rsa",
1295 rsa_c[j][1],rsa_bits[j],
1297 Time_F(START,usertime);
1298 for (count=0,run=1; COND(rsa_c[j][1]); count++)
1300 ret=RSA_verify(NID_md5_sha1, buf,36, buf2,
1301 rsa_num, rsa_key[j]);
1305 "RSA verify failure\n");
1306 ERR_print_errors(bio_err);
1311 d=Time_F(STOP,usertime);
1313 "%ld %d bit public RSA's in %.2fs\n",
1314 count,rsa_bits[j],d);
1315 rsa_results[j][1]=d/(double)count;
1321 /* if longer than 10s, don't do any more */
1322 for (j++; j<RSA_NUM; j++)
1328 RAND_pseudo_bytes(buf,20);
1329 #ifndef OPENSSL_NO_DSA
1330 if (RAND_status() != 1)
1332 RAND_seed(rnd_seed, sizeof rnd_seed);
1335 for (j=0; j<DSA_NUM; j++)
1340 if (!dsa_doit[j]) continue;
1341 /* DSA_generate_key(dsa_key[j]); */
1342 /* DSA_sign_setup(dsa_key[j],NULL); */
1343 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
1347 BIO_printf(bio_err,"DSA sign failure. No DSA sign will be done.\n");
1348 ERR_print_errors(bio_err);
1353 pkey_print_message("sign","dsa",
1354 dsa_c[j][0],dsa_bits[j],
1356 Time_F(START,usertime);
1357 for (count=0,run=1; COND(dsa_c[j][0]); count++)
1359 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
1364 "DSA sign failure\n");
1365 ERR_print_errors(bio_err);
1370 d=Time_F(STOP,usertime);
1371 BIO_printf(bio_err,"%ld %d bit DSA signs in %.2fs\n",
1372 count,dsa_bits[j],d);
1373 dsa_results[j][0]=d/(double)count;
1377 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
1381 BIO_printf(bio_err,"DSA verify failure. No DSA verify will be done.\n");
1382 ERR_print_errors(bio_err);
1387 pkey_print_message("verify","dsa",
1388 dsa_c[j][1],dsa_bits[j],
1390 Time_F(START,usertime);
1391 for (count=0,run=1; COND(dsa_c[j][1]); count++)
1393 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
1398 "DSA verify failure\n");
1399 ERR_print_errors(bio_err);
1404 d=Time_F(STOP,usertime);
1405 BIO_printf(bio_err,"%ld %d bit DSA verify in %.2fs\n",
1406 count,dsa_bits[j],d);
1407 dsa_results[j][1]=d/(double)count;
1412 /* if longer than 10s, don't do any more */
1413 for (j++; j<DSA_NUM; j++)
1417 if (rnd_fake) RAND_cleanup();
1420 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_VERSION));
1421 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_BUILT_ON));
1423 printf("%s ",BN_options());
1424 #ifndef OPENSSL_NO_MD2
1425 printf("%s ",MD2_options());
1427 #ifndef OPENSSL_NO_RC4
1428 printf("%s ",RC4_options());
1430 #ifndef OPENSSL_NO_DES
1431 printf("%s ",des_options());
1433 #ifndef OPENSSL_NO_IDEA
1434 printf("%s ",idea_options());
1436 #ifndef OPENSSL_NO_BF
1437 printf("%s ",BF_options());
1439 fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS));
1440 printf("available timing options: ");
1451 #define as_string(s) (#s)
1452 printf("HZ=%g", HZ);
1454 printf(" [sysconf value]");
1458 printf("timing function used: %s%s%s%s%s%s%s\n",
1459 (ftime_used ? "ftime" : ""),
1460 (ftime_used + times_used > 1 ? "," : ""),
1461 (times_used ? "times" : ""),
1462 (ftime_used + times_used + gettimeofday_used > 1 ? "," : ""),
1463 (gettimeofday_used ? "gettimeofday" : ""),
1464 (ftime_used + times_used + gettimeofday_used + getrusage_used > 1 ? "," : ""),
1465 (getrusage_used ? "getrusage" : ""));
1470 fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n");
1471 fprintf(stdout,"type ");
1472 for (j=0; j<SIZE_NUM; j++)
1473 fprintf(stdout,"%7d bytes",lengths[j]);
1474 fprintf(stdout,"\n");
1477 for (k=0; k<ALGOR_NUM; k++)
1479 if (!doit[k]) continue;
1480 fprintf(stdout,"%-13s",names[k]);
1481 for (j=0; j<SIZE_NUM; j++)
1483 if (results[k][j] > 10000)
1484 fprintf(stdout," %11.2fk",results[k][j]/1e3);
1486 fprintf(stdout," %11.2f ",results[k][j]);
1488 fprintf(stdout,"\n");
1490 #ifndef OPENSSL_NO_RSA
1492 for (k=0; k<RSA_NUM; k++)
1494 if (!rsa_doit[k]) continue;
1497 printf("%18ssign verify sign/s verify/s\n"," ");
1500 fprintf(stdout,"rsa %4u bits %8.4fs %8.4fs %8.1f %8.1f",
1501 rsa_bits[k],rsa_results[k][0],rsa_results[k][1],
1502 1.0/rsa_results[k][0],1.0/rsa_results[k][1]);
1503 fprintf(stdout,"\n");
1506 #ifndef OPENSSL_NO_DSA
1508 for (k=0; k<DSA_NUM; k++)
1510 if (!dsa_doit[k]) continue;
1512 printf("%18ssign verify sign/s verify/s\n"," ");
1515 fprintf(stdout,"dsa %4u bits %8.4fs %8.4fs %8.1f %8.1f",
1516 dsa_bits[k],dsa_results[k][0],dsa_results[k][1],
1517 1.0/dsa_results[k][0],1.0/dsa_results[k][1]);
1518 fprintf(stdout,"\n");
1523 ERR_print_errors(bio_err);
1524 if (buf != NULL) OPENSSL_free(buf);
1525 if (buf2 != NULL) OPENSSL_free(buf2);
1526 #ifndef OPENSSL_NO_RSA
1527 for (i=0; i<RSA_NUM; i++)
1528 if (rsa_key[i] != NULL)
1529 RSA_free(rsa_key[i]);
1531 #ifndef OPENSSL_NO_DSA
1532 for (i=0; i<DSA_NUM; i++)
1533 if (dsa_key[i] != NULL)
1534 DSA_free(dsa_key[i]);
1540 static void print_message(const char *s, long num, int length)
1543 BIO_printf(bio_err,"Doing %s for %ds on %d size blocks: ",s,SECONDS,length);
1544 (void)BIO_flush(bio_err);
1547 BIO_printf(bio_err,"Doing %s %ld times on %d size blocks: ",s,num,length);
1548 (void)BIO_flush(bio_err);
1555 static void pkey_print_message(char *str, char *str2, long num, int bits,
1559 BIO_printf(bio_err,"Doing %d bit %s %s's for %ds: ",bits,str,str2,tm);
1560 (void)BIO_flush(bio_err);
1563 BIO_printf(bio_err,"Doing %ld %d bit %s %s's: ",num,bits,str,str2);
1564 (void)BIO_flush(bio_err);