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 PRIME_SECONDS 10
79 #define RSA_SECONDS 10
80 #define DSA_SECONDS 10
81 #define ECDSA_SECONDS 10
82 #define ECDH_SECONDS 10
84 /* 11-Sep-92 Andrew Daviel Support for Silicon Graphics IRIX added */
85 /* 06-Apr-92 Luke Brennan Support for VMS and add extra signal calls */
88 #define PROG speed_main
96 #ifdef OPENSSL_NO_STDIO
99 #include <openssl/crypto.h>
100 #include <openssl/rand.h>
101 #include <openssl/err.h>
102 #include <openssl/evp.h>
103 #include <openssl/objects.h>
104 #if !defined(OPENSSL_SYS_MSDOS)
105 #include OPENSSL_UNISTD
108 #ifndef OPENSSL_SYS_NETWARE
112 #if defined(_WIN32) || defined(__CYGWIN__)
114 # if defined(__CYGWIN__) && !defined(_WIN32)
115 /* <windows.h> should define _WIN32, which normally is mutually
116 * exclusive with __CYGWIN__, but if it didn't... */
118 /* this is done because Cygwin alarm() fails sometimes. */
122 #include <openssl/bn.h>
123 #ifndef OPENSSL_NO_DES
124 #include <openssl/des.h>
126 #ifndef OPENSSL_NO_AES
127 #include <openssl/aes.h>
129 #ifndef OPENSSL_NO_CAMELLIA
130 #include <openssl/camellia.h>
132 #ifndef OPENSSL_NO_MD2
133 #include <openssl/md2.h>
135 #ifndef OPENSSL_NO_MDC2
136 #include <openssl/mdc2.h>
138 #ifndef OPENSSL_NO_MD4
139 #include <openssl/md4.h>
141 #ifndef OPENSSL_NO_MD5
142 #include <openssl/md5.h>
144 #ifndef OPENSSL_NO_HMAC
145 #include <openssl/hmac.h>
147 #include <openssl/evp.h>
148 #ifndef OPENSSL_NO_SHA
149 #include <openssl/sha.h>
151 #ifndef OPENSSL_NO_RIPEMD
152 #include <openssl/ripemd.h>
154 #ifndef OPENSSL_NO_WHIRLPOOL
155 #include <openssl/whrlpool.h>
157 #ifndef OPENSSL_NO_RC4
158 #include <openssl/rc4.h>
160 #ifndef OPENSSL_NO_RC5
161 #include <openssl/rc5.h>
163 #ifndef OPENSSL_NO_RC2
164 #include <openssl/rc2.h>
166 #ifndef OPENSSL_NO_IDEA
167 #include <openssl/idea.h>
169 #ifndef OPENSSL_NO_SEED
170 #include <openssl/seed.h>
172 #ifndef OPENSSL_NO_BF
173 #include <openssl/blowfish.h>
175 #ifndef OPENSSL_NO_CAST
176 #include <openssl/cast.h>
178 #ifndef OPENSSL_NO_RSA
179 #include <openssl/rsa.h>
180 #include "./testrsa.h"
182 #include <openssl/x509.h>
183 #ifndef OPENSSL_NO_DSA
184 #include <openssl/dsa.h>
185 #include "./testdsa.h"
187 #ifndef OPENSSL_NO_ECDSA
188 #include <openssl/ecdsa.h>
190 #ifndef OPENSSL_NO_ECDH
191 #include <openssl/ecdh.h>
193 #include <openssl/modes.h>
195 #include "../crypto/bn/bn_lcl.h"
198 # if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_NETWARE)
212 #define BUFSIZE ((long)1024*8+1)
216 static int usertime=1;
218 static double Time_F(int s);
219 static void print_message(const char *s,long num,int length);
220 static void prime_print_message(const char *s, long num);
221 static void pkey_print_message(const char *str, const char *str2,
222 long num, int bits, int sec);
223 static void print_result(int alg,int run_no,int count,double time_used);
224 static void prime_print_result(int alg, int count, double time_used);
226 static int do_multi(int multi);
236 #define MAX_ECDH_SIZE 256
238 static const char *names[ALGOR_NUM]={
239 "md2","mdc2","md4","md5","hmac(md5)","sha1","rmd160","rc4",
240 "des cbc","des ede3","idea cbc","seed cbc",
241 "rc2 cbc","rc5-32/12 cbc","blowfish cbc","cast cbc",
242 "aes-128 cbc","aes-192 cbc","aes-256 cbc",
243 "camellia-128 cbc","camellia-192 cbc","camellia-256 cbc",
244 "evp","sha256","sha512","whirlpool",
245 "aes-128 ige","aes-192 ige","aes-256 ige","ghash" };
246 static double results[ALGOR_NUM][SIZE_NUM];
247 static int lengths[SIZE_NUM]={16,64,256,1024,8*1024};
248 static const char *prime_names[PRIME_NUM]={
249 "prime trial division", "prime trial division retry", "prime coprime" };
250 #ifndef OPENSSL_NO_RSA
251 static double rsa_results[RSA_NUM][2];
253 #ifndef OPENSSL_NO_DSA
254 static double dsa_results[DSA_NUM][2];
256 #ifndef OPENSSL_NO_ECDSA
257 static double ecdsa_results[EC_NUM][2];
259 #ifndef OPENSSL_NO_ECDH
260 static double ecdh_results[EC_NUM][1];
263 #if defined(OPENSSL_NO_DSA) && !(defined(OPENSSL_NO_ECDSA) && defined(OPENSSL_NO_ECDH))
264 static const char rnd_seed[] = "string to make the random number generator think it has entropy";
265 static int rnd_fake = 0;
269 #if defined(__STDC__) || defined(sgi) || defined(_AIX)
270 #define SIGRETTYPE void
272 #define SIGRETTYPE int
275 static SIGRETTYPE sig_done(int sig);
276 static SIGRETTYPE sig_done(int sig)
278 signal(SIGALRM,sig_done);
291 #if !defined(SIGALRM)
294 static unsigned int lapse,schlock;
295 static void alarm_win32(unsigned int secs) { lapse = secs*1000; }
296 #define alarm alarm_win32
298 static DWORD WINAPI sleepy(VOID *arg)
306 static double Time_F(int s)
314 thr = CreateThread(NULL,4096,sleepy,NULL,0,NULL);
317 DWORD ret=GetLastError();
318 BIO_printf(bio_err,"unable to CreateThread (%d)",ret);
321 while (!schlock) Sleep(0); /* scheduler spinlock */
322 ret = app_tminterval(s,usertime);
326 ret = app_tminterval(s,usertime);
327 if (run) TerminateThread(thr,0);
335 static double Time_F(int s)
337 double ret = app_tminterval(s,usertime);
338 if (s == STOP) alarm(0);
344 #ifndef OPENSSL_NO_ECDH
345 static const int KDF1_SHA1_len = 20;
346 static void *KDF1_SHA1(const void *in, size_t inlen, void *out, size_t *outlen)
348 #ifndef OPENSSL_NO_SHA
349 if (*outlen < SHA_DIGEST_LENGTH)
352 *outlen = SHA_DIGEST_LENGTH;
353 return SHA1(in, inlen, out);
356 #endif /* OPENSSL_NO_SHA */
358 #endif /* OPENSSL_NO_ECDH */
361 int MAIN(int, char **);
363 int MAIN(int argc, char **argv)
365 unsigned char *buf=NULL,*buf2=NULL;
367 long count=0,save_count=0;
369 #if !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_DSA)
372 #ifndef OPENSSL_NO_RSA
375 unsigned char md[EVP_MAX_MD_SIZE];
376 #ifndef OPENSSL_NO_MD2
377 unsigned char md2[MD2_DIGEST_LENGTH];
379 #ifndef OPENSSL_NO_MDC2
380 unsigned char mdc2[MDC2_DIGEST_LENGTH];
382 #ifndef OPENSSL_NO_MD4
383 unsigned char md4[MD4_DIGEST_LENGTH];
385 #ifndef OPENSSL_NO_MD5
386 unsigned char md5[MD5_DIGEST_LENGTH];
387 unsigned char hmac[MD5_DIGEST_LENGTH];
389 #ifndef OPENSSL_NO_SHA
390 unsigned char sha[SHA_DIGEST_LENGTH];
391 #ifndef OPENSSL_NO_SHA256
392 unsigned char sha256[SHA256_DIGEST_LENGTH];
394 #ifndef OPENSSL_NO_SHA512
395 unsigned char sha512[SHA512_DIGEST_LENGTH];
398 #ifndef OPENSSL_NO_WHIRLPOOL
399 unsigned char whirlpool[WHIRLPOOL_DIGEST_LENGTH];
401 #ifndef OPENSSL_NO_RIPEMD
402 unsigned char rmd160[RIPEMD160_DIGEST_LENGTH];
404 #ifndef OPENSSL_NO_RC4
407 #ifndef OPENSSL_NO_RC5
410 #ifndef OPENSSL_NO_RC2
413 #ifndef OPENSSL_NO_IDEA
414 IDEA_KEY_SCHEDULE idea_ks;
416 #ifndef OPENSSL_NO_SEED
417 SEED_KEY_SCHEDULE seed_ks;
419 #ifndef OPENSSL_NO_BF
422 #ifndef OPENSSL_NO_CAST
425 static const unsigned char key16[16]=
426 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
427 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
428 #ifndef OPENSSL_NO_AES
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};
439 #ifndef OPENSSL_NO_CAMELLIA
440 static const unsigned char ckey24[24]=
441 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
442 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
443 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
444 static const unsigned char ckey32[32]=
445 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
446 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
447 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,
448 0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,0x56};
450 #ifndef OPENSSL_NO_AES
451 #define MAX_BLOCK_SIZE 128
453 #define MAX_BLOCK_SIZE 64
455 unsigned char DES_iv[8];
456 unsigned char iv[2*MAX_BLOCK_SIZE/8];
457 #ifndef OPENSSL_NO_DES
458 static DES_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};
459 static DES_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
460 static DES_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
461 DES_key_schedule sch;
462 DES_key_schedule sch2;
463 DES_key_schedule sch3;
465 #ifndef OPENSSL_NO_AES
466 AES_KEY aes_ks1, aes_ks2, aes_ks3;
468 #ifndef OPENSSL_NO_CAMELLIA
469 CAMELLIA_KEY camellia_ks1, camellia_ks2, camellia_ks3;
481 #define D_CBC_IDEA 10
482 #define D_CBC_SEED 11
486 #define D_CBC_CAST 15
487 #define D_CBC_128_AES 16
488 #define D_CBC_192_AES 17
489 #define D_CBC_256_AES 18
490 #define D_CBC_128_CML 19
491 #define D_CBC_192_CML 20
492 #define D_CBC_256_CML 21
496 #define D_WHIRLPOOL 25
497 #define D_IGE_128_AES 26
498 #define D_IGE_192_AES 27
499 #define D_IGE_256_AES 28
502 long c[ALGOR_NUM][SIZE_NUM];
504 #define D_PRIME_TRIAL_DIVISION 0
505 #define D_PRIME_TRIAL_DIVISION_RETRY 1
506 #define D_PRIME_COPRIME 2
507 long prime_c[PRIME_NUM];
534 #ifndef OPENSSL_NO_RSA
535 RSA *rsa_key[RSA_NUM];
536 long rsa_c[RSA_NUM][2];
537 static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,4096};
538 static unsigned char *rsa_data[RSA_NUM]=
539 {test512,test1024,test2048,test4096};
540 static int rsa_data_length[RSA_NUM]={
541 sizeof(test512),sizeof(test1024),
542 sizeof(test2048),sizeof(test4096)};
544 #ifndef OPENSSL_NO_DSA
545 DSA *dsa_key[DSA_NUM];
546 long dsa_c[DSA_NUM][2];
547 static unsigned int dsa_bits[DSA_NUM]={512,1024,2048};
549 #ifndef OPENSSL_NO_EC
550 /* We only test over the following curves as they are representative,
551 * To add tests over more curves, simply add the curve NID
552 * and curve name to the following arrays and increase the
553 * EC_NUM value accordingly.
555 static unsigned int test_curves[EC_NUM] =
559 NID_X9_62_prime192v1,
561 NID_X9_62_prime256v1,
576 static const char * test_curves_names[EC_NUM] =
597 static int test_curves_bits[EC_NUM] =
599 160, 192, 224, 256, 384, 521,
600 163, 233, 283, 409, 571,
601 163, 233, 283, 409, 571
606 #ifndef OPENSSL_NO_ECDSA
607 unsigned char ecdsasig[256];
608 unsigned int ecdsasiglen;
609 EC_KEY *ecdsa[EC_NUM];
610 long ecdsa_c[EC_NUM][2];
613 #ifndef OPENSSL_NO_ECDH
614 EC_KEY *ecdh_a[EC_NUM], *ecdh_b[EC_NUM];
615 unsigned char secret_a[MAX_ECDH_SIZE], secret_b[MAX_ECDH_SIZE];
616 int secret_size_a, secret_size_b;
619 long ecdh_c[EC_NUM][2];
622 int prime_doit[PRIME_NUM];
623 int rsa_doit[RSA_NUM];
624 int dsa_doit[DSA_NUM];
625 #ifndef OPENSSL_NO_ECDSA
626 int ecdsa_doit[EC_NUM];
628 #ifndef OPENSSL_NO_ECDH
629 int ecdh_doit[EC_NUM];
633 const EVP_CIPHER *evp_cipher=NULL;
634 const EVP_MD *evp_md=NULL;
645 memset(results, 0, sizeof(results));
646 #ifndef OPENSSL_NO_DSA
647 memset(dsa_key,0,sizeof(dsa_key));
649 #ifndef OPENSSL_NO_ECDSA
650 for (i=0; i<EC_NUM; i++) ecdsa[i] = NULL;
652 #ifndef OPENSSL_NO_ECDH
653 for (i=0; i<EC_NUM; i++)
662 if ((bio_err=BIO_new(BIO_s_file())) != NULL)
663 BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
665 if (!load_config(bio_err, NULL))
668 #ifndef OPENSSL_NO_RSA
669 memset(rsa_key,0,sizeof(rsa_key));
670 for (i=0; i<RSA_NUM; i++)
674 if ((buf=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
676 BIO_printf(bio_err,"out of memory\n");
679 if ((buf2=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
681 BIO_printf(bio_err,"out of memory\n");
685 memset(c,0,sizeof(c));
686 memset(DES_iv,0,sizeof(DES_iv));
687 memset(iv,0,sizeof(iv));
689 for (i=0; i<ALGOR_NUM; i++)
691 for (i=0; i<RSA_NUM; i++)
693 for (i=0; i<DSA_NUM; i++)
695 #ifndef OPENSSL_NO_ECDSA
696 for (i=0; i<EC_NUM; i++)
699 #ifndef OPENSSL_NO_ECDH
700 for (i=0; i<EC_NUM; i++)
710 if ((argc > 0) && (strcmp(*argv,"-elapsed") == 0))
713 j--; /* Otherwise, -elapsed gets confused with
716 else if ((argc > 0) && (strcmp(*argv,"-evp") == 0))
722 BIO_printf(bio_err,"no EVP given\n");
725 evp_cipher=EVP_get_cipherbyname(*argv);
728 evp_md=EVP_get_digestbyname(*argv);
730 if(!evp_cipher && !evp_md)
732 BIO_printf(bio_err,"%s is an unknown cipher or digest\n",*argv);
737 else if (argc > 0 && !strcmp(*argv,"-decrypt"))
740 j--; /* Otherwise, -elapsed gets confused with
743 #ifndef OPENSSL_NO_ENGINE
744 else if ((argc > 0) && (strcmp(*argv,"-engine") == 0))
750 BIO_printf(bio_err,"no engine given\n");
753 setup_engine(bio_err, *argv, 0);
754 /* j will be increased again further down. We just
755 don't want speed to confuse an engine with an
756 algorithm, especially when none is given (which
757 means all of them should be run) */
762 else if ((argc > 0) && (strcmp(*argv,"-multi") == 0))
768 BIO_printf(bio_err,"no multi count given\n");
774 BIO_printf(bio_err,"bad multi count\n");
777 j--; /* Otherwise, -mr gets confused with
781 else if (argc > 0 && !strcmp(*argv,"-mr"))
784 j--; /* Otherwise, -mr gets confused with
788 #ifndef OPENSSL_NO_MD2
789 if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1;
792 #ifndef OPENSSL_NO_MDC2
793 if (strcmp(*argv,"mdc2") == 0) doit[D_MDC2]=1;
796 #ifndef OPENSSL_NO_MD4
797 if (strcmp(*argv,"md4") == 0) doit[D_MD4]=1;
800 #ifndef OPENSSL_NO_MD5
801 if (strcmp(*argv,"md5") == 0) doit[D_MD5]=1;
804 #ifndef OPENSSL_NO_MD5
805 if (strcmp(*argv,"hmac") == 0) doit[D_HMAC]=1;
808 #ifndef OPENSSL_NO_SHA
809 if (strcmp(*argv,"sha1") == 0) doit[D_SHA1]=1;
811 if (strcmp(*argv,"sha") == 0) doit[D_SHA1]=1,
815 #ifndef OPENSSL_NO_SHA256
816 if (strcmp(*argv,"sha256") == 0) doit[D_SHA256]=1;
819 #ifndef OPENSSL_NO_SHA512
820 if (strcmp(*argv,"sha512") == 0) doit[D_SHA512]=1;
824 #ifndef OPENSSL_NO_WHIRLPOOL
825 if (strcmp(*argv,"whirlpool") == 0) doit[D_WHIRLPOOL]=1;
828 #ifndef OPENSSL_NO_RIPEMD
829 if (strcmp(*argv,"ripemd") == 0) doit[D_RMD160]=1;
831 if (strcmp(*argv,"rmd160") == 0) doit[D_RMD160]=1;
833 if (strcmp(*argv,"ripemd160") == 0) doit[D_RMD160]=1;
836 #ifndef OPENSSL_NO_RC4
837 if (strcmp(*argv,"rc4") == 0) doit[D_RC4]=1;
840 #ifndef OPENSSL_NO_DES
841 if (strcmp(*argv,"des-cbc") == 0) doit[D_CBC_DES]=1;
842 else if (strcmp(*argv,"des-ede3") == 0) doit[D_EDE3_DES]=1;
845 #ifndef OPENSSL_NO_AES
846 if (strcmp(*argv,"aes-128-cbc") == 0) doit[D_CBC_128_AES]=1;
847 else if (strcmp(*argv,"aes-192-cbc") == 0) doit[D_CBC_192_AES]=1;
848 else if (strcmp(*argv,"aes-256-cbc") == 0) doit[D_CBC_256_AES]=1;
849 else if (strcmp(*argv,"aes-128-ige") == 0) doit[D_IGE_128_AES]=1;
850 else if (strcmp(*argv,"aes-192-ige") == 0) doit[D_IGE_192_AES]=1;
851 else if (strcmp(*argv,"aes-256-ige") == 0) doit[D_IGE_256_AES]=1;
854 #ifndef OPENSSL_NO_CAMELLIA
855 if (strcmp(*argv,"camellia-128-cbc") == 0) doit[D_CBC_128_CML]=1;
856 else if (strcmp(*argv,"camellia-192-cbc") == 0) doit[D_CBC_192_CML]=1;
857 else if (strcmp(*argv,"camellia-256-cbc") == 0) doit[D_CBC_256_CML]=1;
860 #ifndef OPENSSL_NO_RSA
861 #if 0 /* was: #ifdef RSAref */
862 if (strcmp(*argv,"rsaref") == 0)
864 RSA_set_default_openssl_method(RSA_PKCS1_RSAref());
870 if (strcmp(*argv,"openssl") == 0)
872 RSA_set_default_method(RSA_PKCS1_SSLeay());
877 #endif /* !OPENSSL_NO_RSA */
878 if (strcmp(*argv,"dsa512") == 0) dsa_doit[R_DSA_512]=2;
879 else if (strcmp(*argv,"dsa1024") == 0) dsa_doit[R_DSA_1024]=2;
880 else if (strcmp(*argv,"dsa2048") == 0) dsa_doit[R_DSA_2048]=2;
881 else if (strcmp(*argv,"rsa512") == 0) rsa_doit[R_RSA_512]=2;
882 else if (strcmp(*argv,"rsa1024") == 0) rsa_doit[R_RSA_1024]=2;
883 else if (strcmp(*argv,"rsa2048") == 0) rsa_doit[R_RSA_2048]=2;
884 else if (strcmp(*argv,"rsa4096") == 0) rsa_doit[R_RSA_4096]=2;
886 #ifndef OPENSSL_NO_RC2
887 if (strcmp(*argv,"rc2-cbc") == 0) doit[D_CBC_RC2]=1;
888 else if (strcmp(*argv,"rc2") == 0) doit[D_CBC_RC2]=1;
891 #ifndef OPENSSL_NO_RC5
892 if (strcmp(*argv,"rc5-cbc") == 0) doit[D_CBC_RC5]=1;
893 else if (strcmp(*argv,"rc5") == 0) doit[D_CBC_RC5]=1;
896 #ifndef OPENSSL_NO_IDEA
897 if (strcmp(*argv,"idea-cbc") == 0) doit[D_CBC_IDEA]=1;
898 else if (strcmp(*argv,"idea") == 0) doit[D_CBC_IDEA]=1;
901 #ifndef OPENSSL_NO_SEED
902 if (strcmp(*argv,"seed-cbc") == 0) doit[D_CBC_SEED]=1;
903 else if (strcmp(*argv,"seed") == 0) doit[D_CBC_SEED]=1;
906 #ifndef OPENSSL_NO_BF
907 if (strcmp(*argv,"bf-cbc") == 0) doit[D_CBC_BF]=1;
908 else if (strcmp(*argv,"blowfish") == 0) doit[D_CBC_BF]=1;
909 else if (strcmp(*argv,"bf") == 0) doit[D_CBC_BF]=1;
912 #ifndef OPENSSL_NO_CAST
913 if (strcmp(*argv,"cast-cbc") == 0) doit[D_CBC_CAST]=1;
914 else if (strcmp(*argv,"cast") == 0) doit[D_CBC_CAST]=1;
915 else if (strcmp(*argv,"cast5") == 0) doit[D_CBC_CAST]=1;
918 #ifndef OPENSSL_NO_DES
919 if (strcmp(*argv,"des") == 0)
926 #ifndef OPENSSL_NO_AES
927 if (strcmp(*argv,"aes") == 0)
929 doit[D_CBC_128_AES]=1;
930 doit[D_CBC_192_AES]=1;
931 doit[D_CBC_256_AES]=1;
933 else if (strcmp(*argv,"ghash") == 0)
939 #ifndef OPENSSL_NO_CAMELLIA
940 if (strcmp(*argv,"camellia") == 0)
942 doit[D_CBC_128_CML]=1;
943 doit[D_CBC_192_CML]=1;
944 doit[D_CBC_256_CML]=1;
948 #ifndef OPENSSL_NO_RSA
949 if (strcmp(*argv,"rsa") == 0)
951 rsa_doit[R_RSA_512]=1;
952 rsa_doit[R_RSA_1024]=1;
953 rsa_doit[R_RSA_2048]=1;
954 rsa_doit[R_RSA_4096]=1;
958 #ifndef OPENSSL_NO_DSA
959 if (strcmp(*argv,"dsa") == 0)
961 dsa_doit[R_DSA_512]=1;
962 dsa_doit[R_DSA_1024]=1;
963 dsa_doit[R_DSA_2048]=1;
967 #ifndef OPENSSL_NO_ECDSA
968 if (strcmp(*argv,"ecdsap160") == 0) ecdsa_doit[R_EC_P160]=2;
969 else if (strcmp(*argv,"ecdsap192") == 0) ecdsa_doit[R_EC_P192]=2;
970 else if (strcmp(*argv,"ecdsap224") == 0) ecdsa_doit[R_EC_P224]=2;
971 else if (strcmp(*argv,"ecdsap256") == 0) ecdsa_doit[R_EC_P256]=2;
972 else if (strcmp(*argv,"ecdsap384") == 0) ecdsa_doit[R_EC_P384]=2;
973 else if (strcmp(*argv,"ecdsap521") == 0) ecdsa_doit[R_EC_P521]=2;
974 else if (strcmp(*argv,"ecdsak163") == 0) ecdsa_doit[R_EC_K163]=2;
975 else if (strcmp(*argv,"ecdsak233") == 0) ecdsa_doit[R_EC_K233]=2;
976 else if (strcmp(*argv,"ecdsak283") == 0) ecdsa_doit[R_EC_K283]=2;
977 else if (strcmp(*argv,"ecdsak409") == 0) ecdsa_doit[R_EC_K409]=2;
978 else if (strcmp(*argv,"ecdsak571") == 0) ecdsa_doit[R_EC_K571]=2;
979 else if (strcmp(*argv,"ecdsab163") == 0) ecdsa_doit[R_EC_B163]=2;
980 else if (strcmp(*argv,"ecdsab233") == 0) ecdsa_doit[R_EC_B233]=2;
981 else if (strcmp(*argv,"ecdsab283") == 0) ecdsa_doit[R_EC_B283]=2;
982 else if (strcmp(*argv,"ecdsab409") == 0) ecdsa_doit[R_EC_B409]=2;
983 else if (strcmp(*argv,"ecdsab571") == 0) ecdsa_doit[R_EC_B571]=2;
984 else if (strcmp(*argv,"ecdsa") == 0)
986 for (i=0; i < EC_NUM; i++)
991 #ifndef OPENSSL_NO_ECDH
992 if (strcmp(*argv,"ecdhp160") == 0) ecdh_doit[R_EC_P160]=2;
993 else if (strcmp(*argv,"ecdhp192") == 0) ecdh_doit[R_EC_P192]=2;
994 else if (strcmp(*argv,"ecdhp224") == 0) ecdh_doit[R_EC_P224]=2;
995 else if (strcmp(*argv,"ecdhp256") == 0) ecdh_doit[R_EC_P256]=2;
996 else if (strcmp(*argv,"ecdhp384") == 0) ecdh_doit[R_EC_P384]=2;
997 else if (strcmp(*argv,"ecdhp521") == 0) ecdh_doit[R_EC_P521]=2;
998 else if (strcmp(*argv,"ecdhk163") == 0) ecdh_doit[R_EC_K163]=2;
999 else if (strcmp(*argv,"ecdhk233") == 0) ecdh_doit[R_EC_K233]=2;
1000 else if (strcmp(*argv,"ecdhk283") == 0) ecdh_doit[R_EC_K283]=2;
1001 else if (strcmp(*argv,"ecdhk409") == 0) ecdh_doit[R_EC_K409]=2;
1002 else if (strcmp(*argv,"ecdhk571") == 0) ecdh_doit[R_EC_K571]=2;
1003 else if (strcmp(*argv,"ecdhb163") == 0) ecdh_doit[R_EC_B163]=2;
1004 else if (strcmp(*argv,"ecdhb233") == 0) ecdh_doit[R_EC_B233]=2;
1005 else if (strcmp(*argv,"ecdhb283") == 0) ecdh_doit[R_EC_B283]=2;
1006 else if (strcmp(*argv,"ecdhb409") == 0) ecdh_doit[R_EC_B409]=2;
1007 else if (strcmp(*argv,"ecdhb571") == 0) ecdh_doit[R_EC_B571]=2;
1008 else if (strcmp(*argv,"ecdh") == 0)
1010 for (i=0; i < EC_NUM; i++)
1015 if (strcmp(*argv,"prime-trial-division") == 0)
1016 prime_doit[D_PRIME_TRIAL_DIVISION] = 1;
1017 else if (strcmp(*argv,"prime-trial-division-retry") == 0)
1018 prime_doit[D_PRIME_TRIAL_DIVISION_RETRY] = 1;
1019 else if (strcmp(*argv,"prime-coprime") == 0)
1020 prime_doit[D_PRIME_COPRIME] = 1;
1023 BIO_printf(bio_err,"Error: bad option or value\n");
1024 BIO_printf(bio_err,"\n");
1025 BIO_printf(bio_err,"Available values:\n");
1026 #ifndef OPENSSL_NO_MD2
1027 BIO_printf(bio_err,"md2 ");
1029 #ifndef OPENSSL_NO_MDC2
1030 BIO_printf(bio_err,"mdc2 ");
1032 #ifndef OPENSSL_NO_MD4
1033 BIO_printf(bio_err,"md4 ");
1035 #ifndef OPENSSL_NO_MD5
1036 BIO_printf(bio_err,"md5 ");
1037 #ifndef OPENSSL_NO_HMAC
1038 BIO_printf(bio_err,"hmac ");
1041 #ifndef OPENSSL_NO_SHA1
1042 BIO_printf(bio_err,"sha1 ");
1044 #ifndef OPENSSL_NO_SHA256
1045 BIO_printf(bio_err,"sha256 ");
1047 #ifndef OPENSSL_NO_SHA512
1048 BIO_printf(bio_err,"sha512 ");
1050 #ifndef OPENSSL_NO_WHIRLPOOL
1051 BIO_printf(bio_err,"whirlpool");
1053 #ifndef OPENSSL_NO_RIPEMD160
1054 BIO_printf(bio_err,"rmd160");
1056 #if !defined(OPENSSL_NO_MD2) || !defined(OPENSSL_NO_MDC2) || \
1057 !defined(OPENSSL_NO_MD4) || !defined(OPENSSL_NO_MD5) || \
1058 !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160) || \
1059 !defined(OPENSSL_NO_WHIRLPOOL)
1060 BIO_printf(bio_err,"\n");
1063 #ifndef OPENSSL_NO_IDEA
1064 BIO_printf(bio_err,"idea-cbc ");
1066 #ifndef OPENSSL_NO_SEED
1067 BIO_printf(bio_err,"seed-cbc ");
1069 #ifndef OPENSSL_NO_RC2
1070 BIO_printf(bio_err,"rc2-cbc ");
1072 #ifndef OPENSSL_NO_RC5
1073 BIO_printf(bio_err,"rc5-cbc ");
1075 #ifndef OPENSSL_NO_BF
1076 BIO_printf(bio_err,"bf-cbc");
1078 #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || !defined(OPENSSL_NO_RC2) || \
1079 !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_RC5)
1080 BIO_printf(bio_err,"\n");
1082 #ifndef OPENSSL_NO_DES
1083 BIO_printf(bio_err,"des-cbc des-ede3 ");
1085 #ifndef OPENSSL_NO_AES
1086 BIO_printf(bio_err,"aes-128-cbc aes-192-cbc aes-256-cbc ");
1087 BIO_printf(bio_err,"aes-128-ige aes-192-ige aes-256-ige ");
1089 #ifndef OPENSSL_NO_CAMELLIA
1090 BIO_printf(bio_err,"\n");
1091 BIO_printf(bio_err,"camellia-128-cbc camellia-192-cbc camellia-256-cbc ");
1093 #ifndef OPENSSL_NO_RC4
1094 BIO_printf(bio_err,"rc4");
1096 BIO_printf(bio_err,"\n");
1098 #ifndef OPENSSL_NO_RSA
1099 BIO_printf(bio_err,"rsa512 rsa1024 rsa2048 rsa4096\n");
1102 #ifndef OPENSSL_NO_DSA
1103 BIO_printf(bio_err,"dsa512 dsa1024 dsa2048\n");
1105 #ifndef OPENSSL_NO_ECDSA
1106 BIO_printf(bio_err,"ecdsap160 ecdsap192 ecdsap224 ecdsap256 ecdsap384 ecdsap521\n");
1107 BIO_printf(bio_err,"ecdsak163 ecdsak233 ecdsak283 ecdsak409 ecdsak571\n");
1108 BIO_printf(bio_err,"ecdsab163 ecdsab233 ecdsab283 ecdsab409 ecdsab571\n");
1109 BIO_printf(bio_err,"ecdsa\n");
1111 #ifndef OPENSSL_NO_ECDH
1112 BIO_printf(bio_err,"ecdhp160 ecdhp192 ecdhp224 ecdhp256 ecdhp384 ecdhp521\n");
1113 BIO_printf(bio_err,"ecdhk163 ecdhk233 ecdhk283 ecdhk409 ecdhk571\n");
1114 BIO_printf(bio_err,"ecdhb163 ecdhb233 ecdhb283 ecdhb409 ecdhb571\n");
1115 BIO_printf(bio_err,"ecdh\n");
1118 #ifndef OPENSSL_NO_IDEA
1119 BIO_printf(bio_err,"idea ");
1121 #ifndef OPENSSL_NO_SEED
1122 BIO_printf(bio_err,"seed ");
1124 #ifndef OPENSSL_NO_RC2
1125 BIO_printf(bio_err,"rc2 ");
1127 #ifndef OPENSSL_NO_DES
1128 BIO_printf(bio_err,"des ");
1130 #ifndef OPENSSL_NO_AES
1131 BIO_printf(bio_err,"aes ");
1133 #ifndef OPENSSL_NO_CAMELLIA
1134 BIO_printf(bio_err,"camellia ");
1136 #ifndef OPENSSL_NO_RSA
1137 BIO_printf(bio_err,"rsa ");
1139 #ifndef OPENSSL_NO_BF
1140 BIO_printf(bio_err,"blowfish");
1142 #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || \
1143 !defined(OPENSSL_NO_RC2) || !defined(OPENSSL_NO_DES) || \
1144 !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_BF) || \
1145 !defined(OPENSSL_NO_AES) || !defined(OPENSSL_NO_CAMELLIA)
1146 BIO_printf(bio_err,"\n");
1148 BIO_printf(bio_err,"prime-trial-division prime-coprime\n");
1150 BIO_printf(bio_err,"\n");
1151 BIO_printf(bio_err,"Available options:\n");
1152 #if defined(TIMES) || defined(USE_TOD)
1153 BIO_printf(bio_err,"-elapsed measure time in real time instead of CPU user time.\n");
1155 #ifndef OPENSSL_NO_ENGINE
1156 BIO_printf(bio_err,"-engine e use engine e, possibly a hardware device.\n");
1158 BIO_printf(bio_err,"-evp e use EVP e.\n");
1159 BIO_printf(bio_err,"-decrypt time decryption instead of encryption (only EVP).\n");
1160 BIO_printf(bio_err,"-mr produce machine readable output.\n");
1162 BIO_printf(bio_err,"-multi n run n benchmarks in parallel.\n");
1172 if(multi && do_multi(multi))
1178 for (i=0; i<ALGOR_NUM; i++)
1183 for (i=0; i<RSA_NUM; i++)
1185 for (i=0; i<DSA_NUM; i++)
1187 #ifndef OPENSSL_NO_ECDSA
1188 for (i=0; i<EC_NUM; i++)
1191 #ifndef OPENSSL_NO_ECDH
1192 for (i=0; i<EC_NUM; i++)
1196 for (i=0; i<ALGOR_NUM; i++)
1197 if (doit[i]) pr_header++;
1199 if (usertime == 0 && !mr)
1200 BIO_printf(bio_err,"You have chosen to measure elapsed time instead of user CPU time.\n");
1202 #ifndef OPENSSL_NO_RSA
1203 for (i=0; i<RSA_NUM; i++)
1205 const unsigned char *p;
1208 rsa_key[i]=d2i_RSAPrivateKey(NULL,&p,rsa_data_length[i]);
1209 if (rsa_key[i] == NULL)
1211 BIO_printf(bio_err,"internal error loading RSA key number %d\n",i);
1217 BIO_printf(bio_err,mr ? "+RK:%d:"
1218 : "Loaded RSA key, %d bit modulus and e= 0x",
1219 BN_num_bits(rsa_key[i]->n));
1220 BN_print(bio_err,rsa_key[i]->e);
1221 BIO_printf(bio_err,"\n");
1227 #ifndef OPENSSL_NO_DSA
1228 dsa_key[0]=get_dsa512();
1229 dsa_key[1]=get_dsa1024();
1230 dsa_key[2]=get_dsa2048();
1233 #ifndef OPENSSL_NO_DES
1234 DES_set_key_unchecked(&key,&sch);
1235 DES_set_key_unchecked(&key2,&sch2);
1236 DES_set_key_unchecked(&key3,&sch3);
1238 #ifndef OPENSSL_NO_AES
1239 AES_set_encrypt_key(key16,128,&aes_ks1);
1240 AES_set_encrypt_key(key24,192,&aes_ks2);
1241 AES_set_encrypt_key(key32,256,&aes_ks3);
1243 #ifndef OPENSSL_NO_CAMELLIA
1244 Camellia_set_key(key16,128,&camellia_ks1);
1245 Camellia_set_key(ckey24,192,&camellia_ks2);
1246 Camellia_set_key(ckey32,256,&camellia_ks3);
1248 #ifndef OPENSSL_NO_IDEA
1249 idea_set_encrypt_key(key16,&idea_ks);
1251 #ifndef OPENSSL_NO_SEED
1252 SEED_set_key(key16,&seed_ks);
1254 #ifndef OPENSSL_NO_RC4
1255 RC4_set_key(&rc4_ks,16,key16);
1257 #ifndef OPENSSL_NO_RC2
1258 RC2_set_key(&rc2_ks,16,key16,128);
1260 #ifndef OPENSSL_NO_RC5
1261 RC5_32_set_key(&rc5_ks,16,key16,12);
1263 #ifndef OPENSSL_NO_BF
1264 BF_set_key(&bf_ks,16,key16);
1266 #ifndef OPENSSL_NO_CAST
1267 CAST_set_key(&cast_ks,16,key16);
1269 #ifndef OPENSSL_NO_RSA
1270 memset(rsa_c,0,sizeof(rsa_c));
1273 #ifndef OPENSSL_NO_DES
1274 BIO_printf(bio_err,"First we calculate the approximate speed ...\n");
1280 for (it=count; it; it--)
1281 DES_ecb_encrypt((DES_cblock *)buf,
1287 c[D_MD2][0]=count/10;
1288 c[D_MDC2][0]=count/10;
1293 c[D_RMD160][0]=count;
1294 c[D_RC4][0]=count*5;
1295 c[D_CBC_DES][0]=count;
1296 c[D_EDE3_DES][0]=count/3;
1297 c[D_CBC_IDEA][0]=count;
1298 c[D_CBC_SEED][0]=count;
1299 c[D_CBC_RC2][0]=count;
1300 c[D_CBC_RC5][0]=count;
1301 c[D_CBC_BF][0]=count;
1302 c[D_CBC_CAST][0]=count;
1303 c[D_CBC_128_AES][0]=count;
1304 c[D_CBC_192_AES][0]=count;
1305 c[D_CBC_256_AES][0]=count;
1306 c[D_CBC_128_CML][0]=count;
1307 c[D_CBC_192_CML][0]=count;
1308 c[D_CBC_256_CML][0]=count;
1309 c[D_SHA256][0]=count;
1310 c[D_SHA512][0]=count;
1311 c[D_WHIRLPOOL][0]=count;
1312 c[D_IGE_128_AES][0]=count;
1313 c[D_IGE_192_AES][0]=count;
1314 c[D_IGE_256_AES][0]=count;
1315 c[D_GHASH][0]=count;
1317 for (i=1; i<SIZE_NUM; i++)
1321 l0=(long)lengths[0];
1322 l1=(long)lengths[i];
1324 c[D_MD2][i]=c[D_MD2][0]*4*l0/l1;
1325 c[D_MDC2][i]=c[D_MDC2][0]*4*l0/l1;
1326 c[D_MD4][i]=c[D_MD4][0]*4*l0/l1;
1327 c[D_MD5][i]=c[D_MD5][0]*4*l0/l1;
1328 c[D_HMAC][i]=c[D_HMAC][0]*4*l0/l1;
1329 c[D_SHA1][i]=c[D_SHA1][0]*4*l0/l1;
1330 c[D_RMD160][i]=c[D_RMD160][0]*4*l0/l1;
1331 c[D_SHA256][i]=c[D_SHA256][0]*4*l0/l1;
1332 c[D_SHA512][i]=c[D_SHA512][0]*4*l0/l1;
1333 c[D_WHIRLPOOL][i]=c[D_WHIRLPOOL][0]*4*l0/l1;
1335 l0=(long)lengths[i-1];
1337 c[D_RC4][i]=c[D_RC4][i-1]*l0/l1;
1338 c[D_CBC_DES][i]=c[D_CBC_DES][i-1]*l0/l1;
1339 c[D_EDE3_DES][i]=c[D_EDE3_DES][i-1]*l0/l1;
1340 c[D_CBC_IDEA][i]=c[D_CBC_IDEA][i-1]*l0/l1;
1341 c[D_CBC_SEED][i]=c[D_CBC_SEED][i-1]*l0/l1;
1342 c[D_CBC_RC2][i]=c[D_CBC_RC2][i-1]*l0/l1;
1343 c[D_CBC_RC5][i]=c[D_CBC_RC5][i-1]*l0/l1;
1344 c[D_CBC_BF][i]=c[D_CBC_BF][i-1]*l0/l1;
1345 c[D_CBC_CAST][i]=c[D_CBC_CAST][i-1]*l0/l1;
1346 c[D_CBC_128_AES][i]=c[D_CBC_128_AES][i-1]*l0/l1;
1347 c[D_CBC_192_AES][i]=c[D_CBC_192_AES][i-1]*l0/l1;
1348 c[D_CBC_256_AES][i]=c[D_CBC_256_AES][i-1]*l0/l1;
1349 c[D_CBC_128_CML][i]=c[D_CBC_128_CML][i-1]*l0/l1;
1350 c[D_CBC_192_CML][i]=c[D_CBC_192_CML][i-1]*l0/l1;
1351 c[D_CBC_256_CML][i]=c[D_CBC_256_CML][i-1]*l0/l1;
1352 c[D_IGE_128_AES][i]=c[D_IGE_128_AES][i-1]*l0/l1;
1353 c[D_IGE_192_AES][i]=c[D_IGE_192_AES][i-1]*l0/l1;
1354 c[D_IGE_256_AES][i]=c[D_IGE_256_AES][i-1]*l0/l1;
1357 prime_c[D_PRIME_TRIAL_DIVISION]=count;
1358 prime_c[D_PRIME_TRIAL_DIVISION_RETRY]=count;
1359 prime_c[D_PRIME_COPRIME]=count;
1361 #ifndef OPENSSL_NO_RSA
1362 rsa_c[R_RSA_512][0]=count/2000;
1363 rsa_c[R_RSA_512][1]=count/400;
1364 for (i=1; i<RSA_NUM; i++)
1366 rsa_c[i][0]=rsa_c[i-1][0]/8;
1367 rsa_c[i][1]=rsa_c[i-1][1]/4;
1368 if ((rsa_doit[i] <= 1) && (rsa_c[i][0] == 0))
1372 if (rsa_c[i][0] == 0)
1381 #ifndef OPENSSL_NO_DSA
1382 dsa_c[R_DSA_512][0]=count/1000;
1383 dsa_c[R_DSA_512][1]=count/1000/2;
1384 for (i=1; i<DSA_NUM; i++)
1386 dsa_c[i][0]=dsa_c[i-1][0]/4;
1387 dsa_c[i][1]=dsa_c[i-1][1]/4;
1388 if ((dsa_doit[i] <= 1) && (dsa_c[i][0] == 0))
1401 #ifndef OPENSSL_NO_ECDSA
1402 ecdsa_c[R_EC_P160][0]=count/1000;
1403 ecdsa_c[R_EC_P160][1]=count/1000/2;
1404 for (i=R_EC_P192; i<=R_EC_P521; i++)
1406 ecdsa_c[i][0]=ecdsa_c[i-1][0]/2;
1407 ecdsa_c[i][1]=ecdsa_c[i-1][1]/2;
1408 if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
1412 if (ecdsa_c[i] == 0)
1419 ecdsa_c[R_EC_K163][0]=count/1000;
1420 ecdsa_c[R_EC_K163][1]=count/1000/2;
1421 for (i=R_EC_K233; i<=R_EC_K571; i++)
1423 ecdsa_c[i][0]=ecdsa_c[i-1][0]/2;
1424 ecdsa_c[i][1]=ecdsa_c[i-1][1]/2;
1425 if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
1429 if (ecdsa_c[i] == 0)
1436 ecdsa_c[R_EC_B163][0]=count/1000;
1437 ecdsa_c[R_EC_B163][1]=count/1000/2;
1438 for (i=R_EC_B233; i<=R_EC_B571; i++)
1440 ecdsa_c[i][0]=ecdsa_c[i-1][0]/2;
1441 ecdsa_c[i][1]=ecdsa_c[i-1][1]/2;
1442 if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
1446 if (ecdsa_c[i] == 0)
1455 #ifndef OPENSSL_NO_ECDH
1456 ecdh_c[R_EC_P160][0]=count/1000;
1457 ecdh_c[R_EC_P160][1]=count/1000;
1458 for (i=R_EC_P192; i<=R_EC_P521; i++)
1460 ecdh_c[i][0]=ecdh_c[i-1][0]/2;
1461 ecdh_c[i][1]=ecdh_c[i-1][1]/2;
1462 if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
1473 ecdh_c[R_EC_K163][0]=count/1000;
1474 ecdh_c[R_EC_K163][1]=count/1000;
1475 for (i=R_EC_K233; i<=R_EC_K571; i++)
1477 ecdh_c[i][0]=ecdh_c[i-1][0]/2;
1478 ecdh_c[i][1]=ecdh_c[i-1][1]/2;
1479 if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
1490 ecdh_c[R_EC_B163][0]=count/1000;
1491 ecdh_c[R_EC_B163][1]=count/1000;
1492 for (i=R_EC_B233; i<=R_EC_B571; i++)
1494 ecdh_c[i][0]=ecdh_c[i-1][0]/2;
1495 ecdh_c[i][1]=ecdh_c[i-1][1]/2;
1496 if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
1509 #define COND(d) (count < (d))
1510 #define COUNT(d) (d)
1512 /* not worth fixing */
1513 # error "You cannot disable DES on systems without SIGALRM."
1514 #endif /* OPENSSL_NO_DES */
1516 #define COND(c) (run && count<0x7fffffff)
1517 #define COUNT(d) (count)
1519 signal(SIGALRM,sig_done);
1521 #endif /* SIGALRM */
1523 #ifndef OPENSSL_NO_MD2
1526 for (j=0; j<SIZE_NUM; j++)
1528 print_message(names[D_MD2],c[D_MD2][j],lengths[j]);
1530 for (count=0,run=1; COND(c[D_MD2][j]); count++)
1531 EVP_Digest(buf,(unsigned long)lengths[j],&(md2[0]),NULL,EVP_md2(),NULL);
1533 print_result(D_MD2,j,count,d);
1537 #ifndef OPENSSL_NO_MDC2
1540 for (j=0; j<SIZE_NUM; j++)
1542 print_message(names[D_MDC2],c[D_MDC2][j],lengths[j]);
1544 for (count=0,run=1; COND(c[D_MDC2][j]); count++)
1545 EVP_Digest(buf,(unsigned long)lengths[j],&(mdc2[0]),NULL,EVP_mdc2(),NULL);
1547 print_result(D_MDC2,j,count,d);
1552 #ifndef OPENSSL_NO_MD4
1555 for (j=0; j<SIZE_NUM; j++)
1557 print_message(names[D_MD4],c[D_MD4][j],lengths[j]);
1559 for (count=0,run=1; COND(c[D_MD4][j]); count++)
1560 EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md4[0]),NULL,EVP_md4(),NULL);
1562 print_result(D_MD4,j,count,d);
1567 #ifndef OPENSSL_NO_MD5
1570 for (j=0; j<SIZE_NUM; j++)
1572 print_message(names[D_MD5],c[D_MD5][j],lengths[j]);
1574 for (count=0,run=1; COND(c[D_MD5][j]); count++)
1575 MD5(buf,lengths[j],md5);
1577 print_result(D_MD5,j,count,d);
1582 #if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_HMAC)
1587 HMAC_CTX_init(&hctx);
1588 HMAC_Init_ex(&hctx,(unsigned char *)"This is a key...",
1589 16,EVP_md5(), NULL);
1591 for (j=0; j<SIZE_NUM; j++)
1593 print_message(names[D_HMAC],c[D_HMAC][j],lengths[j]);
1595 for (count=0,run=1; COND(c[D_HMAC][j]); count++)
1597 HMAC_Init_ex(&hctx,NULL,0,NULL,NULL);
1598 HMAC_Update(&hctx,buf,lengths[j]);
1599 HMAC_Final(&hctx,&(hmac[0]),NULL);
1602 print_result(D_HMAC,j,count,d);
1604 HMAC_CTX_cleanup(&hctx);
1607 #ifndef OPENSSL_NO_SHA
1610 for (j=0; j<SIZE_NUM; j++)
1612 print_message(names[D_SHA1],c[D_SHA1][j],lengths[j]);
1614 for (count=0,run=1; COND(c[D_SHA1][j]); count++)
1616 EVP_Digest(buf,(unsigned long)lengths[j],&(sha[0]),NULL,EVP_sha1(),NULL);
1618 SHA1(buf,lengths[j],sha);
1621 print_result(D_SHA1,j,count,d);
1625 #ifndef OPENSSL_NO_SHA256
1628 for (j=0; j<SIZE_NUM; j++)
1630 print_message(names[D_SHA256],c[D_SHA256][j],lengths[j]);
1632 for (count=0,run=1; COND(c[D_SHA256][j]); count++)
1633 SHA256(buf,lengths[j],sha256);
1635 print_result(D_SHA256,j,count,d);
1640 #ifndef OPENSSL_NO_SHA512
1643 for (j=0; j<SIZE_NUM; j++)
1645 print_message(names[D_SHA512],c[D_SHA512][j],lengths[j]);
1647 for (count=0,run=1; COND(c[D_SHA512][j]); count++)
1648 SHA512(buf,lengths[j],sha512);
1650 print_result(D_SHA512,j,count,d);
1656 #ifndef OPENSSL_NO_WHIRLPOOL
1657 if (doit[D_WHIRLPOOL])
1659 for (j=0; j<SIZE_NUM; j++)
1661 print_message(names[D_WHIRLPOOL],c[D_WHIRLPOOL][j],lengths[j]);
1663 for (count=0,run=1; COND(c[D_WHIRLPOOL][j]); count++)
1664 WHIRLPOOL(buf,lengths[j],whirlpool);
1666 print_result(D_WHIRLPOOL,j,count,d);
1671 #ifndef OPENSSL_NO_RIPEMD
1674 for (j=0; j<SIZE_NUM; j++)
1676 print_message(names[D_RMD160],c[D_RMD160][j],lengths[j]);
1678 for (count=0,run=1; COND(c[D_RMD160][j]); count++)
1679 EVP_Digest(buf,(unsigned long)lengths[j],&(rmd160[0]),NULL,EVP_ripemd160(),NULL);
1681 print_result(D_RMD160,j,count,d);
1685 #ifndef OPENSSL_NO_RC4
1688 for (j=0; j<SIZE_NUM; j++)
1690 print_message(names[D_RC4],c[D_RC4][j],lengths[j]);
1692 for (count=0,run=1; COND(c[D_RC4][j]); count++)
1693 RC4(&rc4_ks,(unsigned int)lengths[j],
1696 print_result(D_RC4,j,count,d);
1700 #ifndef OPENSSL_NO_DES
1701 if (doit[D_CBC_DES])
1703 for (j=0; j<SIZE_NUM; j++)
1705 print_message(names[D_CBC_DES],c[D_CBC_DES][j],lengths[j]);
1707 for (count=0,run=1; COND(c[D_CBC_DES][j]); count++)
1708 DES_ncbc_encrypt(buf,buf,lengths[j],&sch,
1709 &DES_iv,DES_ENCRYPT);
1711 print_result(D_CBC_DES,j,count,d);
1715 if (doit[D_EDE3_DES])
1717 for (j=0; j<SIZE_NUM; j++)
1719 print_message(names[D_EDE3_DES],c[D_EDE3_DES][j],lengths[j]);
1721 for (count=0,run=1; COND(c[D_EDE3_DES][j]); count++)
1722 DES_ede3_cbc_encrypt(buf,buf,lengths[j],
1724 &DES_iv,DES_ENCRYPT);
1726 print_result(D_EDE3_DES,j,count,d);
1730 #ifndef OPENSSL_NO_AES
1731 if (doit[D_CBC_128_AES])
1733 for (j=0; j<SIZE_NUM; j++)
1735 print_message(names[D_CBC_128_AES],c[D_CBC_128_AES][j],lengths[j]);
1737 for (count=0,run=1; COND(c[D_CBC_128_AES][j]); count++)
1738 AES_cbc_encrypt(buf,buf,
1739 (unsigned long)lengths[j],&aes_ks1,
1742 print_result(D_CBC_128_AES,j,count,d);
1745 if (doit[D_CBC_192_AES])
1747 for (j=0; j<SIZE_NUM; j++)
1749 print_message(names[D_CBC_192_AES],c[D_CBC_192_AES][j],lengths[j]);
1751 for (count=0,run=1; COND(c[D_CBC_192_AES][j]); count++)
1752 AES_cbc_encrypt(buf,buf,
1753 (unsigned long)lengths[j],&aes_ks2,
1756 print_result(D_CBC_192_AES,j,count,d);
1759 if (doit[D_CBC_256_AES])
1761 for (j=0; j<SIZE_NUM; j++)
1763 print_message(names[D_CBC_256_AES],c[D_CBC_256_AES][j],lengths[j]);
1765 for (count=0,run=1; COND(c[D_CBC_256_AES][j]); count++)
1766 AES_cbc_encrypt(buf,buf,
1767 (unsigned long)lengths[j],&aes_ks3,
1770 print_result(D_CBC_256_AES,j,count,d);
1774 if (doit[D_IGE_128_AES])
1776 for (j=0; j<SIZE_NUM; j++)
1778 print_message(names[D_IGE_128_AES],c[D_IGE_128_AES][j],lengths[j]);
1780 for (count=0,run=1; COND(c[D_IGE_128_AES][j]); count++)
1781 AES_ige_encrypt(buf,buf2,
1782 (unsigned long)lengths[j],&aes_ks1,
1785 print_result(D_IGE_128_AES,j,count,d);
1788 if (doit[D_IGE_192_AES])
1790 for (j=0; j<SIZE_NUM; j++)
1792 print_message(names[D_IGE_192_AES],c[D_IGE_192_AES][j],lengths[j]);
1794 for (count=0,run=1; COND(c[D_IGE_192_AES][j]); count++)
1795 AES_ige_encrypt(buf,buf2,
1796 (unsigned long)lengths[j],&aes_ks2,
1799 print_result(D_IGE_192_AES,j,count,d);
1802 if (doit[D_IGE_256_AES])
1804 for (j=0; j<SIZE_NUM; j++)
1806 print_message(names[D_IGE_256_AES],c[D_IGE_256_AES][j],lengths[j]);
1808 for (count=0,run=1; COND(c[D_IGE_256_AES][j]); count++)
1809 AES_ige_encrypt(buf,buf2,
1810 (unsigned long)lengths[j],&aes_ks3,
1813 print_result(D_IGE_256_AES,j,count,d);
1818 GCM128_CONTEXT *ctx = CRYPTO_gcm128_new(&aes_ks1,(block128_f)AES_encrypt);
1819 CRYPTO_gcm128_setiv (ctx,(unsigned char *)"0123456789ab",12);
1821 for (j=0; j<SIZE_NUM; j++)
1823 print_message(names[D_GHASH],c[D_GHASH][j],lengths[j]);
1825 for (count=0,run=1; COND(c[D_GHASH][j]); count++)
1826 CRYPTO_gcm128_aad(ctx,buf,lengths[j]);
1828 print_result(D_GHASH,j,count,d);
1830 CRYPTO_gcm128_release(ctx);
1834 #ifndef OPENSSL_NO_CAMELLIA
1835 if (doit[D_CBC_128_CML])
1837 for (j=0; j<SIZE_NUM; j++)
1839 print_message(names[D_CBC_128_CML],c[D_CBC_128_CML][j],lengths[j]);
1841 for (count=0,run=1; COND(c[D_CBC_128_CML][j]); count++)
1842 Camellia_cbc_encrypt(buf,buf,
1843 (unsigned long)lengths[j],&camellia_ks1,
1844 iv,CAMELLIA_ENCRYPT);
1846 print_result(D_CBC_128_CML,j,count,d);
1849 if (doit[D_CBC_192_CML])
1851 for (j=0; j<SIZE_NUM; j++)
1853 print_message(names[D_CBC_192_CML],c[D_CBC_192_CML][j],lengths[j]);
1855 for (count=0,run=1; COND(c[D_CBC_192_CML][j]); count++)
1856 Camellia_cbc_encrypt(buf,buf,
1857 (unsigned long)lengths[j],&camellia_ks2,
1858 iv,CAMELLIA_ENCRYPT);
1860 print_result(D_CBC_192_CML,j,count,d);
1863 if (doit[D_CBC_256_CML])
1865 for (j=0; j<SIZE_NUM; j++)
1867 print_message(names[D_CBC_256_CML],c[D_CBC_256_CML][j],lengths[j]);
1869 for (count=0,run=1; COND(c[D_CBC_256_CML][j]); count++)
1870 Camellia_cbc_encrypt(buf,buf,
1871 (unsigned long)lengths[j],&camellia_ks3,
1872 iv,CAMELLIA_ENCRYPT);
1874 print_result(D_CBC_256_CML,j,count,d);
1879 #ifndef OPENSSL_NO_IDEA
1880 if (doit[D_CBC_IDEA])
1882 for (j=0; j<SIZE_NUM; j++)
1884 print_message(names[D_CBC_IDEA],c[D_CBC_IDEA][j],lengths[j]);
1886 for (count=0,run=1; COND(c[D_CBC_IDEA][j]); count++)
1887 idea_cbc_encrypt(buf,buf,
1888 (unsigned long)lengths[j],&idea_ks,
1891 print_result(D_CBC_IDEA,j,count,d);
1895 #ifndef OPENSSL_NO_SEED
1896 if (doit[D_CBC_SEED])
1898 for (j=0; j<SIZE_NUM; j++)
1900 print_message(names[D_CBC_SEED],c[D_CBC_SEED][j],lengths[j]);
1902 for (count=0,run=1; COND(c[D_CBC_SEED][j]); count++)
1903 SEED_cbc_encrypt(buf,buf,
1904 (unsigned long)lengths[j],&seed_ks,iv,1);
1906 print_result(D_CBC_SEED,j,count,d);
1910 #ifndef OPENSSL_NO_RC2
1911 if (doit[D_CBC_RC2])
1913 for (j=0; j<SIZE_NUM; j++)
1915 print_message(names[D_CBC_RC2],c[D_CBC_RC2][j],lengths[j]);
1917 for (count=0,run=1; COND(c[D_CBC_RC2][j]); count++)
1918 RC2_cbc_encrypt(buf,buf,
1919 (unsigned long)lengths[j],&rc2_ks,
1922 print_result(D_CBC_RC2,j,count,d);
1926 #ifndef OPENSSL_NO_RC5
1927 if (doit[D_CBC_RC5])
1929 for (j=0; j<SIZE_NUM; j++)
1931 print_message(names[D_CBC_RC5],c[D_CBC_RC5][j],lengths[j]);
1933 for (count=0,run=1; COND(c[D_CBC_RC5][j]); count++)
1934 RC5_32_cbc_encrypt(buf,buf,
1935 (unsigned long)lengths[j],&rc5_ks,
1938 print_result(D_CBC_RC5,j,count,d);
1942 #ifndef OPENSSL_NO_BF
1945 for (j=0; j<SIZE_NUM; j++)
1947 print_message(names[D_CBC_BF],c[D_CBC_BF][j],lengths[j]);
1949 for (count=0,run=1; COND(c[D_CBC_BF][j]); count++)
1950 BF_cbc_encrypt(buf,buf,
1951 (unsigned long)lengths[j],&bf_ks,
1954 print_result(D_CBC_BF,j,count,d);
1958 #ifndef OPENSSL_NO_CAST
1959 if (doit[D_CBC_CAST])
1961 for (j=0; j<SIZE_NUM; j++)
1963 print_message(names[D_CBC_CAST],c[D_CBC_CAST][j],lengths[j]);
1965 for (count=0,run=1; COND(c[D_CBC_CAST][j]); count++)
1966 CAST_cbc_encrypt(buf,buf,
1967 (unsigned long)lengths[j],&cast_ks,
1970 print_result(D_CBC_CAST,j,count,d);
1977 for (j=0; j<SIZE_NUM; j++)
1984 names[D_EVP]=OBJ_nid2ln(evp_cipher->nid);
1985 /* -O3 -fschedule-insns messes up an
1986 * optimization here! names[D_EVP]
1987 * somehow becomes NULL */
1988 print_message(names[D_EVP],save_count,
1991 EVP_CIPHER_CTX_init(&ctx);
1993 EVP_DecryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
1995 EVP_EncryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
1996 EVP_CIPHER_CTX_set_padding(&ctx, 0);
2000 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
2001 EVP_DecryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
2003 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
2004 EVP_EncryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
2006 EVP_DecryptFinal_ex(&ctx,buf,&outl);
2008 EVP_EncryptFinal_ex(&ctx,buf,&outl);
2010 EVP_CIPHER_CTX_cleanup(&ctx);
2014 names[D_EVP]=OBJ_nid2ln(evp_md->type);
2015 print_message(names[D_EVP],save_count,
2019 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
2020 EVP_Digest(buf,lengths[j],&(md[0]),NULL,evp_md,NULL);
2024 print_result(D_EVP,j,count,d);
2028 if (prime_doit[D_PRIME_TRIAL_DIVISION])
2030 BIGNUM *rnd = BN_new();
2031 BIGNUM *add = BN_new();
2032 BN_CTX *ctx = BN_CTX_new();
2034 BN_set_word(add, 2);
2035 prime_print_message(prime_names[D_PRIME_TRIAL_DIVISION],
2036 prime_c[D_PRIME_TRIAL_DIVISION]);
2039 for (count=0, run=1; COND(prime_c[D_PRIME_TRIAL_DIVISION]); count++)
2040 bn_probable_prime_dh(rnd, 1024, add, NULL, ctx);
2043 prime_print_result(D_PRIME_TRIAL_DIVISION, count, d);
2050 if (prime_doit[D_PRIME_TRIAL_DIVISION_RETRY])
2052 BIGNUM *rnd = BN_new();
2053 BN_CTX *ctx = BN_CTX_new();
2055 prime_print_message(prime_names[D_PRIME_TRIAL_DIVISION_RETRY],
2056 prime_c[D_PRIME_TRIAL_DIVISION_RETRY]);
2059 for (count=0, run=1; COND(prime_c[D_PRIME_TRIAL_DIVISION_RETRY]); count++)
2060 bn_probable_prime_dh_retry(rnd, 1024, ctx);
2063 prime_print_result(D_PRIME_TRIAL_DIVISION_RETRY, count, d);
2069 if (prime_doit[D_PRIME_COPRIME])
2071 BIGNUM *rnd = BN_new();
2072 BN_CTX *ctx = BN_CTX_new();
2074 prime_print_message(prime_names[D_PRIME_COPRIME],
2075 prime_c[D_PRIME_COPRIME]);
2078 for (count=0, run=1; COND(prime_c[D_PRIME_COPRIME]); count++)
2079 bn_probable_prime_dh_coprime(rnd, 1024, ctx);
2082 prime_print_result(D_PRIME_COPRIME, count, d);
2088 RAND_pseudo_bytes(buf,36);
2089 #ifndef OPENSSL_NO_RSA
2090 for (j=0; j<RSA_NUM; j++)
2093 if (!rsa_doit[j]) continue;
2094 ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num, rsa_key[j]);
2097 BIO_printf(bio_err,"RSA sign failure. No RSA sign will be done.\n");
2098 ERR_print_errors(bio_err);
2103 pkey_print_message("private","rsa",
2104 rsa_c[j][0],rsa_bits[j],
2106 /* RSA_blinding_on(rsa_key[j],NULL); */
2108 for (count=0,run=1; COND(rsa_c[j][0]); count++)
2110 ret=RSA_sign(NID_md5_sha1, buf,36, buf2,
2111 &rsa_num, rsa_key[j]);
2115 "RSA sign failure\n");
2116 ERR_print_errors(bio_err);
2122 BIO_printf(bio_err,mr ? "+R1:%ld:%d:%.2f\n"
2123 : "%ld %d bit private RSA's in %.2fs\n",
2124 count,rsa_bits[j],d);
2125 rsa_results[j][0]=d/(double)count;
2130 ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num, rsa_key[j]);
2133 BIO_printf(bio_err,"RSA verify failure. No RSA verify will be done.\n");
2134 ERR_print_errors(bio_err);
2139 pkey_print_message("public","rsa",
2140 rsa_c[j][1],rsa_bits[j],
2143 for (count=0,run=1; COND(rsa_c[j][1]); count++)
2145 ret=RSA_verify(NID_md5_sha1, buf,36, buf2,
2146 rsa_num, rsa_key[j]);
2150 "RSA verify failure\n");
2151 ERR_print_errors(bio_err);
2157 BIO_printf(bio_err,mr ? "+R2:%ld:%d:%.2f\n"
2158 : "%ld %d bit public RSA's in %.2fs\n",
2159 count,rsa_bits[j],d);
2160 rsa_results[j][1]=d/(double)count;
2166 /* if longer than 10s, don't do any more */
2167 for (j++; j<RSA_NUM; j++)
2173 RAND_pseudo_bytes(buf,20);
2174 #ifndef OPENSSL_NO_DSA
2175 if (RAND_status() != 1)
2177 RAND_seed(rnd_seed, sizeof rnd_seed);
2180 for (j=0; j<DSA_NUM; j++)
2185 if (!dsa_doit[j]) continue;
2186 /* DSA_generate_key(dsa_key[j]); */
2187 /* DSA_sign_setup(dsa_key[j],NULL); */
2188 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
2192 BIO_printf(bio_err,"DSA sign failure. No DSA sign will be done.\n");
2193 ERR_print_errors(bio_err);
2198 pkey_print_message("sign","dsa",
2199 dsa_c[j][0],dsa_bits[j],
2202 for (count=0,run=1; COND(dsa_c[j][0]); count++)
2204 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
2209 "DSA sign failure\n");
2210 ERR_print_errors(bio_err);
2216 BIO_printf(bio_err,mr ? "+R3:%ld:%d:%.2f\n"
2217 : "%ld %d bit DSA signs in %.2fs\n",
2218 count,dsa_bits[j],d);
2219 dsa_results[j][0]=d/(double)count;
2223 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
2227 BIO_printf(bio_err,"DSA verify failure. No DSA verify will be done.\n");
2228 ERR_print_errors(bio_err);
2233 pkey_print_message("verify","dsa",
2234 dsa_c[j][1],dsa_bits[j],
2237 for (count=0,run=1; COND(dsa_c[j][1]); count++)
2239 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
2244 "DSA verify failure\n");
2245 ERR_print_errors(bio_err);
2251 BIO_printf(bio_err,mr ? "+R4:%ld:%d:%.2f\n"
2252 : "%ld %d bit DSA verify in %.2fs\n",
2253 count,dsa_bits[j],d);
2254 dsa_results[j][1]=d/(double)count;
2259 /* if longer than 10s, don't do any more */
2260 for (j++; j<DSA_NUM; j++)
2264 if (rnd_fake) RAND_cleanup();
2267 #ifndef OPENSSL_NO_ECDSA
2268 if (RAND_status() != 1)
2270 RAND_seed(rnd_seed, sizeof rnd_seed);
2273 for (j=0; j<EC_NUM; j++)
2277 if (!ecdsa_doit[j]) continue; /* Ignore Curve */
2278 ecdsa[j] = EC_KEY_new_by_curve_name(test_curves[j]);
2279 if (ecdsa[j] == NULL)
2281 BIO_printf(bio_err,"ECDSA failure.\n");
2282 ERR_print_errors(bio_err);
2288 EC_KEY_precompute_mult(ecdsa[j], NULL);
2290 /* Perform ECDSA signature test */
2291 EC_KEY_generate_key(ecdsa[j]);
2292 ret = ECDSA_sign(0, buf, 20, ecdsasig,
2293 &ecdsasiglen, ecdsa[j]);
2296 BIO_printf(bio_err,"ECDSA sign failure. No ECDSA sign will be done.\n");
2297 ERR_print_errors(bio_err);
2302 pkey_print_message("sign","ecdsa",
2304 test_curves_bits[j],
2308 for (count=0,run=1; COND(ecdsa_c[j][0]);
2311 ret=ECDSA_sign(0, buf, 20,
2312 ecdsasig, &ecdsasiglen,
2316 BIO_printf(bio_err, "ECDSA sign failure\n");
2317 ERR_print_errors(bio_err);
2324 BIO_printf(bio_err, mr ? "+R5:%ld:%d:%.2f\n" :
2325 "%ld %d bit ECDSA signs in %.2fs \n",
2326 count, test_curves_bits[j], d);
2327 ecdsa_results[j][0]=d/(double)count;
2331 /* Perform ECDSA verification test */
2332 ret=ECDSA_verify(0, buf, 20, ecdsasig,
2333 ecdsasiglen, ecdsa[j]);
2336 BIO_printf(bio_err,"ECDSA verify failure. No ECDSA verify will be done.\n");
2337 ERR_print_errors(bio_err);
2342 pkey_print_message("verify","ecdsa",
2344 test_curves_bits[j],
2347 for (count=0,run=1; COND(ecdsa_c[j][1]); count++)
2349 ret=ECDSA_verify(0, buf, 20, ecdsasig, ecdsasiglen, ecdsa[j]);
2352 BIO_printf(bio_err, "ECDSA verify failure\n");
2353 ERR_print_errors(bio_err);
2359 BIO_printf(bio_err, mr? "+R6:%ld:%d:%.2f\n"
2360 : "%ld %d bit ECDSA verify in %.2fs\n",
2361 count, test_curves_bits[j], d);
2362 ecdsa_results[j][1]=d/(double)count;
2367 /* if longer than 10s, don't do any more */
2368 for (j++; j<EC_NUM; j++)
2373 if (rnd_fake) RAND_cleanup();
2376 #ifndef OPENSSL_NO_ECDH
2377 if (RAND_status() != 1)
2379 RAND_seed(rnd_seed, sizeof rnd_seed);
2382 for (j=0; j<EC_NUM; j++)
2384 if (!ecdh_doit[j]) continue;
2385 ecdh_a[j] = EC_KEY_new_by_curve_name(test_curves[j]);
2386 ecdh_b[j] = EC_KEY_new_by_curve_name(test_curves[j]);
2387 if ((ecdh_a[j] == NULL) || (ecdh_b[j] == NULL))
2389 BIO_printf(bio_err,"ECDH failure.\n");
2390 ERR_print_errors(bio_err);
2395 /* generate two ECDH key pairs */
2396 if (!EC_KEY_generate_key(ecdh_a[j]) ||
2397 !EC_KEY_generate_key(ecdh_b[j]))
2399 BIO_printf(bio_err,"ECDH key generation failure.\n");
2400 ERR_print_errors(bio_err);
2405 /* If field size is not more than 24 octets, then use SHA-1 hash of result;
2406 * otherwise, use result (see section 4.8 of draft-ietf-tls-ecc-03.txt).
2408 int field_size, outlen;
2409 void *(*kdf)(const void *in, size_t inlen, void *out, size_t *xoutlen);
2410 field_size = EC_GROUP_get_degree(EC_KEY_get0_group(ecdh_a[j]));
2411 if (field_size <= 24 * 8)
2413 outlen = KDF1_SHA1_len;
2418 outlen = (field_size+7)/8;
2421 secret_size_a = ECDH_compute_key(secret_a, outlen,
2422 EC_KEY_get0_public_key(ecdh_b[j]),
2424 secret_size_b = ECDH_compute_key(secret_b, outlen,
2425 EC_KEY_get0_public_key(ecdh_a[j]),
2427 if (secret_size_a != secret_size_b)
2432 for (secret_idx = 0;
2433 (secret_idx < secret_size_a)
2434 && (ecdh_checks == 1);
2437 if (secret_a[secret_idx] != secret_b[secret_idx])
2441 if (ecdh_checks == 0)
2443 BIO_printf(bio_err,"ECDH computations don't match.\n");
2444 ERR_print_errors(bio_err);
2448 pkey_print_message("","ecdh",
2450 test_curves_bits[j],
2453 for (count=0,run=1; COND(ecdh_c[j][0]); count++)
2455 ECDH_compute_key(secret_a, outlen,
2456 EC_KEY_get0_public_key(ecdh_b[j]),
2460 BIO_printf(bio_err, mr ? "+R7:%ld:%d:%.2f\n" :"%ld %d-bit ECDH ops in %.2fs\n",
2461 count, test_curves_bits[j], d);
2462 ecdh_results[j][0]=d/(double)count;
2470 /* if longer than 10s, don't do any more */
2471 for (j++; j<EC_NUM; j++)
2475 if (rnd_fake) RAND_cleanup();
2482 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_VERSION));
2483 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_BUILT_ON));
2485 printf("%s ",BN_options());
2486 #ifndef OPENSSL_NO_MD2
2487 printf("%s ",MD2_options());
2489 #ifndef OPENSSL_NO_RC4
2490 printf("%s ",RC4_options());
2492 #ifndef OPENSSL_NO_DES
2493 printf("%s ",DES_options());
2495 #ifndef OPENSSL_NO_AES
2496 printf("%s ",AES_options());
2498 #ifndef OPENSSL_NO_IDEA
2499 printf("%s ",idea_options());
2501 #ifndef OPENSSL_NO_BF
2502 printf("%s ",BF_options());
2504 fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS));
2510 fprintf(stdout,"+H");
2513 fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n");
2514 fprintf(stdout,"type ");
2516 for (j=0; j<SIZE_NUM; j++)
2517 fprintf(stdout,mr ? ":%d" : "%7d bytes",lengths[j]);
2518 fprintf(stdout,"\n");
2521 for (k=0; k<ALGOR_NUM; k++)
2523 if (!doit[k]) continue;
2525 fprintf(stdout,"+F:%d:%s",k,names[k]);
2527 fprintf(stdout,"%-13s",names[k]);
2528 for (j=0; j<SIZE_NUM; j++)
2530 if (results[k][j] > 10000 && !mr)
2531 fprintf(stdout," %11.2fk",results[k][j]/1e3);
2533 fprintf(stdout,mr ? ":%.2f" : " %11.2f ",results[k][j]);
2535 fprintf(stdout,"\n");
2537 #ifndef OPENSSL_NO_RSA
2539 for (k=0; k<RSA_NUM; k++)
2541 if (!rsa_doit[k]) continue;
2544 printf("%18ssign verify sign/s verify/s\n"," ");
2548 fprintf(stdout,"+F2:%u:%u:%f:%f\n",
2549 k,rsa_bits[k],rsa_results[k][0],
2552 fprintf(stdout,"rsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n",
2553 rsa_bits[k],rsa_results[k][0],rsa_results[k][1],
2554 1.0/rsa_results[k][0],1.0/rsa_results[k][1]);
2557 #ifndef OPENSSL_NO_DSA
2559 for (k=0; k<DSA_NUM; k++)
2561 if (!dsa_doit[k]) continue;
2564 printf("%18ssign verify sign/s verify/s\n"," ");
2568 fprintf(stdout,"+F3:%u:%u:%f:%f\n",
2569 k,dsa_bits[k],dsa_results[k][0],dsa_results[k][1]);
2571 fprintf(stdout,"dsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n",
2572 dsa_bits[k],dsa_results[k][0],dsa_results[k][1],
2573 1.0/dsa_results[k][0],1.0/dsa_results[k][1]);
2576 #ifndef OPENSSL_NO_ECDSA
2578 for (k=0; k<EC_NUM; k++)
2580 if (!ecdsa_doit[k]) continue;
2583 printf("%30ssign verify sign/s verify/s\n"," ");
2588 fprintf(stdout,"+F4:%u:%u:%f:%f\n",
2589 k, test_curves_bits[k],
2590 ecdsa_results[k][0],ecdsa_results[k][1]);
2593 "%4u bit ecdsa (%s) %8.4fs %8.4fs %8.1f %8.1f\n",
2594 test_curves_bits[k],
2595 test_curves_names[k],
2596 ecdsa_results[k][0],ecdsa_results[k][1],
2597 1.0/ecdsa_results[k][0],1.0/ecdsa_results[k][1]);
2602 #ifndef OPENSSL_NO_ECDH
2604 for (k=0; k<EC_NUM; k++)
2606 if (!ecdh_doit[k]) continue;
2609 printf("%30sop op/s\n"," ");
2613 fprintf(stdout,"+F5:%u:%u:%f:%f\n",
2614 k, test_curves_bits[k],
2615 ecdh_results[k][0], 1.0/ecdh_results[k][0]);
2618 fprintf(stdout,"%4u bit ecdh (%s) %8.4fs %8.1f\n",
2619 test_curves_bits[k],
2620 test_curves_names[k],
2621 ecdh_results[k][0], 1.0/ecdh_results[k][0]);
2628 ERR_print_errors(bio_err);
2629 if (buf != NULL) OPENSSL_free(buf);
2630 if (buf2 != NULL) OPENSSL_free(buf2);
2631 #ifndef OPENSSL_NO_RSA
2632 for (i=0; i<RSA_NUM; i++)
2633 if (rsa_key[i] != NULL)
2634 RSA_free(rsa_key[i]);
2636 #ifndef OPENSSL_NO_DSA
2637 for (i=0; i<DSA_NUM; i++)
2638 if (dsa_key[i] != NULL)
2639 DSA_free(dsa_key[i]);
2642 #ifndef OPENSSL_NO_ECDSA
2643 for (i=0; i<EC_NUM; i++)
2644 if (ecdsa[i] != NULL)
2645 EC_KEY_free(ecdsa[i]);
2647 #ifndef OPENSSL_NO_ECDH
2648 for (i=0; i<EC_NUM; i++)
2650 if (ecdh_a[i] != NULL)
2651 EC_KEY_free(ecdh_a[i]);
2652 if (ecdh_b[i] != NULL)
2653 EC_KEY_free(ecdh_b[i]);
2661 static void print_message(const char *s, long num, int length)
2664 BIO_printf(bio_err,mr ? "+DT:%s:%d:%d\n"
2665 : "Doing %s for %ds on %d size blocks: ",s,SECONDS,length);
2666 (void)BIO_flush(bio_err);
2669 BIO_printf(bio_err,mr ? "+DN:%s:%ld:%d\n"
2670 : "Doing %s %ld times on %d size blocks: ",s,num,length);
2671 (void)BIO_flush(bio_err);
2678 static void prime_print_message(const char *s, long num)
2681 BIO_printf(bio_err,mr ? "+DT:%s:%d\n"
2682 : "Doing %s for %ds: ", s, PRIME_SECONDS);
2683 (void)BIO_flush(bio_err);
2684 alarm(PRIME_SECONDS);
2686 BIO_printf(bio_err,mr ? "+DN:%s:%ld\n"
2687 : "Doing %s %ld times: ", s, num);
2688 (void)BIO_flush(bio_err);
2695 static void pkey_print_message(const char *str, const char *str2, long num,
2699 BIO_printf(bio_err,mr ? "+DTP:%d:%s:%s:%d\n"
2700 : "Doing %d bit %s %s's for %ds: ",bits,str,str2,tm);
2701 (void)BIO_flush(bio_err);
2704 BIO_printf(bio_err,mr ? "+DNP:%ld:%d:%s:%s\n"
2705 : "Doing %ld %d bit %s %s's: ",num,bits,str,str2);
2706 (void)BIO_flush(bio_err);
2713 static void print_result(int alg,int run_no,int count,double time_used)
2715 BIO_printf(bio_err,mr ? "+R:%d:%s:%f\n"
2716 : "%d %s's in %.2fs\n",count,names[alg],time_used);
2717 results[alg][run_no]=((double)count)/time_used*lengths[run_no];
2720 static void prime_print_result(int alg, int count, double time_used)
2723 mr ? "+R:%d:%s:%f:%f\n" : "%d %s's in %.2fs (%.2f microseconds / run)\n",
2724 count, prime_names[alg], time_used,
2725 time_used / ((double)count) * 1000000);
2729 static char *sstrsep(char **string, const char *delim)
2732 char *token = *string;
2737 memset(isdelim, 0, sizeof isdelim);
2742 isdelim[(unsigned char)(*delim)] = 1;
2746 while (!isdelim[(unsigned char)(**string)])
2760 static int do_multi(int multi)
2765 static char sep[]=":";
2767 fds=malloc(multi*sizeof *fds);
2768 for(n=0 ; n < multi ; ++n)
2772 fprintf(stderr, "pipe failure\n");
2786 if (dup(fd[1]) == -1)
2788 fprintf(stderr, "dup failed\n");
2797 printf("Forked child %d\n",n);
2800 /* for now, assume the pipe is long enough to take all the output */
2801 for(n=0 ; n < multi ; ++n)
2807 f=fdopen(fds[n],"r");
2808 while(fgets(buf,sizeof buf,f))
2815 fprintf(stderr,"Don't understand line '%s' from child %d\n",
2819 printf("Got: %s from %d\n",buf,n);
2820 if(!strncmp(buf,"+F:",3))
2826 alg=atoi(sstrsep(&p,sep));
2828 for(j=0 ; j < SIZE_NUM ; ++j)
2829 results[alg][j]+=atof(sstrsep(&p,sep));
2831 else if(!strncmp(buf,"+F2:",4))
2837 k=atoi(sstrsep(&p,sep));
2840 d=atof(sstrsep(&p,sep));
2842 rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d);
2844 rsa_results[k][0]=d;
2846 d=atof(sstrsep(&p,sep));
2848 rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d);
2850 rsa_results[k][1]=d;
2852 else if(!strncmp(buf,"+F2:",4))
2858 k=atoi(sstrsep(&p,sep));
2861 d=atof(sstrsep(&p,sep));
2863 rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d);
2865 rsa_results[k][0]=d;
2867 d=atof(sstrsep(&p,sep));
2869 rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d);
2871 rsa_results[k][1]=d;
2873 #ifndef OPENSSL_NO_DSA
2874 else if(!strncmp(buf,"+F3:",4))
2880 k=atoi(sstrsep(&p,sep));
2883 d=atof(sstrsep(&p,sep));
2885 dsa_results[k][0]=1/(1/dsa_results[k][0]+1/d);
2887 dsa_results[k][0]=d;
2889 d=atof(sstrsep(&p,sep));
2891 dsa_results[k][1]=1/(1/dsa_results[k][1]+1/d);
2893 dsa_results[k][1]=d;
2896 #ifndef OPENSSL_NO_ECDSA
2897 else if(!strncmp(buf,"+F4:",4))
2903 k=atoi(sstrsep(&p,sep));
2906 d=atof(sstrsep(&p,sep));
2908 ecdsa_results[k][0]=1/(1/ecdsa_results[k][0]+1/d);
2910 ecdsa_results[k][0]=d;
2912 d=atof(sstrsep(&p,sep));
2914 ecdsa_results[k][1]=1/(1/ecdsa_results[k][1]+1/d);
2916 ecdsa_results[k][1]=d;
2920 #ifndef OPENSSL_NO_ECDH
2921 else if(!strncmp(buf,"+F5:",4))
2927 k=atoi(sstrsep(&p,sep));
2930 d=atof(sstrsep(&p,sep));
2932 ecdh_results[k][0]=1/(1/ecdh_results[k][0]+1/d);
2934 ecdh_results[k][0]=d;
2939 else if(!strncmp(buf,"+H:",3))
2943 fprintf(stderr,"Unknown type '%s' from child %d\n",buf,n);