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.]
58 /* ====================================================================
59 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
61 * Portions of the attached software ("Contribution") are developed by
62 * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
64 * The Contribution is licensed pursuant to the OpenSSL open source
65 * license provided above.
67 * The ECDH and ECDSA speed test software is originally written by
68 * Sumit Gupta of Sun Microsystems Laboratories.
72 /* most of this code has been pilfered from my libdes speed.c program */
74 #ifndef OPENSSL_NO_SPEED
78 #define RSA_SECONDS 10
79 #define DSA_SECONDS 10
80 #define ECDSA_SECONDS 10
81 #define ECDH_SECONDS 10
83 /* 11-Sep-92 Andrew Daviel Support for Silicon Graphics IRIX added */
84 /* 06-Apr-92 Luke Brennan Support for VMS and add extra signal calls */
87 #define PROG speed_main
95 #ifdef OPENSSL_NO_STDIO
98 #include <openssl/crypto.h>
99 #include <openssl/rand.h>
100 #include <openssl/err.h>
101 #include <openssl/evp.h>
102 #include <openssl/objects.h>
103 #if !defined(OPENSSL_SYS_MSDOS)
104 #include OPENSSL_UNISTD
107 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(OPENSSL_SYS_MACOSX)
109 #elif !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VXWORKS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC))
112 #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 */
120 # include <sys/types.h>
121 # include <sys/times.h>
124 # include <sys/time.h>
125 # include <sys/resource.h>
128 /* Depending on the VMS version, the tms structure is perhaps defined.
129 The __TMS macro will show if it was. If it wasn't defined, we should
130 undefine TIMES, since that tells the rest of the program how things
131 should be handled. -- Richard Levitte */
132 #if defined(OPENSSL_SYS_VMS_DECC) && !defined(__TMS)
137 #include <sys/timeb.h>
140 #if !defined(TIMES) && !defined(TIMEB) && !defined(USE_TOD) && !defined(OPENSSL_SYS_VXWORKS)
141 #error "It seems neither struct tms nor struct timeb is supported in this platform!"
144 #if defined(sun) || defined(__ultrix)
145 #define _POSIX_SOURCE
147 #include <sys/param.h>
150 #ifndef OPENSSL_NO_DES
151 #include <openssl/des.h>
153 #ifndef OPENSSL_NO_AES
154 #include <openssl/aes.h>
156 #ifndef OPENSSL_NO_MD2
157 #include <openssl/md2.h>
159 #ifndef OPENSSL_NO_MDC2
160 #include <openssl/mdc2.h>
162 #ifndef OPENSSL_NO_MD4
163 #include <openssl/md4.h>
165 #ifndef OPENSSL_NO_MD5
166 #include <openssl/md5.h>
168 #ifndef OPENSSL_NO_HMAC
169 #include <openssl/hmac.h>
171 #include <openssl/evp.h>
172 #ifndef OPENSSL_NO_SHA
173 #include <openssl/sha.h>
175 #ifndef OPENSSL_NO_RIPEMD
176 #include <openssl/ripemd.h>
178 #ifndef OPENSSL_NO_RC4
179 #include <openssl/rc4.h>
181 #ifndef OPENSSL_NO_RC5
182 #include <openssl/rc5.h>
184 #ifndef OPENSSL_NO_RC2
185 #include <openssl/rc2.h>
187 #ifndef OPENSSL_NO_IDEA
188 #include <openssl/idea.h>
190 #ifndef OPENSSL_NO_BF
191 #include <openssl/blowfish.h>
193 #ifndef OPENSSL_NO_CAST
194 #include <openssl/cast.h>
196 #ifndef OPENSSL_NO_RSA
197 #include <openssl/rsa.h>
198 #include "./testrsa.h"
200 #include <openssl/x509.h>
201 #ifndef OPENSSL_NO_DSA
202 #include "./testdsa.h"
204 #ifndef OPENSSL_NO_ECDSA
205 #include <openssl/ecdsa.h>
207 #ifndef OPENSSL_NO_ECDH
208 #include <openssl/ecdh.h>
211 /* The following if from times(3) man page. It may need to be changed */
213 # if defined(_SC_CLK_TCK) \
214 && (!defined(OPENSSL_SYS_VMS) || __CTRL_VER >= 70000000)
215 # define HZ ((double)sysconf(_SC_CLK_TCK))
218 # ifndef _BSD_CLK_TCK_ /* FreeBSD hack */
220 # else /* _BSD_CLK_TCK_ */
221 # define HZ ((double)_BSD_CLK_TCK_)
224 # define HZ ((double)CLK_TCK)
229 #if !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && !defined(OPENSSL_SYS_OS2)
234 #define BUFSIZE ((long)1024*8+1)
237 static char ftime_used = 0, times_used = 0, gettimeofday_used = 0, getrusage_used = 0;
239 static int usertime=1;
241 static double Time_F(int s);
242 static void print_message(const char *s,long num,int length);
243 static void pkey_print_message(char *str,char *str2,long num,int bits,int sec);
244 static void print_result(int alg,int run_no,int count,double time_used);
246 static int do_multi(int multi);
255 #define MAX_ECDH_SIZE 256
257 static const char *names[ALGOR_NUM]={
258 "md2","mdc2","md4","md5","hmac(md5)","sha1","rmd160","rc4",
259 "des cbc","des ede3","idea cbc",
260 "rc2 cbc","rc5-32/12 cbc","blowfish cbc","cast cbc",
261 "aes-128 cbc","aes-192 cbc","aes-256 cbc"};
262 static double results[ALGOR_NUM][SIZE_NUM];
263 static int lengths[SIZE_NUM]={16,64,256,1024,8*1024};
264 static double rsa_results[RSA_NUM][2];
265 static double dsa_results[DSA_NUM][2];
266 static double ecdsa_results[EC_NUM][2];
267 static double ecdh_results[EC_NUM][1];
271 #if defined(__STDC__) || defined(sgi) || defined(_AIX)
272 #define SIGRETTYPE void
274 #define SIGRETTYPE int
277 static SIGRETTYPE sig_done(int sig);
278 static SIGRETTYPE sig_done(int sig)
280 signal(SIGALRM,sig_done);
291 static double Time_F(int s)
298 static struct rusage tstart,tend;
303 getrusage(RUSAGE_SELF,&tstart);
310 getrusage(RUSAGE_SELF,&tend);
311 i=(long)tend.ru_utime.tv_usec-(long)tstart.ru_utime.tv_usec;
312 ret=((double)(tend.ru_utime.tv_sec-tstart.ru_utime.tv_sec))
313 +((double)i)/1000000.0;
314 return((ret < 0.001)?0.001:ret);
319 static struct timeval tstart,tend;
322 gettimeofday_used = 1;
325 gettimeofday(&tstart,NULL);
330 gettimeofday(&tend,NULL);
331 i=(long)tend.tv_usec-(long)tstart.tv_usec;
332 ret=((double)(tend.tv_sec-tstart.tv_sec))+((double)i)/1000000.0;
333 return((ret < 0.001)?0.001:ret);
336 #else /* ndef USE_TOD */
341 static struct tms tstart,tend;
352 ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
353 return((ret < 1e-3)?1e-3:ret);
356 # endif /* times() */
357 # if defined(TIMES) && defined(TIMEB)
360 # ifdef OPENSSL_SYS_VXWORKS
362 static unsigned long tick_start, tick_end;
366 tick_start = tickGet();
371 tick_end = tickGet();
372 ret = (double)(tick_end - tick_start) / (double)sysClkRateGet();
373 return((ret < 0.001)?0.001:ret);
376 # elif defined(TIMEB)
378 static struct timeb tstart,tend;
390 i=(long)tend.millitm-(long)tstart.millitm;
391 ret=((double)(tend.time-tstart.time))+((double)i)/1000.0;
392 return((ret < 0.001)?0.001:ret);
399 int MAIN(int, char **);
401 int MAIN(int argc, char **argv)
403 #ifndef OPENSSL_NO_ENGINE
406 unsigned char *buf=NULL,*buf2=NULL;
408 long count=0,save_count=0;
410 #if !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_DSA)
413 #ifndef OPENSSL_NO_RSA
416 unsigned char md[EVP_MAX_MD_SIZE];
417 #ifndef OPENSSL_NO_MD2
418 unsigned char md2[MD2_DIGEST_LENGTH];
420 #ifndef OPENSSL_NO_MDC2
421 unsigned char mdc2[MDC2_DIGEST_LENGTH];
423 #ifndef OPENSSL_NO_MD4
424 unsigned char md4[MD4_DIGEST_LENGTH];
426 #ifndef OPENSSL_NO_MD5
427 unsigned char md5[MD5_DIGEST_LENGTH];
428 unsigned char hmac[MD5_DIGEST_LENGTH];
430 #ifndef OPENSSL_NO_SHA
431 unsigned char sha[SHA_DIGEST_LENGTH];
433 #ifndef OPENSSL_NO_RIPEMD
434 unsigned char rmd160[RIPEMD160_DIGEST_LENGTH];
436 #ifndef OPENSSL_NO_RC4
439 #ifndef OPENSSL_NO_RC5
442 #ifndef OPENSSL_NO_RC2
445 #ifndef OPENSSL_NO_IDEA
446 IDEA_KEY_SCHEDULE idea_ks;
448 #ifndef OPENSSL_NO_BF
451 #ifndef OPENSSL_NO_CAST
454 static const unsigned char key16[16]=
455 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
456 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
457 static const unsigned char key24[24]=
458 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
459 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
460 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
461 static const unsigned char key32[32]=
462 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
463 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
464 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,
465 0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,0x56};
466 #ifndef OPENSSL_NO_AES
467 #define MAX_BLOCK_SIZE 128
469 #define MAX_BLOCK_SIZE 64
471 unsigned char DES_iv[8];
472 unsigned char iv[MAX_BLOCK_SIZE/8];
473 #ifndef OPENSSL_NO_DES
474 DES_cblock *buf_as_des_cblock = NULL;
475 static DES_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};
476 static DES_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
477 static DES_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
478 DES_key_schedule sch;
479 DES_key_schedule sch2;
480 DES_key_schedule sch3;
482 #ifndef OPENSSL_NO_AES
483 AES_KEY aes_ks1, aes_ks2, aes_ks3;
495 #define D_CBC_IDEA 10
499 #define D_CBC_CAST 14
500 #define D_CBC_128_AES 15
501 #define D_CBC_192_AES 16
502 #define D_CBC_256_AES 17
505 long c[ALGOR_NUM][SIZE_NUM];
531 #ifndef OPENSSL_NO_RSA
532 RSA *rsa_key[RSA_NUM];
533 long rsa_c[RSA_NUM][2];
534 static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,4096};
535 static unsigned char *rsa_data[RSA_NUM]=
536 {test512,test1024,test2048,test4096};
537 static int rsa_data_length[RSA_NUM]={
538 sizeof(test512),sizeof(test1024),
539 sizeof(test2048),sizeof(test4096)};
541 #ifndef OPENSSL_NO_DSA
542 DSA *dsa_key[DSA_NUM];
543 long dsa_c[DSA_NUM][2];
544 static unsigned int dsa_bits[DSA_NUM]={512,1024,2048};
546 #ifndef OPENSSL_NO_EC
547 /* We only test over the following curves as they are representative,
548 * To add tests over more curves, simply add the curve NID
549 * and curve name to the following arrays and increase the
550 * EC_NUM value accordingly.
552 static unsigned int test_curves[EC_NUM] =
556 NID_X9_62_prime192v1,
558 NID_X9_62_prime256v1,
573 static char * test_curves_names[EC_NUM] =
594 static int test_curves_bits[EC_NUM] =
596 160, 192, 224, 256, 384, 521,
597 163, 233, 283, 409, 571,
598 163, 233, 283, 409, 571
603 #ifndef OPENSSL_NO_ECDSA
604 unsigned char ecdsasig[256];
605 unsigned int ecdsasiglen;
606 EC_KEY *ecdsa[EC_NUM];
607 long ecdsa_c[EC_NUM][2];
610 #ifndef OPENSSL_NO_ECDH
611 EC_KEY *ecdh_a[EC_NUM], *ecdh_b[EC_NUM];
612 unsigned char secret_a[MAX_ECDH_SIZE], secret_b[MAX_ECDH_SIZE];
613 int secret_size_a, secret_size_b;
616 long ecdh_c[EC_NUM][2];
619 int rsa_doit[RSA_NUM];
620 int dsa_doit[DSA_NUM];
621 int ecdsa_doit[EC_NUM];
622 int ecdh_doit[EC_NUM];
625 const EVP_CIPHER *evp_cipher=NULL;
626 const EVP_MD *evp_md=NULL;
637 memset(results, 0, sizeof(results));
638 #ifndef OPENSSL_NO_DSA
639 memset(dsa_key,0,sizeof(dsa_key));
641 #ifndef OPENSSL_NO_ECDSA
642 for (i=0; i<EC_NUM; i++) ecdsa[i] = NULL;
644 #ifndef OPENSSL_NO_ECDH
645 for (i=0; i<EC_NUM; i++)
654 if ((bio_err=BIO_new(BIO_s_file())) != NULL)
655 BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
657 if (!load_config(bio_err, NULL))
660 #ifndef OPENSSL_NO_RSA
661 memset(rsa_key,0,sizeof(rsa_key));
662 for (i=0; i<RSA_NUM; i++)
666 if ((buf=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
668 BIO_printf(bio_err,"out of memory\n");
671 #ifndef OPENSSL_NO_DES
672 buf_as_des_cblock = (DES_cblock *)buf;
674 if ((buf2=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
676 BIO_printf(bio_err,"out of memory\n");
680 memset(c,0,sizeof(c));
681 memset(DES_iv,0,sizeof(DES_iv));
682 memset(iv,0,sizeof(iv));
684 for (i=0; i<ALGOR_NUM; i++)
686 for (i=0; i<RSA_NUM; i++)
688 for (i=0; i<DSA_NUM; i++)
690 #ifndef OPENSSL_NO_ECDSA
691 for (i=0; i<EC_NUM; i++)
694 #ifndef OPENSSL_NO_ECDH
695 for (i=0; i<EC_NUM; i++)
705 if ((argc > 0) && (strcmp(*argv,"-elapsed") == 0))
708 j--; /* Otherwise, -elapsed gets confused with
711 else if ((argc > 0) && (strcmp(*argv,"-evp") == 0))
717 BIO_printf(bio_err,"no EVP given\n");
720 evp_cipher=EVP_get_cipherbyname(*argv);
723 evp_md=EVP_get_digestbyname(*argv);
725 if(!evp_cipher && !evp_md)
727 BIO_printf(bio_err,"%s is an unknown cipher or digest\n",*argv);
732 else if (argc > 0 && !strcmp(*argv,"-decrypt"))
735 j--; /* Otherwise, -elapsed gets confused with
738 #ifndef OPENSSL_NO_ENGINE
739 else if ((argc > 0) && (strcmp(*argv,"-engine") == 0))
745 BIO_printf(bio_err,"no engine given\n");
748 e = setup_engine(bio_err, *argv, 0);
749 /* j will be increased again further down. We just
750 don't want speed to confuse an engine with an
751 algorithm, especially when none is given (which
752 means all of them should be run) */
757 else if ((argc > 0) && (strcmp(*argv,"-multi") == 0))
763 BIO_printf(bio_err,"no multi count given\n");
769 BIO_printf(bio_err,"bad multi count\n");
772 j--; /* Otherwise, -mr gets confused with
776 else if (argc > 0 && !strcmp(*argv,"-mr"))
779 j--; /* Otherwise, -mr gets confused with
783 #ifndef OPENSSL_NO_MD2
784 if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1;
787 #ifndef OPENSSL_NO_MDC2
788 if (strcmp(*argv,"mdc2") == 0) doit[D_MDC2]=1;
791 #ifndef OPENSSL_NO_MD4
792 if (strcmp(*argv,"md4") == 0) doit[D_MD4]=1;
795 #ifndef OPENSSL_NO_MD5
796 if (strcmp(*argv,"md5") == 0) doit[D_MD5]=1;
799 #ifndef OPENSSL_NO_MD5
800 if (strcmp(*argv,"hmac") == 0) doit[D_HMAC]=1;
803 #ifndef OPENSSL_NO_SHA
804 if (strcmp(*argv,"sha1") == 0) doit[D_SHA1]=1;
806 if (strcmp(*argv,"sha") == 0) doit[D_SHA1]=1;
809 #ifndef OPENSSL_NO_RIPEMD
810 if (strcmp(*argv,"ripemd") == 0) doit[D_RMD160]=1;
812 if (strcmp(*argv,"rmd160") == 0) doit[D_RMD160]=1;
814 if (strcmp(*argv,"ripemd160") == 0) doit[D_RMD160]=1;
817 #ifndef OPENSSL_NO_RC4
818 if (strcmp(*argv,"rc4") == 0) doit[D_RC4]=1;
821 #ifndef OPENSSL_NO_DES
822 if (strcmp(*argv,"des-cbc") == 0) doit[D_CBC_DES]=1;
823 else if (strcmp(*argv,"des-ede3") == 0) doit[D_EDE3_DES]=1;
826 #ifndef OPENSSL_NO_AES
827 if (strcmp(*argv,"aes-128-cbc") == 0) doit[D_CBC_128_AES]=1;
828 else if (strcmp(*argv,"aes-192-cbc") == 0) doit[D_CBC_192_AES]=1;
829 else if (strcmp(*argv,"aes-256-cbc") == 0) doit[D_CBC_256_AES]=1;
832 #ifndef OPENSSL_NO_RSA
833 #if 0 /* was: #ifdef RSAref */
834 if (strcmp(*argv,"rsaref") == 0)
836 RSA_set_default_openssl_method(RSA_PKCS1_RSAref());
842 if (strcmp(*argv,"openssl") == 0)
844 RSA_set_default_method(RSA_PKCS1_SSLeay());
849 #endif /* !OPENSSL_NO_RSA */
850 if (strcmp(*argv,"dsa512") == 0) dsa_doit[R_DSA_512]=2;
851 else if (strcmp(*argv,"dsa1024") == 0) dsa_doit[R_DSA_1024]=2;
852 else if (strcmp(*argv,"dsa2048") == 0) dsa_doit[R_DSA_2048]=2;
853 else if (strcmp(*argv,"rsa512") == 0) rsa_doit[R_RSA_512]=2;
854 else if (strcmp(*argv,"rsa1024") == 0) rsa_doit[R_RSA_1024]=2;
855 else if (strcmp(*argv,"rsa2048") == 0) rsa_doit[R_RSA_2048]=2;
856 else if (strcmp(*argv,"rsa4096") == 0) rsa_doit[R_RSA_4096]=2;
858 #ifndef OPENSSL_NO_RC2
859 if (strcmp(*argv,"rc2-cbc") == 0) doit[D_CBC_RC2]=1;
860 else if (strcmp(*argv,"rc2") == 0) doit[D_CBC_RC2]=1;
863 #ifndef OPENSSL_NO_RC5
864 if (strcmp(*argv,"rc5-cbc") == 0) doit[D_CBC_RC5]=1;
865 else if (strcmp(*argv,"rc5") == 0) doit[D_CBC_RC5]=1;
868 #ifndef OPENSSL_NO_IDEA
869 if (strcmp(*argv,"idea-cbc") == 0) doit[D_CBC_IDEA]=1;
870 else if (strcmp(*argv,"idea") == 0) doit[D_CBC_IDEA]=1;
873 #ifndef OPENSSL_NO_BF
874 if (strcmp(*argv,"bf-cbc") == 0) doit[D_CBC_BF]=1;
875 else if (strcmp(*argv,"blowfish") == 0) doit[D_CBC_BF]=1;
876 else if (strcmp(*argv,"bf") == 0) doit[D_CBC_BF]=1;
879 #ifndef OPENSSL_NO_CAST
880 if (strcmp(*argv,"cast-cbc") == 0) doit[D_CBC_CAST]=1;
881 else if (strcmp(*argv,"cast") == 0) doit[D_CBC_CAST]=1;
882 else if (strcmp(*argv,"cast5") == 0) doit[D_CBC_CAST]=1;
885 #ifndef OPENSSL_NO_DES
886 if (strcmp(*argv,"des") == 0)
893 #ifndef OPENSSL_NO_AES
894 if (strcmp(*argv,"aes") == 0)
896 doit[D_CBC_128_AES]=1;
897 doit[D_CBC_192_AES]=1;
898 doit[D_CBC_256_AES]=1;
902 #ifndef OPENSSL_NO_RSA
903 if (strcmp(*argv,"rsa") == 0)
905 rsa_doit[R_RSA_512]=1;
906 rsa_doit[R_RSA_1024]=1;
907 rsa_doit[R_RSA_2048]=1;
908 rsa_doit[R_RSA_4096]=1;
912 #ifndef OPENSSL_NO_DSA
913 if (strcmp(*argv,"dsa") == 0)
915 dsa_doit[R_DSA_512]=1;
916 dsa_doit[R_DSA_1024]=1;
920 #ifndef OPENSSL_NO_ECDSA
921 if (strcmp(*argv,"ecdsap160") == 0) ecdsa_doit[R_EC_P160]=2;
922 else if (strcmp(*argv,"ecdsap224") == 0) ecdsa_doit[R_EC_P224]=2;
923 else if (strcmp(*argv,"ecdsap256") == 0) ecdsa_doit[R_EC_P256]=2;
924 else if (strcmp(*argv,"ecdsap384") == 0) ecdsa_doit[R_EC_P384]=2;
925 else if (strcmp(*argv,"ecdsap521") == 0) ecdsa_doit[R_EC_P521]=2;
926 else if (strcmp(*argv,"ecdsak163") == 0) ecdsa_doit[R_EC_K163]=2;
927 else if (strcmp(*argv,"ecdsak233") == 0) ecdsa_doit[R_EC_K233]=2;
928 else if (strcmp(*argv,"ecdsak283") == 0) ecdsa_doit[R_EC_K283]=2;
929 else if (strcmp(*argv,"ecdsak409") == 0) ecdsa_doit[R_EC_K409]=2;
930 else if (strcmp(*argv,"ecdsak571") == 0) ecdsa_doit[R_EC_K571]=2;
931 else if (strcmp(*argv,"ecdsab163") == 0) ecdsa_doit[R_EC_B163]=2;
932 else if (strcmp(*argv,"ecdsab233") == 0) ecdsa_doit[R_EC_B233]=2;
933 else if (strcmp(*argv,"ecdsab283") == 0) ecdsa_doit[R_EC_B283]=2;
934 else if (strcmp(*argv,"ecdsab409") == 0) ecdsa_doit[R_EC_B409]=2;
935 else if (strcmp(*argv,"ecdsab571") == 0) ecdsa_doit[R_EC_B571]=2;
936 else if (strcmp(*argv,"ecdsa") == 0)
938 for (i=0; i < EC_NUM; i++)
943 #ifndef OPENSSL_NO_ECDH
944 if (strcmp(*argv,"ecdhp160") == 0) ecdh_doit[R_EC_P160]=2;
945 else if (strcmp(*argv,"ecdhp224") == 0) ecdh_doit[R_EC_P224]=2;
946 else if (strcmp(*argv,"ecdhp256") == 0) ecdh_doit[R_EC_P256]=2;
947 else if (strcmp(*argv,"ecdhp384") == 0) ecdh_doit[R_EC_P384]=2;
948 else if (strcmp(*argv,"ecdhp521") == 0) ecdh_doit[R_EC_P521]=2;
949 else if (strcmp(*argv,"ecdhk163") == 0) ecdh_doit[R_EC_K163]=2;
950 else if (strcmp(*argv,"ecdhk233") == 0) ecdh_doit[R_EC_K233]=2;
951 else if (strcmp(*argv,"ecdhk283") == 0) ecdh_doit[R_EC_K283]=2;
952 else if (strcmp(*argv,"ecdhk409") == 0) ecdh_doit[R_EC_K409]=2;
953 else if (strcmp(*argv,"ecdhk571") == 0) ecdh_doit[R_EC_K571]=2;
954 else if (strcmp(*argv,"ecdhb163") == 0) ecdh_doit[R_EC_B163]=2;
955 else if (strcmp(*argv,"ecdhb233") == 0) ecdh_doit[R_EC_B233]=2;
956 else if (strcmp(*argv,"ecdhb283") == 0) ecdh_doit[R_EC_B283]=2;
957 else if (strcmp(*argv,"ecdhb409") == 0) ecdh_doit[R_EC_B409]=2;
958 else if (strcmp(*argv,"ecdhb571") == 0) ecdh_doit[R_EC_B571]=2;
959 else if (strcmp(*argv,"ecdh") == 0)
961 for (i=0; i < EC_NUM; i++)
967 BIO_printf(bio_err,"Error: bad option or value\n");
968 BIO_printf(bio_err,"\n");
969 BIO_printf(bio_err,"Available values:\n");
970 #ifndef OPENSSL_NO_MD2
971 BIO_printf(bio_err,"md2 ");
973 #ifndef OPENSSL_NO_MDC2
974 BIO_printf(bio_err,"mdc2 ");
976 #ifndef OPENSSL_NO_MD4
977 BIO_printf(bio_err,"md4 ");
979 #ifndef OPENSSL_NO_MD5
980 BIO_printf(bio_err,"md5 ");
981 #ifndef OPENSSL_NO_HMAC
982 BIO_printf(bio_err,"hmac ");
985 #ifndef OPENSSL_NO_SHA1
986 BIO_printf(bio_err,"sha1 ");
988 #ifndef OPENSSL_NO_RIPEMD160
989 BIO_printf(bio_err,"rmd160");
991 #if !defined(OPENSSL_NO_MD2) || !defined(OPENSSL_NO_MDC2) || \
992 !defined(OPENSSL_NO_MD4) || !defined(OPENSSL_NO_MD5) || \
993 !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160)
994 BIO_printf(bio_err,"\n");
997 #ifndef OPENSSL_NO_IDEA
998 BIO_printf(bio_err,"idea-cbc ");
1000 #ifndef OPENSSL_NO_RC2
1001 BIO_printf(bio_err,"rc2-cbc ");
1003 #ifndef OPENSSL_NO_RC5
1004 BIO_printf(bio_err,"rc5-cbc ");
1006 #ifndef OPENSSL_NO_BF
1007 BIO_printf(bio_err,"bf-cbc");
1009 #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_RC2) || \
1010 !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_RC5)
1011 BIO_printf(bio_err,"\n");
1013 #ifndef OPENSSL_NO_DES
1014 BIO_printf(bio_err,"des-cbc des-ede3 ");
1016 #ifndef OPENSSL_NO_AES
1017 BIO_printf(bio_err,"aes-128-cbc aes-192-cbc aes-256-cbc ");
1019 #ifndef OPENSSL_NO_RC4
1020 BIO_printf(bio_err,"rc4");
1022 BIO_printf(bio_err,"\n");
1024 #ifndef OPENSSL_NO_RSA
1025 BIO_printf(bio_err,"rsa512 rsa1024 rsa2048 rsa4096\n");
1028 #ifndef OPENSSL_NO_DSA
1029 BIO_printf(bio_err,"dsa512 dsa1024 dsa2048\n");
1031 #ifndef OPENSSL_NO_ECDSA
1032 BIO_printf(bio_err,"ecdsap160 ecdsap224 ecdsap256 ecdsap384 ecdsap521\n");
1033 BIO_printf(bio_err,"ecdsak163 ecdsak233 ecdsak283 ecdsak409 ecdsak571\n");
1034 BIO_printf(bio_err,"ecdsab163 ecdsab233 ecdsab283 ecdsab409 ecdsab571\n");
1035 BIO_printf(bio_err,"ecdsa\n");
1037 #ifndef OPENSSL_NO_ECDH
1038 BIO_printf(bio_err,"ecdhp160 ecdhp224 ecdhp256 ecdhp384 ecdhp521\n");
1039 BIO_printf(bio_err,"ecdhk163 ecdhk233 ecdhk283 ecdhk409 ecdhk571\n");
1040 BIO_printf(bio_err,"ecdhb163 ecdhb233 ecdhb283 ecdhb409 ecdhb571\n");
1041 BIO_printf(bio_err,"ecdh\n");
1044 #ifndef OPENSSL_NO_IDEA
1045 BIO_printf(bio_err,"idea ");
1047 #ifndef OPENSSL_NO_RC2
1048 BIO_printf(bio_err,"rc2 ");
1050 #ifndef OPENSSL_NO_DES
1051 BIO_printf(bio_err,"des ");
1053 #ifndef OPENSSL_NO_AES
1054 BIO_printf(bio_err,"aes ");
1056 #ifndef OPENSSL_NO_RSA
1057 BIO_printf(bio_err,"rsa ");
1059 #ifndef OPENSSL_NO_BF
1060 BIO_printf(bio_err,"blowfish");
1062 #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_RC2) || \
1063 !defined(OPENSSL_NO_DES) || !defined(OPENSSL_NO_RSA) || \
1064 !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_AES)
1065 BIO_printf(bio_err,"\n");
1068 BIO_printf(bio_err,"\n");
1069 BIO_printf(bio_err,"Available options:\n");
1070 #if defined(TIMES) || defined(USE_TOD)
1071 BIO_printf(bio_err,"-elapsed measure time in real time instead of CPU user time.\n");
1073 #ifndef OPENSSL_NO_ENGINE
1074 BIO_printf(bio_err,"-engine e use engine e, possibly a hardware device.\n");
1076 BIO_printf(bio_err,"-evp e use EVP e.\n");
1077 BIO_printf(bio_err,"-decrypt time decryption instead of encryption (only EVP).\n");
1078 BIO_printf(bio_err,"-mr produce machine readable output.\n");
1080 BIO_printf(bio_err,"-multi n run n benchmarks in parallel.\n");
1090 if(multi && do_multi(multi))
1096 for (i=0; i<ALGOR_NUM; i++)
1101 for (i=0; i<RSA_NUM; i++)
1103 for (i=0; i<DSA_NUM; i++)
1106 for (i=0; i<ALGOR_NUM; i++)
1107 if (doit[i]) pr_header++;
1109 if (usertime == 0 && !mr)
1110 BIO_printf(bio_err,"You have chosen to measure elapsed time instead of user CPU time.\n");
1111 if (usertime <= 0 && !mr)
1113 BIO_printf(bio_err,"To get the most accurate results, try to run this\n");
1114 BIO_printf(bio_err,"program when this computer is idle.\n");
1117 #ifndef OPENSSL_NO_RSA
1118 for (i=0; i<RSA_NUM; i++)
1120 const unsigned char *p;
1123 rsa_key[i]=d2i_RSAPrivateKey(NULL,&p,rsa_data_length[i]);
1124 if (rsa_key[i] == NULL)
1126 BIO_printf(bio_err,"internal error loading RSA key number %d\n",i);
1132 BIO_printf(bio_err,mr ? "+RK:%d:"
1133 : "Loaded RSA key, %d bit modulus and e= 0x",
1134 BN_num_bits(rsa_key[i]->n));
1135 BN_print(bio_err,rsa_key[i]->e);
1136 BIO_printf(bio_err,"\n");
1142 #ifndef OPENSSL_NO_DSA
1143 dsa_key[0]=get_dsa512();
1144 dsa_key[1]=get_dsa1024();
1145 dsa_key[2]=get_dsa2048();
1148 #ifndef OPENSSL_NO_DES
1149 DES_set_key_unchecked(&key,&sch);
1150 DES_set_key_unchecked(&key2,&sch2);
1151 DES_set_key_unchecked(&key3,&sch3);
1153 #ifndef OPENSSL_NO_AES
1154 AES_set_encrypt_key(key16,128,&aes_ks1);
1155 AES_set_encrypt_key(key24,192,&aes_ks2);
1156 AES_set_encrypt_key(key32,256,&aes_ks3);
1158 #ifndef OPENSSL_NO_IDEA
1159 idea_set_encrypt_key(key16,&idea_ks);
1161 #ifndef OPENSSL_NO_RC4
1162 RC4_set_key(&rc4_ks,16,key16);
1164 #ifndef OPENSSL_NO_RC2
1165 RC2_set_key(&rc2_ks,16,key16,128);
1167 #ifndef OPENSSL_NO_RC5
1168 RC5_32_set_key(&rc5_ks,16,key16,12);
1170 #ifndef OPENSSL_NO_BF
1171 BF_set_key(&bf_ks,16,key16);
1173 #ifndef OPENSSL_NO_CAST
1174 CAST_set_key(&cast_ks,16,key16);
1176 #ifndef OPENSSL_NO_RSA
1177 memset(rsa_c,0,sizeof(rsa_c));
1180 #ifndef OPENSSL_NO_DES
1181 BIO_printf(bio_err,"First we calculate the approximate speed ...\n");
1187 for (i=count; i; i--)
1188 DES_ecb_encrypt(buf_as_des_cblock,buf_as_des_cblock,
1193 c[D_MD2][0]=count/10;
1194 c[D_MDC2][0]=count/10;
1199 c[D_RMD160][0]=count;
1200 c[D_RC4][0]=count*5;
1201 c[D_CBC_DES][0]=count;
1202 c[D_EDE3_DES][0]=count/3;
1203 c[D_CBC_IDEA][0]=count;
1204 c[D_CBC_RC2][0]=count;
1205 c[D_CBC_RC5][0]=count;
1206 c[D_CBC_BF][0]=count;
1207 c[D_CBC_CAST][0]=count;
1209 for (i=1; i<SIZE_NUM; i++)
1211 c[D_MD2][i]=c[D_MD2][0]*4*lengths[0]/lengths[i];
1212 c[D_MDC2][i]=c[D_MDC2][0]*4*lengths[0]/lengths[i];
1213 c[D_MD4][i]=c[D_MD4][0]*4*lengths[0]/lengths[i];
1214 c[D_MD5][i]=c[D_MD5][0]*4*lengths[0]/lengths[i];
1215 c[D_HMAC][i]=c[D_HMAC][0]*4*lengths[0]/lengths[i];
1216 c[D_SHA1][i]=c[D_SHA1][0]*4*lengths[0]/lengths[i];
1217 c[D_RMD160][i]=c[D_RMD160][0]*4*lengths[0]/lengths[i];
1219 for (i=1; i<SIZE_NUM; i++)
1223 l0=(long)lengths[i-1];
1224 l1=(long)lengths[i];
1225 c[D_RC4][i]=c[D_RC4][i-1]*l0/l1;
1226 c[D_CBC_DES][i]=c[D_CBC_DES][i-1]*l0/l1;
1227 c[D_EDE3_DES][i]=c[D_EDE3_DES][i-1]*l0/l1;
1228 c[D_CBC_IDEA][i]=c[D_CBC_IDEA][i-1]*l0/l1;
1229 c[D_CBC_RC2][i]=c[D_CBC_RC2][i-1]*l0/l1;
1230 c[D_CBC_RC5][i]=c[D_CBC_RC5][i-1]*l0/l1;
1231 c[D_CBC_BF][i]=c[D_CBC_BF][i-1]*l0/l1;
1232 c[D_CBC_CAST][i]=c[D_CBC_CAST][i-1]*l0/l1;
1234 #ifndef OPENSSL_NO_RSA
1235 rsa_c[R_RSA_512][0]=count/2000;
1236 rsa_c[R_RSA_512][1]=count/400;
1237 for (i=1; i<RSA_NUM; i++)
1239 rsa_c[i][0]=rsa_c[i-1][0]/8;
1240 rsa_c[i][1]=rsa_c[i-1][1]/4;
1241 if ((rsa_doit[i] <= 1) && (rsa_c[i][0] == 0))
1245 if (rsa_c[i][0] == 0)
1254 #ifndef OPENSSL_NO_DSA
1255 dsa_c[R_DSA_512][0]=count/1000;
1256 dsa_c[R_DSA_512][1]=count/1000/2;
1257 for (i=1; i<DSA_NUM; i++)
1259 dsa_c[i][0]=dsa_c[i-1][0]/4;
1260 dsa_c[i][1]=dsa_c[i-1][1]/4;
1261 if ((dsa_doit[i] <= 1) && (dsa_c[i][0] == 0))
1274 #ifndef OPENSSL_NO_ECDSA
1275 ecdsa_c[R_EC_P160][0]=count/1000;
1276 ecdsa_c[R_EC_P160][1]=count/1000/2;
1277 for (i=R_EC_P224; i<=R_EC_P521; i++)
1279 ecdsa_c[i][0]=ecdsa_c[i-1][0]/2;
1280 ecdsa_c[i][1]=ecdsa_c[i-1][1]/2;
1281 if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
1285 if (ecdsa_c[i] == 0)
1292 ecdsa_c[R_EC_K163][0]=count/1000;
1293 ecdsa_c[R_EC_K163][1]=count/1000/2;
1294 for (i=R_EC_K233; i<=R_EC_K571; i++)
1296 ecdsa_c[i][0]=ecdsa_c[i-1][0]/2;
1297 ecdsa_c[i][1]=ecdsa_c[i-1][1]/2;
1298 if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
1302 if (ecdsa_c[i] == 0)
1309 ecdsa_c[R_EC_B163][0]=count/1000;
1310 ecdsa_c[R_EC_B163][1]=count/1000/2;
1311 for (i=R_EC_B233; i<=R_EC_B571; i++)
1313 ecdsa_c[i][0]=ecdsa_c[i-1][0]/2;
1314 ecdsa_c[i][1]=ecdsa_c[i-1][1]/2;
1315 if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
1319 if (ecdsa_c[i] == 0)
1328 #ifndef OPENSSL_NO_ECDH
1329 ecdh_c[R_EC_P160][0]=count/1000;
1330 ecdh_c[R_EC_P160][1]=count/1000;
1331 for (i=R_EC_P224; i<=R_EC_P521; i++)
1333 ecdh_c[i][0]=ecdh_c[i-1][0]/2;
1334 ecdh_c[i][1]=ecdh_c[i-1][1]/2;
1335 if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
1346 ecdh_c[R_EC_K163][0]=count/1000;
1347 ecdh_c[R_EC_K163][1]=count/1000;
1348 for (i=R_EC_K233; i<=R_EC_K571; i++)
1350 ecdh_c[i][0]=ecdh_c[i-1][0]/2;
1351 ecdh_c[i][1]=ecdh_c[i-1][1]/2;
1352 if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
1363 ecdh_c[R_EC_B163][0]=count/1000;
1364 ecdh_c[R_EC_B163][1]=count/1000;
1365 for (i=R_EC_B233; i<=R_EC_B571; i++)
1367 ecdh_c[i][0]=ecdh_c[i-1][0]/2;
1368 ecdh_c[i][1]=ecdh_c[i-1][1]/2;
1369 if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
1382 #define COND(d) (count < (d))
1383 #define COUNT(d) (d)
1385 /* not worth fixing */
1386 # error "You cannot disable DES on systems without SIGALRM."
1387 #endif /* OPENSSL_NO_DES */
1389 #define COND(c) (run)
1390 #define COUNT(d) (count)
1391 signal(SIGALRM,sig_done);
1392 #endif /* SIGALRM */
1394 #ifndef OPENSSL_NO_MD2
1397 for (j=0; j<SIZE_NUM; j++)
1399 print_message(names[D_MD2],c[D_MD2][j],lengths[j]);
1401 for (count=0,run=1; COND(c[D_MD2][j]); count++)
1402 EVP_Digest(buf,(unsigned long)lengths[j],&(md2[0]),NULL,EVP_md2(),NULL);
1404 print_result(D_MD2,j,count,d);
1408 #ifndef OPENSSL_NO_MDC2
1411 for (j=0; j<SIZE_NUM; j++)
1413 print_message(names[D_MDC2],c[D_MDC2][j],lengths[j]);
1415 for (count=0,run=1; COND(c[D_MDC2][j]); count++)
1416 EVP_Digest(buf,(unsigned long)lengths[j],&(mdc2[0]),NULL,EVP_mdc2(),NULL);
1418 print_result(D_MDC2,j,count,d);
1423 #ifndef OPENSSL_NO_MD4
1426 for (j=0; j<SIZE_NUM; j++)
1428 print_message(names[D_MD4],c[D_MD4][j],lengths[j]);
1430 for (count=0,run=1; COND(c[D_MD4][j]); count++)
1431 EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md4[0]),NULL,EVP_md4(),NULL);
1433 print_result(D_MD4,j,count,d);
1438 #ifndef OPENSSL_NO_MD5
1441 for (j=0; j<SIZE_NUM; j++)
1443 print_message(names[D_MD5],c[D_MD5][j],lengths[j]);
1445 for (count=0,run=1; COND(c[D_MD5][j]); count++)
1446 EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md5[0]),NULL,EVP_get_digestbyname("md5"),NULL);
1448 print_result(D_MD5,j,count,d);
1453 #if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_HMAC)
1458 HMAC_CTX_init(&hctx);
1459 HMAC_Init_ex(&hctx,(unsigned char *)"This is a key...",
1460 16,EVP_md5(), NULL);
1462 for (j=0; j<SIZE_NUM; j++)
1464 print_message(names[D_HMAC],c[D_HMAC][j],lengths[j]);
1466 for (count=0,run=1; COND(c[D_HMAC][j]); count++)
1468 HMAC_Init_ex(&hctx,NULL,0,NULL,NULL);
1469 HMAC_Update(&hctx,buf,lengths[j]);
1470 HMAC_Final(&hctx,&(hmac[0]),NULL);
1473 print_result(D_HMAC,j,count,d);
1475 HMAC_CTX_cleanup(&hctx);
1478 #ifndef OPENSSL_NO_SHA
1481 for (j=0; j<SIZE_NUM; j++)
1483 print_message(names[D_SHA1],c[D_SHA1][j],lengths[j]);
1485 for (count=0,run=1; COND(c[D_SHA1][j]); count++)
1486 EVP_Digest(buf,(unsigned long)lengths[j],&(sha[0]),NULL,EVP_sha1(),NULL);
1488 print_result(D_SHA1,j,count,d);
1492 #ifndef OPENSSL_NO_RIPEMD
1495 for (j=0; j<SIZE_NUM; j++)
1497 print_message(names[D_RMD160],c[D_RMD160][j],lengths[j]);
1499 for (count=0,run=1; COND(c[D_RMD160][j]); count++)
1500 EVP_Digest(buf,(unsigned long)lengths[j],&(rmd160[0]),NULL,EVP_ripemd160(),NULL);
1502 print_result(D_RMD160,j,count,d);
1506 #ifndef OPENSSL_NO_RC4
1509 for (j=0; j<SIZE_NUM; j++)
1511 print_message(names[D_RC4],c[D_RC4][j],lengths[j]);
1513 for (count=0,run=1; COND(c[D_RC4][j]); count++)
1514 RC4(&rc4_ks,(unsigned int)lengths[j],
1517 print_result(D_RC4,j,count,d);
1521 #ifndef OPENSSL_NO_DES
1522 if (doit[D_CBC_DES])
1524 for (j=0; j<SIZE_NUM; j++)
1526 print_message(names[D_CBC_DES],c[D_CBC_DES][j],lengths[j]);
1528 for (count=0,run=1; COND(c[D_CBC_DES][j]); count++)
1529 DES_ncbc_encrypt(buf,buf,lengths[j],&sch,
1530 &DES_iv,DES_ENCRYPT);
1532 print_result(D_CBC_DES,j,count,d);
1536 if (doit[D_EDE3_DES])
1538 for (j=0; j<SIZE_NUM; j++)
1540 print_message(names[D_EDE3_DES],c[D_EDE3_DES][j],lengths[j]);
1542 for (count=0,run=1; COND(c[D_EDE3_DES][j]); count++)
1543 DES_ede3_cbc_encrypt(buf,buf,lengths[j],
1545 &DES_iv,DES_ENCRYPT);
1547 print_result(D_EDE3_DES,j,count,d);
1551 #ifndef OPENSSL_NO_AES
1552 if (doit[D_CBC_128_AES])
1554 for (j=0; j<SIZE_NUM; j++)
1556 print_message(names[D_CBC_128_AES],c[D_CBC_128_AES][j],lengths[j]);
1558 for (count=0,run=1; COND(c[D_CBC_128_AES][j]); count++)
1559 AES_cbc_encrypt(buf,buf,
1560 (unsigned long)lengths[j],&aes_ks1,
1563 print_result(D_CBC_128_AES,j,count,d);
1566 if (doit[D_CBC_192_AES])
1568 for (j=0; j<SIZE_NUM; j++)
1570 print_message(names[D_CBC_192_AES],c[D_CBC_192_AES][j],lengths[j]);
1572 for (count=0,run=1; COND(c[D_CBC_192_AES][j]); count++)
1573 AES_cbc_encrypt(buf,buf,
1574 (unsigned long)lengths[j],&aes_ks2,
1577 print_result(D_CBC_192_AES,j,count,d);
1580 if (doit[D_CBC_256_AES])
1582 for (j=0; j<SIZE_NUM; j++)
1584 print_message(names[D_CBC_256_AES],c[D_CBC_256_AES][j],lengths[j]);
1586 for (count=0,run=1; COND(c[D_CBC_256_AES][j]); count++)
1587 AES_cbc_encrypt(buf,buf,
1588 (unsigned long)lengths[j],&aes_ks3,
1591 print_result(D_CBC_256_AES,j,count,d);
1596 #ifndef OPENSSL_NO_IDEA
1597 if (doit[D_CBC_IDEA])
1599 for (j=0; j<SIZE_NUM; j++)
1601 print_message(names[D_CBC_IDEA],c[D_CBC_IDEA][j],lengths[j]);
1603 for (count=0,run=1; COND(c[D_CBC_IDEA][j]); count++)
1604 idea_cbc_encrypt(buf,buf,
1605 (unsigned long)lengths[j],&idea_ks,
1608 print_result(D_CBC_IDEA,j,count,d);
1612 #ifndef OPENSSL_NO_RC2
1613 if (doit[D_CBC_RC2])
1615 for (j=0; j<SIZE_NUM; j++)
1617 print_message(names[D_CBC_RC2],c[D_CBC_RC2][j],lengths[j]);
1619 for (count=0,run=1; COND(c[D_CBC_RC2][j]); count++)
1620 RC2_cbc_encrypt(buf,buf,
1621 (unsigned long)lengths[j],&rc2_ks,
1624 print_result(D_CBC_RC2,j,count,d);
1628 #ifndef OPENSSL_NO_RC5
1629 if (doit[D_CBC_RC5])
1631 for (j=0; j<SIZE_NUM; j++)
1633 print_message(names[D_CBC_RC5],c[D_CBC_RC5][j],lengths[j]);
1635 for (count=0,run=1; COND(c[D_CBC_RC5][j]); count++)
1636 RC5_32_cbc_encrypt(buf,buf,
1637 (unsigned long)lengths[j],&rc5_ks,
1640 print_result(D_CBC_RC5,j,count,d);
1644 #ifndef OPENSSL_NO_BF
1647 for (j=0; j<SIZE_NUM; j++)
1649 print_message(names[D_CBC_BF],c[D_CBC_BF][j],lengths[j]);
1651 for (count=0,run=1; COND(c[D_CBC_BF][j]); count++)
1652 BF_cbc_encrypt(buf,buf,
1653 (unsigned long)lengths[j],&bf_ks,
1656 print_result(D_CBC_BF,j,count,d);
1660 #ifndef OPENSSL_NO_CAST
1661 if (doit[D_CBC_CAST])
1663 for (j=0; j<SIZE_NUM; j++)
1665 print_message(names[D_CBC_CAST],c[D_CBC_CAST][j],lengths[j]);
1667 for (count=0,run=1; COND(c[D_CBC_CAST][j]); count++)
1668 CAST_cbc_encrypt(buf,buf,
1669 (unsigned long)lengths[j],&cast_ks,
1672 print_result(D_CBC_CAST,j,count,d);
1679 for (j=0; j<SIZE_NUM; j++)
1686 names[D_EVP]=OBJ_nid2ln(evp_cipher->nid);
1687 /* -O3 -fschedule-insns messes up an
1688 * optimization here! names[D_EVP]
1689 * somehow becomes NULL */
1690 print_message(names[D_EVP],save_count,
1693 EVP_CIPHER_CTX_init(&ctx);
1695 EVP_DecryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
1697 EVP_EncryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
1701 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1702 EVP_DecryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
1704 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1705 EVP_EncryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
1707 EVP_DecryptFinal_ex(&ctx,buf,&outl);
1709 EVP_EncryptFinal_ex(&ctx,buf,&outl);
1711 EVP_CIPHER_CTX_cleanup(&ctx);
1715 names[D_EVP]=OBJ_nid2ln(evp_md->type);
1716 print_message(names[D_EVP],save_count,
1720 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1721 EVP_Digest(buf,lengths[j],&(md[0]),NULL,evp_md,NULL);
1725 print_result(D_EVP,j,count,d);
1729 RAND_pseudo_bytes(buf,36);
1730 #ifndef OPENSSL_NO_RSA
1731 for (j=0; j<RSA_NUM; j++)
1734 if (!rsa_doit[j]) continue;
1735 ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num, rsa_key[j]);
1738 BIO_printf(bio_err,"RSA sign failure. No RSA sign will be done.\n");
1739 ERR_print_errors(bio_err);
1744 pkey_print_message("private","rsa",
1745 rsa_c[j][0],rsa_bits[j],
1747 /* RSA_blinding_on(rsa_key[j],NULL); */
1749 for (count=0,run=1; COND(rsa_c[j][0]); count++)
1751 ret=RSA_sign(NID_md5_sha1, buf,36, buf2,
1752 &rsa_num, rsa_key[j]);
1756 "RSA sign failure\n");
1757 ERR_print_errors(bio_err);
1763 BIO_printf(bio_err,mr ? "+R1:%ld:%d:%.2f\n"
1764 : "%ld %d bit private RSA's in %.2fs\n",
1765 count,rsa_bits[j],d);
1766 rsa_results[j][0]=d/(double)count;
1771 ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num, rsa_key[j]);
1774 BIO_printf(bio_err,"RSA verify failure. No RSA verify will be done.\n");
1775 ERR_print_errors(bio_err);
1780 pkey_print_message("public","rsa",
1781 rsa_c[j][1],rsa_bits[j],
1784 for (count=0,run=1; COND(rsa_c[j][1]); count++)
1786 ret=RSA_verify(NID_md5_sha1, buf,36, buf2,
1787 rsa_num, rsa_key[j]);
1791 "RSA verify failure\n");
1792 ERR_print_errors(bio_err);
1798 BIO_printf(bio_err,mr ? "+R2:%ld:%d:%.2f\n"
1799 : "%ld %d bit public RSA's in %.2fs\n",
1800 count,rsa_bits[j],d);
1801 rsa_results[j][1]=d/(double)count;
1807 /* if longer than 10s, don't do any more */
1808 for (j++; j<RSA_NUM; j++)
1814 RAND_pseudo_bytes(buf,20);
1815 #ifndef OPENSSL_NO_DSA
1816 if (RAND_status() != 1)
1818 RAND_seed(rnd_seed, sizeof rnd_seed);
1821 for (j=0; j<DSA_NUM; j++)
1826 if (!dsa_doit[j]) continue;
1827 /* DSA_generate_key(dsa_key[j]); */
1828 /* DSA_sign_setup(dsa_key[j],NULL); */
1829 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
1833 BIO_printf(bio_err,"DSA sign failure. No DSA sign will be done.\n");
1834 ERR_print_errors(bio_err);
1839 pkey_print_message("sign","dsa",
1840 dsa_c[j][0],dsa_bits[j],
1843 for (count=0,run=1; COND(dsa_c[j][0]); count++)
1845 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
1850 "DSA sign failure\n");
1851 ERR_print_errors(bio_err);
1857 BIO_printf(bio_err,mr ? "+R3:%ld:%d:%.2f\n"
1858 : "%ld %d bit DSA signs in %.2fs\n",
1859 count,dsa_bits[j],d);
1860 dsa_results[j][0]=d/(double)count;
1864 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
1868 BIO_printf(bio_err,"DSA verify failure. No DSA verify will be done.\n");
1869 ERR_print_errors(bio_err);
1874 pkey_print_message("verify","dsa",
1875 dsa_c[j][1],dsa_bits[j],
1878 for (count=0,run=1; COND(dsa_c[j][1]); count++)
1880 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
1885 "DSA verify failure\n");
1886 ERR_print_errors(bio_err);
1892 BIO_printf(bio_err,mr ? "+R4:%ld:%d:%.2f\n"
1893 : "%ld %d bit DSA verify in %.2fs\n",
1894 count,dsa_bits[j],d);
1895 dsa_results[j][1]=d/(double)count;
1900 /* if longer than 10s, don't do any more */
1901 for (j++; j<DSA_NUM; j++)
1905 if (rnd_fake) RAND_cleanup();
1908 #ifndef OPENSSL_NO_ECDSA
1909 if (RAND_status() != 1)
1911 RAND_seed(rnd_seed, sizeof rnd_seed);
1914 for (j=0; j<EC_NUM; j++)
1918 if (!ecdsa_doit[j]) continue; /* Ignore Curve */
1919 ecdsa[j] = EC_KEY_new();
1920 if (ecdsa[j] == NULL)
1922 BIO_printf(bio_err,"ECDSA failure.\n");
1923 ERR_print_errors(bio_err);
1928 ecdsa[j]->group = EC_GROUP_new_by_nid(test_curves[j]);
1929 /* Could not obtain group information */
1930 if (ecdsa[j]->group == NULL)
1932 BIO_printf(bio_err,"ECDSA failure.Could not obtain group information\n");
1933 ERR_print_errors(bio_err);
1939 EC_GROUP_precompute_mult(ecdsa[j]->group, NULL);
1941 /* Perform ECDSA signature test */
1942 EC_KEY_generate_key(ecdsa[j]);
1943 ret = ECDSA_sign(0, buf, 20, ecdsasig,
1944 &ecdsasiglen, ecdsa[j]);
1947 BIO_printf(bio_err,"ECDSA sign failure. No ECDSA sign will be done.\n");
1948 ERR_print_errors(bio_err);
1953 pkey_print_message("sign","ecdsa",
1955 test_curves_bits[j],
1959 for (count=0,run=1; COND(ecdsa_c[j][0]);
1962 ret=ECDSA_sign(0, buf, 20,
1963 ecdsasig, &ecdsasiglen,
1967 BIO_printf(bio_err, "ECDSA sign failure\n");
1968 ERR_print_errors(bio_err);
1975 BIO_printf(bio_err, mr ? "+R5:%ld:%d:%.2f\n" :
1976 "%ld %d bit ECDSA signs in %.2fs \n",
1977 count, test_curves_bits[j], d);
1978 ecdsa_results[j][0]=d/(double)count;
1982 /* Perform ECDSA verification test */
1983 ret=ECDSA_verify(0, buf, 20, ecdsasig,
1984 ecdsasiglen, ecdsa[j]);
1987 BIO_printf(bio_err,"ECDSA verify failure. No ECDSA verify will be done.\n");
1988 ERR_print_errors(bio_err);
1993 pkey_print_message("verify","ecdsa",
1995 test_curves_bits[j],
1998 for (count=0,run=1; COND(ecdsa_c[j][1]); count++)
2000 ret=ECDSA_verify(0, buf, 20, ecdsasig, ecdsasiglen, ecdsa[j]);
2003 BIO_printf(bio_err, "ECDSA verify failure\n");
2004 ERR_print_errors(bio_err);
2010 BIO_printf(bio_err, mr? "+R6:%ld:%d:%.2f\n"
2011 : "%ld %d bit ECDSA verify in %.2fs\n",
2012 count, test_curves_bits[j], d);
2013 ecdsa_results[j][1]=d/(double)count;
2018 /* if longer than 10s, don't do any more */
2019 for (j++; j<EC_NUM; j++)
2025 if (rnd_fake) RAND_cleanup();
2028 #ifndef OPENSSL_NO_ECDH
2029 if (RAND_status() != 1)
2031 RAND_seed(rnd_seed, sizeof rnd_seed);
2034 for (j=0; j<EC_NUM; j++)
2036 if (!ecdh_doit[j]) continue;
2037 ecdh_a[j] = EC_KEY_new();
2038 ecdh_b[j] = EC_KEY_new();
2039 if ((ecdh_a[j] == NULL) || (ecdh_b[j] == NULL))
2041 BIO_printf(bio_err,"ECDH failure.\n");
2042 ERR_print_errors(bio_err);
2047 ecdh_a[j]->group = EC_GROUP_new_by_nid(test_curves[j]);
2048 if (ecdh_a[j]->group == NULL)
2050 BIO_printf(bio_err,"ECDH failure.\n");
2051 ERR_print_errors(bio_err);
2056 ecdh_b[j]->group = EC_GROUP_dup(ecdh_a[j]->group);
2058 /* generate two ECDH key pairs */
2059 if (!EC_KEY_generate_key(ecdh_a[j]) ||
2060 !EC_KEY_generate_key(ecdh_b[j]))
2062 BIO_printf(bio_err,"ECDH key generation failure.\n");
2063 ERR_print_errors(bio_err);
2068 secret_size_a = ECDH_compute_key(secret_a,
2071 secret_size_b = ECDH_compute_key(secret_b,
2074 if (secret_size_a != secret_size_b)
2079 for (secret_idx = 0;
2080 (secret_idx < secret_size_a)
2081 && (ecdh_checks == 1);
2084 if (secret_a[secret_idx] != secret_b[secret_idx])
2088 if (ecdh_checks == 0)
2090 BIO_printf(bio_err,"ECDH computations don't match.\n");
2091 ERR_print_errors(bio_err);
2095 pkey_print_message("","ecdh",
2097 test_curves_bits[j],
2100 for (count=0,run=1; COND(ecdh_c[j][0]); count++)
2102 ECDH_compute_key(secret_a,
2107 BIO_printf(bio_err, mr ? "+R7:%ld:%d:%.2f\n" :"%ld %d-bit ECDH ops in %.2fs\n",
2108 count, test_curves_bits[j], d);
2109 ecdh_results[j][0]=d/(double)count;
2117 /* if longer than 10s, don't do any more */
2118 for (j++; j<EC_NUM; j++)
2122 if (rnd_fake) RAND_cleanup();
2129 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_VERSION));
2130 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_BUILT_ON));
2132 printf("%s ",BN_options());
2133 #ifndef OPENSSL_NO_MD2
2134 printf("%s ",MD2_options());
2136 #ifndef OPENSSL_NO_RC4
2137 printf("%s ",RC4_options());
2139 #ifndef OPENSSL_NO_DES
2140 printf("%s ",DES_options());
2142 #ifndef OPENSSL_NO_AES
2143 printf("%s ",AES_options());
2145 #ifndef OPENSSL_NO_IDEA
2146 printf("%s ",idea_options());
2148 #ifndef OPENSSL_NO_BF
2149 printf("%s ",BF_options());
2151 fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS));
2152 printf("available timing options: ");
2163 #define as_string(s) (#s)
2164 printf("HZ=%g", (double)HZ);
2166 printf(" [sysconf value]");
2170 printf("timing function used: %s%s%s%s%s%s%s\n",
2171 (ftime_used ? "ftime" : ""),
2172 (ftime_used + times_used > 1 ? "," : ""),
2173 (times_used ? "times" : ""),
2174 (ftime_used + times_used + gettimeofday_used > 1 ? "," : ""),
2175 (gettimeofday_used ? "gettimeofday" : ""),
2176 (ftime_used + times_used + gettimeofday_used + getrusage_used > 1 ? "," : ""),
2177 (getrusage_used ? "getrusage" : ""));
2183 fprintf(stdout,"+H");
2186 fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n");
2187 fprintf(stdout,"type ");
2189 for (j=0; j<SIZE_NUM; j++)
2190 fprintf(stdout,mr ? ":%d" : "%7d bytes",lengths[j]);
2191 fprintf(stdout,"\n");
2194 for (k=0; k<ALGOR_NUM; k++)
2196 if (!doit[k]) continue;
2198 fprintf(stdout,"+F:%d:%s",k,names[k]);
2200 fprintf(stdout,"%-13s",names[k]);
2201 for (j=0; j<SIZE_NUM; j++)
2203 if (results[k][j] > 10000 && !mr)
2204 fprintf(stdout," %11.2fk",results[k][j]/1e3);
2206 fprintf(stdout,mr ? ":%.2f" : " %11.2f ",results[k][j]);
2208 fprintf(stdout,"\n");
2210 #ifndef OPENSSL_NO_RSA
2212 for (k=0; k<RSA_NUM; k++)
2214 if (!rsa_doit[k]) continue;
2217 printf("%18ssign verify sign/s verify/s\n"," ");
2221 fprintf(stdout,"+F2:%u:%u:%f:%f\n",
2222 k,rsa_bits[k],rsa_results[k][0],
2225 fprintf(stdout,"rsa %4u bits %8.4fs %8.4fs %8.1f %8.1f\n",
2226 rsa_bits[k],rsa_results[k][0],rsa_results[k][1],
2227 1.0/rsa_results[k][0],1.0/rsa_results[k][1]);
2230 #ifndef OPENSSL_NO_DSA
2232 for (k=0; k<DSA_NUM; k++)
2234 if (!dsa_doit[k]) continue;
2237 printf("%18ssign verify sign/s verify/s\n"," ");
2241 fprintf(stdout,"+F3:%u:%u:%f:%f\n",
2242 k,dsa_bits[k],dsa_results[k][0],dsa_results[k][1]);
2244 fprintf(stdout,"dsa %4u bits %8.4fs %8.4fs %8.1f %8.1f\n",
2245 dsa_bits[k],dsa_results[k][0],dsa_results[k][1],
2246 1.0/dsa_results[k][0],1.0/dsa_results[k][1]);
2249 #ifndef OPENSSL_NO_ECDSA
2251 for (k=0; k<EC_NUM; k++)
2253 if (!ecdsa_doit[k]) continue;
2256 printf("%30ssign verify sign/s verify/s\n"," ");
2261 fprintf(stdout,"+F4:%u:%u:%f:%f\n",
2262 k, test_curves_bits[k],
2263 ecdsa_results[k][0],ecdsa_results[k][1]);
2266 "%4u bit ecdsa (%s) %8.4fs %8.4fs %8.1f %8.1f\n",
2267 test_curves_bits[k],
2268 test_curves_names[k],
2269 ecdsa_results[k][0],ecdsa_results[k][1],
2270 1.0/ecdsa_results[k][0],1.0/ecdsa_results[k][1]);
2275 #ifndef OPENSSL_NO_ECDH
2277 for (k=0; k<EC_NUM; k++)
2279 if (!ecdh_doit[k]) continue;
2282 printf("%30sop op/s\n"," ");
2286 fprintf(stdout,"+F5:%u:%u:%f:%f\n",
2287 k, test_curves_bits[k],
2288 ecdh_results[k][0], 1.0/ecdh_results[k][0]);
2291 fprintf(stdout,"%4u bit ecdh (%s) %8.4fs %8.1f\n",
2292 test_curves_bits[k],
2293 test_curves_names[k],
2294 ecdh_results[k][0], 1.0/ecdh_results[k][0]);
2301 ERR_print_errors(bio_err);
2302 if (buf != NULL) OPENSSL_free(buf);
2303 if (buf2 != NULL) OPENSSL_free(buf2);
2304 #ifndef OPENSSL_NO_RSA
2305 for (i=0; i<RSA_NUM; i++)
2306 if (rsa_key[i] != NULL)
2307 RSA_free(rsa_key[i]);
2309 #ifndef OPENSSL_NO_DSA
2310 for (i=0; i<DSA_NUM; i++)
2311 if (dsa_key[i] != NULL)
2312 DSA_free(dsa_key[i]);
2315 #ifndef OPENSSL_NO_ECDSA
2316 for (i=0; i<EC_NUM; i++)
2317 if (ecdsa[i] != NULL)
2318 EC_KEY_free(ecdsa[i]);
2320 #ifndef OPENSSL_NO_ECDH
2321 for (i=0; i<EC_NUM; i++)
2323 if (ecdh_a[i] != NULL)
2324 EC_KEY_free(ecdh_a[i]);
2325 if (ecdh_b[i] != NULL)
2326 EC_KEY_free(ecdh_b[i]);
2334 static void print_message(const char *s, long num, int length)
2337 BIO_printf(bio_err,mr ? "+DT:%s:%d:%d\n"
2338 : "Doing %s for %ds on %d size blocks: ",s,SECONDS,length);
2339 (void)BIO_flush(bio_err);
2342 BIO_printf(bio_err,mr ? "+DN:%s:%ld:%d\n"
2343 : "Doing %s %ld times on %d size blocks: ",s,num,length);
2344 (void)BIO_flush(bio_err);
2351 static void pkey_print_message(char *str, char *str2, long num, int bits,
2355 BIO_printf(bio_err,mr ? "+DTP:%d:%s:%s:%d\n"
2356 : "Doing %d bit %s %s's for %ds: ",bits,str,str2,tm);
2357 (void)BIO_flush(bio_err);
2360 BIO_printf(bio_err,mr ? "+DNP:%ld:%d:%s:%s\n"
2361 : "Doing %ld %d bit %s %s's: ",num,bits,str,str2);
2362 (void)BIO_flush(bio_err);
2369 static void print_result(int alg,int run_no,int count,double time_used)
2371 BIO_printf(bio_err,mr ? "+R:%ld:%s:%f\n"
2372 : "%ld %s's in %.2fs\n",count,names[alg],time_used);
2373 results[alg][run_no]=((double)count)/time_used*lengths[run_no];
2376 static char *sstrsep(char **string, const char *delim)
2379 char *token = *string;
2384 memset(isdelim, 0, sizeof isdelim);
2389 isdelim[(unsigned char)(*delim)] = 1;
2393 while (!isdelim[(unsigned char)(**string)])
2408 static int do_multi(int multi)
2413 static char sep[]=":";
2415 fds=malloc(multi*sizeof *fds);
2416 for(n=0 ; n < multi ; ++n)
2434 printf("Forked child %d\n",n);
2437 /* for now, assume the pipe is long enough to take all the output */
2438 for(n=0 ; n < multi ; ++n)
2444 f=fdopen(fds[n],"r");
2445 while(fgets(buf,sizeof buf,f))
2452 fprintf(stderr,"Don't understand line '%s' from child %d\n",
2456 printf("Got: %s from %d\n",buf,n);
2457 if(!strncmp(buf,"+F:",3))
2463 alg=atoi(sstrsep(&p,sep));
2465 for(j=0 ; j < SIZE_NUM ; ++j)
2466 results[alg][j]+=atof(sstrsep(&p,sep));
2468 else if(!strncmp(buf,"+F2:",4))
2474 k=atoi(sstrsep(&p,sep));
2477 d=atof(sstrsep(&p,sep));
2479 rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d);
2481 rsa_results[k][0]=d;
2483 d=atof(sstrsep(&p,sep));
2485 rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d);
2487 rsa_results[k][1]=d;
2489 else if(!strncmp(buf,"+F2:",4))
2495 k=atoi(sstrsep(&p,sep));
2498 d=atof(sstrsep(&p,sep));
2500 rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d);
2502 rsa_results[k][0]=d;
2504 d=atof(sstrsep(&p,sep));
2506 rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d);
2508 rsa_results[k][1]=d;
2510 else if(!strncmp(buf,"+F3:",4))
2516 k=atoi(sstrsep(&p,sep));
2519 d=atof(sstrsep(&p,sep));
2521 dsa_results[k][0]=1/(1/dsa_results[k][0]+1/d);
2523 dsa_results[k][0]=d;
2525 d=atof(sstrsep(&p,sep));
2527 dsa_results[k][1]=1/(1/dsa_results[k][1]+1/d);
2529 dsa_results[k][1]=d;
2531 #ifndef OPENSSL_NO_ECDSA
2532 else if(!strncmp(buf,"+F4:",4))
2538 k=atoi(sstrsep(&p,sep));
2541 d=atof(sstrsep(&p,sep));
2543 ecdsa_results[k][0]=1/(1/ecdsa_results[k][0]+1/d);
2545 ecdsa_results[k][0]=d;
2547 d=atof(sstrsep(&p,sep));
2549 ecdsa_results[k][1]=1/(1/ecdsa_results[k][1]+1/d);
2551 ecdsa_results[k][1]=d;
2555 #ifndef OPENSSL_NO_ECDH
2556 else if(!strncmp(buf,"+F5:",4))
2562 k=atoi(sstrsep(&p,sep));
2565 d=atof(sstrsep(&p,sep));
2567 ecdh_results[k][0]=1/(1/ecdh_results[k][0]+1/d);
2569 ecdh_results[k][0]=d;
2574 else if(!strncmp(buf,"+H:",3))
2578 fprintf(stderr,"Unknown type '%s' from child %d\n",buf,n);