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 #ifndef OPENSSL_SYS_NETWARE
111 #if defined(_WIN32) || defined(__CYGWIN__)
113 # if defined(__CYGWIN__) && !defined(_WIN32)
114 /* <windows.h> should define _WIN32, which normally is mutually
115 * exclusive with __CYGWIN__, but if it didn't... */
117 /* this is done because Cygwin alarm() fails sometimes. */
121 #include <openssl/bn.h>
122 #ifndef OPENSSL_NO_DES
123 #include <openssl/des.h>
125 #ifndef OPENSSL_NO_AES
126 #include <openssl/aes.h>
128 #ifndef OPENSSL_NO_CAMELLIA
129 #include <openssl/camellia.h>
131 #ifndef OPENSSL_NO_MD2
132 #include <openssl/md2.h>
134 #ifndef OPENSSL_NO_MDC2
135 #include <openssl/mdc2.h>
137 #ifndef OPENSSL_NO_MD4
138 #include <openssl/md4.h>
140 #ifndef OPENSSL_NO_MD5
141 #include <openssl/md5.h>
143 #ifndef OPENSSL_NO_HMAC
144 #include <openssl/hmac.h>
146 #include <openssl/evp.h>
147 #ifndef OPENSSL_NO_SHA
148 #include <openssl/sha.h>
150 #ifndef OPENSSL_NO_RIPEMD
151 #include <openssl/ripemd.h>
153 #ifndef OPENSSL_NO_WHIRLPOOL
154 #include <openssl/whrlpool.h>
156 #ifndef OPENSSL_NO_RC4
157 #include <openssl/rc4.h>
159 #ifndef OPENSSL_NO_RC5
160 #include <openssl/rc5.h>
162 #ifndef OPENSSL_NO_RC2
163 #include <openssl/rc2.h>
165 #ifndef OPENSSL_NO_IDEA
166 #include <openssl/idea.h>
168 #ifndef OPENSSL_NO_SEED
169 #include <openssl/seed.h>
171 #ifndef OPENSSL_NO_BF
172 #include <openssl/blowfish.h>
174 #ifndef OPENSSL_NO_CAST
175 #include <openssl/cast.h>
177 #ifndef OPENSSL_NO_RSA
178 #include <openssl/rsa.h>
179 #include "./testrsa.h"
181 #include <openssl/x509.h>
182 #ifndef OPENSSL_NO_DSA
183 #include <openssl/dsa.h>
184 #include "./testdsa.h"
186 #ifndef OPENSSL_NO_ECDSA
187 #include <openssl/ecdsa.h>
189 #ifndef OPENSSL_NO_ECDH
190 #include <openssl/ecdh.h>
192 #include <openssl/modes.h>
195 #ifdef OPENSSL_DOING_MAKEDEPEND
196 #undef AES_set_encrypt_key
197 #undef AES_set_decrypt_key
198 #undef DES_set_key_unchecked
200 #define BF_set_key private_BF_set_key
201 #define CAST_set_key private_CAST_set_key
202 #define idea_set_encrypt_key private_idea_set_encrypt_key
203 #define SEED_set_key private_SEED_set_key
204 #define RC2_set_key private_RC2_set_key
205 #define RC4_set_key private_RC4_set_key
206 #define DES_set_key_unchecked private_DES_set_key_unchecked
207 #define AES_set_encrypt_key private_AES_set_encrypt_key
208 #define AES_set_decrypt_key private_AES_set_decrypt_key
209 #define Camellia_set_key private_Camellia_set_key
213 # if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_NETWARE)
227 #define BUFSIZE ((long)1024*8+64)
231 static int usertime=1;
233 static double Time_F(int s);
234 static void print_message(const char *s,long num,int length);
235 static void pkey_print_message(const char *str, const char *str2,
236 long num, int bits, int sec);
237 static void print_result(int alg,int run_no,int count,double time_used);
239 static int do_multi(int multi);
248 #define MAX_ECDH_SIZE 256
250 static const char *names[ALGOR_NUM]={
251 "md2","mdc2","md4","md5","hmac(md5)","sha1","rmd160","rc4",
252 "des cbc","des ede3","idea cbc","seed cbc",
253 "rc2 cbc","rc5-32/12 cbc","blowfish cbc","cast cbc",
254 "aes-128 cbc","aes-192 cbc","aes-256 cbc",
255 "camellia-128 cbc","camellia-192 cbc","camellia-256 cbc",
256 "evp","sha256","sha512","whirlpool",
257 "aes-128 ige","aes-192 ige","aes-256 ige","ghash",
258 "aes-128 gcm", "aes-256 gcm", "chacha20 poly1305",
260 static double results[ALGOR_NUM][SIZE_NUM];
261 static int lengths[SIZE_NUM]={16,64,256,1024,8*1024};
262 #ifndef OPENSSL_NO_RSA
263 static double rsa_results[RSA_NUM][2];
265 #ifndef OPENSSL_NO_DSA
266 static double dsa_results[DSA_NUM][2];
268 #ifndef OPENSSL_NO_ECDSA
269 static double ecdsa_results[EC_NUM][2];
271 #ifndef OPENSSL_NO_ECDH
272 static double ecdh_results[EC_NUM][1];
275 #if defined(OPENSSL_NO_DSA) && !(defined(OPENSSL_NO_ECDSA) && defined(OPENSSL_NO_ECDH))
276 static const char rnd_seed[] = "string to make the random number generator think it has entropy";
277 static int rnd_fake = 0;
281 #if defined(__STDC__) || defined(sgi) || defined(_AIX)
282 #define SIGRETTYPE void
284 #define SIGRETTYPE int
287 static SIGRETTYPE sig_done(int sig);
288 static SIGRETTYPE sig_done(int sig)
290 signal(SIGALRM,sig_done);
303 #if !defined(SIGALRM)
306 static unsigned int lapse,schlock;
307 static void alarm_win32(unsigned int secs) { lapse = secs*1000; }
308 #define alarm alarm_win32
310 static DWORD WINAPI sleepy(VOID *arg)
318 static double Time_F(int s)
324 thr = CreateThread(NULL,4096,sleepy,NULL,0,NULL);
327 DWORD ret=GetLastError();
328 BIO_printf(bio_err,"unable to CreateThread (%d)",ret);
331 CloseHandle(thr); /* detach the thread */
332 while (!schlock) Sleep(0); /* scheduler spinlock */
335 return app_tminterval(s,usertime);
339 static double Time_F(int s)
341 return app_tminterval(s,usertime);
346 #ifndef OPENSSL_NO_ECDH
347 static const int KDF1_SHA1_len = 20;
348 static void *KDF1_SHA1(const void *in, size_t inlen, void *out, size_t *outlen)
350 #ifndef OPENSSL_NO_SHA
351 if (*outlen < SHA_DIGEST_LENGTH)
354 *outlen = SHA_DIGEST_LENGTH;
355 return SHA1(in, inlen, out);
358 #endif /* OPENSSL_NO_SHA */
360 #endif /* OPENSSL_NO_ECDH */
363 int MAIN(int, char **);
365 int MAIN(int argc, char **argv)
367 unsigned char *buf=NULL,*buf2=NULL;
369 long count=0,save_count=0;
371 #if !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_DSA)
374 #ifndef OPENSSL_NO_RSA
377 unsigned char md[EVP_MAX_MD_SIZE];
378 #ifndef OPENSSL_NO_MD2
379 unsigned char md2[MD2_DIGEST_LENGTH];
381 #ifndef OPENSSL_NO_MDC2
382 unsigned char mdc2[MDC2_DIGEST_LENGTH];
384 #ifndef OPENSSL_NO_MD4
385 unsigned char md4[MD4_DIGEST_LENGTH];
387 #ifndef OPENSSL_NO_MD5
388 unsigned char md5[MD5_DIGEST_LENGTH];
389 unsigned char hmac[MD5_DIGEST_LENGTH];
391 #ifndef OPENSSL_NO_SHA
392 unsigned char sha[SHA_DIGEST_LENGTH];
393 #ifndef OPENSSL_NO_SHA256
394 unsigned char sha256[SHA256_DIGEST_LENGTH];
396 #ifndef OPENSSL_NO_SHA512
397 unsigned char sha512[SHA512_DIGEST_LENGTH];
400 #ifndef OPENSSL_NO_WHIRLPOOL
401 unsigned char whirlpool[WHIRLPOOL_DIGEST_LENGTH];
403 #ifndef OPENSSL_NO_RIPEMD
404 unsigned char rmd160[RIPEMD160_DIGEST_LENGTH];
406 #ifndef OPENSSL_NO_RC4
409 #ifndef OPENSSL_NO_RC5
412 #ifndef OPENSSL_NO_RC2
415 #ifndef OPENSSL_NO_IDEA
416 IDEA_KEY_SCHEDULE idea_ks;
418 #ifndef OPENSSL_NO_SEED
419 SEED_KEY_SCHEDULE seed_ks;
421 #ifndef OPENSSL_NO_BF
424 #ifndef OPENSSL_NO_CAST
427 static const unsigned char key16[16]=
428 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
429 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
430 #ifndef OPENSSL_NO_AES
431 static const unsigned char key24[24]=
432 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
433 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
434 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
435 static const unsigned char key32[32]=
436 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
437 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
438 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,
439 0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,0x56};
441 #ifndef OPENSSL_NO_CAMELLIA
442 static const unsigned char ckey24[24]=
443 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
444 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
445 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
446 static const unsigned char ckey32[32]=
447 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
448 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
449 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,
450 0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,0x56};
452 #ifndef OPENSSL_NO_AES
453 #define MAX_BLOCK_SIZE 128
455 #define MAX_BLOCK_SIZE 64
457 unsigned char DES_iv[8];
458 unsigned char iv[2*MAX_BLOCK_SIZE/8];
459 #ifndef OPENSSL_NO_DES
460 static DES_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};
461 static DES_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
462 static DES_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
463 DES_key_schedule sch;
464 DES_key_schedule sch2;
465 DES_key_schedule sch3;
467 #ifndef OPENSSL_NO_AES
468 AES_KEY aes_ks1, aes_ks2, aes_ks3;
470 #ifndef OPENSSL_NO_CAMELLIA
471 CAMELLIA_KEY camellia_ks1, camellia_ks2, camellia_ks3;
483 #define D_CBC_IDEA 10
484 #define D_CBC_SEED 11
488 #define D_CBC_CAST 15
489 #define D_CBC_128_AES 16
490 #define D_CBC_192_AES 17
491 #define D_CBC_256_AES 18
492 #define D_CBC_128_CML 19
493 #define D_CBC_192_CML 20
494 #define D_CBC_256_CML 21
498 #define D_WHIRLPOOL 25
499 #define D_IGE_128_AES 26
500 #define D_IGE_192_AES 27
501 #define D_IGE_256_AES 28
503 #define D_AES_128_GCM 30
504 #define D_AES_256_GCM 31
505 #define D_CHACHA20_POLY1305 32
507 long c[ALGOR_NUM][SIZE_NUM];
533 #ifndef OPENSSL_NO_RSA
534 RSA *rsa_key[RSA_NUM];
535 long rsa_c[RSA_NUM][2];
536 static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,4096};
537 static unsigned char *rsa_data[RSA_NUM]=
538 {test512,test1024,test2048,test4096};
539 static int rsa_data_length[RSA_NUM]={
540 sizeof(test512),sizeof(test1024),
541 sizeof(test2048),sizeof(test4096)};
543 #ifndef OPENSSL_NO_DSA
544 DSA *dsa_key[DSA_NUM];
545 long dsa_c[DSA_NUM][2];
546 static unsigned int dsa_bits[DSA_NUM]={512,1024,2048};
548 #ifndef OPENSSL_NO_EC
549 /* We only test over the following curves as they are representative,
550 * To add tests over more curves, simply add the curve NID
551 * and curve name to the following arrays and increase the
552 * EC_NUM value accordingly.
554 static unsigned int test_curves[EC_NUM] =
558 NID_X9_62_prime192v1,
560 NID_X9_62_prime256v1,
575 static const char * test_curves_names[EC_NUM] =
596 static int test_curves_bits[EC_NUM] =
598 160, 192, 224, 256, 384, 521,
599 163, 233, 283, 409, 571,
600 163, 233, 283, 409, 571
605 #ifndef OPENSSL_NO_ECDSA
606 unsigned char ecdsasig[256];
607 unsigned int ecdsasiglen;
608 EC_KEY *ecdsa[EC_NUM];
609 long ecdsa_c[EC_NUM][2];
612 #ifndef OPENSSL_NO_ECDH
613 EC_KEY *ecdh_a[EC_NUM], *ecdh_b[EC_NUM];
614 unsigned char secret_a[MAX_ECDH_SIZE], secret_b[MAX_ECDH_SIZE];
615 int secret_size_a, secret_size_b;
618 long ecdh_c[EC_NUM][2];
621 int rsa_doit[RSA_NUM];
622 int dsa_doit[DSA_NUM];
623 #ifndef OPENSSL_NO_ECDSA
624 int ecdsa_doit[EC_NUM];
626 #ifndef OPENSSL_NO_ECDH
627 int ecdh_doit[EC_NUM];
631 const EVP_CIPHER *evp_cipher=NULL;
632 const EVP_MD *evp_md=NULL;
643 memset(results, 0, sizeof(results));
644 #ifndef OPENSSL_NO_DSA
645 memset(dsa_key,0,sizeof(dsa_key));
647 #ifndef OPENSSL_NO_ECDSA
648 for (i=0; i<EC_NUM; i++) ecdsa[i] = NULL;
650 #ifndef OPENSSL_NO_ECDH
651 for (i=0; i<EC_NUM; i++)
660 if ((bio_err=BIO_new(BIO_s_file())) != NULL)
661 BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
663 if (!load_config(bio_err, NULL))
666 #ifndef OPENSSL_NO_RSA
667 memset(rsa_key,0,sizeof(rsa_key));
668 for (i=0; i<RSA_NUM; i++)
672 if ((buf=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
674 BIO_printf(bio_err,"out of memory\n");
677 if ((buf2=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
679 BIO_printf(bio_err,"out of memory\n");
683 memset(c,0,sizeof(c));
684 memset(DES_iv,0,sizeof(DES_iv));
685 memset(iv,0,sizeof(iv));
687 for (i=0; i<ALGOR_NUM; i++)
689 for (i=0; i<RSA_NUM; i++)
691 for (i=0; i<DSA_NUM; i++)
693 #ifndef OPENSSL_NO_ECDSA
694 for (i=0; i<EC_NUM; i++)
697 #ifndef OPENSSL_NO_ECDH
698 for (i=0; i<EC_NUM; i++)
708 if ((argc > 0) && (strcmp(*argv,"-elapsed") == 0))
711 j--; /* Otherwise, -elapsed gets confused with
714 else if ((argc > 0) && (strcmp(*argv,"-evp") == 0))
720 BIO_printf(bio_err,"no EVP given\n");
723 evp_cipher=EVP_get_cipherbyname(*argv);
726 evp_md=EVP_get_digestbyname(*argv);
728 if(!evp_cipher && !evp_md)
730 BIO_printf(bio_err,"%s is an unknown cipher or digest\n",*argv);
735 else if (argc > 0 && !strcmp(*argv,"-decrypt"))
738 j--; /* Otherwise, -elapsed gets confused with
741 #ifndef OPENSSL_NO_ENGINE
742 else if ((argc > 0) && (strcmp(*argv,"-engine") == 0))
748 BIO_printf(bio_err,"no engine given\n");
751 setup_engine(bio_err, *argv, 0);
752 /* j will be increased again further down. We just
753 don't want speed to confuse an engine with an
754 algorithm, especially when none is given (which
755 means all of them should be run) */
760 else if ((argc > 0) && (strcmp(*argv,"-multi") == 0))
766 BIO_printf(bio_err,"no multi count given\n");
772 BIO_printf(bio_err,"bad multi count\n");
775 j--; /* Otherwise, -mr gets confused with
779 else if (argc > 0 && !strcmp(*argv,"-mr"))
782 j--; /* Otherwise, -mr gets confused with
786 #ifndef OPENSSL_NO_MD2
787 if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1;
790 #ifndef OPENSSL_NO_MDC2
791 if (strcmp(*argv,"mdc2") == 0) doit[D_MDC2]=1;
794 #ifndef OPENSSL_NO_MD4
795 if (strcmp(*argv,"md4") == 0) doit[D_MD4]=1;
798 #ifndef OPENSSL_NO_MD5
799 if (strcmp(*argv,"md5") == 0) doit[D_MD5]=1;
802 #ifndef OPENSSL_NO_MD5
803 if (strcmp(*argv,"hmac") == 0) doit[D_HMAC]=1;
806 #ifndef OPENSSL_NO_SHA
807 if (strcmp(*argv,"sha1") == 0) doit[D_SHA1]=1;
809 if (strcmp(*argv,"sha") == 0) doit[D_SHA1]=1,
813 #ifndef OPENSSL_NO_SHA256
814 if (strcmp(*argv,"sha256") == 0) doit[D_SHA256]=1;
817 #ifndef OPENSSL_NO_SHA512
818 if (strcmp(*argv,"sha512") == 0) doit[D_SHA512]=1;
822 #ifndef OPENSSL_NO_WHIRLPOOL
823 if (strcmp(*argv,"whirlpool") == 0) doit[D_WHIRLPOOL]=1;
826 #ifndef OPENSSL_NO_RIPEMD
827 if (strcmp(*argv,"ripemd") == 0) doit[D_RMD160]=1;
829 if (strcmp(*argv,"rmd160") == 0) doit[D_RMD160]=1;
831 if (strcmp(*argv,"ripemd160") == 0) doit[D_RMD160]=1;
834 #ifndef OPENSSL_NO_RC4
835 if (strcmp(*argv,"rc4") == 0) doit[D_RC4]=1;
838 #ifndef OPENSSL_NO_DES
839 if (strcmp(*argv,"des-cbc") == 0) doit[D_CBC_DES]=1;
840 else if (strcmp(*argv,"des-ede3") == 0) doit[D_EDE3_DES]=1;
843 #ifndef OPENSSL_NO_AES
844 if (strcmp(*argv,"aes-128-cbc") == 0) doit[D_CBC_128_AES]=1;
845 else if (strcmp(*argv,"aes-192-cbc") == 0) doit[D_CBC_192_AES]=1;
846 else if (strcmp(*argv,"aes-256-cbc") == 0) doit[D_CBC_256_AES]=1;
847 else if (strcmp(*argv,"aes-128-ige") == 0) doit[D_IGE_128_AES]=1;
848 else if (strcmp(*argv,"aes-192-ige") == 0) doit[D_IGE_192_AES]=1;
849 else if (strcmp(*argv,"aes-256-ige") == 0) doit[D_IGE_256_AES]=1;
852 #ifndef OPENSSL_NO_CAMELLIA
853 if (strcmp(*argv,"camellia-128-cbc") == 0) doit[D_CBC_128_CML]=1;
854 else if (strcmp(*argv,"camellia-192-cbc") == 0) doit[D_CBC_192_CML]=1;
855 else if (strcmp(*argv,"camellia-256-cbc") == 0) doit[D_CBC_256_CML]=1;
858 #ifndef OPENSSL_NO_RSA
859 #if 0 /* was: #ifdef RSAref */
860 if (strcmp(*argv,"rsaref") == 0)
862 RSA_set_default_openssl_method(RSA_PKCS1_RSAref());
868 if (strcmp(*argv,"openssl") == 0)
870 RSA_set_default_method(RSA_PKCS1_SSLeay());
875 #endif /* !OPENSSL_NO_RSA */
876 if (strcmp(*argv,"dsa512") == 0) dsa_doit[R_DSA_512]=2;
877 else if (strcmp(*argv,"dsa1024") == 0) dsa_doit[R_DSA_1024]=2;
878 else if (strcmp(*argv,"dsa2048") == 0) dsa_doit[R_DSA_2048]=2;
879 else if (strcmp(*argv,"rsa512") == 0) rsa_doit[R_RSA_512]=2;
880 else if (strcmp(*argv,"rsa1024") == 0) rsa_doit[R_RSA_1024]=2;
881 else if (strcmp(*argv,"rsa2048") == 0) rsa_doit[R_RSA_2048]=2;
882 else if (strcmp(*argv,"rsa4096") == 0) rsa_doit[R_RSA_4096]=2;
884 #ifndef OPENSSL_NO_RC2
885 if (strcmp(*argv,"rc2-cbc") == 0) doit[D_CBC_RC2]=1;
886 else if (strcmp(*argv,"rc2") == 0) doit[D_CBC_RC2]=1;
889 #ifndef OPENSSL_NO_RC5
890 if (strcmp(*argv,"rc5-cbc") == 0) doit[D_CBC_RC5]=1;
891 else if (strcmp(*argv,"rc5") == 0) doit[D_CBC_RC5]=1;
894 #ifndef OPENSSL_NO_IDEA
895 if (strcmp(*argv,"idea-cbc") == 0) doit[D_CBC_IDEA]=1;
896 else if (strcmp(*argv,"idea") == 0) doit[D_CBC_IDEA]=1;
899 #ifndef OPENSSL_NO_SEED
900 if (strcmp(*argv,"seed-cbc") == 0) doit[D_CBC_SEED]=1;
901 else if (strcmp(*argv,"seed") == 0) doit[D_CBC_SEED]=1;
904 #ifndef OPENSSL_NO_BF
905 if (strcmp(*argv,"bf-cbc") == 0) doit[D_CBC_BF]=1;
906 else if (strcmp(*argv,"blowfish") == 0) doit[D_CBC_BF]=1;
907 else if (strcmp(*argv,"bf") == 0) doit[D_CBC_BF]=1;
910 #ifndef OPENSSL_NO_CAST
911 if (strcmp(*argv,"cast-cbc") == 0) doit[D_CBC_CAST]=1;
912 else if (strcmp(*argv,"cast") == 0) doit[D_CBC_CAST]=1;
913 else if (strcmp(*argv,"cast5") == 0) doit[D_CBC_CAST]=1;
916 #ifndef OPENSSL_NO_DES
917 if (strcmp(*argv,"des") == 0)
924 #ifndef OPENSSL_NO_AES
925 if (strcmp(*argv,"aes") == 0)
927 doit[D_CBC_128_AES]=1;
928 doit[D_CBC_192_AES]=1;
929 doit[D_CBC_256_AES]=1;
931 else if (strcmp(*argv,"ghash") == 0)
935 else if (strcmp(*argv,"aes-128-gcm") == 0)
937 doit[D_AES_128_GCM]=1;
939 else if (strcmp(*argv,"aes-256-gcm") == 0)
941 doit[D_AES_256_GCM]=1;
945 #ifndef OPENSSL_NO_CAMELLIA
946 if (strcmp(*argv,"camellia") == 0)
948 doit[D_CBC_128_CML]=1;
949 doit[D_CBC_192_CML]=1;
950 doit[D_CBC_256_CML]=1;
954 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
955 if (strcmp(*argv,"chacha20-poly1305") == 0)
957 doit[D_CHACHA20_POLY1305]=1;
961 #ifndef OPENSSL_NO_RSA
962 if (strcmp(*argv,"rsa") == 0)
964 rsa_doit[R_RSA_512]=1;
965 rsa_doit[R_RSA_1024]=1;
966 rsa_doit[R_RSA_2048]=1;
967 rsa_doit[R_RSA_4096]=1;
971 #ifndef OPENSSL_NO_DSA
972 if (strcmp(*argv,"dsa") == 0)
974 dsa_doit[R_DSA_512]=1;
975 dsa_doit[R_DSA_1024]=1;
976 dsa_doit[R_DSA_2048]=1;
980 #ifndef OPENSSL_NO_ECDSA
981 if (strcmp(*argv,"ecdsap160") == 0) ecdsa_doit[R_EC_P160]=2;
982 else if (strcmp(*argv,"ecdsap192") == 0) ecdsa_doit[R_EC_P192]=2;
983 else if (strcmp(*argv,"ecdsap224") == 0) ecdsa_doit[R_EC_P224]=2;
984 else if (strcmp(*argv,"ecdsap256") == 0) ecdsa_doit[R_EC_P256]=2;
985 else if (strcmp(*argv,"ecdsap384") == 0) ecdsa_doit[R_EC_P384]=2;
986 else if (strcmp(*argv,"ecdsap521") == 0) ecdsa_doit[R_EC_P521]=2;
987 else if (strcmp(*argv,"ecdsak163") == 0) ecdsa_doit[R_EC_K163]=2;
988 else if (strcmp(*argv,"ecdsak233") == 0) ecdsa_doit[R_EC_K233]=2;
989 else if (strcmp(*argv,"ecdsak283") == 0) ecdsa_doit[R_EC_K283]=2;
990 else if (strcmp(*argv,"ecdsak409") == 0) ecdsa_doit[R_EC_K409]=2;
991 else if (strcmp(*argv,"ecdsak571") == 0) ecdsa_doit[R_EC_K571]=2;
992 else if (strcmp(*argv,"ecdsab163") == 0) ecdsa_doit[R_EC_B163]=2;
993 else if (strcmp(*argv,"ecdsab233") == 0) ecdsa_doit[R_EC_B233]=2;
994 else if (strcmp(*argv,"ecdsab283") == 0) ecdsa_doit[R_EC_B283]=2;
995 else if (strcmp(*argv,"ecdsab409") == 0) ecdsa_doit[R_EC_B409]=2;
996 else if (strcmp(*argv,"ecdsab571") == 0) ecdsa_doit[R_EC_B571]=2;
997 else if (strcmp(*argv,"ecdsa") == 0)
999 for (i=0; i < EC_NUM; i++)
1004 #ifndef OPENSSL_NO_ECDH
1005 if (strcmp(*argv,"ecdhp160") == 0) ecdh_doit[R_EC_P160]=2;
1006 else if (strcmp(*argv,"ecdhp192") == 0) ecdh_doit[R_EC_P192]=2;
1007 else if (strcmp(*argv,"ecdhp224") == 0) ecdh_doit[R_EC_P224]=2;
1008 else if (strcmp(*argv,"ecdhp256") == 0) ecdh_doit[R_EC_P256]=2;
1009 else if (strcmp(*argv,"ecdhp384") == 0) ecdh_doit[R_EC_P384]=2;
1010 else if (strcmp(*argv,"ecdhp521") == 0) ecdh_doit[R_EC_P521]=2;
1011 else if (strcmp(*argv,"ecdhk163") == 0) ecdh_doit[R_EC_K163]=2;
1012 else if (strcmp(*argv,"ecdhk233") == 0) ecdh_doit[R_EC_K233]=2;
1013 else if (strcmp(*argv,"ecdhk283") == 0) ecdh_doit[R_EC_K283]=2;
1014 else if (strcmp(*argv,"ecdhk409") == 0) ecdh_doit[R_EC_K409]=2;
1015 else if (strcmp(*argv,"ecdhk571") == 0) ecdh_doit[R_EC_K571]=2;
1016 else if (strcmp(*argv,"ecdhb163") == 0) ecdh_doit[R_EC_B163]=2;
1017 else if (strcmp(*argv,"ecdhb233") == 0) ecdh_doit[R_EC_B233]=2;
1018 else if (strcmp(*argv,"ecdhb283") == 0) ecdh_doit[R_EC_B283]=2;
1019 else if (strcmp(*argv,"ecdhb409") == 0) ecdh_doit[R_EC_B409]=2;
1020 else if (strcmp(*argv,"ecdhb571") == 0) ecdh_doit[R_EC_B571]=2;
1021 else if (strcmp(*argv,"ecdh") == 0)
1023 for (i=0; i < EC_NUM; i++)
1029 BIO_printf(bio_err,"Error: bad option or value\n");
1030 BIO_printf(bio_err,"\n");
1031 BIO_printf(bio_err,"Available values:\n");
1032 #ifndef OPENSSL_NO_MD2
1033 BIO_printf(bio_err,"md2 ");
1035 #ifndef OPENSSL_NO_MDC2
1036 BIO_printf(bio_err,"mdc2 ");
1038 #ifndef OPENSSL_NO_MD4
1039 BIO_printf(bio_err,"md4 ");
1041 #ifndef OPENSSL_NO_MD5
1042 BIO_printf(bio_err,"md5 ");
1043 #ifndef OPENSSL_NO_HMAC
1044 BIO_printf(bio_err,"hmac ");
1047 #ifndef OPENSSL_NO_SHA1
1048 BIO_printf(bio_err,"sha1 ");
1050 #ifndef OPENSSL_NO_SHA256
1051 BIO_printf(bio_err,"sha256 ");
1053 #ifndef OPENSSL_NO_SHA512
1054 BIO_printf(bio_err,"sha512 ");
1056 #ifndef OPENSSL_NO_WHIRLPOOL
1057 BIO_printf(bio_err,"whirlpool");
1059 #ifndef OPENSSL_NO_RIPEMD160
1060 BIO_printf(bio_err,"rmd160");
1062 #if !defined(OPENSSL_NO_MD2) || !defined(OPENSSL_NO_MDC2) || \
1063 !defined(OPENSSL_NO_MD4) || !defined(OPENSSL_NO_MD5) || \
1064 !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160) || \
1065 !defined(OPENSSL_NO_WHIRLPOOL)
1066 BIO_printf(bio_err,"\n");
1069 #ifndef OPENSSL_NO_IDEA
1070 BIO_printf(bio_err,"idea-cbc ");
1072 #ifndef OPENSSL_NO_SEED
1073 BIO_printf(bio_err,"seed-cbc ");
1075 #ifndef OPENSSL_NO_RC2
1076 BIO_printf(bio_err,"rc2-cbc ");
1078 #ifndef OPENSSL_NO_RC5
1079 BIO_printf(bio_err,"rc5-cbc ");
1081 #ifndef OPENSSL_NO_BF
1082 BIO_printf(bio_err,"bf-cbc");
1084 #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || !defined(OPENSSL_NO_RC2) || \
1085 !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_RC5)
1086 BIO_printf(bio_err,"\n");
1088 #ifndef OPENSSL_NO_DES
1089 BIO_printf(bio_err,"des-cbc des-ede3 ");
1091 #ifndef OPENSSL_NO_AES
1092 BIO_printf(bio_err,"aes-128-cbc aes-192-cbc aes-256-cbc ");
1093 BIO_printf(bio_err,"aes-128-ige aes-192-ige aes-256-ige\n");
1094 BIO_printf(bio_err,"aes-128-gcm aes-256-gcm ");
1096 #ifndef OPENSSL_NO_CAMELLIA
1097 BIO_printf(bio_err,"\n");
1098 BIO_printf(bio_err,"camellia-128-cbc camellia-192-cbc camellia-256-cbc ");
1100 #ifndef OPENSSL_NO_RC4
1101 BIO_printf(bio_err,"rc4");
1103 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
1104 BIO_printf(bio_err," chacha20-poly1305");
1106 BIO_printf(bio_err,"\n");
1108 #ifndef OPENSSL_NO_RSA
1109 BIO_printf(bio_err,"rsa512 rsa1024 rsa2048 rsa4096\n");
1112 #ifndef OPENSSL_NO_DSA
1113 BIO_printf(bio_err,"dsa512 dsa1024 dsa2048\n");
1115 #ifndef OPENSSL_NO_ECDSA
1116 BIO_printf(bio_err,"ecdsap160 ecdsap192 ecdsap224 ecdsap256 ecdsap384 ecdsap521\n");
1117 BIO_printf(bio_err,"ecdsak163 ecdsak233 ecdsak283 ecdsak409 ecdsak571\n");
1118 BIO_printf(bio_err,"ecdsab163 ecdsab233 ecdsab283 ecdsab409 ecdsab571\n");
1119 BIO_printf(bio_err,"ecdsa\n");
1121 #ifndef OPENSSL_NO_ECDH
1122 BIO_printf(bio_err,"ecdhp160 ecdhp192 ecdhp224 ecdhp256 ecdhp384 ecdhp521\n");
1123 BIO_printf(bio_err,"ecdhk163 ecdhk233 ecdhk283 ecdhk409 ecdhk571\n");
1124 BIO_printf(bio_err,"ecdhb163 ecdhb233 ecdhb283 ecdhb409 ecdhb571\n");
1125 BIO_printf(bio_err,"ecdh\n");
1128 #ifndef OPENSSL_NO_IDEA
1129 BIO_printf(bio_err,"idea ");
1131 #ifndef OPENSSL_NO_SEED
1132 BIO_printf(bio_err,"seed ");
1134 #ifndef OPENSSL_NO_RC2
1135 BIO_printf(bio_err,"rc2 ");
1137 #ifndef OPENSSL_NO_DES
1138 BIO_printf(bio_err,"des ");
1140 #ifndef OPENSSL_NO_AES
1141 BIO_printf(bio_err,"aes ");
1143 #ifndef OPENSSL_NO_CAMELLIA
1144 BIO_printf(bio_err,"camellia ");
1146 #ifndef OPENSSL_NO_RSA
1147 BIO_printf(bio_err,"rsa ");
1149 #ifndef OPENSSL_NO_BF
1150 BIO_printf(bio_err,"blowfish");
1152 #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || \
1153 !defined(OPENSSL_NO_RC2) || !defined(OPENSSL_NO_DES) || \
1154 !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_BF) || \
1155 !defined(OPENSSL_NO_AES) || !defined(OPENSSL_NO_CAMELLIA)
1156 BIO_printf(bio_err,"\n");
1159 BIO_printf(bio_err,"\n");
1160 BIO_printf(bio_err,"Available options:\n");
1161 #if defined(TIMES) || defined(USE_TOD)
1162 BIO_printf(bio_err,"-elapsed measure time in real time instead of CPU user time.\n");
1164 #ifndef OPENSSL_NO_ENGINE
1165 BIO_printf(bio_err,"-engine e use engine e, possibly a hardware device.\n");
1167 BIO_printf(bio_err,"-evp e use EVP e.\n");
1168 BIO_printf(bio_err,"-decrypt time decryption instead of encryption (only EVP).\n");
1169 BIO_printf(bio_err,"-mr produce machine readable output.\n");
1171 BIO_printf(bio_err,"-multi n run n benchmarks in parallel.\n");
1181 if(multi && do_multi(multi))
1187 for (i=0; i<ALGOR_NUM; i++)
1192 for (i=0; i<RSA_NUM; i++)
1194 for (i=0; i<DSA_NUM; i++)
1196 #ifndef OPENSSL_NO_ECDSA
1197 for (i=0; i<EC_NUM; i++)
1200 #ifndef OPENSSL_NO_ECDH
1201 for (i=0; i<EC_NUM; i++)
1205 for (i=0; i<ALGOR_NUM; i++)
1206 if (doit[i]) pr_header++;
1208 if (usertime == 0 && !mr)
1209 BIO_printf(bio_err,"You have chosen to measure elapsed time instead of user CPU time.\n");
1211 #ifndef OPENSSL_NO_RSA
1212 for (i=0; i<RSA_NUM; i++)
1214 const unsigned char *p;
1217 rsa_key[i]=d2i_RSAPrivateKey(NULL,&p,rsa_data_length[i]);
1218 if (rsa_key[i] == NULL)
1220 BIO_printf(bio_err,"internal error loading RSA key number %d\n",i);
1226 BIO_printf(bio_err,mr ? "+RK:%d:"
1227 : "Loaded RSA key, %d bit modulus and e= 0x",
1228 BN_num_bits(rsa_key[i]->n));
1229 BN_print(bio_err,rsa_key[i]->e);
1230 BIO_printf(bio_err,"\n");
1236 #ifndef OPENSSL_NO_DSA
1237 dsa_key[0]=get_dsa512();
1238 dsa_key[1]=get_dsa1024();
1239 dsa_key[2]=get_dsa2048();
1242 #ifndef OPENSSL_NO_DES
1243 DES_set_key_unchecked(&key,&sch);
1244 DES_set_key_unchecked(&key2,&sch2);
1245 DES_set_key_unchecked(&key3,&sch3);
1247 #ifndef OPENSSL_NO_AES
1248 AES_set_encrypt_key(key16,128,&aes_ks1);
1249 AES_set_encrypt_key(key24,192,&aes_ks2);
1250 AES_set_encrypt_key(key32,256,&aes_ks3);
1252 #ifndef OPENSSL_NO_CAMELLIA
1253 Camellia_set_key(key16,128,&camellia_ks1);
1254 Camellia_set_key(ckey24,192,&camellia_ks2);
1255 Camellia_set_key(ckey32,256,&camellia_ks3);
1257 #ifndef OPENSSL_NO_IDEA
1258 idea_set_encrypt_key(key16,&idea_ks);
1260 #ifndef OPENSSL_NO_SEED
1261 SEED_set_key(key16,&seed_ks);
1263 #ifndef OPENSSL_NO_RC4
1264 RC4_set_key(&rc4_ks,16,key16);
1266 #ifndef OPENSSL_NO_RC2
1267 RC2_set_key(&rc2_ks,16,key16,128);
1269 #ifndef OPENSSL_NO_RC5
1270 RC5_32_set_key(&rc5_ks,16,key16,12);
1272 #ifndef OPENSSL_NO_BF
1273 BF_set_key(&bf_ks,16,key16);
1275 #ifndef OPENSSL_NO_CAST
1276 CAST_set_key(&cast_ks,16,key16);
1278 #ifndef OPENSSL_NO_RSA
1279 memset(rsa_c,0,sizeof(rsa_c));
1282 #ifndef OPENSSL_NO_DES
1283 BIO_printf(bio_err,"First we calculate the approximate speed ...\n");
1289 for (it=count; it; it--)
1290 DES_ecb_encrypt((DES_cblock *)buf,
1296 c[D_MD2][0]=count/10;
1297 c[D_MDC2][0]=count/10;
1302 c[D_RMD160][0]=count;
1303 c[D_RC4][0]=count*5;
1304 c[D_CBC_DES][0]=count;
1305 c[D_EDE3_DES][0]=count/3;
1306 c[D_CBC_IDEA][0]=count;
1307 c[D_CBC_SEED][0]=count;
1308 c[D_CBC_RC2][0]=count;
1309 c[D_CBC_RC5][0]=count;
1310 c[D_CBC_BF][0]=count;
1311 c[D_CBC_CAST][0]=count;
1312 c[D_CBC_128_AES][0]=count;
1313 c[D_CBC_192_AES][0]=count;
1314 c[D_CBC_256_AES][0]=count;
1315 c[D_CBC_128_CML][0]=count;
1316 c[D_CBC_192_CML][0]=count;
1317 c[D_CBC_256_CML][0]=count;
1318 c[D_SHA256][0]=count;
1319 c[D_SHA512][0]=count;
1320 c[D_WHIRLPOOL][0]=count;
1321 c[D_IGE_128_AES][0]=count;
1322 c[D_IGE_192_AES][0]=count;
1323 c[D_IGE_256_AES][0]=count;
1324 c[D_GHASH][0]=count;
1325 c[D_AES_128_GCM][0]=count;
1326 c[D_CHACHA20_POLY1305][0]=count;
1328 for (i=1; i<SIZE_NUM; i++)
1330 c[D_MD2][i]=c[D_MD2][0]*4*lengths[0]/lengths[i];
1331 c[D_MDC2][i]=c[D_MDC2][0]*4*lengths[0]/lengths[i];
1332 c[D_MD4][i]=c[D_MD4][0]*4*lengths[0]/lengths[i];
1333 c[D_MD5][i]=c[D_MD5][0]*4*lengths[0]/lengths[i];
1334 c[D_HMAC][i]=c[D_HMAC][0]*4*lengths[0]/lengths[i];
1335 c[D_SHA1][i]=c[D_SHA1][0]*4*lengths[0]/lengths[i];
1336 c[D_RMD160][i]=c[D_RMD160][0]*4*lengths[0]/lengths[i];
1337 c[D_SHA256][i]=c[D_SHA256][0]*4*lengths[0]/lengths[i];
1338 c[D_SHA512][i]=c[D_SHA512][0]*4*lengths[0]/lengths[i];
1339 c[D_WHIRLPOOL][i]=c[D_WHIRLPOOL][0]*4*lengths[0]/lengths[i];
1341 for (i=1; i<SIZE_NUM; i++)
1345 l0=(long)lengths[i-1];
1346 l1=(long)lengths[i];
1347 c[D_RC4][i]=c[D_RC4][i-1]*l0/l1;
1348 c[D_CBC_DES][i]=c[D_CBC_DES][i-1]*l0/l1;
1349 c[D_EDE3_DES][i]=c[D_EDE3_DES][i-1]*l0/l1;
1350 c[D_CBC_IDEA][i]=c[D_CBC_IDEA][i-1]*l0/l1;
1351 c[D_CBC_SEED][i]=c[D_CBC_SEED][i-1]*l0/l1;
1352 c[D_CBC_RC2][i]=c[D_CBC_RC2][i-1]*l0/l1;
1353 c[D_CBC_RC5][i]=c[D_CBC_RC5][i-1]*l0/l1;
1354 c[D_CBC_BF][i]=c[D_CBC_BF][i-1]*l0/l1;
1355 c[D_CBC_CAST][i]=c[D_CBC_CAST][i-1]*l0/l1;
1356 c[D_CBC_128_AES][i]=c[D_CBC_128_AES][i-1]*l0/l1;
1357 c[D_CBC_192_AES][i]=c[D_CBC_192_AES][i-1]*l0/l1;
1358 c[D_CBC_256_AES][i]=c[D_CBC_256_AES][i-1]*l0/l1;
1359 c[D_CBC_128_CML][i]=c[D_CBC_128_CML][i-1]*l0/l1;
1360 c[D_CBC_192_CML][i]=c[D_CBC_192_CML][i-1]*l0/l1;
1361 c[D_CBC_256_CML][i]=c[D_CBC_256_CML][i-1]*l0/l1;
1362 c[D_IGE_128_AES][i]=c[D_IGE_128_AES][i-1]*l0/l1;
1363 c[D_IGE_192_AES][i]=c[D_IGE_192_AES][i-1]*l0/l1;
1364 c[D_IGE_256_AES][i]=c[D_IGE_256_AES][i-1]*l0/l1;
1366 #ifndef OPENSSL_NO_RSA
1367 rsa_c[R_RSA_512][0]=count/2000;
1368 rsa_c[R_RSA_512][1]=count/400;
1369 for (i=1; i<RSA_NUM; i++)
1371 rsa_c[i][0]=rsa_c[i-1][0]/8;
1372 rsa_c[i][1]=rsa_c[i-1][1]/4;
1373 if ((rsa_doit[i] <= 1) && (rsa_c[i][0] == 0))
1377 if (rsa_c[i][0] == 0)
1386 #ifndef OPENSSL_NO_DSA
1387 dsa_c[R_DSA_512][0]=count/1000;
1388 dsa_c[R_DSA_512][1]=count/1000/2;
1389 for (i=1; i<DSA_NUM; i++)
1391 dsa_c[i][0]=dsa_c[i-1][0]/4;
1392 dsa_c[i][1]=dsa_c[i-1][1]/4;
1393 if ((dsa_doit[i] <= 1) && (dsa_c[i][0] == 0))
1406 #ifndef OPENSSL_NO_ECDSA
1407 ecdsa_c[R_EC_P160][0]=count/1000;
1408 ecdsa_c[R_EC_P160][1]=count/1000/2;
1409 for (i=R_EC_P192; i<=R_EC_P521; i++)
1411 ecdsa_c[i][0]=ecdsa_c[i-1][0]/2;
1412 ecdsa_c[i][1]=ecdsa_c[i-1][1]/2;
1413 if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
1417 if (ecdsa_c[i] == 0)
1424 ecdsa_c[R_EC_K163][0]=count/1000;
1425 ecdsa_c[R_EC_K163][1]=count/1000/2;
1426 for (i=R_EC_K233; i<=R_EC_K571; i++)
1428 ecdsa_c[i][0]=ecdsa_c[i-1][0]/2;
1429 ecdsa_c[i][1]=ecdsa_c[i-1][1]/2;
1430 if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
1434 if (ecdsa_c[i] == 0)
1441 ecdsa_c[R_EC_B163][0]=count/1000;
1442 ecdsa_c[R_EC_B163][1]=count/1000/2;
1443 for (i=R_EC_B233; i<=R_EC_B571; i++)
1445 ecdsa_c[i][0]=ecdsa_c[i-1][0]/2;
1446 ecdsa_c[i][1]=ecdsa_c[i-1][1]/2;
1447 if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
1451 if (ecdsa_c[i] == 0)
1460 #ifndef OPENSSL_NO_ECDH
1461 ecdh_c[R_EC_P160][0]=count/1000;
1462 ecdh_c[R_EC_P160][1]=count/1000;
1463 for (i=R_EC_P192; i<=R_EC_P521; i++)
1465 ecdh_c[i][0]=ecdh_c[i-1][0]/2;
1466 ecdh_c[i][1]=ecdh_c[i-1][1]/2;
1467 if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
1478 ecdh_c[R_EC_K163][0]=count/1000;
1479 ecdh_c[R_EC_K163][1]=count/1000;
1480 for (i=R_EC_K233; i<=R_EC_K571; i++)
1482 ecdh_c[i][0]=ecdh_c[i-1][0]/2;
1483 ecdh_c[i][1]=ecdh_c[i-1][1]/2;
1484 if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
1495 ecdh_c[R_EC_B163][0]=count/1000;
1496 ecdh_c[R_EC_B163][1]=count/1000;
1497 for (i=R_EC_B233; i<=R_EC_B571; i++)
1499 ecdh_c[i][0]=ecdh_c[i-1][0]/2;
1500 ecdh_c[i][1]=ecdh_c[i-1][1]/2;
1501 if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
1514 #define COND(d) (count < (d))
1515 #define COUNT(d) (d)
1517 /* not worth fixing */
1518 # error "You cannot disable DES on systems without SIGALRM."
1519 #endif /* OPENSSL_NO_DES */
1521 #define COND(c) (run && count<0x7fffffff)
1522 #define COUNT(d) (count)
1524 signal(SIGALRM,sig_done);
1526 #endif /* SIGALRM */
1528 #ifndef OPENSSL_NO_MD2
1531 for (j=0; j<SIZE_NUM; j++)
1533 print_message(names[D_MD2],c[D_MD2][j],lengths[j]);
1535 for (count=0,run=1; COND(c[D_MD2][j]); count++)
1536 EVP_Digest(buf,(unsigned long)lengths[j],&(md2[0]),NULL,EVP_md2(),NULL);
1538 print_result(D_MD2,j,count,d);
1542 #ifndef OPENSSL_NO_MDC2
1545 for (j=0; j<SIZE_NUM; j++)
1547 print_message(names[D_MDC2],c[D_MDC2][j],lengths[j]);
1549 for (count=0,run=1; COND(c[D_MDC2][j]); count++)
1550 EVP_Digest(buf,(unsigned long)lengths[j],&(mdc2[0]),NULL,EVP_mdc2(),NULL);
1552 print_result(D_MDC2,j,count,d);
1557 #ifndef OPENSSL_NO_MD4
1560 for (j=0; j<SIZE_NUM; j++)
1562 print_message(names[D_MD4],c[D_MD4][j],lengths[j]);
1564 for (count=0,run=1; COND(c[D_MD4][j]); count++)
1565 EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md4[0]),NULL,EVP_md4(),NULL);
1567 print_result(D_MD4,j,count,d);
1572 #ifndef OPENSSL_NO_MD5
1575 for (j=0; j<SIZE_NUM; j++)
1577 print_message(names[D_MD5],c[D_MD5][j],lengths[j]);
1579 for (count=0,run=1; COND(c[D_MD5][j]); count++)
1580 EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md5[0]),NULL,EVP_get_digestbyname("md5"),NULL);
1582 print_result(D_MD5,j,count,d);
1587 #if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_HMAC)
1592 HMAC_CTX_init(&hctx);
1593 HMAC_Init_ex(&hctx,(unsigned char *)"This is a key...",
1594 16,EVP_md5(), NULL);
1596 for (j=0; j<SIZE_NUM; j++)
1598 print_message(names[D_HMAC],c[D_HMAC][j],lengths[j]);
1600 for (count=0,run=1; COND(c[D_HMAC][j]); count++)
1602 HMAC_Init_ex(&hctx,NULL,0,NULL,NULL);
1603 HMAC_Update(&hctx,buf,lengths[j]);
1604 HMAC_Final(&hctx,&(hmac[0]),NULL);
1607 print_result(D_HMAC,j,count,d);
1609 HMAC_CTX_cleanup(&hctx);
1612 #ifndef OPENSSL_NO_SHA
1615 for (j=0; j<SIZE_NUM; j++)
1617 print_message(names[D_SHA1],c[D_SHA1][j],lengths[j]);
1619 for (count=0,run=1; COND(c[D_SHA1][j]); count++)
1620 EVP_Digest(buf,(unsigned long)lengths[j],&(sha[0]),NULL,EVP_sha1(),NULL);
1622 print_result(D_SHA1,j,count,d);
1626 #ifndef OPENSSL_NO_SHA256
1629 for (j=0; j<SIZE_NUM; j++)
1631 print_message(names[D_SHA256],c[D_SHA256][j],lengths[j]);
1633 for (count=0,run=1; COND(c[D_SHA256][j]); count++)
1634 SHA256(buf,lengths[j],sha256);
1636 print_result(D_SHA256,j,count,d);
1641 #ifndef OPENSSL_NO_SHA512
1644 for (j=0; j<SIZE_NUM; j++)
1646 print_message(names[D_SHA512],c[D_SHA512][j],lengths[j]);
1648 for (count=0,run=1; COND(c[D_SHA512][j]); count++)
1649 SHA512(buf,lengths[j],sha512);
1651 print_result(D_SHA512,j,count,d);
1657 #ifndef OPENSSL_NO_WHIRLPOOL
1658 if (doit[D_WHIRLPOOL])
1660 for (j=0; j<SIZE_NUM; j++)
1662 print_message(names[D_WHIRLPOOL],c[D_WHIRLPOOL][j],lengths[j]);
1664 for (count=0,run=1; COND(c[D_WHIRLPOOL][j]); count++)
1665 WHIRLPOOL(buf,lengths[j],whirlpool);
1667 print_result(D_WHIRLPOOL,j,count,d);
1672 #ifndef OPENSSL_NO_RIPEMD
1675 for (j=0; j<SIZE_NUM; j++)
1677 print_message(names[D_RMD160],c[D_RMD160][j],lengths[j]);
1679 for (count=0,run=1; COND(c[D_RMD160][j]); count++)
1680 EVP_Digest(buf,(unsigned long)lengths[j],&(rmd160[0]),NULL,EVP_ripemd160(),NULL);
1682 print_result(D_RMD160,j,count,d);
1686 #ifndef OPENSSL_NO_RC4
1689 for (j=0; j<SIZE_NUM; j++)
1691 print_message(names[D_RC4],c[D_RC4][j],lengths[j]);
1693 for (count=0,run=1; COND(c[D_RC4][j]); count++)
1694 RC4(&rc4_ks,(unsigned int)lengths[j],
1697 print_result(D_RC4,j,count,d);
1701 #ifndef OPENSSL_NO_DES
1702 if (doit[D_CBC_DES])
1704 for (j=0; j<SIZE_NUM; j++)
1706 print_message(names[D_CBC_DES],c[D_CBC_DES][j],lengths[j]);
1708 for (count=0,run=1; COND(c[D_CBC_DES][j]); count++)
1709 DES_ncbc_encrypt(buf,buf,lengths[j],&sch,
1710 &DES_iv,DES_ENCRYPT);
1712 print_result(D_CBC_DES,j,count,d);
1716 if (doit[D_EDE3_DES])
1718 for (j=0; j<SIZE_NUM; j++)
1720 print_message(names[D_EDE3_DES],c[D_EDE3_DES][j],lengths[j]);
1722 for (count=0,run=1; COND(c[D_EDE3_DES][j]); count++)
1723 DES_ede3_cbc_encrypt(buf,buf,lengths[j],
1725 &DES_iv,DES_ENCRYPT);
1727 print_result(D_EDE3_DES,j,count,d);
1731 #ifndef OPENSSL_NO_AES
1732 if (doit[D_CBC_128_AES])
1734 for (j=0; j<SIZE_NUM; j++)
1736 print_message(names[D_CBC_128_AES],c[D_CBC_128_AES][j],lengths[j]);
1738 for (count=0,run=1; COND(c[D_CBC_128_AES][j]); count++)
1739 AES_cbc_encrypt(buf,buf,
1740 (unsigned long)lengths[j],&aes_ks1,
1743 print_result(D_CBC_128_AES,j,count,d);
1746 if (doit[D_CBC_192_AES])
1748 for (j=0; j<SIZE_NUM; j++)
1750 print_message(names[D_CBC_192_AES],c[D_CBC_192_AES][j],lengths[j]);
1752 for (count=0,run=1; COND(c[D_CBC_192_AES][j]); count++)
1753 AES_cbc_encrypt(buf,buf,
1754 (unsigned long)lengths[j],&aes_ks2,
1757 print_result(D_CBC_192_AES,j,count,d);
1760 if (doit[D_CBC_256_AES])
1762 for (j=0; j<SIZE_NUM; j++)
1764 print_message(names[D_CBC_256_AES],c[D_CBC_256_AES][j],lengths[j]);
1766 for (count=0,run=1; COND(c[D_CBC_256_AES][j]); count++)
1767 AES_cbc_encrypt(buf,buf,
1768 (unsigned long)lengths[j],&aes_ks3,
1771 print_result(D_CBC_256_AES,j,count,d);
1775 if (doit[D_IGE_128_AES])
1777 for (j=0; j<SIZE_NUM; j++)
1779 print_message(names[D_IGE_128_AES],c[D_IGE_128_AES][j],lengths[j]);
1781 for (count=0,run=1; COND(c[D_IGE_128_AES][j]); count++)
1782 AES_ige_encrypt(buf,buf2,
1783 (unsigned long)lengths[j],&aes_ks1,
1786 print_result(D_IGE_128_AES,j,count,d);
1789 if (doit[D_IGE_192_AES])
1791 for (j=0; j<SIZE_NUM; j++)
1793 print_message(names[D_IGE_192_AES],c[D_IGE_192_AES][j],lengths[j]);
1795 for (count=0,run=1; COND(c[D_IGE_192_AES][j]); count++)
1796 AES_ige_encrypt(buf,buf2,
1797 (unsigned long)lengths[j],&aes_ks2,
1800 print_result(D_IGE_192_AES,j,count,d);
1803 if (doit[D_IGE_256_AES])
1805 for (j=0; j<SIZE_NUM; j++)
1807 print_message(names[D_IGE_256_AES],c[D_IGE_256_AES][j],lengths[j]);
1809 for (count=0,run=1; COND(c[D_IGE_256_AES][j]); count++)
1810 AES_ige_encrypt(buf,buf2,
1811 (unsigned long)lengths[j],&aes_ks3,
1814 print_result(D_IGE_256_AES,j,count,d);
1819 GCM128_CONTEXT *ctx = CRYPTO_gcm128_new(&aes_ks1,(block128_f)AES_encrypt);
1820 CRYPTO_gcm128_setiv (ctx,(unsigned char *)"0123456789ab",12);
1822 for (j=0; j<SIZE_NUM; j++)
1824 print_message(names[D_GHASH],c[D_GHASH][j],lengths[j]);
1826 for (count=0,run=1; COND(c[D_GHASH][j]); count++)
1827 CRYPTO_gcm128_aad(ctx,buf,lengths[j]);
1829 print_result(D_GHASH,j,count,d);
1831 CRYPTO_gcm128_release(ctx);
1834 if (doit[D_AES_128_GCM])
1836 const EVP_AEAD *aead = EVP_aead_aes_128_gcm();
1837 static const unsigned char nonce[32] = {0};
1841 EVP_AEAD_CTX_init(&ctx, aead, key32, EVP_AEAD_key_length(aead), EVP_AEAD_DEFAULT_TAG_LENGTH, NULL);
1842 nonce_len = EVP_AEAD_nonce_length(aead);
1844 for (j=0; j<SIZE_NUM; j++)
1846 print_message(names[D_AES_128_GCM],c[D_AES_128_GCM][j],lengths[j]);
1848 for (count=0,run=1; COND(c[D_AES_128_GCM][j]); count++)
1849 EVP_AEAD_CTX_seal(&ctx,buf, BUFSIZE, nonce, nonce_len, buf, lengths[j], NULL, 0);
1851 print_result(D_AES_128_GCM,j,count,d);
1853 EVP_AEAD_CTX_cleanup(&ctx);
1856 if (doit[D_AES_256_GCM])
1858 const EVP_AEAD *aead = EVP_aead_aes_256_gcm();
1859 static const unsigned char nonce[32] = {0};
1863 EVP_AEAD_CTX_init(&ctx, aead, key32, EVP_AEAD_key_length(aead), EVP_AEAD_DEFAULT_TAG_LENGTH, NULL);
1864 nonce_len = EVP_AEAD_nonce_length(aead);
1866 for (j=0; j<SIZE_NUM; j++)
1868 print_message(names[D_AES_256_GCM],c[D_AES_256_GCM][j],lengths[j]);
1870 for (count=0,run=1; COND(c[D_AES_256_GCM][j]); count++)
1871 EVP_AEAD_CTX_seal(&ctx,buf, BUFSIZE, nonce, nonce_len, buf, lengths[j], NULL, 0);
1873 print_result(D_AES_256_GCM,j,count,d);
1875 EVP_AEAD_CTX_cleanup(&ctx);
1879 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
1880 if (doit[D_CHACHA20_POLY1305])
1882 const EVP_AEAD *aead = EVP_aead_chacha20_poly1305();
1883 static const unsigned char nonce[32] = {0};
1887 EVP_AEAD_CTX_init(&ctx, aead, key32, EVP_AEAD_key_length(aead), EVP_AEAD_DEFAULT_TAG_LENGTH, NULL);
1888 nonce_len = EVP_AEAD_nonce_length(aead);
1890 for (j=0; j<SIZE_NUM; j++)
1892 print_message(names[D_CHACHA20_POLY1305],c[D_CHACHA20_POLY1305][j],lengths[j]);
1894 for (count=0,run=1; COND(c[D_CHACHA20_POLY1305][j]); count++)
1895 EVP_AEAD_CTX_seal(&ctx,buf, BUFSIZE, nonce, nonce_len, buf, lengths[j], NULL, 0);
1897 print_result(D_CHACHA20_POLY1305,j,count,d);
1899 EVP_AEAD_CTX_cleanup(&ctx);
1903 #ifndef OPENSSL_NO_CAMELLIA
1904 if (doit[D_CBC_128_CML])
1906 for (j=0; j<SIZE_NUM; j++)
1908 print_message(names[D_CBC_128_CML],c[D_CBC_128_CML][j],lengths[j]);
1910 for (count=0,run=1; COND(c[D_CBC_128_CML][j]); count++)
1911 Camellia_cbc_encrypt(buf,buf,
1912 (unsigned long)lengths[j],&camellia_ks1,
1913 iv,CAMELLIA_ENCRYPT);
1915 print_result(D_CBC_128_CML,j,count,d);
1918 if (doit[D_CBC_192_CML])
1920 for (j=0; j<SIZE_NUM; j++)
1922 print_message(names[D_CBC_192_CML],c[D_CBC_192_CML][j],lengths[j]);
1924 for (count=0,run=1; COND(c[D_CBC_192_CML][j]); count++)
1925 Camellia_cbc_encrypt(buf,buf,
1926 (unsigned long)lengths[j],&camellia_ks2,
1927 iv,CAMELLIA_ENCRYPT);
1929 print_result(D_CBC_192_CML,j,count,d);
1932 if (doit[D_CBC_256_CML])
1934 for (j=0; j<SIZE_NUM; j++)
1936 print_message(names[D_CBC_256_CML],c[D_CBC_256_CML][j],lengths[j]);
1938 for (count=0,run=1; COND(c[D_CBC_256_CML][j]); count++)
1939 Camellia_cbc_encrypt(buf,buf,
1940 (unsigned long)lengths[j],&camellia_ks3,
1941 iv,CAMELLIA_ENCRYPT);
1943 print_result(D_CBC_256_CML,j,count,d);
1948 #ifndef OPENSSL_NO_IDEA
1949 if (doit[D_CBC_IDEA])
1951 for (j=0; j<SIZE_NUM; j++)
1953 print_message(names[D_CBC_IDEA],c[D_CBC_IDEA][j],lengths[j]);
1955 for (count=0,run=1; COND(c[D_CBC_IDEA][j]); count++)
1956 idea_cbc_encrypt(buf,buf,
1957 (unsigned long)lengths[j],&idea_ks,
1960 print_result(D_CBC_IDEA,j,count,d);
1964 #ifndef OPENSSL_NO_SEED
1965 if (doit[D_CBC_SEED])
1967 for (j=0; j<SIZE_NUM; j++)
1969 print_message(names[D_CBC_SEED],c[D_CBC_SEED][j],lengths[j]);
1971 for (count=0,run=1; COND(c[D_CBC_SEED][j]); count++)
1972 SEED_cbc_encrypt(buf,buf,
1973 (unsigned long)lengths[j],&seed_ks,iv,1);
1975 print_result(D_CBC_SEED,j,count,d);
1979 #ifndef OPENSSL_NO_RC2
1980 if (doit[D_CBC_RC2])
1982 for (j=0; j<SIZE_NUM; j++)
1984 print_message(names[D_CBC_RC2],c[D_CBC_RC2][j],lengths[j]);
1986 for (count=0,run=1; COND(c[D_CBC_RC2][j]); count++)
1987 RC2_cbc_encrypt(buf,buf,
1988 (unsigned long)lengths[j],&rc2_ks,
1991 print_result(D_CBC_RC2,j,count,d);
1995 #ifndef OPENSSL_NO_RC5
1996 if (doit[D_CBC_RC5])
1998 for (j=0; j<SIZE_NUM; j++)
2000 print_message(names[D_CBC_RC5],c[D_CBC_RC5][j],lengths[j]);
2002 for (count=0,run=1; COND(c[D_CBC_RC5][j]); count++)
2003 RC5_32_cbc_encrypt(buf,buf,
2004 (unsigned long)lengths[j],&rc5_ks,
2007 print_result(D_CBC_RC5,j,count,d);
2011 #ifndef OPENSSL_NO_BF
2014 for (j=0; j<SIZE_NUM; j++)
2016 print_message(names[D_CBC_BF],c[D_CBC_BF][j],lengths[j]);
2018 for (count=0,run=1; COND(c[D_CBC_BF][j]); count++)
2019 BF_cbc_encrypt(buf,buf,
2020 (unsigned long)lengths[j],&bf_ks,
2023 print_result(D_CBC_BF,j,count,d);
2027 #ifndef OPENSSL_NO_CAST
2028 if (doit[D_CBC_CAST])
2030 for (j=0; j<SIZE_NUM; j++)
2032 print_message(names[D_CBC_CAST],c[D_CBC_CAST][j],lengths[j]);
2034 for (count=0,run=1; COND(c[D_CBC_CAST][j]); count++)
2035 CAST_cbc_encrypt(buf,buf,
2036 (unsigned long)lengths[j],&cast_ks,
2039 print_result(D_CBC_CAST,j,count,d);
2046 for (j=0; j<SIZE_NUM; j++)
2053 names[D_EVP]=OBJ_nid2ln(evp_cipher->nid);
2054 /* -O3 -fschedule-insns messes up an
2055 * optimization here! names[D_EVP]
2056 * somehow becomes NULL */
2057 print_message(names[D_EVP],save_count,
2060 EVP_CIPHER_CTX_init(&ctx);
2062 EVP_DecryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
2064 EVP_EncryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
2065 EVP_CIPHER_CTX_set_padding(&ctx, 0);
2069 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
2070 EVP_DecryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
2072 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
2073 EVP_EncryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
2075 EVP_DecryptFinal_ex(&ctx,buf,&outl);
2077 EVP_EncryptFinal_ex(&ctx,buf,&outl);
2079 EVP_CIPHER_CTX_cleanup(&ctx);
2083 names[D_EVP]=OBJ_nid2ln(evp_md->type);
2084 print_message(names[D_EVP],save_count,
2088 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
2089 EVP_Digest(buf,lengths[j],&(md[0]),NULL,evp_md,NULL);
2093 print_result(D_EVP,j,count,d);
2097 RAND_pseudo_bytes(buf,36);
2098 #ifndef OPENSSL_NO_RSA
2099 for (j=0; j<RSA_NUM; j++)
2102 if (!rsa_doit[j]) continue;
2103 ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num, rsa_key[j]);
2106 BIO_printf(bio_err,"RSA sign failure. No RSA sign will be done.\n");
2107 ERR_print_errors(bio_err);
2112 pkey_print_message("private","rsa",
2113 rsa_c[j][0],rsa_bits[j],
2115 /* RSA_blinding_on(rsa_key[j],NULL); */
2117 for (count=0,run=1; COND(rsa_c[j][0]); count++)
2119 ret=RSA_sign(NID_md5_sha1, buf,36, buf2,
2120 &rsa_num, rsa_key[j]);
2124 "RSA sign failure\n");
2125 ERR_print_errors(bio_err);
2131 BIO_printf(bio_err,mr ? "+R1:%ld:%d:%.2f\n"
2132 : "%ld %d bit private RSA's in %.2fs\n",
2133 count,rsa_bits[j],d);
2134 rsa_results[j][0]=d/(double)count;
2139 ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num, rsa_key[j]);
2142 BIO_printf(bio_err,"RSA verify failure. No RSA verify will be done.\n");
2143 ERR_print_errors(bio_err);
2148 pkey_print_message("public","rsa",
2149 rsa_c[j][1],rsa_bits[j],
2152 for (count=0,run=1; COND(rsa_c[j][1]); count++)
2154 ret=RSA_verify(NID_md5_sha1, buf,36, buf2,
2155 rsa_num, rsa_key[j]);
2159 "RSA verify failure\n");
2160 ERR_print_errors(bio_err);
2166 BIO_printf(bio_err,mr ? "+R2:%ld:%d:%.2f\n"
2167 : "%ld %d bit public RSA's in %.2fs\n",
2168 count,rsa_bits[j],d);
2169 rsa_results[j][1]=d/(double)count;
2175 /* if longer than 10s, don't do any more */
2176 for (j++; j<RSA_NUM; j++)
2182 RAND_pseudo_bytes(buf,20);
2183 #ifndef OPENSSL_NO_DSA
2184 if (RAND_status() != 1)
2186 RAND_seed(rnd_seed, sizeof rnd_seed);
2189 for (j=0; j<DSA_NUM; j++)
2194 if (!dsa_doit[j]) continue;
2195 /* DSA_generate_key(dsa_key[j]); */
2196 /* DSA_sign_setup(dsa_key[j],NULL); */
2197 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
2201 BIO_printf(bio_err,"DSA sign failure. No DSA sign will be done.\n");
2202 ERR_print_errors(bio_err);
2207 pkey_print_message("sign","dsa",
2208 dsa_c[j][0],dsa_bits[j],
2211 for (count=0,run=1; COND(dsa_c[j][0]); count++)
2213 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
2218 "DSA sign failure\n");
2219 ERR_print_errors(bio_err);
2225 BIO_printf(bio_err,mr ? "+R3:%ld:%d:%.2f\n"
2226 : "%ld %d bit DSA signs in %.2fs\n",
2227 count,dsa_bits[j],d);
2228 dsa_results[j][0]=d/(double)count;
2232 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
2236 BIO_printf(bio_err,"DSA verify failure. No DSA verify will be done.\n");
2237 ERR_print_errors(bio_err);
2242 pkey_print_message("verify","dsa",
2243 dsa_c[j][1],dsa_bits[j],
2246 for (count=0,run=1; COND(dsa_c[j][1]); count++)
2248 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
2253 "DSA verify failure\n");
2254 ERR_print_errors(bio_err);
2260 BIO_printf(bio_err,mr ? "+R4:%ld:%d:%.2f\n"
2261 : "%ld %d bit DSA verify in %.2fs\n",
2262 count,dsa_bits[j],d);
2263 dsa_results[j][1]=d/(double)count;
2268 /* if longer than 10s, don't do any more */
2269 for (j++; j<DSA_NUM; j++)
2273 if (rnd_fake) RAND_cleanup();
2276 #ifndef OPENSSL_NO_ECDSA
2277 if (RAND_status() != 1)
2279 RAND_seed(rnd_seed, sizeof rnd_seed);
2282 for (j=0; j<EC_NUM; j++)
2286 if (!ecdsa_doit[j]) continue; /* Ignore Curve */
2287 ecdsa[j] = EC_KEY_new_by_curve_name(test_curves[j]);
2288 if (ecdsa[j] == NULL)
2290 BIO_printf(bio_err,"ECDSA failure.\n");
2291 ERR_print_errors(bio_err);
2297 EC_KEY_precompute_mult(ecdsa[j], NULL);
2299 /* Perform ECDSA signature test */
2300 EC_KEY_generate_key(ecdsa[j]);
2301 ret = ECDSA_sign(0, buf, 20, ecdsasig,
2302 &ecdsasiglen, ecdsa[j]);
2305 BIO_printf(bio_err,"ECDSA sign failure. No ECDSA sign will be done.\n");
2306 ERR_print_errors(bio_err);
2311 pkey_print_message("sign","ecdsa",
2313 test_curves_bits[j],
2317 for (count=0,run=1; COND(ecdsa_c[j][0]);
2320 ret=ECDSA_sign(0, buf, 20,
2321 ecdsasig, &ecdsasiglen,
2325 BIO_printf(bio_err, "ECDSA sign failure\n");
2326 ERR_print_errors(bio_err);
2333 BIO_printf(bio_err, mr ? "+R5:%ld:%d:%.2f\n" :
2334 "%ld %d bit ECDSA signs in %.2fs \n",
2335 count, test_curves_bits[j], d);
2336 ecdsa_results[j][0]=d/(double)count;
2340 /* Perform ECDSA verification test */
2341 ret=ECDSA_verify(0, buf, 20, ecdsasig,
2342 ecdsasiglen, ecdsa[j]);
2345 BIO_printf(bio_err,"ECDSA verify failure. No ECDSA verify will be done.\n");
2346 ERR_print_errors(bio_err);
2351 pkey_print_message("verify","ecdsa",
2353 test_curves_bits[j],
2356 for (count=0,run=1; COND(ecdsa_c[j][1]); count++)
2358 ret=ECDSA_verify(0, buf, 20, ecdsasig, ecdsasiglen, ecdsa[j]);
2361 BIO_printf(bio_err, "ECDSA verify failure\n");
2362 ERR_print_errors(bio_err);
2368 BIO_printf(bio_err, mr? "+R6:%ld:%d:%.2f\n"
2369 : "%ld %d bit ECDSA verify in %.2fs\n",
2370 count, test_curves_bits[j], d);
2371 ecdsa_results[j][1]=d/(double)count;
2376 /* if longer than 10s, don't do any more */
2377 for (j++; j<EC_NUM; j++)
2382 if (rnd_fake) RAND_cleanup();
2385 #ifndef OPENSSL_NO_ECDH
2386 if (RAND_status() != 1)
2388 RAND_seed(rnd_seed, sizeof rnd_seed);
2391 for (j=0; j<EC_NUM; j++)
2393 if (!ecdh_doit[j]) continue;
2394 ecdh_a[j] = EC_KEY_new_by_curve_name(test_curves[j]);
2395 ecdh_b[j] = EC_KEY_new_by_curve_name(test_curves[j]);
2396 if ((ecdh_a[j] == NULL) || (ecdh_b[j] == NULL))
2398 BIO_printf(bio_err,"ECDH failure.\n");
2399 ERR_print_errors(bio_err);
2404 /* generate two ECDH key pairs */
2405 if (!EC_KEY_generate_key(ecdh_a[j]) ||
2406 !EC_KEY_generate_key(ecdh_b[j]))
2408 BIO_printf(bio_err,"ECDH key generation failure.\n");
2409 ERR_print_errors(bio_err);
2414 /* If field size is not more than 24 octets, then use SHA-1 hash of result;
2415 * otherwise, use result (see section 4.8 of draft-ietf-tls-ecc-03.txt).
2417 int field_size, outlen;
2418 void *(*kdf)(const void *in, size_t inlen, void *out, size_t *xoutlen);
2419 field_size = EC_GROUP_get_degree(EC_KEY_get0_group(ecdh_a[j]));
2420 if (field_size <= 24 * 8)
2422 outlen = KDF1_SHA1_len;
2427 outlen = (field_size+7)/8;
2430 secret_size_a = ECDH_compute_key(secret_a, outlen,
2431 EC_KEY_get0_public_key(ecdh_b[j]),
2433 secret_size_b = ECDH_compute_key(secret_b, outlen,
2434 EC_KEY_get0_public_key(ecdh_a[j]),
2436 if (secret_size_a != secret_size_b)
2441 for (secret_idx = 0;
2442 (secret_idx < secret_size_a)
2443 && (ecdh_checks == 1);
2446 if (secret_a[secret_idx] != secret_b[secret_idx])
2450 if (ecdh_checks == 0)
2452 BIO_printf(bio_err,"ECDH computations don't match.\n");
2453 ERR_print_errors(bio_err);
2457 pkey_print_message("","ecdh",
2459 test_curves_bits[j],
2462 for (count=0,run=1; COND(ecdh_c[j][0]); count++)
2464 ECDH_compute_key(secret_a, outlen,
2465 EC_KEY_get0_public_key(ecdh_b[j]),
2469 BIO_printf(bio_err, mr ? "+R7:%ld:%d:%.2f\n" :"%ld %d-bit ECDH ops in %.2fs\n",
2470 count, test_curves_bits[j], d);
2471 ecdh_results[j][0]=d/(double)count;
2479 /* if longer than 10s, don't do any more */
2480 for (j++; j<EC_NUM; j++)
2484 if (rnd_fake) RAND_cleanup();
2491 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_VERSION));
2492 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_BUILT_ON));
2494 printf("%s ",BN_options());
2495 #ifndef OPENSSL_NO_MD2
2496 printf("%s ",MD2_options());
2498 #ifndef OPENSSL_NO_RC4
2499 printf("%s ",RC4_options());
2501 #ifndef OPENSSL_NO_DES
2502 printf("%s ",DES_options());
2504 #ifndef OPENSSL_NO_AES
2505 printf("%s ",AES_options());
2507 #ifndef OPENSSL_NO_IDEA
2508 printf("%s ",idea_options());
2510 #ifndef OPENSSL_NO_BF
2511 printf("%s ",BF_options());
2513 fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS));
2519 fprintf(stdout,"+H");
2522 fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n");
2523 fprintf(stdout,"type ");
2525 for (j=0; j<SIZE_NUM; j++)
2526 fprintf(stdout,mr ? ":%d" : "%7d bytes",lengths[j]);
2527 fprintf(stdout,"\n");
2530 for (k=0; k<ALGOR_NUM; k++)
2532 if (!doit[k]) continue;
2534 fprintf(stdout,"+F:%d:%s",k,names[k]);
2536 fprintf(stdout,"%-13s",names[k]);
2537 for (j=0; j<SIZE_NUM; j++)
2539 if (results[k][j] > 10000 && !mr)
2540 fprintf(stdout," %11.2fk",results[k][j]/1e3);
2542 fprintf(stdout,mr ? ":%.2f" : " %11.2f ",results[k][j]);
2544 fprintf(stdout,"\n");
2546 #ifndef OPENSSL_NO_RSA
2548 for (k=0; k<RSA_NUM; k++)
2550 if (!rsa_doit[k]) continue;
2553 printf("%18ssign verify sign/s verify/s\n"," ");
2557 fprintf(stdout,"+F2:%u:%u:%f:%f\n",
2558 k,rsa_bits[k],rsa_results[k][0],
2561 fprintf(stdout,"rsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n",
2562 rsa_bits[k],rsa_results[k][0],rsa_results[k][1],
2563 1.0/rsa_results[k][0],1.0/rsa_results[k][1]);
2566 #ifndef OPENSSL_NO_DSA
2568 for (k=0; k<DSA_NUM; k++)
2570 if (!dsa_doit[k]) continue;
2573 printf("%18ssign verify sign/s verify/s\n"," ");
2577 fprintf(stdout,"+F3:%u:%u:%f:%f\n",
2578 k,dsa_bits[k],dsa_results[k][0],dsa_results[k][1]);
2580 fprintf(stdout,"dsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n",
2581 dsa_bits[k],dsa_results[k][0],dsa_results[k][1],
2582 1.0/dsa_results[k][0],1.0/dsa_results[k][1]);
2585 #ifndef OPENSSL_NO_ECDSA
2587 for (k=0; k<EC_NUM; k++)
2589 if (!ecdsa_doit[k]) continue;
2592 printf("%30ssign verify sign/s verify/s\n"," ");
2597 fprintf(stdout,"+F4:%u:%u:%f:%f\n",
2598 k, test_curves_bits[k],
2599 ecdsa_results[k][0],ecdsa_results[k][1]);
2602 "%4u bit ecdsa (%s) %8.4fs %8.4fs %8.1f %8.1f\n",
2603 test_curves_bits[k],
2604 test_curves_names[k],
2605 ecdsa_results[k][0],ecdsa_results[k][1],
2606 1.0/ecdsa_results[k][0],1.0/ecdsa_results[k][1]);
2611 #ifndef OPENSSL_NO_ECDH
2613 for (k=0; k<EC_NUM; k++)
2615 if (!ecdh_doit[k]) continue;
2618 printf("%30sop op/s\n"," ");
2622 fprintf(stdout,"+F5:%u:%u:%f:%f\n",
2623 k, test_curves_bits[k],
2624 ecdh_results[k][0], 1.0/ecdh_results[k][0]);
2627 fprintf(stdout,"%4u bit ecdh (%s) %8.4fs %8.1f\n",
2628 test_curves_bits[k],
2629 test_curves_names[k],
2630 ecdh_results[k][0], 1.0/ecdh_results[k][0]);
2637 ERR_print_errors(bio_err);
2638 if (buf != NULL) OPENSSL_free(buf);
2639 if (buf2 != NULL) OPENSSL_free(buf2);
2640 #ifndef OPENSSL_NO_RSA
2641 for (i=0; i<RSA_NUM; i++)
2642 if (rsa_key[i] != NULL)
2643 RSA_free(rsa_key[i]);
2645 #ifndef OPENSSL_NO_DSA
2646 for (i=0; i<DSA_NUM; i++)
2647 if (dsa_key[i] != NULL)
2648 DSA_free(dsa_key[i]);
2651 #ifndef OPENSSL_NO_ECDSA
2652 for (i=0; i<EC_NUM; i++)
2653 if (ecdsa[i] != NULL)
2654 EC_KEY_free(ecdsa[i]);
2656 #ifndef OPENSSL_NO_ECDH
2657 for (i=0; i<EC_NUM; i++)
2659 if (ecdh_a[i] != NULL)
2660 EC_KEY_free(ecdh_a[i]);
2661 if (ecdh_b[i] != NULL)
2662 EC_KEY_free(ecdh_b[i]);
2670 static void print_message(const char *s, long num, int length)
2673 BIO_printf(bio_err,mr ? "+DT:%s:%d:%d\n"
2674 : "Doing %s for %ds on %d size blocks: ",s,SECONDS,length);
2675 (void)BIO_flush(bio_err);
2678 BIO_printf(bio_err,mr ? "+DN:%s:%ld:%d\n"
2679 : "Doing %s %ld times on %d size blocks: ",s,num,length);
2680 (void)BIO_flush(bio_err);
2687 static void pkey_print_message(const char *str, const char *str2, long num,
2691 BIO_printf(bio_err,mr ? "+DTP:%d:%s:%s:%d\n"
2692 : "Doing %d bit %s %s's for %ds: ",bits,str,str2,tm);
2693 (void)BIO_flush(bio_err);
2696 BIO_printf(bio_err,mr ? "+DNP:%ld:%d:%s:%s\n"
2697 : "Doing %ld %d bit %s %s's: ",num,bits,str,str2);
2698 (void)BIO_flush(bio_err);
2705 static void print_result(int alg,int run_no,int count,double time_used)
2707 BIO_printf(bio_err,mr ? "+R:%d:%s:%f\n"
2708 : "%d %s's in %.2fs\n",count,names[alg],time_used);
2709 results[alg][run_no]=((double)count)/time_used*lengths[run_no];
2713 static char *sstrsep(char **string, const char *delim)
2716 char *token = *string;
2721 memset(isdelim, 0, sizeof isdelim);
2726 isdelim[(unsigned char)(*delim)] = 1;
2730 while (!isdelim[(unsigned char)(**string)])
2744 static int do_multi(int multi)
2749 static char sep[]=":";
2751 fds=malloc(multi*sizeof *fds);
2752 for(n=0 ; n < multi ; ++n)
2756 fprintf(stderr, "pipe failure\n");
2770 if (dup(fd[1]) == -1)
2772 fprintf(stderr, "dup failed\n");
2781 printf("Forked child %d\n",n);
2784 /* for now, assume the pipe is long enough to take all the output */
2785 for(n=0 ; n < multi ; ++n)
2791 f=fdopen(fds[n],"r");
2792 while(fgets(buf,sizeof buf,f))
2799 fprintf(stderr,"Don't understand line '%s' from child %d\n",
2803 printf("Got: %s from %d\n",buf,n);
2804 if(!strncmp(buf,"+F:",3))
2810 alg=atoi(sstrsep(&p,sep));
2812 for(j=0 ; j < SIZE_NUM ; ++j)
2813 results[alg][j]+=atof(sstrsep(&p,sep));
2815 else if(!strncmp(buf,"+F2:",4))
2821 k=atoi(sstrsep(&p,sep));
2824 d=atof(sstrsep(&p,sep));
2826 rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d);
2828 rsa_results[k][0]=d;
2830 d=atof(sstrsep(&p,sep));
2832 rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d);
2834 rsa_results[k][1]=d;
2836 else if(!strncmp(buf,"+F2:",4))
2842 k=atoi(sstrsep(&p,sep));
2845 d=atof(sstrsep(&p,sep));
2847 rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d);
2849 rsa_results[k][0]=d;
2851 d=atof(sstrsep(&p,sep));
2853 rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d);
2855 rsa_results[k][1]=d;
2857 #ifndef OPENSSL_NO_DSA
2858 else if(!strncmp(buf,"+F3:",4))
2864 k=atoi(sstrsep(&p,sep));
2867 d=atof(sstrsep(&p,sep));
2869 dsa_results[k][0]=1/(1/dsa_results[k][0]+1/d);
2871 dsa_results[k][0]=d;
2873 d=atof(sstrsep(&p,sep));
2875 dsa_results[k][1]=1/(1/dsa_results[k][1]+1/d);
2877 dsa_results[k][1]=d;
2880 #ifndef OPENSSL_NO_ECDSA
2881 else if(!strncmp(buf,"+F4:",4))
2887 k=atoi(sstrsep(&p,sep));
2890 d=atof(sstrsep(&p,sep));
2892 ecdsa_results[k][0]=1/(1/ecdsa_results[k][0]+1/d);
2894 ecdsa_results[k][0]=d;
2896 d=atof(sstrsep(&p,sep));
2898 ecdsa_results[k][1]=1/(1/ecdsa_results[k][1]+1/d);
2900 ecdsa_results[k][1]=d;
2904 #ifndef OPENSSL_NO_ECDH
2905 else if(!strncmp(buf,"+F5:",4))
2911 k=atoi(sstrsep(&p,sep));
2914 d=atof(sstrsep(&p,sep));
2916 ecdh_results[k][0]=1/(1/ecdh_results[k][0]+1/d);
2918 ecdh_results[k][0]=d;
2923 else if(!strncmp(buf,"+H:",3))
2927 fprintf(stderr,"Unknown type '%s' from child %d\n",buf,n);