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 */
61 #ifndef OPENSSL_NO_SPEED
65 #define RSA_SECONDS 10
66 #define DSA_SECONDS 10
68 /* 11-Sep-92 Andrew Daviel Support for Silicon Graphics IRIX added */
69 /* 06-Apr-92 Luke Brennan Support for VMS and add extra signal calls */
72 #define PROG speed_main
80 #ifdef OPENSSL_NO_STDIO
83 #include <openssl/crypto.h>
84 #include <openssl/rand.h>
85 #include <openssl/err.h>
86 #include <openssl/evp.h>
87 #include <openssl/objects.h>
88 #if !defined(OPENSSL_SYS_MSDOS)
89 #include OPENSSL_UNISTD
92 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(OPENSSL_SYS_MACOSX)
94 #elif !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VXWORKS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC))
97 #if !defined(_UNICOS) && !defined(__OpenBSD__) && !defined(sgi) && !defined(__FreeBSD__) && !(defined(__bsdi) || defined(__bsdi__)) && !defined(_AIX) && !defined(OPENSSL_SYS_MPE) && !defined(__NetBSD__) && !defined(OPENSSL_SYS_VXWORKS) /* FIXME */
105 # include <sys/types.h>
106 # include <sys/times.h>
109 # include <sys/time.h>
110 # include <sys/resource.h>
113 /* Depending on the VMS version, the tms structure is perhaps defined.
114 The __TMS macro will show if it was. If it wasn't defined, we should
115 undefine TIMES, since that tells the rest of the program how things
116 should be handled. -- Richard Levitte */
117 #if defined(OPENSSL_SYS_VMS_DECC) && !defined(__TMS)
122 #include <sys/timeb.h>
125 #if !defined(TIMES) && !defined(TIMEB) && !defined(USE_TOD) && !defined(OPENSSL_SYS_VXWORKS)
126 #error "It seems neither struct tms nor struct timeb is supported in this platform!"
129 #if defined(sun) || defined(__ultrix)
130 #define _POSIX_SOURCE
132 #include <sys/param.h>
135 #ifndef OPENSSL_NO_DES
136 #include <openssl/des.h>
138 #ifndef OPENSSL_NO_AES
139 #include <openssl/aes.h>
141 #ifndef OPENSSL_NO_MD2
142 #include <openssl/md2.h>
144 #ifndef OPENSSL_NO_MDC2
145 #include <openssl/mdc2.h>
147 #ifndef OPENSSL_NO_MD4
148 #include <openssl/md4.h>
150 #ifndef OPENSSL_NO_MD5
151 #include <openssl/md5.h>
153 #ifndef OPENSSL_NO_HMAC
154 #include <openssl/hmac.h>
156 #include <openssl/evp.h>
157 #ifndef OPENSSL_NO_SHA
158 #include <openssl/sha.h>
160 #ifndef OPENSSL_NO_RIPEMD
161 #include <openssl/ripemd.h>
163 #ifndef OPENSSL_NO_RC4
164 #include <openssl/rc4.h>
166 #ifndef OPENSSL_NO_RC5
167 #include <openssl/rc5.h>
169 #ifndef OPENSSL_NO_RC2
170 #include <openssl/rc2.h>
172 #ifndef OPENSSL_NO_IDEA
173 #include <openssl/idea.h>
175 #ifndef OPENSSL_NO_BF
176 #include <openssl/blowfish.h>
178 #ifndef OPENSSL_NO_CAST
179 #include <openssl/cast.h>
181 #ifndef OPENSSL_NO_RSA
182 #include <openssl/rsa.h>
183 #include "./testrsa.h"
185 #include <openssl/x509.h>
186 #ifndef OPENSSL_NO_DSA
187 #include "./testdsa.h"
190 /* The following if from times(3) man page. It may need to be changed */
192 # if defined(_SC_CLK_TCK) \
193 && (!defined(OPENSSL_SYS_VMS) || __CTRL_VER >= 70000000)
194 # define HZ ((double)sysconf(_SC_CLK_TCK))
197 # ifndef _BSD_CLK_TCK_ /* FreeBSD hack */
199 # else /* _BSD_CLK_TCK_ */
200 # define HZ ((double)_BSD_CLK_TCK_)
203 # define HZ ((double)CLK_TCK)
208 #if !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && !defined(OPENSSL_SYS_OS2)
213 #define BUFSIZE ((long)1024*8+1)
216 static char ftime_used = 0, times_used = 0, gettimeofday_used = 0, getrusage_used = 0;
218 static int usertime=1;
220 static double Time_F(int s);
221 static void print_message(const char *s,long num,int length);
222 static void pkey_print_message(char *str,char *str2,long num,int bits,int sec);
223 static void print_result(int alg,int run_no,int count,double time_used);
225 static int do_multi(int multi);
232 static const char *names[ALGOR_NUM]={
233 "md2","mdc2","md4","md5","hmac(md5)","sha1","rmd160","rc4",
234 "des cbc","des ede3","idea cbc",
235 "rc2 cbc","rc5-32/12 cbc","blowfish cbc","cast cbc",
236 "aes-128 cbc","aes-192 cbc","aes-256 cbc"};
237 static double results[ALGOR_NUM][SIZE_NUM];
238 static int lengths[SIZE_NUM]={16,64,256,1024,8*1024};
239 static double rsa_results[RSA_NUM][2];
240 static double dsa_results[DSA_NUM][2];
243 #if defined(__STDC__) || defined(sgi) || defined(_AIX)
244 #define SIGRETTYPE void
246 #define SIGRETTYPE int
249 static SIGRETTYPE sig_done(int sig);
250 static SIGRETTYPE sig_done(int sig)
252 signal(SIGALRM,sig_done);
263 static double Time_F(int s)
270 static struct rusage tstart,tend;
275 getrusage(RUSAGE_SELF,&tstart);
282 getrusage(RUSAGE_SELF,&tend);
283 i=(long)tend.ru_utime.tv_usec-(long)tstart.ru_utime.tv_usec;
284 ret=((double)(tend.ru_utime.tv_sec-tstart.ru_utime.tv_sec))
285 +((double)i)/1000000.0;
286 return((ret < 0.001)?0.001:ret);
291 static struct timeval tstart,tend;
294 gettimeofday_used = 1;
297 gettimeofday(&tstart,NULL);
302 gettimeofday(&tend,NULL);
303 i=(long)tend.tv_usec-(long)tstart.tv_usec;
304 ret=((double)(tend.tv_sec-tstart.tv_sec))+((double)i)/1000000.0;
305 return((ret < 0.001)?0.001:ret);
308 #else /* ndef USE_TOD */
313 static struct tms tstart,tend;
324 ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
325 return((ret < 1e-3)?1e-3:ret);
328 # endif /* times() */
329 # if defined(TIMES) && defined(TIMEB)
332 # ifdef OPENSSL_SYS_VXWORKS
334 static unsigned long tick_start, tick_end;
338 tick_start = tickGet();
343 tick_end = tickGet();
344 ret = (double)(tick_end - tick_start) / (double)sysClkRateGet();
345 return((ret < 0.001)?0.001:ret);
348 # elif defined(TIMEB)
350 static struct timeb tstart,tend;
362 i=(long)tend.millitm-(long)tstart.millitm;
363 ret=((double)(tend.time-tstart.time))+((double)i)/1000.0;
364 return((ret < 0.001)?0.001:ret);
371 int MAIN(int, char **);
373 int MAIN(int argc, char **argv)
375 #ifndef OPENSSL_NO_ENGINE
378 unsigned char *buf=NULL,*buf2=NULL;
380 long count=0,save_count=0;
382 #if !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_DSA)
385 #ifndef OPENSSL_NO_RSA
388 unsigned char md[EVP_MAX_MD_SIZE];
389 #ifndef OPENSSL_NO_MD2
390 unsigned char md2[MD2_DIGEST_LENGTH];
392 #ifndef OPENSSL_NO_MDC2
393 unsigned char mdc2[MDC2_DIGEST_LENGTH];
395 #ifndef OPENSSL_NO_MD4
396 unsigned char md4[MD4_DIGEST_LENGTH];
398 #ifndef OPENSSL_NO_MD5
399 unsigned char md5[MD5_DIGEST_LENGTH];
400 unsigned char hmac[MD5_DIGEST_LENGTH];
402 #ifndef OPENSSL_NO_SHA
403 unsigned char sha[SHA_DIGEST_LENGTH];
405 #ifndef OPENSSL_NO_RIPEMD
406 unsigned char rmd160[RIPEMD160_DIGEST_LENGTH];
408 #ifndef OPENSSL_NO_RC4
411 #ifndef OPENSSL_NO_RC5
414 #ifndef OPENSSL_NO_RC2
417 #ifndef OPENSSL_NO_IDEA
418 IDEA_KEY_SCHEDULE idea_ks;
420 #ifndef OPENSSL_NO_BF
423 #ifndef OPENSSL_NO_CAST
426 static const unsigned char key16[16]=
427 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
428 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
429 static const unsigned char key24[24]=
430 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
431 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
432 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
433 static const unsigned char key32[32]=
434 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
435 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
436 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,
437 0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,0x56};
438 #ifndef OPENSSL_NO_AES
439 #define MAX_BLOCK_SIZE 128
441 #define MAX_BLOCK_SIZE 64
443 unsigned char DES_iv[8];
444 unsigned char iv[MAX_BLOCK_SIZE/8];
445 #ifndef OPENSSL_NO_DES
446 DES_cblock *buf_as_des_cblock = NULL;
447 static DES_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};
448 static DES_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
449 static DES_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
450 DES_key_schedule sch;
451 DES_key_schedule sch2;
452 DES_key_schedule sch3;
454 #ifndef OPENSSL_NO_AES
455 AES_KEY aes_ks1, aes_ks2, aes_ks3;
467 #define D_CBC_IDEA 10
471 #define D_CBC_CAST 14
472 #define D_CBC_128_AES 15
473 #define D_CBC_192_AES 16
474 #define D_CBC_256_AES 17
477 long c[ALGOR_NUM][SIZE_NUM];
485 #ifndef OPENSSL_NO_RSA
486 RSA *rsa_key[RSA_NUM];
487 long rsa_c[RSA_NUM][2];
488 static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,4096};
489 static unsigned char *rsa_data[RSA_NUM]=
490 {test512,test1024,test2048,test4096};
491 static int rsa_data_length[RSA_NUM]={
492 sizeof(test512),sizeof(test1024),
493 sizeof(test2048),sizeof(test4096)};
495 #ifndef OPENSSL_NO_DSA
496 DSA *dsa_key[DSA_NUM];
497 long dsa_c[DSA_NUM][2];
498 static unsigned int dsa_bits[DSA_NUM]={512,1024,2048};
500 int rsa_doit[RSA_NUM];
501 int dsa_doit[DSA_NUM];
504 const EVP_CIPHER *evp_cipher=NULL;
505 const EVP_MD *evp_md=NULL;
516 memset(results, 0, sizeof(results));
517 #ifndef OPENSSL_NO_DSA
518 memset(dsa_key,0,sizeof(dsa_key));
522 if ((bio_err=BIO_new(BIO_s_file())) != NULL)
523 BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
525 if (!load_config(bio_err, NULL))
528 #ifndef OPENSSL_NO_RSA
529 memset(rsa_key,0,sizeof(rsa_key));
530 for (i=0; i<RSA_NUM; i++)
534 if ((buf=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
536 BIO_printf(bio_err,"out of memory\n");
539 #ifndef OPENSSL_NO_DES
540 buf_as_des_cblock = (DES_cblock *)buf;
542 if ((buf2=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
544 BIO_printf(bio_err,"out of memory\n");
548 memset(c,0,sizeof(c));
549 memset(DES_iv,0,sizeof(DES_iv));
550 memset(iv,0,sizeof(iv));
552 for (i=0; i<ALGOR_NUM; i++)
554 for (i=0; i<RSA_NUM; i++)
556 for (i=0; i<DSA_NUM; i++)
564 if ((argc > 0) && (strcmp(*argv,"-elapsed") == 0))
567 j--; /* Otherwise, -elapsed gets confused with
570 else if ((argc > 0) && (strcmp(*argv,"-evp") == 0))
576 BIO_printf(bio_err,"no EVP given\n");
579 evp_cipher=EVP_get_cipherbyname(*argv);
582 evp_md=EVP_get_digestbyname(*argv);
584 if(!evp_cipher && !evp_md)
586 BIO_printf(bio_err,"%s is an unknown cipher or digest\n",*argv);
591 else if (argc > 0 && !strcmp(*argv,"-decrypt"))
594 j--; /* Otherwise, -elapsed gets confused with
597 #ifndef OPENSSL_NO_ENGINE
598 else if ((argc > 0) && (strcmp(*argv,"-engine") == 0))
604 BIO_printf(bio_err,"no engine given\n");
607 e = setup_engine(bio_err, *argv, 0);
608 /* j will be increased again further down. We just
609 don't want speed to confuse an engine with an
610 algorithm, especially when none is given (which
611 means all of them should be run) */
616 else if ((argc > 0) && (strcmp(*argv,"-multi") == 0))
622 BIO_printf(bio_err,"no multi count given\n");
628 BIO_printf(bio_err,"bad multi count\n");
631 j--; /* Otherwise, -mr gets confused with
635 else if (argc > 0 && !strcmp(*argv,"-mr"))
638 j--; /* Otherwise, -mr gets confused with
642 #ifndef OPENSSL_NO_MD2
643 if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1;
646 #ifndef OPENSSL_NO_MDC2
647 if (strcmp(*argv,"mdc2") == 0) doit[D_MDC2]=1;
650 #ifndef OPENSSL_NO_MD4
651 if (strcmp(*argv,"md4") == 0) doit[D_MD4]=1;
654 #ifndef OPENSSL_NO_MD5
655 if (strcmp(*argv,"md5") == 0) doit[D_MD5]=1;
658 #ifndef OPENSSL_NO_MD5
659 if (strcmp(*argv,"hmac") == 0) doit[D_HMAC]=1;
662 #ifndef OPENSSL_NO_SHA
663 if (strcmp(*argv,"sha1") == 0) doit[D_SHA1]=1;
665 if (strcmp(*argv,"sha") == 0) doit[D_SHA1]=1;
668 #ifndef OPENSSL_NO_RIPEMD
669 if (strcmp(*argv,"ripemd") == 0) doit[D_RMD160]=1;
671 if (strcmp(*argv,"rmd160") == 0) doit[D_RMD160]=1;
673 if (strcmp(*argv,"ripemd160") == 0) doit[D_RMD160]=1;
676 #ifndef OPENSSL_NO_RC4
677 if (strcmp(*argv,"rc4") == 0) doit[D_RC4]=1;
680 #ifndef OPENSSL_NO_DES
681 if (strcmp(*argv,"des-cbc") == 0) doit[D_CBC_DES]=1;
682 else if (strcmp(*argv,"des-ede3") == 0) doit[D_EDE3_DES]=1;
685 #ifndef OPENSSL_NO_AES
686 if (strcmp(*argv,"aes-128-cbc") == 0) doit[D_CBC_128_AES]=1;
687 else if (strcmp(*argv,"aes-192-cbc") == 0) doit[D_CBC_192_AES]=1;
688 else if (strcmp(*argv,"aes-256-cbc") == 0) doit[D_CBC_256_AES]=1;
691 #ifndef OPENSSL_NO_RSA
692 #if 0 /* was: #ifdef RSAref */
693 if (strcmp(*argv,"rsaref") == 0)
695 RSA_set_default_openssl_method(RSA_PKCS1_RSAref());
701 if (strcmp(*argv,"openssl") == 0)
703 RSA_set_default_method(RSA_PKCS1_SSLeay());
708 #endif /* !OPENSSL_NO_RSA */
709 if (strcmp(*argv,"dsa512") == 0) dsa_doit[R_DSA_512]=2;
710 else if (strcmp(*argv,"dsa1024") == 0) dsa_doit[R_DSA_1024]=2;
711 else if (strcmp(*argv,"dsa2048") == 0) dsa_doit[R_DSA_2048]=2;
712 else if (strcmp(*argv,"rsa512") == 0) rsa_doit[R_RSA_512]=2;
713 else if (strcmp(*argv,"rsa1024") == 0) rsa_doit[R_RSA_1024]=2;
714 else if (strcmp(*argv,"rsa2048") == 0) rsa_doit[R_RSA_2048]=2;
715 else if (strcmp(*argv,"rsa4096") == 0) rsa_doit[R_RSA_4096]=2;
717 #ifndef OPENSSL_NO_RC2
718 if (strcmp(*argv,"rc2-cbc") == 0) doit[D_CBC_RC2]=1;
719 else if (strcmp(*argv,"rc2") == 0) doit[D_CBC_RC2]=1;
722 #ifndef OPENSSL_NO_RC5
723 if (strcmp(*argv,"rc5-cbc") == 0) doit[D_CBC_RC5]=1;
724 else if (strcmp(*argv,"rc5") == 0) doit[D_CBC_RC5]=1;
727 #ifndef OPENSSL_NO_IDEA
728 if (strcmp(*argv,"idea-cbc") == 0) doit[D_CBC_IDEA]=1;
729 else if (strcmp(*argv,"idea") == 0) doit[D_CBC_IDEA]=1;
732 #ifndef OPENSSL_NO_BF
733 if (strcmp(*argv,"bf-cbc") == 0) doit[D_CBC_BF]=1;
734 else if (strcmp(*argv,"blowfish") == 0) doit[D_CBC_BF]=1;
735 else if (strcmp(*argv,"bf") == 0) doit[D_CBC_BF]=1;
738 #ifndef OPENSSL_NO_CAST
739 if (strcmp(*argv,"cast-cbc") == 0) doit[D_CBC_CAST]=1;
740 else if (strcmp(*argv,"cast") == 0) doit[D_CBC_CAST]=1;
741 else if (strcmp(*argv,"cast5") == 0) doit[D_CBC_CAST]=1;
744 #ifndef OPENSSL_NO_DES
745 if (strcmp(*argv,"des") == 0)
752 #ifndef OPENSSL_NO_AES
753 if (strcmp(*argv,"aes") == 0)
755 doit[D_CBC_128_AES]=1;
756 doit[D_CBC_192_AES]=1;
757 doit[D_CBC_256_AES]=1;
761 #ifndef OPENSSL_NO_RSA
762 if (strcmp(*argv,"rsa") == 0)
764 rsa_doit[R_RSA_512]=1;
765 rsa_doit[R_RSA_1024]=1;
766 rsa_doit[R_RSA_2048]=1;
767 rsa_doit[R_RSA_4096]=1;
771 #ifndef OPENSSL_NO_DSA
772 if (strcmp(*argv,"dsa") == 0)
774 dsa_doit[R_DSA_512]=1;
775 dsa_doit[R_DSA_1024]=1;
780 BIO_printf(bio_err,"Error: bad option or value\n");
781 BIO_printf(bio_err,"\n");
782 BIO_printf(bio_err,"Available values:\n");
783 #ifndef OPENSSL_NO_MD2
784 BIO_printf(bio_err,"md2 ");
786 #ifndef OPENSSL_NO_MDC2
787 BIO_printf(bio_err,"mdc2 ");
789 #ifndef OPENSSL_NO_MD4
790 BIO_printf(bio_err,"md4 ");
792 #ifndef OPENSSL_NO_MD5
793 BIO_printf(bio_err,"md5 ");
794 #ifndef OPENSSL_NO_HMAC
795 BIO_printf(bio_err,"hmac ");
798 #ifndef OPENSSL_NO_SHA1
799 BIO_printf(bio_err,"sha1 ");
801 #ifndef OPENSSL_NO_RIPEMD160
802 BIO_printf(bio_err,"rmd160");
804 #if !defined(OPENSSL_NO_MD2) || !defined(OPENSSL_NO_MDC2) || \
805 !defined(OPENSSL_NO_MD4) || !defined(OPENSSL_NO_MD5) || \
806 !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160)
807 BIO_printf(bio_err,"\n");
810 #ifndef OPENSSL_NO_IDEA
811 BIO_printf(bio_err,"idea-cbc ");
813 #ifndef OPENSSL_NO_RC2
814 BIO_printf(bio_err,"rc2-cbc ");
816 #ifndef OPENSSL_NO_RC5
817 BIO_printf(bio_err,"rc5-cbc ");
819 #ifndef OPENSSL_NO_BF
820 BIO_printf(bio_err,"bf-cbc");
822 #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_RC2) || \
823 !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_RC5)
824 BIO_printf(bio_err,"\n");
826 #ifndef OPENSSL_NO_DES
827 BIO_printf(bio_err,"des-cbc des-ede3 ");
829 #ifndef OPENSSL_NO_AES
830 BIO_printf(bio_err,"aes-128-cbc aes-192-cbc aes-256-cbc ");
832 #ifndef OPENSSL_NO_RC4
833 BIO_printf(bio_err,"rc4");
835 BIO_printf(bio_err,"\n");
837 #ifndef OPENSSL_NO_RSA
838 BIO_printf(bio_err,"rsa512 rsa1024 rsa2048 rsa4096\n");
841 #ifndef OPENSSL_NO_DSA
842 BIO_printf(bio_err,"dsa512 dsa1024 dsa2048\n");
845 #ifndef OPENSSL_NO_IDEA
846 BIO_printf(bio_err,"idea ");
848 #ifndef OPENSSL_NO_RC2
849 BIO_printf(bio_err,"rc2 ");
851 #ifndef OPENSSL_NO_DES
852 BIO_printf(bio_err,"des ");
854 #ifndef OPENSSL_NO_AES
855 BIO_printf(bio_err,"aes ");
857 #ifndef OPENSSL_NO_RSA
858 BIO_printf(bio_err,"rsa ");
860 #ifndef OPENSSL_NO_BF
861 BIO_printf(bio_err,"blowfish");
863 #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_RC2) || \
864 !defined(OPENSSL_NO_DES) || !defined(OPENSSL_NO_RSA) || \
865 !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_AES)
866 BIO_printf(bio_err,"\n");
869 BIO_printf(bio_err,"\n");
870 BIO_printf(bio_err,"Available options:\n");
871 #if defined(TIMES) || defined(USE_TOD)
872 BIO_printf(bio_err,"-elapsed measure time in real time instead of CPU user time.\n");
874 #ifndef OPENSSL_NO_ENGINE
875 BIO_printf(bio_err,"-engine e use engine e, possibly a hardware device.\n");
877 BIO_printf(bio_err,"-evp e use EVP e.\n");
878 BIO_printf(bio_err,"-decrypt time decryption instead of encryption (only EVP).\n");
879 BIO_printf(bio_err,"-mr produce machine readable output.\n");
881 BIO_printf(bio_err,"-multi n run n benchmarks in parallel.\n");
891 if(multi && do_multi(multi))
897 for (i=0; i<ALGOR_NUM; i++)
902 for (i=0; i<RSA_NUM; i++)
904 for (i=0; i<DSA_NUM; i++)
907 for (i=0; i<ALGOR_NUM; i++)
908 if (doit[i]) pr_header++;
910 if (usertime == 0 && !mr)
911 BIO_printf(bio_err,"You have chosen to measure elapsed time instead of user CPU time.\n");
912 if (usertime <= 0 && !mr)
914 BIO_printf(bio_err,"To get the most accurate results, try to run this\n");
915 BIO_printf(bio_err,"program when this computer is idle.\n");
918 #ifndef OPENSSL_NO_RSA
919 for (i=0; i<RSA_NUM; i++)
921 const unsigned char *p;
924 rsa_key[i]=d2i_RSAPrivateKey(NULL,&p,rsa_data_length[i]);
925 if (rsa_key[i] == NULL)
927 BIO_printf(bio_err,"internal error loading RSA key number %d\n",i);
933 BIO_printf(bio_err,mr ? "+RK:%d:"
934 : "Loaded RSA key, %d bit modulus and e= 0x",
935 BN_num_bits(rsa_key[i]->n));
936 BN_print(bio_err,rsa_key[i]->e);
937 BIO_printf(bio_err,"\n");
943 #ifndef OPENSSL_NO_DSA
944 dsa_key[0]=get_dsa512();
945 dsa_key[1]=get_dsa1024();
946 dsa_key[2]=get_dsa2048();
949 #ifndef OPENSSL_NO_DES
950 DES_set_key_unchecked(&key,&sch);
951 DES_set_key_unchecked(&key2,&sch2);
952 DES_set_key_unchecked(&key3,&sch3);
954 #ifndef OPENSSL_NO_AES
955 AES_set_encrypt_key(key16,128,&aes_ks1);
956 AES_set_encrypt_key(key24,192,&aes_ks2);
957 AES_set_encrypt_key(key32,256,&aes_ks3);
959 #ifndef OPENSSL_NO_IDEA
960 idea_set_encrypt_key(key16,&idea_ks);
962 #ifndef OPENSSL_NO_RC4
963 RC4_set_key(&rc4_ks,16,key16);
965 #ifndef OPENSSL_NO_RC2
966 RC2_set_key(&rc2_ks,16,key16,128);
968 #ifndef OPENSSL_NO_RC5
969 RC5_32_set_key(&rc5_ks,16,key16,12);
971 #ifndef OPENSSL_NO_BF
972 BF_set_key(&bf_ks,16,key16);
974 #ifndef OPENSSL_NO_CAST
975 CAST_set_key(&cast_ks,16,key16);
977 #ifndef OPENSSL_NO_RSA
978 memset(rsa_c,0,sizeof(rsa_c));
981 #ifndef OPENSSL_NO_DES
982 BIO_printf(bio_err,"First we calculate the approximate speed ...\n");
988 for (i=count; i; i--)
989 DES_ecb_encrypt(buf_as_des_cblock,buf_as_des_cblock,
994 c[D_MD2][0]=count/10;
995 c[D_MDC2][0]=count/10;
1000 c[D_RMD160][0]=count;
1001 c[D_RC4][0]=count*5;
1002 c[D_CBC_DES][0]=count;
1003 c[D_EDE3_DES][0]=count/3;
1004 c[D_CBC_IDEA][0]=count;
1005 c[D_CBC_RC2][0]=count;
1006 c[D_CBC_RC5][0]=count;
1007 c[D_CBC_BF][0]=count;
1008 c[D_CBC_CAST][0]=count;
1010 for (i=1; i<SIZE_NUM; i++)
1012 c[D_MD2][i]=c[D_MD2][0]*4*lengths[0]/lengths[i];
1013 c[D_MDC2][i]=c[D_MDC2][0]*4*lengths[0]/lengths[i];
1014 c[D_MD4][i]=c[D_MD4][0]*4*lengths[0]/lengths[i];
1015 c[D_MD5][i]=c[D_MD5][0]*4*lengths[0]/lengths[i];
1016 c[D_HMAC][i]=c[D_HMAC][0]*4*lengths[0]/lengths[i];
1017 c[D_SHA1][i]=c[D_SHA1][0]*4*lengths[0]/lengths[i];
1018 c[D_RMD160][i]=c[D_RMD160][0]*4*lengths[0]/lengths[i];
1020 for (i=1; i<SIZE_NUM; i++)
1024 l0=(long)lengths[i-1];
1025 l1=(long)lengths[i];
1026 c[D_RC4][i]=c[D_RC4][i-1]*l0/l1;
1027 c[D_CBC_DES][i]=c[D_CBC_DES][i-1]*l0/l1;
1028 c[D_EDE3_DES][i]=c[D_EDE3_DES][i-1]*l0/l1;
1029 c[D_CBC_IDEA][i]=c[D_CBC_IDEA][i-1]*l0/l1;
1030 c[D_CBC_RC2][i]=c[D_CBC_RC2][i-1]*l0/l1;
1031 c[D_CBC_RC5][i]=c[D_CBC_RC5][i-1]*l0/l1;
1032 c[D_CBC_BF][i]=c[D_CBC_BF][i-1]*l0/l1;
1033 c[D_CBC_CAST][i]=c[D_CBC_CAST][i-1]*l0/l1;
1035 #ifndef OPENSSL_NO_RSA
1036 rsa_c[R_RSA_512][0]=count/2000;
1037 rsa_c[R_RSA_512][1]=count/400;
1038 for (i=1; i<RSA_NUM; i++)
1040 rsa_c[i][0]=rsa_c[i-1][0]/8;
1041 rsa_c[i][1]=rsa_c[i-1][1]/4;
1042 if ((rsa_doit[i] <= 1) && (rsa_c[i][0] == 0))
1046 if (rsa_c[i][0] == 0)
1055 #ifndef OPENSSL_NO_DSA
1056 dsa_c[R_DSA_512][0]=count/1000;
1057 dsa_c[R_DSA_512][1]=count/1000/2;
1058 for (i=1; i<DSA_NUM; i++)
1060 dsa_c[i][0]=dsa_c[i-1][0]/4;
1061 dsa_c[i][1]=dsa_c[i-1][1]/4;
1062 if ((dsa_doit[i] <= 1) && (dsa_c[i][0] == 0))
1075 #define COND(d) (count < (d))
1076 #define COUNT(d) (d)
1078 /* not worth fixing */
1079 # error "You cannot disable DES on systems without SIGALRM."
1080 #endif /* OPENSSL_NO_DES */
1082 #define COND(c) (run)
1083 #define COUNT(d) (count)
1084 signal(SIGALRM,sig_done);
1085 #endif /* SIGALRM */
1087 #ifndef OPENSSL_NO_MD2
1090 for (j=0; j<SIZE_NUM; j++)
1092 print_message(names[D_MD2],c[D_MD2][j],lengths[j]);
1094 for (count=0,run=1; COND(c[D_MD2][j]); count++)
1095 EVP_Digest(buf,(unsigned long)lengths[j],&(md2[0]),NULL,EVP_md2(),NULL);
1097 print_result(D_MD2,j,count,d);
1101 #ifndef OPENSSL_NO_MDC2
1104 for (j=0; j<SIZE_NUM; j++)
1106 print_message(names[D_MDC2],c[D_MDC2][j],lengths[j]);
1108 for (count=0,run=1; COND(c[D_MDC2][j]); count++)
1109 EVP_Digest(buf,(unsigned long)lengths[j],&(mdc2[0]),NULL,EVP_mdc2(),NULL);
1111 print_result(D_MDC2,j,count,d);
1116 #ifndef OPENSSL_NO_MD4
1119 for (j=0; j<SIZE_NUM; j++)
1121 print_message(names[D_MD4],c[D_MD4][j],lengths[j]);
1123 for (count=0,run=1; COND(c[D_MD4][j]); count++)
1124 EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md4[0]),NULL,EVP_md4(),NULL);
1126 print_result(D_MD4,j,count,d);
1131 #ifndef OPENSSL_NO_MD5
1134 for (j=0; j<SIZE_NUM; j++)
1136 print_message(names[D_MD5],c[D_MD5][j],lengths[j]);
1138 for (count=0,run=1; COND(c[D_MD5][j]); count++)
1139 EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md5[0]),NULL,EVP_get_digestbyname("md5"),NULL);
1141 print_result(D_MD5,j,count,d);
1146 #if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_HMAC)
1151 HMAC_CTX_init(&hctx);
1152 HMAC_Init_ex(&hctx,(unsigned char *)"This is a key...",
1153 16,EVP_md5(), NULL);
1155 for (j=0; j<SIZE_NUM; j++)
1157 print_message(names[D_HMAC],c[D_HMAC][j],lengths[j]);
1159 for (count=0,run=1; COND(c[D_HMAC][j]); count++)
1161 HMAC_Init_ex(&hctx,NULL,0,NULL,NULL);
1162 HMAC_Update(&hctx,buf,lengths[j]);
1163 HMAC_Final(&hctx,&(hmac[0]),NULL);
1166 print_result(D_HMAC,j,count,d);
1168 HMAC_CTX_cleanup(&hctx);
1171 #ifndef OPENSSL_NO_SHA
1174 for (j=0; j<SIZE_NUM; j++)
1176 print_message(names[D_SHA1],c[D_SHA1][j],lengths[j]);
1178 for (count=0,run=1; COND(c[D_SHA1][j]); count++)
1179 EVP_Digest(buf,(unsigned long)lengths[j],&(sha[0]),NULL,EVP_sha1(),NULL);
1181 print_result(D_SHA1,j,count,d);
1185 #ifndef OPENSSL_NO_RIPEMD
1188 for (j=0; j<SIZE_NUM; j++)
1190 print_message(names[D_RMD160],c[D_RMD160][j],lengths[j]);
1192 for (count=0,run=1; COND(c[D_RMD160][j]); count++)
1193 EVP_Digest(buf,(unsigned long)lengths[j],&(rmd160[0]),NULL,EVP_ripemd160(),NULL);
1195 print_result(D_RMD160,j,count,d);
1199 #ifndef OPENSSL_NO_RC4
1202 for (j=0; j<SIZE_NUM; j++)
1204 print_message(names[D_RC4],c[D_RC4][j],lengths[j]);
1206 for (count=0,run=1; COND(c[D_RC4][j]); count++)
1207 RC4(&rc4_ks,(unsigned int)lengths[j],
1210 print_result(D_RC4,j,count,d);
1214 #ifndef OPENSSL_NO_DES
1215 if (doit[D_CBC_DES])
1217 for (j=0; j<SIZE_NUM; j++)
1219 print_message(names[D_CBC_DES],c[D_CBC_DES][j],lengths[j]);
1221 for (count=0,run=1; COND(c[D_CBC_DES][j]); count++)
1222 DES_ncbc_encrypt(buf,buf,lengths[j],&sch,
1223 &DES_iv,DES_ENCRYPT);
1225 print_result(D_CBC_DES,j,count,d);
1229 if (doit[D_EDE3_DES])
1231 for (j=0; j<SIZE_NUM; j++)
1233 print_message(names[D_EDE3_DES],c[D_EDE3_DES][j],lengths[j]);
1235 for (count=0,run=1; COND(c[D_EDE3_DES][j]); count++)
1236 DES_ede3_cbc_encrypt(buf,buf,lengths[j],
1238 &DES_iv,DES_ENCRYPT);
1240 print_result(D_EDE3_DES,j,count,d);
1244 #ifndef OPENSSL_NO_AES
1245 if (doit[D_CBC_128_AES])
1247 for (j=0; j<SIZE_NUM; j++)
1249 print_message(names[D_CBC_128_AES],c[D_CBC_128_AES][j],lengths[j]);
1251 for (count=0,run=1; COND(c[D_CBC_128_AES][j]); count++)
1252 AES_cbc_encrypt(buf,buf,
1253 (unsigned long)lengths[j],&aes_ks1,
1256 print_result(D_CBC_128_AES,j,count,d);
1259 if (doit[D_CBC_192_AES])
1261 for (j=0; j<SIZE_NUM; j++)
1263 print_message(names[D_CBC_192_AES],c[D_CBC_192_AES][j],lengths[j]);
1265 for (count=0,run=1; COND(c[D_CBC_192_AES][j]); count++)
1266 AES_cbc_encrypt(buf,buf,
1267 (unsigned long)lengths[j],&aes_ks2,
1270 print_result(D_CBC_192_AES,j,count,d);
1273 if (doit[D_CBC_256_AES])
1275 for (j=0; j<SIZE_NUM; j++)
1277 print_message(names[D_CBC_256_AES],c[D_CBC_256_AES][j],lengths[j]);
1279 for (count=0,run=1; COND(c[D_CBC_256_AES][j]); count++)
1280 AES_cbc_encrypt(buf,buf,
1281 (unsigned long)lengths[j],&aes_ks3,
1284 print_result(D_CBC_256_AES,j,count,d);
1289 #ifndef OPENSSL_NO_IDEA
1290 if (doit[D_CBC_IDEA])
1292 for (j=0; j<SIZE_NUM; j++)
1294 print_message(names[D_CBC_IDEA],c[D_CBC_IDEA][j],lengths[j]);
1296 for (count=0,run=1; COND(c[D_CBC_IDEA][j]); count++)
1297 idea_cbc_encrypt(buf,buf,
1298 (unsigned long)lengths[j],&idea_ks,
1301 print_result(D_CBC_IDEA,j,count,d);
1305 #ifndef OPENSSL_NO_RC2
1306 if (doit[D_CBC_RC2])
1308 for (j=0; j<SIZE_NUM; j++)
1310 print_message(names[D_CBC_RC2],c[D_CBC_RC2][j],lengths[j]);
1312 for (count=0,run=1; COND(c[D_CBC_RC2][j]); count++)
1313 RC2_cbc_encrypt(buf,buf,
1314 (unsigned long)lengths[j],&rc2_ks,
1317 print_result(D_CBC_RC2,j,count,d);
1321 #ifndef OPENSSL_NO_RC5
1322 if (doit[D_CBC_RC5])
1324 for (j=0; j<SIZE_NUM; j++)
1326 print_message(names[D_CBC_RC5],c[D_CBC_RC5][j],lengths[j]);
1328 for (count=0,run=1; COND(c[D_CBC_RC5][j]); count++)
1329 RC5_32_cbc_encrypt(buf,buf,
1330 (unsigned long)lengths[j],&rc5_ks,
1333 print_result(D_CBC_RC5,j,count,d);
1337 #ifndef OPENSSL_NO_BF
1340 for (j=0; j<SIZE_NUM; j++)
1342 print_message(names[D_CBC_BF],c[D_CBC_BF][j],lengths[j]);
1344 for (count=0,run=1; COND(c[D_CBC_BF][j]); count++)
1345 BF_cbc_encrypt(buf,buf,
1346 (unsigned long)lengths[j],&bf_ks,
1349 print_result(D_CBC_BF,j,count,d);
1353 #ifndef OPENSSL_NO_CAST
1354 if (doit[D_CBC_CAST])
1356 for (j=0; j<SIZE_NUM; j++)
1358 print_message(names[D_CBC_CAST],c[D_CBC_CAST][j],lengths[j]);
1360 for (count=0,run=1; COND(c[D_CBC_CAST][j]); count++)
1361 CAST_cbc_encrypt(buf,buf,
1362 (unsigned long)lengths[j],&cast_ks,
1365 print_result(D_CBC_CAST,j,count,d);
1372 for (j=0; j<SIZE_NUM; j++)
1379 names[D_EVP]=OBJ_nid2ln(evp_cipher->nid);
1380 /* -O3 -fschedule-insns messes up an
1381 * optimization here! names[D_EVP]
1382 * somehow becomes NULL */
1383 print_message(names[D_EVP],save_count,
1386 EVP_CIPHER_CTX_init(&ctx);
1388 EVP_DecryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
1390 EVP_EncryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
1394 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1395 EVP_DecryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
1397 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1398 EVP_EncryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
1400 EVP_DecryptFinal_ex(&ctx,buf,&outl);
1402 EVP_EncryptFinal_ex(&ctx,buf,&outl);
1404 EVP_CIPHER_CTX_cleanup(&ctx);
1408 names[D_EVP]=OBJ_nid2ln(evp_md->type);
1409 print_message(names[D_EVP],save_count,
1413 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1414 EVP_Digest(buf,lengths[j],&(md[0]),NULL,evp_md,NULL);
1418 print_result(D_EVP,j,count,d);
1422 RAND_pseudo_bytes(buf,36);
1423 #ifndef OPENSSL_NO_RSA
1424 for (j=0; j<RSA_NUM; j++)
1427 if (!rsa_doit[j]) continue;
1428 ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num, rsa_key[j]);
1431 BIO_printf(bio_err,"RSA sign failure. No RSA sign will be done.\n");
1432 ERR_print_errors(bio_err);
1437 pkey_print_message("private","rsa",
1438 rsa_c[j][0],rsa_bits[j],
1440 /* RSA_blinding_on(rsa_key[j],NULL); */
1442 for (count=0,run=1; COND(rsa_c[j][0]); count++)
1444 ret=RSA_sign(NID_md5_sha1, buf,36, buf2,
1445 &rsa_num, rsa_key[j]);
1449 "RSA sign failure\n");
1450 ERR_print_errors(bio_err);
1456 BIO_printf(bio_err,mr ? "+R1:%ld:%d:%.2f\n"
1457 : "%ld %d bit private RSA's in %.2fs\n",
1458 count,rsa_bits[j],d);
1459 rsa_results[j][0]=d/(double)count;
1464 ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num, rsa_key[j]);
1467 BIO_printf(bio_err,"RSA verify failure. No RSA verify will be done.\n");
1468 ERR_print_errors(bio_err);
1473 pkey_print_message("public","rsa",
1474 rsa_c[j][1],rsa_bits[j],
1477 for (count=0,run=1; COND(rsa_c[j][1]); count++)
1479 ret=RSA_verify(NID_md5_sha1, buf,36, buf2,
1480 rsa_num, rsa_key[j]);
1484 "RSA verify failure\n");
1485 ERR_print_errors(bio_err);
1491 BIO_printf(bio_err,mr ? "+R2:%ld:%d:%.2f\n"
1492 : "%ld %d bit public RSA's in %.2fs\n",
1493 count,rsa_bits[j],d);
1494 rsa_results[j][1]=d/(double)count;
1500 /* if longer than 10s, don't do any more */
1501 for (j++; j<RSA_NUM; j++)
1507 RAND_pseudo_bytes(buf,20);
1508 #ifndef OPENSSL_NO_DSA
1509 if (RAND_status() != 1)
1511 RAND_seed(rnd_seed, sizeof rnd_seed);
1514 for (j=0; j<DSA_NUM; j++)
1519 if (!dsa_doit[j]) continue;
1520 /* DSA_generate_key(dsa_key[j]); */
1521 /* DSA_sign_setup(dsa_key[j],NULL); */
1522 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
1526 BIO_printf(bio_err,"DSA sign failure. No DSA sign will be done.\n");
1527 ERR_print_errors(bio_err);
1532 pkey_print_message("sign","dsa",
1533 dsa_c[j][0],dsa_bits[j],
1536 for (count=0,run=1; COND(dsa_c[j][0]); count++)
1538 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
1543 "DSA sign failure\n");
1544 ERR_print_errors(bio_err);
1550 BIO_printf(bio_err,mr ? "+R3:%ld:%d:%.2f\n"
1551 : "%ld %d bit DSA signs in %.2fs\n",
1552 count,dsa_bits[j],d);
1553 dsa_results[j][0]=d/(double)count;
1557 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
1561 BIO_printf(bio_err,"DSA verify failure. No DSA verify will be done.\n");
1562 ERR_print_errors(bio_err);
1567 pkey_print_message("verify","dsa",
1568 dsa_c[j][1],dsa_bits[j],
1571 for (count=0,run=1; COND(dsa_c[j][1]); count++)
1573 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
1578 "DSA verify failure\n");
1579 ERR_print_errors(bio_err);
1585 BIO_printf(bio_err,mr ? "+R4:%ld:%d:%.2f\n"
1586 : "%ld %d bit DSA verify in %.2fs\n",
1587 count,dsa_bits[j],d);
1588 dsa_results[j][1]=d/(double)count;
1593 /* if longer than 10s, don't do any more */
1594 for (j++; j<DSA_NUM; j++)
1598 if (rnd_fake) RAND_cleanup();
1605 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_VERSION));
1606 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_BUILT_ON));
1608 printf("%s ",BN_options());
1609 #ifndef OPENSSL_NO_MD2
1610 printf("%s ",MD2_options());
1612 #ifndef OPENSSL_NO_RC4
1613 printf("%s ",RC4_options());
1615 #ifndef OPENSSL_NO_DES
1616 printf("%s ",DES_options());
1618 #ifndef OPENSSL_NO_AES
1619 printf("%s ",AES_options());
1621 #ifndef OPENSSL_NO_IDEA
1622 printf("%s ",idea_options());
1624 #ifndef OPENSSL_NO_BF
1625 printf("%s ",BF_options());
1627 fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS));
1628 printf("available timing options: ");
1639 #define as_string(s) (#s)
1640 printf("HZ=%g", (double)HZ);
1642 printf(" [sysconf value]");
1646 printf("timing function used: %s%s%s%s%s%s%s\n",
1647 (ftime_used ? "ftime" : ""),
1648 (ftime_used + times_used > 1 ? "," : ""),
1649 (times_used ? "times" : ""),
1650 (ftime_used + times_used + gettimeofday_used > 1 ? "," : ""),
1651 (gettimeofday_used ? "gettimeofday" : ""),
1652 (ftime_used + times_used + gettimeofday_used + getrusage_used > 1 ? "," : ""),
1653 (getrusage_used ? "getrusage" : ""));
1659 fprintf(stdout,"+H");
1662 fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n");
1663 fprintf(stdout,"type ");
1665 for (j=0; j<SIZE_NUM; j++)
1666 fprintf(stdout,mr ? ":%d" : "%7d bytes",lengths[j]);
1667 fprintf(stdout,"\n");
1670 for (k=0; k<ALGOR_NUM; k++)
1672 if (!doit[k]) continue;
1674 fprintf(stdout,"+F:%d:%s",k,names[k]);
1676 fprintf(stdout,"%-13s",names[k]);
1677 for (j=0; j<SIZE_NUM; j++)
1679 if (results[k][j] > 10000 && !mr)
1680 fprintf(stdout," %11.2fk",results[k][j]/1e3);
1682 fprintf(stdout,mr ? ":%.2f" : " %11.2f ",results[k][j]);
1684 fprintf(stdout,"\n");
1686 #ifndef OPENSSL_NO_RSA
1688 for (k=0; k<RSA_NUM; k++)
1690 if (!rsa_doit[k]) continue;
1693 printf("%18ssign verify sign/s verify/s\n"," ");
1697 fprintf(stdout,"+F2:%u:%u:%f:%f\n",
1698 k,rsa_bits[k],rsa_results[k][0],
1701 fprintf(stdout,"rsa %4u bits %8.4fs %8.4fs %8.1f %8.1f\n",
1702 rsa_bits[k],rsa_results[k][0],rsa_results[k][1],
1703 1.0/rsa_results[k][0],1.0/rsa_results[k][1]);
1706 #ifndef OPENSSL_NO_DSA
1708 for (k=0; k<DSA_NUM; k++)
1710 if (!dsa_doit[k]) continue;
1713 printf("%18ssign verify sign/s verify/s\n"," ");
1717 fprintf(stdout,"+F3:%u:%u:%f:%f\n",
1718 k,dsa_bits[k],dsa_results[k][0],dsa_results[k][1]);
1720 fprintf(stdout,"dsa %4u bits %8.4fs %8.4fs %8.1f %8.1f\n",
1721 dsa_bits[k],dsa_results[k][0],dsa_results[k][1],
1722 1.0/dsa_results[k][0],1.0/dsa_results[k][1]);
1727 ERR_print_errors(bio_err);
1728 if (buf != NULL) OPENSSL_free(buf);
1729 if (buf2 != NULL) OPENSSL_free(buf2);
1730 #ifndef OPENSSL_NO_RSA
1731 for (i=0; i<RSA_NUM; i++)
1732 if (rsa_key[i] != NULL)
1733 RSA_free(rsa_key[i]);
1735 #ifndef OPENSSL_NO_DSA
1736 for (i=0; i<DSA_NUM; i++)
1737 if (dsa_key[i] != NULL)
1738 DSA_free(dsa_key[i]);
1744 static void print_message(const char *s, long num, int length)
1747 BIO_printf(bio_err,mr ? "+DT:%s:%d:%d\n"
1748 : "Doing %s for %ds on %d size blocks: ",s,SECONDS,length);
1749 (void)BIO_flush(bio_err);
1752 BIO_printf(bio_err,mr ? "+DN:%s:%ld:%d\n"
1753 : "Doing %s %ld times on %d size blocks: ",s,num,length);
1754 (void)BIO_flush(bio_err);
1761 static void pkey_print_message(char *str, char *str2, long num, int bits,
1765 BIO_printf(bio_err,mr ? "+DTP:%d:%s:%s:%d\n"
1766 : "Doing %d bit %s %s's for %ds: ",bits,str,str2,tm);
1767 (void)BIO_flush(bio_err);
1770 BIO_printf(bio_err,mr ? "+DNP:%ld:%d:%s:%s\n"
1771 : "Doing %ld %d bit %s %s's: ",num,bits,str,str2);
1772 (void)BIO_flush(bio_err);
1779 static void print_result(int alg,int run_no,int count,double time_used)
1781 BIO_printf(bio_err,mr ? "+R:%ld:%s:%f\n"
1782 : "%ld %s's in %.2fs\n",count,names[alg],time_used);
1783 results[alg][run_no]=((double)count)/time_used*lengths[run_no];
1786 static char *sstrsep(char **string, const char *delim)
1789 char *token = *string;
1794 memset(isdelim, 0, sizeof isdelim);
1799 isdelim[(unsigned char)(*delim)] = 1;
1803 while (!isdelim[(unsigned char)(**string)])
1818 static int do_multi(int multi)
1823 static char sep[]=":";
1825 fds=malloc(multi*sizeof *fds);
1826 for(n=0 ; n < multi ; ++n)
1844 printf("Forked child %d\n",n);
1847 /* for now, assume the pipe is long enough to take all the output */
1848 for(n=0 ; n < multi ; ++n)
1854 f=fdopen(fds[n],"r");
1855 while(fgets(buf,sizeof buf,f))
1862 fprintf(stderr,"Don't understand line '%s' from child %d\n",
1866 printf("Got: %s from %d\n",buf,n);
1867 if(!strncmp(buf,"+F:",3))
1873 alg=atoi(sstrsep(&p,sep));
1875 for(j=0 ; j < SIZE_NUM ; ++j)
1876 results[alg][j]+=atof(sstrsep(&p,sep));
1878 else if(!strncmp(buf,"+F2:",4))
1884 k=atoi(sstrsep(&p,sep));
1887 d=atof(sstrsep(&p,sep));
1889 rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d);
1891 rsa_results[k][0]=d;
1893 d=atof(sstrsep(&p,sep));
1895 rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d);
1897 rsa_results[k][1]=d;
1899 else if(!strncmp(buf,"+F2:",4))
1905 k=atoi(sstrsep(&p,sep));
1908 d=atof(sstrsep(&p,sep));
1910 rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d);
1912 rsa_results[k][0]=d;
1914 d=atof(sstrsep(&p,sep));
1916 rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d);
1918 rsa_results[k][1]=d;
1920 else if(!strncmp(buf,"+F3:",4))
1926 k=atoi(sstrsep(&p,sep));
1929 d=atof(sstrsep(&p,sep));
1931 dsa_results[k][0]=1/(1/dsa_results[k][0]+1/d);
1933 dsa_results[k][0]=d;
1935 d=atof(sstrsep(&p,sep));
1937 dsa_results[k][1]=1/(1/dsa_results[k][1]+1/d);
1939 dsa_results[k][1]=d;
1941 else if(!strncmp(buf,"+H:",3))
1945 fprintf(stderr,"Unknown type '%s' from child %d\n",buf,n);