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());
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());
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());
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,EVP_get_digestbyname("md5"));
998 d=Time_F(STOP,usertime);
999 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1000 count,names[D_MD5],d);
1001 results[D_MD5][j]=((double)count)/d*lengths[j];
1006 #if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_HMAC)
1011 HMAC_CTX_init(&hctx);
1012 HMAC_Init(&hctx,(unsigned char *)"This is a key...",
1015 for (j=0; j<SIZE_NUM; j++)
1017 print_message(names[D_HMAC],c[D_HMAC][j],lengths[j]);
1018 Time_F(START,usertime);
1019 for (count=0,run=1; COND(c[D_HMAC][j]); count++)
1021 HMAC_Init(&hctx,NULL,0,NULL);
1022 HMAC_Update(&hctx,buf,lengths[j]);
1023 HMAC_Final(&hctx,&(hmac[0]),NULL);
1025 d=Time_F(STOP,usertime);
1026 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1027 count,names[D_HMAC],d);
1028 results[D_HMAC][j]=((double)count)/d*lengths[j];
1030 HMAC_CTX_cleanup(&hctx);
1033 #ifndef OPENSSL_NO_SHA
1036 for (j=0; j<SIZE_NUM; j++)
1038 print_message(names[D_SHA1],c[D_SHA1][j],lengths[j]);
1039 Time_F(START,usertime);
1040 for (count=0,run=1; COND(c[D_SHA1][j]); count++)
1041 EVP_Digest(buf,(unsigned long)lengths[j],&(sha[0]),NULL,EVP_sha1());
1042 d=Time_F(STOP,usertime);
1043 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1044 count,names[D_SHA1],d);
1045 results[D_SHA1][j]=((double)count)/d*lengths[j];
1049 #ifndef OPENSSL_NO_RIPEMD
1052 for (j=0; j<SIZE_NUM; j++)
1054 print_message(names[D_RMD160],c[D_RMD160][j],lengths[j]);
1055 Time_F(START,usertime);
1056 for (count=0,run=1; COND(c[D_RMD160][j]); count++)
1057 EVP_Digest(buf,(unsigned long)lengths[j],&(rmd160[0]),NULL,EVP_ripemd160());
1058 d=Time_F(STOP,usertime);
1059 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1060 count,names[D_RMD160],d);
1061 results[D_RMD160][j]=((double)count)/d*lengths[j];
1065 #ifndef OPENSSL_NO_RC4
1068 for (j=0; j<SIZE_NUM; j++)
1070 print_message(names[D_RC4],c[D_RC4][j],lengths[j]);
1071 Time_F(START,usertime);
1072 for (count=0,run=1; COND(c[D_RC4][j]); count++)
1073 RC4(&rc4_ks,(unsigned int)lengths[j],
1075 d=Time_F(STOP,usertime);
1076 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1077 count,names[D_RC4],d);
1078 results[D_RC4][j]=((double)count)/d*lengths[j];
1082 #ifndef OPENSSL_NO_DES
1083 if (doit[D_CBC_DES])
1085 for (j=0; j<SIZE_NUM; j++)
1087 print_message(names[D_CBC_DES],c[D_CBC_DES][j],lengths[j]);
1088 Time_F(START,usertime);
1089 for (count=0,run=1; COND(c[D_CBC_DES][j]); count++)
1090 des_ncbc_encrypt(buf,buf,lengths[j],&sch,
1092 d=Time_F(STOP,usertime);
1093 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1094 count,names[D_CBC_DES],d);
1095 results[D_CBC_DES][j]=((double)count)/d*lengths[j];
1099 if (doit[D_EDE3_DES])
1101 for (j=0; j<SIZE_NUM; j++)
1103 print_message(names[D_EDE3_DES],c[D_EDE3_DES][j],lengths[j]);
1104 Time_F(START,usertime);
1105 for (count=0,run=1; COND(c[D_EDE3_DES][j]); count++)
1106 des_ede3_cbc_encrypt(buf,buf,lengths[j],
1109 d=Time_F(STOP,usertime);
1110 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1111 count,names[D_EDE3_DES],d);
1112 results[D_EDE3_DES][j]=((double)count)/d*lengths[j];
1116 #ifndef OPENSSL_NO_IDEA
1117 if (doit[D_CBC_IDEA])
1119 for (j=0; j<SIZE_NUM; j++)
1121 print_message(names[D_CBC_IDEA],c[D_CBC_IDEA][j],lengths[j]);
1122 Time_F(START,usertime);
1123 for (count=0,run=1; COND(c[D_CBC_IDEA][j]); count++)
1124 idea_cbc_encrypt(buf,buf,
1125 (unsigned long)lengths[j],&idea_ks,
1127 d=Time_F(STOP,usertime);
1128 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1129 count,names[D_CBC_IDEA],d);
1130 results[D_CBC_IDEA][j]=((double)count)/d*lengths[j];
1134 #ifndef OPENSSL_NO_RC2
1135 if (doit[D_CBC_RC2])
1137 for (j=0; j<SIZE_NUM; j++)
1139 print_message(names[D_CBC_RC2],c[D_CBC_RC2][j],lengths[j]);
1140 Time_F(START,usertime);
1141 for (count=0,run=1; COND(c[D_CBC_RC2][j]); count++)
1142 RC2_cbc_encrypt(buf,buf,
1143 (unsigned long)lengths[j],&rc2_ks,
1145 d=Time_F(STOP,usertime);
1146 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1147 count,names[D_CBC_RC2],d);
1148 results[D_CBC_RC2][j]=((double)count)/d*lengths[j];
1152 #ifndef OPENSSL_NO_RC5
1153 if (doit[D_CBC_RC5])
1155 for (j=0; j<SIZE_NUM; j++)
1157 print_message(names[D_CBC_RC5],c[D_CBC_RC5][j],lengths[j]);
1158 Time_F(START,usertime);
1159 for (count=0,run=1; COND(c[D_CBC_RC5][j]); count++)
1160 RC5_32_cbc_encrypt(buf,buf,
1161 (unsigned long)lengths[j],&rc5_ks,
1163 d=Time_F(STOP,usertime);
1164 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1165 count,names[D_CBC_RC5],d);
1166 results[D_CBC_RC5][j]=((double)count)/d*lengths[j];
1170 #ifndef OPENSSL_NO_BF
1173 for (j=0; j<SIZE_NUM; j++)
1175 print_message(names[D_CBC_BF],c[D_CBC_BF][j],lengths[j]);
1176 Time_F(START,usertime);
1177 for (count=0,run=1; COND(c[D_CBC_BF][j]); count++)
1178 BF_cbc_encrypt(buf,buf,
1179 (unsigned long)lengths[j],&bf_ks,
1181 d=Time_F(STOP,usertime);
1182 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1183 count,names[D_CBC_BF],d);
1184 results[D_CBC_BF][j]=((double)count)/d*lengths[j];
1188 #ifndef OPENSSL_NO_CAST
1189 if (doit[D_CBC_CAST])
1191 for (j=0; j<SIZE_NUM; j++)
1193 print_message(names[D_CBC_CAST],c[D_CBC_CAST][j],lengths[j]);
1194 Time_F(START,usertime);
1195 for (count=0,run=1; COND(c[D_CBC_CAST][j]); count++)
1196 CAST_cbc_encrypt(buf,buf,
1197 (unsigned long)lengths[j],&cast_ks,
1199 d=Time_F(STOP,usertime);
1200 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1201 count,names[D_CBC_CAST],d);
1202 results[D_CBC_CAST][j]=((double)count)/d*lengths[j];
1209 for (j=0; j<SIZE_NUM; j++)
1214 names[D_EVP]=OBJ_nid2ln(evp->nid);
1215 print_message(names[D_EVP],save_count,
1218 EVP_DecryptInit(&ctx,evp,key16,iv);
1220 EVP_EncryptInit(&ctx,evp,key16,iv);
1222 Time_F(START,usertime);
1224 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1225 EVP_DecryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
1227 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1228 EVP_EncryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
1230 EVP_DecryptFinal(&ctx,buf,&outl);
1232 EVP_EncryptFinal(&ctx,buf,&outl);
1233 d=Time_F(STOP,usertime);
1234 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1235 count,names[D_EVP],d);
1236 results[D_EVP][j]=((double)count)/d*lengths[j];
1240 RAND_pseudo_bytes(buf,36);
1241 #ifndef OPENSSL_NO_RSA
1242 for (j=0; j<RSA_NUM; j++)
1245 if (!rsa_doit[j]) continue;
1246 ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num, rsa_key[j]);
1249 BIO_printf(bio_err,"RSA sign failure. No RSA sign will be done.\n");
1250 ERR_print_errors(bio_err);
1255 pkey_print_message("private","rsa",
1256 rsa_c[j][0],rsa_bits[j],
1258 /* RSA_blinding_on(rsa_key[j],NULL); */
1259 Time_F(START,usertime);
1260 for (count=0,run=1; COND(rsa_c[j][0]); count++)
1262 ret=RSA_sign(NID_md5_sha1, buf,36, buf2,
1263 &rsa_num, rsa_key[j]);
1267 "RSA sign failure\n");
1268 ERR_print_errors(bio_err);
1273 d=Time_F(STOP,usertime);
1275 "%ld %d bit private RSA's in %.2fs\n",
1276 count,rsa_bits[j],d);
1277 rsa_results[j][0]=d/(double)count;
1282 ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num, rsa_key[j]);
1285 BIO_printf(bio_err,"RSA verify failure. No RSA verify will be done.\n");
1286 ERR_print_errors(bio_err);
1291 pkey_print_message("public","rsa",
1292 rsa_c[j][1],rsa_bits[j],
1294 Time_F(START,usertime);
1295 for (count=0,run=1; COND(rsa_c[j][1]); count++)
1297 ret=RSA_verify(NID_md5_sha1, buf,36, buf2,
1298 rsa_num, rsa_key[j]);
1302 "RSA verify failure\n");
1303 ERR_print_errors(bio_err);
1308 d=Time_F(STOP,usertime);
1310 "%ld %d bit public RSA's in %.2fs\n",
1311 count,rsa_bits[j],d);
1312 rsa_results[j][1]=d/(double)count;
1318 /* if longer than 10s, don't do any more */
1319 for (j++; j<RSA_NUM; j++)
1325 RAND_pseudo_bytes(buf,20);
1326 #ifndef OPENSSL_NO_DSA
1327 if (RAND_status() != 1)
1329 RAND_seed(rnd_seed, sizeof rnd_seed);
1332 for (j=0; j<DSA_NUM; j++)
1337 if (!dsa_doit[j]) continue;
1338 /* DSA_generate_key(dsa_key[j]); */
1339 /* DSA_sign_setup(dsa_key[j],NULL); */
1340 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
1344 BIO_printf(bio_err,"DSA sign failure. No DSA sign will be done.\n");
1345 ERR_print_errors(bio_err);
1350 pkey_print_message("sign","dsa",
1351 dsa_c[j][0],dsa_bits[j],
1353 Time_F(START,usertime);
1354 for (count=0,run=1; COND(dsa_c[j][0]); count++)
1356 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
1361 "DSA sign failure\n");
1362 ERR_print_errors(bio_err);
1367 d=Time_F(STOP,usertime);
1368 BIO_printf(bio_err,"%ld %d bit DSA signs in %.2fs\n",
1369 count,dsa_bits[j],d);
1370 dsa_results[j][0]=d/(double)count;
1374 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
1378 BIO_printf(bio_err,"DSA verify failure. No DSA verify will be done.\n");
1379 ERR_print_errors(bio_err);
1384 pkey_print_message("verify","dsa",
1385 dsa_c[j][1],dsa_bits[j],
1387 Time_F(START,usertime);
1388 for (count=0,run=1; COND(dsa_c[j][1]); count++)
1390 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
1395 "DSA verify failure\n");
1396 ERR_print_errors(bio_err);
1401 d=Time_F(STOP,usertime);
1402 BIO_printf(bio_err,"%ld %d bit DSA verify in %.2fs\n",
1403 count,dsa_bits[j],d);
1404 dsa_results[j][1]=d/(double)count;
1409 /* if longer than 10s, don't do any more */
1410 for (j++; j<DSA_NUM; j++)
1414 if (rnd_fake) RAND_cleanup();
1417 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_VERSION));
1418 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_BUILT_ON));
1420 printf("%s ",BN_options());
1421 #ifndef OPENSSL_NO_MD2
1422 printf("%s ",MD2_options());
1424 #ifndef OPENSSL_NO_RC4
1425 printf("%s ",RC4_options());
1427 #ifndef OPENSSL_NO_DES
1428 printf("%s ",des_options());
1430 #ifndef OPENSSL_NO_IDEA
1431 printf("%s ",idea_options());
1433 #ifndef OPENSSL_NO_BF
1434 printf("%s ",BF_options());
1436 fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS));
1437 printf("available timing options: ");
1448 #define as_string(s) (#s)
1449 printf("HZ=%g", HZ);
1451 printf(" [sysconf value]");
1455 printf("timing function used: %s%s%s%s%s%s%s\n",
1456 (ftime_used ? "ftime" : ""),
1457 (ftime_used + times_used > 1 ? "," : ""),
1458 (times_used ? "times" : ""),
1459 (ftime_used + times_used + gettimeofday_used > 1 ? "," : ""),
1460 (gettimeofday_used ? "gettimeofday" : ""),
1461 (ftime_used + times_used + gettimeofday_used + getrusage_used > 1 ? "," : ""),
1462 (getrusage_used ? "getrusage" : ""));
1467 fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n");
1468 fprintf(stdout,"type ");
1469 for (j=0; j<SIZE_NUM; j++)
1470 fprintf(stdout,"%7d bytes",lengths[j]);
1471 fprintf(stdout,"\n");
1474 for (k=0; k<ALGOR_NUM; k++)
1476 if (!doit[k]) continue;
1477 fprintf(stdout,"%-13s",names[k]);
1478 for (j=0; j<SIZE_NUM; j++)
1480 if (results[k][j] > 10000)
1481 fprintf(stdout," %11.2fk",results[k][j]/1e3);
1483 fprintf(stdout," %11.2f ",results[k][j]);
1485 fprintf(stdout,"\n");
1487 #ifndef OPENSSL_NO_RSA
1489 for (k=0; k<RSA_NUM; k++)
1491 if (!rsa_doit[k]) continue;
1494 printf("%18ssign verify sign/s verify/s\n"," ");
1497 fprintf(stdout,"rsa %4u bits %8.4fs %8.4fs %8.1f %8.1f",
1498 rsa_bits[k],rsa_results[k][0],rsa_results[k][1],
1499 1.0/rsa_results[k][0],1.0/rsa_results[k][1]);
1500 fprintf(stdout,"\n");
1503 #ifndef OPENSSL_NO_DSA
1505 for (k=0; k<DSA_NUM; k++)
1507 if (!dsa_doit[k]) continue;
1509 printf("%18ssign verify sign/s verify/s\n"," ");
1512 fprintf(stdout,"dsa %4u bits %8.4fs %8.4fs %8.1f %8.1f",
1513 dsa_bits[k],dsa_results[k][0],dsa_results[k][1],
1514 1.0/dsa_results[k][0],1.0/dsa_results[k][1]);
1515 fprintf(stdout,"\n");
1520 ERR_print_errors(bio_err);
1521 if (buf != NULL) OPENSSL_free(buf);
1522 if (buf2 != NULL) OPENSSL_free(buf2);
1523 #ifndef OPENSSL_NO_RSA
1524 for (i=0; i<RSA_NUM; i++)
1525 if (rsa_key[i] != NULL)
1526 RSA_free(rsa_key[i]);
1528 #ifndef OPENSSL_NO_DSA
1529 for (i=0; i<DSA_NUM; i++)
1530 if (dsa_key[i] != NULL)
1531 DSA_free(dsa_key[i]);
1537 static void print_message(const char *s, long num, int length)
1540 BIO_printf(bio_err,"Doing %s for %ds on %d size blocks: ",s,SECONDS,length);
1541 (void)BIO_flush(bio_err);
1544 BIO_printf(bio_err,"Doing %s %ld times on %d size blocks: ",s,num,length);
1545 (void)BIO_flush(bio_err);
1552 static void pkey_print_message(char *str, char *str2, long num, int bits,
1556 BIO_printf(bio_err,"Doing %d bit %s %s's for %ds: ",bits,str,str2,tm);
1557 (void)BIO_flush(bio_err);
1560 BIO_printf(bio_err,"Doing %ld %d bit %s %s's: ",num,bits,str,str2);
1561 (void)BIO_flush(bio_err);