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 */
360 static void multiblock_speed(const EVP_CIPHER
*evp_cipher
);
362 int MAIN(int, char **);
364 int MAIN(int argc
, char **argv
)
366 unsigned char *buf
=NULL
,*buf2
=NULL
;
368 long count
=0,save_count
=0;
370 #if !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_DSA)
373 #ifndef OPENSSL_NO_RSA
376 unsigned char md
[EVP_MAX_MD_SIZE
];
377 #ifndef OPENSSL_NO_MD2
378 unsigned char md2
[MD2_DIGEST_LENGTH
];
380 #ifndef OPENSSL_NO_MDC2
381 unsigned char mdc2
[MDC2_DIGEST_LENGTH
];
383 #ifndef OPENSSL_NO_MD4
384 unsigned char md4
[MD4_DIGEST_LENGTH
];
386 #ifndef OPENSSL_NO_MD5
387 unsigned char md5
[MD5_DIGEST_LENGTH
];
388 unsigned char hmac
[MD5_DIGEST_LENGTH
];
390 #ifndef OPENSSL_NO_SHA
391 unsigned char sha
[SHA_DIGEST_LENGTH
];
392 #ifndef OPENSSL_NO_SHA256
393 unsigned char sha256
[SHA256_DIGEST_LENGTH
];
395 #ifndef OPENSSL_NO_SHA512
396 unsigned char sha512
[SHA512_DIGEST_LENGTH
];
399 #ifndef OPENSSL_NO_WHIRLPOOL
400 unsigned char whirlpool
[WHIRLPOOL_DIGEST_LENGTH
];
402 #ifndef OPENSSL_NO_RIPEMD
403 unsigned char rmd160
[RIPEMD160_DIGEST_LENGTH
];
405 #ifndef OPENSSL_NO_RC4
408 #ifndef OPENSSL_NO_RC5
411 #ifndef OPENSSL_NO_RC2
414 #ifndef OPENSSL_NO_IDEA
415 IDEA_KEY_SCHEDULE idea_ks
;
417 #ifndef OPENSSL_NO_SEED
418 SEED_KEY_SCHEDULE seed_ks
;
420 #ifndef OPENSSL_NO_BF
423 #ifndef OPENSSL_NO_CAST
426 static const unsigned char key16
[16]=
427 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
428 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
429 #ifndef OPENSSL_NO_AES
430 static const unsigned char key24
[24]=
431 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
432 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
433 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
434 static const unsigned char key32
[32]=
435 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
436 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
437 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,
438 0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,0x56};
440 #ifndef OPENSSL_NO_CAMELLIA
441 static const unsigned char ckey24
[24]=
442 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
443 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
444 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
445 static const unsigned char ckey32
[32]=
446 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
447 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
448 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,
449 0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,0x56};
451 #ifndef OPENSSL_NO_AES
452 #define MAX_BLOCK_SIZE 128
454 #define MAX_BLOCK_SIZE 64
456 unsigned char DES_iv
[8];
457 unsigned char iv
[2*MAX_BLOCK_SIZE
/8];
458 #ifndef OPENSSL_NO_DES
459 static DES_cblock key
={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};
460 static DES_cblock key2
={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
461 static DES_cblock key3
={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
462 DES_key_schedule sch
;
463 DES_key_schedule sch2
;
464 DES_key_schedule sch3
;
466 #ifndef OPENSSL_NO_AES
467 AES_KEY aes_ks1
, aes_ks2
, aes_ks3
;
469 #ifndef OPENSSL_NO_CAMELLIA
470 CAMELLIA_KEY camellia_ks1
, camellia_ks2
, camellia_ks3
;
482 #define D_CBC_IDEA 10
483 #define D_CBC_SEED 11
487 #define D_CBC_CAST 15
488 #define D_CBC_128_AES 16
489 #define D_CBC_192_AES 17
490 #define D_CBC_256_AES 18
491 #define D_CBC_128_CML 19
492 #define D_CBC_192_CML 20
493 #define D_CBC_256_CML 21
497 #define D_WHIRLPOOL 25
498 #define D_IGE_128_AES 26
499 #define D_IGE_192_AES 27
500 #define D_IGE_256_AES 28
503 long c
[ALGOR_NUM
][SIZE_NUM
];
505 #define D_PRIME_TRIAL_DIVISION 0
506 #define D_PRIME_TRIAL_DIVISION_RETRY 1
507 #define D_PRIME_COPRIME 2
508 long prime_c
[PRIME_NUM
];
519 #define R_RSA_15360 6
538 #ifndef OPENSSL_NO_RSA
539 RSA
*rsa_key
[RSA_NUM
];
540 long rsa_c
[RSA_NUM
][2];
541 static unsigned int rsa_bits
[RSA_NUM
]={512,1024,2048,3072,4096,7680,15360};
542 static unsigned char *rsa_data
[RSA_NUM
]=
543 {test512
,test1024
,test2048
,test3072
,test4096
,test7680
,test15360
};
544 static int rsa_data_length
[RSA_NUM
]={
545 sizeof(test512
),sizeof(test1024
),
546 sizeof(test2048
),sizeof(test3072
),
547 sizeof(test4096
),sizeof(test7680
),
550 #ifndef OPENSSL_NO_DSA
551 DSA
*dsa_key
[DSA_NUM
];
552 long dsa_c
[DSA_NUM
][2];
553 static unsigned int dsa_bits
[DSA_NUM
]={512,1024,2048};
555 #ifndef OPENSSL_NO_EC
556 /* We only test over the following curves as they are representative,
557 * To add tests over more curves, simply add the curve NID
558 * and curve name to the following arrays and increase the
559 * EC_NUM value accordingly.
561 static unsigned int test_curves
[EC_NUM
] =
565 NID_X9_62_prime192v1
,
567 NID_X9_62_prime256v1
,
582 static const char * test_curves_names
[EC_NUM
] =
603 static int test_curves_bits
[EC_NUM
] =
605 160, 192, 224, 256, 384, 521,
606 163, 233, 283, 409, 571,
607 163, 233, 283, 409, 571
612 #ifndef OPENSSL_NO_ECDSA
613 unsigned char ecdsasig
[256];
614 unsigned int ecdsasiglen
;
615 EC_KEY
*ecdsa
[EC_NUM
];
616 long ecdsa_c
[EC_NUM
][2];
619 #ifndef OPENSSL_NO_ECDH
620 EC_KEY
*ecdh_a
[EC_NUM
], *ecdh_b
[EC_NUM
];
621 unsigned char secret_a
[MAX_ECDH_SIZE
], secret_b
[MAX_ECDH_SIZE
];
622 int secret_size_a
, secret_size_b
;
625 long ecdh_c
[EC_NUM
][2];
628 int prime_doit
[PRIME_NUM
];
629 int rsa_doit
[RSA_NUM
];
630 int dsa_doit
[DSA_NUM
];
631 #ifndef OPENSSL_NO_ECDSA
632 int ecdsa_doit
[EC_NUM
];
634 #ifndef OPENSSL_NO_ECDH
635 int ecdh_doit
[EC_NUM
];
639 const EVP_CIPHER
*evp_cipher
=NULL
;
640 const EVP_MD
*evp_md
=NULL
;
652 memset(results
, 0, sizeof(results
));
653 #ifndef OPENSSL_NO_DSA
654 memset(dsa_key
,0,sizeof(dsa_key
));
656 #ifndef OPENSSL_NO_ECDSA
657 for (i
=0; i
<EC_NUM
; i
++) ecdsa
[i
] = NULL
;
659 #ifndef OPENSSL_NO_ECDH
660 for (i
=0; i
<EC_NUM
; i
++)
669 if ((bio_err
=BIO_new(BIO_s_file())) != NULL
)
670 BIO_set_fp(bio_err
,stderr
,BIO_NOCLOSE
|BIO_FP_TEXT
);
672 if (!load_config(bio_err
, NULL
))
675 #ifndef OPENSSL_NO_RSA
676 memset(rsa_key
,0,sizeof(rsa_key
));
677 for (i
=0; i
<RSA_NUM
; i
++)
681 if ((buf
=(unsigned char *)OPENSSL_malloc((int)BUFSIZE
)) == NULL
)
683 BIO_printf(bio_err
,"out of memory\n");
686 if ((buf2
=(unsigned char *)OPENSSL_malloc((int)BUFSIZE
)) == NULL
)
688 BIO_printf(bio_err
,"out of memory\n");
692 memset(c
,0,sizeof(c
));
693 memset(DES_iv
,0,sizeof(DES_iv
));
694 memset(iv
,0,sizeof(iv
));
696 for (i
=0; i
<ALGOR_NUM
; i
++)
698 for (i
=0; i
<RSA_NUM
; i
++)
700 for (i
=0; i
<DSA_NUM
; i
++)
702 #ifndef OPENSSL_NO_ECDSA
703 for (i
=0; i
<EC_NUM
; i
++)
706 #ifndef OPENSSL_NO_ECDH
707 for (i
=0; i
<EC_NUM
; i
++)
710 for (i
=0; i
<PRIME_NUM
; i
++)
719 if ((argc
> 0) && (strcmp(*argv
,"-elapsed") == 0))
722 j
--; /* Otherwise, -elapsed gets confused with
725 else if ((argc
> 0) && (strcmp(*argv
,"-evp") == 0))
731 BIO_printf(bio_err
,"no EVP given\n");
734 evp_cipher
=EVP_get_cipherbyname(*argv
);
737 evp_md
=EVP_get_digestbyname(*argv
);
739 if(!evp_cipher
&& !evp_md
)
741 BIO_printf(bio_err
,"%s is an unknown cipher or digest\n",*argv
);
746 else if (argc
> 0 && !strcmp(*argv
,"-decrypt"))
749 j
--; /* Otherwise, -elapsed gets confused with
752 #ifndef OPENSSL_NO_ENGINE
753 else if ((argc
> 0) && (strcmp(*argv
,"-engine") == 0))
759 BIO_printf(bio_err
,"no engine given\n");
762 setup_engine(bio_err
, *argv
, 0);
763 /* j will be increased again further down. We just
764 don't want speed to confuse an engine with an
765 algorithm, especially when none is given (which
766 means all of them should be run) */
771 else if ((argc
> 0) && (strcmp(*argv
,"-multi") == 0))
777 BIO_printf(bio_err
,"no multi count given\n");
783 BIO_printf(bio_err
,"bad multi count\n");
786 j
--; /* Otherwise, -mr gets confused with
790 else if (argc
> 0 && !strcmp(*argv
,"-mr"))
793 j
--; /* Otherwise, -mr gets confused with
796 else if (argc
> 0 && !strcmp(*argv
,"-mb"))
802 #ifndef OPENSSL_NO_MD2
803 if (strcmp(*argv
,"md2") == 0) doit
[D_MD2
]=1;
806 #ifndef OPENSSL_NO_MDC2
807 if (strcmp(*argv
,"mdc2") == 0) doit
[D_MDC2
]=1;
810 #ifndef OPENSSL_NO_MD4
811 if (strcmp(*argv
,"md4") == 0) doit
[D_MD4
]=1;
814 #ifndef OPENSSL_NO_MD5
815 if (strcmp(*argv
,"md5") == 0) doit
[D_MD5
]=1;
818 #ifndef OPENSSL_NO_MD5
819 if (strcmp(*argv
,"hmac") == 0) doit
[D_HMAC
]=1;
822 #ifndef OPENSSL_NO_SHA
823 if (strcmp(*argv
,"sha1") == 0) doit
[D_SHA1
]=1;
825 if (strcmp(*argv
,"sha") == 0) doit
[D_SHA1
]=1,
829 #ifndef OPENSSL_NO_SHA256
830 if (strcmp(*argv
,"sha256") == 0) doit
[D_SHA256
]=1;
833 #ifndef OPENSSL_NO_SHA512
834 if (strcmp(*argv
,"sha512") == 0) doit
[D_SHA512
]=1;
838 #ifndef OPENSSL_NO_WHIRLPOOL
839 if (strcmp(*argv
,"whirlpool") == 0) doit
[D_WHIRLPOOL
]=1;
842 #ifndef OPENSSL_NO_RIPEMD
843 if (strcmp(*argv
,"ripemd") == 0) doit
[D_RMD160
]=1;
845 if (strcmp(*argv
,"rmd160") == 0) doit
[D_RMD160
]=1;
847 if (strcmp(*argv
,"ripemd160") == 0) doit
[D_RMD160
]=1;
850 #ifndef OPENSSL_NO_RC4
851 if (strcmp(*argv
,"rc4") == 0) doit
[D_RC4
]=1;
854 #ifndef OPENSSL_NO_DES
855 if (strcmp(*argv
,"des-cbc") == 0) doit
[D_CBC_DES
]=1;
856 else if (strcmp(*argv
,"des-ede3") == 0) doit
[D_EDE3_DES
]=1;
859 #ifndef OPENSSL_NO_AES
860 if (strcmp(*argv
,"aes-128-cbc") == 0) doit
[D_CBC_128_AES
]=1;
861 else if (strcmp(*argv
,"aes-192-cbc") == 0) doit
[D_CBC_192_AES
]=1;
862 else if (strcmp(*argv
,"aes-256-cbc") == 0) doit
[D_CBC_256_AES
]=1;
863 else if (strcmp(*argv
,"aes-128-ige") == 0) doit
[D_IGE_128_AES
]=1;
864 else if (strcmp(*argv
,"aes-192-ige") == 0) doit
[D_IGE_192_AES
]=1;
865 else if (strcmp(*argv
,"aes-256-ige") == 0) doit
[D_IGE_256_AES
]=1;
868 #ifndef OPENSSL_NO_CAMELLIA
869 if (strcmp(*argv
,"camellia-128-cbc") == 0) doit
[D_CBC_128_CML
]=1;
870 else if (strcmp(*argv
,"camellia-192-cbc") == 0) doit
[D_CBC_192_CML
]=1;
871 else if (strcmp(*argv
,"camellia-256-cbc") == 0) doit
[D_CBC_256_CML
]=1;
874 #ifndef OPENSSL_NO_RSA
875 #if 0 /* was: #ifdef RSAref */
876 if (strcmp(*argv
,"rsaref") == 0)
878 RSA_set_default_openssl_method(RSA_PKCS1_RSAref());
884 if (strcmp(*argv
,"openssl") == 0)
886 RSA_set_default_method(RSA_PKCS1_SSLeay());
891 #endif /* !OPENSSL_NO_RSA */
892 if (strcmp(*argv
,"dsa512") == 0) dsa_doit
[R_DSA_512
]=2;
893 else if (strcmp(*argv
,"dsa1024") == 0) dsa_doit
[R_DSA_1024
]=2;
894 else if (strcmp(*argv
,"dsa2048") == 0) dsa_doit
[R_DSA_2048
]=2;
895 else if (strcmp(*argv
,"rsa512") == 0) rsa_doit
[R_RSA_512
]=2;
896 else if (strcmp(*argv
,"rsa1024") == 0) rsa_doit
[R_RSA_1024
]=2;
897 else if (strcmp(*argv
,"rsa2048") == 0) rsa_doit
[R_RSA_2048
]=2;
898 else if (strcmp(*argv
,"rsa3072") == 0) rsa_doit
[R_RSA_3072
]=2;
899 else if (strcmp(*argv
,"rsa4096") == 0) rsa_doit
[R_RSA_4096
]=2;
900 else if (strcmp(*argv
,"rsa7680") == 0) rsa_doit
[R_RSA_7680
]=2;
901 else if (strcmp(*argv
,"rsa15360") == 0) rsa_doit
[R_RSA_15360
]=2;
903 #ifndef OPENSSL_NO_RC2
904 if (strcmp(*argv
,"rc2-cbc") == 0) doit
[D_CBC_RC2
]=1;
905 else if (strcmp(*argv
,"rc2") == 0) doit
[D_CBC_RC2
]=1;
908 #ifndef OPENSSL_NO_RC5
909 if (strcmp(*argv
,"rc5-cbc") == 0) doit
[D_CBC_RC5
]=1;
910 else if (strcmp(*argv
,"rc5") == 0) doit
[D_CBC_RC5
]=1;
913 #ifndef OPENSSL_NO_IDEA
914 if (strcmp(*argv
,"idea-cbc") == 0) doit
[D_CBC_IDEA
]=1;
915 else if (strcmp(*argv
,"idea") == 0) doit
[D_CBC_IDEA
]=1;
918 #ifndef OPENSSL_NO_SEED
919 if (strcmp(*argv
,"seed-cbc") == 0) doit
[D_CBC_SEED
]=1;
920 else if (strcmp(*argv
,"seed") == 0) doit
[D_CBC_SEED
]=1;
923 #ifndef OPENSSL_NO_BF
924 if (strcmp(*argv
,"bf-cbc") == 0) doit
[D_CBC_BF
]=1;
925 else if (strcmp(*argv
,"blowfish") == 0) doit
[D_CBC_BF
]=1;
926 else if (strcmp(*argv
,"bf") == 0) doit
[D_CBC_BF
]=1;
929 #ifndef OPENSSL_NO_CAST
930 if (strcmp(*argv
,"cast-cbc") == 0) doit
[D_CBC_CAST
]=1;
931 else if (strcmp(*argv
,"cast") == 0) doit
[D_CBC_CAST
]=1;
932 else if (strcmp(*argv
,"cast5") == 0) doit
[D_CBC_CAST
]=1;
935 #ifndef OPENSSL_NO_DES
936 if (strcmp(*argv
,"des") == 0)
943 #ifndef OPENSSL_NO_AES
944 if (strcmp(*argv
,"aes") == 0)
946 doit
[D_CBC_128_AES
]=1;
947 doit
[D_CBC_192_AES
]=1;
948 doit
[D_CBC_256_AES
]=1;
950 else if (strcmp(*argv
,"ghash") == 0)
956 #ifndef OPENSSL_NO_CAMELLIA
957 if (strcmp(*argv
,"camellia") == 0)
959 doit
[D_CBC_128_CML
]=1;
960 doit
[D_CBC_192_CML
]=1;
961 doit
[D_CBC_256_CML
]=1;
965 #ifndef OPENSSL_NO_RSA
966 if (strcmp(*argv
,"rsa") == 0)
968 rsa_doit
[R_RSA_512
]=1;
969 rsa_doit
[R_RSA_1024
]=1;
970 rsa_doit
[R_RSA_2048
]=1;
971 rsa_doit
[R_RSA_3072
]=1;
972 rsa_doit
[R_RSA_4096
]=1;
973 rsa_doit
[R_RSA_7680
]=1;
974 rsa_doit
[R_RSA_15360
]=1;
978 #ifndef OPENSSL_NO_DSA
979 if (strcmp(*argv
,"dsa") == 0)
981 dsa_doit
[R_DSA_512
]=1;
982 dsa_doit
[R_DSA_1024
]=1;
983 dsa_doit
[R_DSA_2048
]=1;
987 #ifndef OPENSSL_NO_ECDSA
988 if (strcmp(*argv
,"ecdsap160") == 0) ecdsa_doit
[R_EC_P160
]=2;
989 else if (strcmp(*argv
,"ecdsap192") == 0) ecdsa_doit
[R_EC_P192
]=2;
990 else if (strcmp(*argv
,"ecdsap224") == 0) ecdsa_doit
[R_EC_P224
]=2;
991 else if (strcmp(*argv
,"ecdsap256") == 0) ecdsa_doit
[R_EC_P256
]=2;
992 else if (strcmp(*argv
,"ecdsap384") == 0) ecdsa_doit
[R_EC_P384
]=2;
993 else if (strcmp(*argv
,"ecdsap521") == 0) ecdsa_doit
[R_EC_P521
]=2;
994 else if (strcmp(*argv
,"ecdsak163") == 0) ecdsa_doit
[R_EC_K163
]=2;
995 else if (strcmp(*argv
,"ecdsak233") == 0) ecdsa_doit
[R_EC_K233
]=2;
996 else if (strcmp(*argv
,"ecdsak283") == 0) ecdsa_doit
[R_EC_K283
]=2;
997 else if (strcmp(*argv
,"ecdsak409") == 0) ecdsa_doit
[R_EC_K409
]=2;
998 else if (strcmp(*argv
,"ecdsak571") == 0) ecdsa_doit
[R_EC_K571
]=2;
999 else if (strcmp(*argv
,"ecdsab163") == 0) ecdsa_doit
[R_EC_B163
]=2;
1000 else if (strcmp(*argv
,"ecdsab233") == 0) ecdsa_doit
[R_EC_B233
]=2;
1001 else if (strcmp(*argv
,"ecdsab283") == 0) ecdsa_doit
[R_EC_B283
]=2;
1002 else if (strcmp(*argv
,"ecdsab409") == 0) ecdsa_doit
[R_EC_B409
]=2;
1003 else if (strcmp(*argv
,"ecdsab571") == 0) ecdsa_doit
[R_EC_B571
]=2;
1004 else if (strcmp(*argv
,"ecdsa") == 0)
1006 for (i
=0; i
< EC_NUM
; i
++)
1011 #ifndef OPENSSL_NO_ECDH
1012 if (strcmp(*argv
,"ecdhp160") == 0) ecdh_doit
[R_EC_P160
]=2;
1013 else if (strcmp(*argv
,"ecdhp192") == 0) ecdh_doit
[R_EC_P192
]=2;
1014 else if (strcmp(*argv
,"ecdhp224") == 0) ecdh_doit
[R_EC_P224
]=2;
1015 else if (strcmp(*argv
,"ecdhp256") == 0) ecdh_doit
[R_EC_P256
]=2;
1016 else if (strcmp(*argv
,"ecdhp384") == 0) ecdh_doit
[R_EC_P384
]=2;
1017 else if (strcmp(*argv
,"ecdhp521") == 0) ecdh_doit
[R_EC_P521
]=2;
1018 else if (strcmp(*argv
,"ecdhk163") == 0) ecdh_doit
[R_EC_K163
]=2;
1019 else if (strcmp(*argv
,"ecdhk233") == 0) ecdh_doit
[R_EC_K233
]=2;
1020 else if (strcmp(*argv
,"ecdhk283") == 0) ecdh_doit
[R_EC_K283
]=2;
1021 else if (strcmp(*argv
,"ecdhk409") == 0) ecdh_doit
[R_EC_K409
]=2;
1022 else if (strcmp(*argv
,"ecdhk571") == 0) ecdh_doit
[R_EC_K571
]=2;
1023 else if (strcmp(*argv
,"ecdhb163") == 0) ecdh_doit
[R_EC_B163
]=2;
1024 else if (strcmp(*argv
,"ecdhb233") == 0) ecdh_doit
[R_EC_B233
]=2;
1025 else if (strcmp(*argv
,"ecdhb283") == 0) ecdh_doit
[R_EC_B283
]=2;
1026 else if (strcmp(*argv
,"ecdhb409") == 0) ecdh_doit
[R_EC_B409
]=2;
1027 else if (strcmp(*argv
,"ecdhb571") == 0) ecdh_doit
[R_EC_B571
]=2;
1028 else if (strcmp(*argv
,"ecdh") == 0)
1030 for (i
=0; i
< EC_NUM
; i
++)
1035 if (strcmp(*argv
,"prime-trial-division") == 0)
1036 prime_doit
[D_PRIME_TRIAL_DIVISION
] = 1;
1037 else if (strcmp(*argv
,"prime-trial-division-retry") == 0)
1038 prime_doit
[D_PRIME_TRIAL_DIVISION_RETRY
] = 1;
1039 else if (strcmp(*argv
,"prime-coprime") == 0)
1040 prime_doit
[D_PRIME_COPRIME
] = 1;
1041 else if (strcmp(*argv
,"prime") == 0)
1043 for (i
=0; i
< PRIME_NUM
; i
++)
1048 BIO_printf(bio_err
,"Error: bad option or value\n");
1049 BIO_printf(bio_err
,"\n");
1050 BIO_printf(bio_err
,"Available values:\n");
1051 #ifndef OPENSSL_NO_MD2
1052 BIO_printf(bio_err
,"md2 ");
1054 #ifndef OPENSSL_NO_MDC2
1055 BIO_printf(bio_err
,"mdc2 ");
1057 #ifndef OPENSSL_NO_MD4
1058 BIO_printf(bio_err
,"md4 ");
1060 #ifndef OPENSSL_NO_MD5
1061 BIO_printf(bio_err
,"md5 ");
1062 #ifndef OPENSSL_NO_HMAC
1063 BIO_printf(bio_err
,"hmac ");
1066 #ifndef OPENSSL_NO_SHA1
1067 BIO_printf(bio_err
,"sha1 ");
1069 #ifndef OPENSSL_NO_SHA256
1070 BIO_printf(bio_err
,"sha256 ");
1072 #ifndef OPENSSL_NO_SHA512
1073 BIO_printf(bio_err
,"sha512 ");
1075 #ifndef OPENSSL_NO_WHIRLPOOL
1076 BIO_printf(bio_err
,"whirlpool");
1078 #ifndef OPENSSL_NO_RIPEMD160
1079 BIO_printf(bio_err
,"rmd160");
1081 #if !defined(OPENSSL_NO_MD2) || !defined(OPENSSL_NO_MDC2) || \
1082 !defined(OPENSSL_NO_MD4) || !defined(OPENSSL_NO_MD5) || \
1083 !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160) || \
1084 !defined(OPENSSL_NO_WHIRLPOOL)
1085 BIO_printf(bio_err
,"\n");
1088 #ifndef OPENSSL_NO_IDEA
1089 BIO_printf(bio_err
,"idea-cbc ");
1091 #ifndef OPENSSL_NO_SEED
1092 BIO_printf(bio_err
,"seed-cbc ");
1094 #ifndef OPENSSL_NO_RC2
1095 BIO_printf(bio_err
,"rc2-cbc ");
1097 #ifndef OPENSSL_NO_RC5
1098 BIO_printf(bio_err
,"rc5-cbc ");
1100 #ifndef OPENSSL_NO_BF
1101 BIO_printf(bio_err
,"bf-cbc");
1103 #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || !defined(OPENSSL_NO_RC2) || \
1104 !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_RC5)
1105 BIO_printf(bio_err
,"\n");
1107 #ifndef OPENSSL_NO_DES
1108 BIO_printf(bio_err
,"des-cbc des-ede3 ");
1110 #ifndef OPENSSL_NO_AES
1111 BIO_printf(bio_err
,"aes-128-cbc aes-192-cbc aes-256-cbc ");
1112 BIO_printf(bio_err
,"aes-128-ige aes-192-ige aes-256-ige ");
1114 #ifndef OPENSSL_NO_CAMELLIA
1115 BIO_printf(bio_err
,"\n");
1116 BIO_printf(bio_err
,"camellia-128-cbc camellia-192-cbc camellia-256-cbc ");
1118 #ifndef OPENSSL_NO_RC4
1119 BIO_printf(bio_err
,"rc4");
1121 BIO_printf(bio_err
,"\n");
1123 #ifndef OPENSSL_NO_RSA
1124 BIO_printf(bio_err
,"rsa512 rsa1024 rsa2048 rsa3072 rsa4096\n");
1125 BIO_printf(bio_err
,"rsa7680 rsa15360\n");
1128 #ifndef OPENSSL_NO_DSA
1129 BIO_printf(bio_err
,"dsa512 dsa1024 dsa2048\n");
1131 #ifndef OPENSSL_NO_ECDSA
1132 BIO_printf(bio_err
,"ecdsap160 ecdsap192 ecdsap224 ecdsap256 ecdsap384 ecdsap521\n");
1133 BIO_printf(bio_err
,"ecdsak163 ecdsak233 ecdsak283 ecdsak409 ecdsak571\n");
1134 BIO_printf(bio_err
,"ecdsab163 ecdsab233 ecdsab283 ecdsab409 ecdsab571\n");
1135 BIO_printf(bio_err
,"ecdsa\n");
1137 #ifndef OPENSSL_NO_ECDH
1138 BIO_printf(bio_err
,"ecdhp160 ecdhp192 ecdhp224 ecdhp256 ecdhp384 ecdhp521\n");
1139 BIO_printf(bio_err
,"ecdhk163 ecdhk233 ecdhk283 ecdhk409 ecdhk571\n");
1140 BIO_printf(bio_err
,"ecdhb163 ecdhb233 ecdhb283 ecdhb409 ecdhb571\n");
1141 BIO_printf(bio_err
,"ecdh\n");
1144 #ifndef OPENSSL_NO_IDEA
1145 BIO_printf(bio_err
,"idea ");
1147 #ifndef OPENSSL_NO_SEED
1148 BIO_printf(bio_err
,"seed ");
1150 #ifndef OPENSSL_NO_RC2
1151 BIO_printf(bio_err
,"rc2 ");
1153 #ifndef OPENSSL_NO_DES
1154 BIO_printf(bio_err
,"des ");
1156 #ifndef OPENSSL_NO_AES
1157 BIO_printf(bio_err
,"aes ");
1159 #ifndef OPENSSL_NO_CAMELLIA
1160 BIO_printf(bio_err
,"camellia ");
1162 #ifndef OPENSSL_NO_RSA
1163 BIO_printf(bio_err
,"rsa ");
1165 #ifndef OPENSSL_NO_BF
1166 BIO_printf(bio_err
,"blowfish");
1168 #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || \
1169 !defined(OPENSSL_NO_RC2) || !defined(OPENSSL_NO_DES) || \
1170 !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_BF) || \
1171 !defined(OPENSSL_NO_AES) || !defined(OPENSSL_NO_CAMELLIA)
1172 BIO_printf(bio_err
,"\n");
1174 BIO_printf(bio_err
,"prime-trial-division prime-coprime\n");
1176 BIO_printf(bio_err
,"\n");
1177 BIO_printf(bio_err
,"Available options:\n");
1178 #if defined(TIMES) || defined(USE_TOD)
1179 BIO_printf(bio_err
,"-elapsed measure time in real time instead of CPU user time.\n");
1181 #ifndef OPENSSL_NO_ENGINE
1182 BIO_printf(bio_err
,"-engine e use engine e, possibly a hardware device.\n");
1184 BIO_printf(bio_err
,"-evp e use EVP e.\n");
1185 BIO_printf(bio_err
,"-decrypt time decryption instead of encryption (only EVP).\n");
1186 BIO_printf(bio_err
,"-mr produce machine readable output.\n");
1188 BIO_printf(bio_err
,"-multi n run n benchmarks in parallel.\n");
1198 if(multi
&& do_multi(multi
))
1204 for (i
=0; i
<ALGOR_NUM
; i
++)
1209 for (i
=0; i
<RSA_NUM
; i
++)
1211 for (i
=0; i
<DSA_NUM
; i
++)
1213 #ifndef OPENSSL_NO_ECDSA
1214 for (i
=0; i
<EC_NUM
; i
++)
1217 #ifndef OPENSSL_NO_ECDH
1218 for (i
=0; i
<EC_NUM
; i
++)
1222 for (i
=0; i
<ALGOR_NUM
; i
++)
1223 if (doit
[i
]) pr_header
++;
1225 if (usertime
== 0 && !mr
)
1226 BIO_printf(bio_err
,"You have chosen to measure elapsed time instead of user CPU time.\n");
1228 #ifndef OPENSSL_NO_RSA
1229 for (i
=0; i
<RSA_NUM
; i
++)
1231 const unsigned char *p
;
1234 rsa_key
[i
]=d2i_RSAPrivateKey(NULL
,&p
,rsa_data_length
[i
]);
1235 if (rsa_key
[i
] == NULL
)
1237 BIO_printf(bio_err
,"internal error loading RSA key number %d\n",i
);
1243 BIO_printf(bio_err
,mr
? "+RK:%d:"
1244 : "Loaded RSA key, %d bit modulus and e= 0x",
1245 BN_num_bits(rsa_key
[i
]->n
));
1246 BN_print(bio_err
,rsa_key
[i
]->e
);
1247 BIO_printf(bio_err
,"\n");
1253 #ifndef OPENSSL_NO_DSA
1254 dsa_key
[0]=get_dsa512();
1255 dsa_key
[1]=get_dsa1024();
1256 dsa_key
[2]=get_dsa2048();
1259 #ifndef OPENSSL_NO_DES
1260 DES_set_key_unchecked(&key
,&sch
);
1261 DES_set_key_unchecked(&key2
,&sch2
);
1262 DES_set_key_unchecked(&key3
,&sch3
);
1264 #ifndef OPENSSL_NO_AES
1265 AES_set_encrypt_key(key16
,128,&aes_ks1
);
1266 AES_set_encrypt_key(key24
,192,&aes_ks2
);
1267 AES_set_encrypt_key(key32
,256,&aes_ks3
);
1269 #ifndef OPENSSL_NO_CAMELLIA
1270 Camellia_set_key(key16
,128,&camellia_ks1
);
1271 Camellia_set_key(ckey24
,192,&camellia_ks2
);
1272 Camellia_set_key(ckey32
,256,&camellia_ks3
);
1274 #ifndef OPENSSL_NO_IDEA
1275 idea_set_encrypt_key(key16
,&idea_ks
);
1277 #ifndef OPENSSL_NO_SEED
1278 SEED_set_key(key16
,&seed_ks
);
1280 #ifndef OPENSSL_NO_RC4
1281 RC4_set_key(&rc4_ks
,16,key16
);
1283 #ifndef OPENSSL_NO_RC2
1284 RC2_set_key(&rc2_ks
,16,key16
,128);
1286 #ifndef OPENSSL_NO_RC5
1287 RC5_32_set_key(&rc5_ks
,16,key16
,12);
1289 #ifndef OPENSSL_NO_BF
1290 BF_set_key(&bf_ks
,16,key16
);
1292 #ifndef OPENSSL_NO_CAST
1293 CAST_set_key(&cast_ks
,16,key16
);
1295 #ifndef OPENSSL_NO_RSA
1296 memset(rsa_c
,0,sizeof(rsa_c
));
1299 #ifndef OPENSSL_NO_DES
1300 BIO_printf(bio_err
,"First we calculate the approximate speed ...\n");
1306 for (it
=count
; it
; it
--)
1307 DES_ecb_encrypt((DES_cblock
*)buf
,
1313 c
[D_MD2
][0]=count
/10;
1314 c
[D_MDC2
][0]=count
/10;
1319 c
[D_RMD160
][0]=count
;
1320 c
[D_RC4
][0]=count
*5;
1321 c
[D_CBC_DES
][0]=count
;
1322 c
[D_EDE3_DES
][0]=count
/3;
1323 c
[D_CBC_IDEA
][0]=count
;
1324 c
[D_CBC_SEED
][0]=count
;
1325 c
[D_CBC_RC2
][0]=count
;
1326 c
[D_CBC_RC5
][0]=count
;
1327 c
[D_CBC_BF
][0]=count
;
1328 c
[D_CBC_CAST
][0]=count
;
1329 c
[D_CBC_128_AES
][0]=count
;
1330 c
[D_CBC_192_AES
][0]=count
;
1331 c
[D_CBC_256_AES
][0]=count
;
1332 c
[D_CBC_128_CML
][0]=count
;
1333 c
[D_CBC_192_CML
][0]=count
;
1334 c
[D_CBC_256_CML
][0]=count
;
1335 c
[D_SHA256
][0]=count
;
1336 c
[D_SHA512
][0]=count
;
1337 c
[D_WHIRLPOOL
][0]=count
;
1338 c
[D_IGE_128_AES
][0]=count
;
1339 c
[D_IGE_192_AES
][0]=count
;
1340 c
[D_IGE_256_AES
][0]=count
;
1341 c
[D_GHASH
][0]=count
;
1343 for (i
=1; i
<SIZE_NUM
; i
++)
1347 l0
=(long)lengths
[0];
1348 l1
=(long)lengths
[i
];
1350 c
[D_MD2
][i
]=c
[D_MD2
][0]*4*l0
/l1
;
1351 c
[D_MDC2
][i
]=c
[D_MDC2
][0]*4*l0
/l1
;
1352 c
[D_MD4
][i
]=c
[D_MD4
][0]*4*l0
/l1
;
1353 c
[D_MD5
][i
]=c
[D_MD5
][0]*4*l0
/l1
;
1354 c
[D_HMAC
][i
]=c
[D_HMAC
][0]*4*l0
/l1
;
1355 c
[D_SHA1
][i
]=c
[D_SHA1
][0]*4*l0
/l1
;
1356 c
[D_RMD160
][i
]=c
[D_RMD160
][0]*4*l0
/l1
;
1357 c
[D_SHA256
][i
]=c
[D_SHA256
][0]*4*l0
/l1
;
1358 c
[D_SHA512
][i
]=c
[D_SHA512
][0]*4*l0
/l1
;
1359 c
[D_WHIRLPOOL
][i
]=c
[D_WHIRLPOOL
][0]*4*l0
/l1
;
1361 l0
=(long)lengths
[i
-1];
1363 c
[D_RC4
][i
]=c
[D_RC4
][i
-1]*l0
/l1
;
1364 c
[D_CBC_DES
][i
]=c
[D_CBC_DES
][i
-1]*l0
/l1
;
1365 c
[D_EDE3_DES
][i
]=c
[D_EDE3_DES
][i
-1]*l0
/l1
;
1366 c
[D_CBC_IDEA
][i
]=c
[D_CBC_IDEA
][i
-1]*l0
/l1
;
1367 c
[D_CBC_SEED
][i
]=c
[D_CBC_SEED
][i
-1]*l0
/l1
;
1368 c
[D_CBC_RC2
][i
]=c
[D_CBC_RC2
][i
-1]*l0
/l1
;
1369 c
[D_CBC_RC5
][i
]=c
[D_CBC_RC5
][i
-1]*l0
/l1
;
1370 c
[D_CBC_BF
][i
]=c
[D_CBC_BF
][i
-1]*l0
/l1
;
1371 c
[D_CBC_CAST
][i
]=c
[D_CBC_CAST
][i
-1]*l0
/l1
;
1372 c
[D_CBC_128_AES
][i
]=c
[D_CBC_128_AES
][i
-1]*l0
/l1
;
1373 c
[D_CBC_192_AES
][i
]=c
[D_CBC_192_AES
][i
-1]*l0
/l1
;
1374 c
[D_CBC_256_AES
][i
]=c
[D_CBC_256_AES
][i
-1]*l0
/l1
;
1375 c
[D_CBC_128_CML
][i
]=c
[D_CBC_128_CML
][i
-1]*l0
/l1
;
1376 c
[D_CBC_192_CML
][i
]=c
[D_CBC_192_CML
][i
-1]*l0
/l1
;
1377 c
[D_CBC_256_CML
][i
]=c
[D_CBC_256_CML
][i
-1]*l0
/l1
;
1378 c
[D_IGE_128_AES
][i
]=c
[D_IGE_128_AES
][i
-1]*l0
/l1
;
1379 c
[D_IGE_192_AES
][i
]=c
[D_IGE_192_AES
][i
-1]*l0
/l1
;
1380 c
[D_IGE_256_AES
][i
]=c
[D_IGE_256_AES
][i
-1]*l0
/l1
;
1383 prime_c
[D_PRIME_TRIAL_DIVISION
]=count
;
1384 prime_c
[D_PRIME_TRIAL_DIVISION_RETRY
]=count
;
1385 prime_c
[D_PRIME_COPRIME
]=count
;
1387 #ifndef OPENSSL_NO_RSA
1388 rsa_c
[R_RSA_512
][0]=count
/2000;
1389 rsa_c
[R_RSA_512
][1]=count
/400;
1390 for (i
=1; i
<RSA_NUM
; i
++)
1392 rsa_c
[i
][0]=rsa_c
[i
-1][0]/8;
1393 rsa_c
[i
][1]=rsa_c
[i
-1][1]/4;
1394 if ((rsa_doit
[i
] <= 1) && (rsa_c
[i
][0] == 0))
1398 if (rsa_c
[i
][0] == 0)
1407 #ifndef OPENSSL_NO_DSA
1408 dsa_c
[R_DSA_512
][0]=count
/1000;
1409 dsa_c
[R_DSA_512
][1]=count
/1000/2;
1410 for (i
=1; i
<DSA_NUM
; i
++)
1412 dsa_c
[i
][0]=dsa_c
[i
-1][0]/4;
1413 dsa_c
[i
][1]=dsa_c
[i
-1][1]/4;
1414 if ((dsa_doit
[i
] <= 1) && (dsa_c
[i
][0] == 0))
1427 #ifndef OPENSSL_NO_ECDSA
1428 ecdsa_c
[R_EC_P160
][0]=count
/1000;
1429 ecdsa_c
[R_EC_P160
][1]=count
/1000/2;
1430 for (i
=R_EC_P192
; i
<=R_EC_P521
; i
++)
1432 ecdsa_c
[i
][0]=ecdsa_c
[i
-1][0]/2;
1433 ecdsa_c
[i
][1]=ecdsa_c
[i
-1][1]/2;
1434 if ((ecdsa_doit
[i
] <= 1) && (ecdsa_c
[i
][0] == 0))
1438 if (ecdsa_c
[i
] == 0)
1445 ecdsa_c
[R_EC_K163
][0]=count
/1000;
1446 ecdsa_c
[R_EC_K163
][1]=count
/1000/2;
1447 for (i
=R_EC_K233
; i
<=R_EC_K571
; i
++)
1449 ecdsa_c
[i
][0]=ecdsa_c
[i
-1][0]/2;
1450 ecdsa_c
[i
][1]=ecdsa_c
[i
-1][1]/2;
1451 if ((ecdsa_doit
[i
] <= 1) && (ecdsa_c
[i
][0] == 0))
1455 if (ecdsa_c
[i
] == 0)
1462 ecdsa_c
[R_EC_B163
][0]=count
/1000;
1463 ecdsa_c
[R_EC_B163
][1]=count
/1000/2;
1464 for (i
=R_EC_B233
; i
<=R_EC_B571
; i
++)
1466 ecdsa_c
[i
][0]=ecdsa_c
[i
-1][0]/2;
1467 ecdsa_c
[i
][1]=ecdsa_c
[i
-1][1]/2;
1468 if ((ecdsa_doit
[i
] <= 1) && (ecdsa_c
[i
][0] == 0))
1472 if (ecdsa_c
[i
] == 0)
1481 #ifndef OPENSSL_NO_ECDH
1482 ecdh_c
[R_EC_P160
][0]=count
/1000;
1483 ecdh_c
[R_EC_P160
][1]=count
/1000;
1484 for (i
=R_EC_P192
; i
<=R_EC_P521
; i
++)
1486 ecdh_c
[i
][0]=ecdh_c
[i
-1][0]/2;
1487 ecdh_c
[i
][1]=ecdh_c
[i
-1][1]/2;
1488 if ((ecdh_doit
[i
] <= 1) && (ecdh_c
[i
][0] == 0))
1499 ecdh_c
[R_EC_K163
][0]=count
/1000;
1500 ecdh_c
[R_EC_K163
][1]=count
/1000;
1501 for (i
=R_EC_K233
; i
<=R_EC_K571
; i
++)
1503 ecdh_c
[i
][0]=ecdh_c
[i
-1][0]/2;
1504 ecdh_c
[i
][1]=ecdh_c
[i
-1][1]/2;
1505 if ((ecdh_doit
[i
] <= 1) && (ecdh_c
[i
][0] == 0))
1516 ecdh_c
[R_EC_B163
][0]=count
/1000;
1517 ecdh_c
[R_EC_B163
][1]=count
/1000;
1518 for (i
=R_EC_B233
; i
<=R_EC_B571
; i
++)
1520 ecdh_c
[i
][0]=ecdh_c
[i
-1][0]/2;
1521 ecdh_c
[i
][1]=ecdh_c
[i
-1][1]/2;
1522 if ((ecdh_doit
[i
] <= 1) && (ecdh_c
[i
][0] == 0))
1535 #define COND(d) (count < (d))
1536 #define COUNT(d) (d)
1538 /* not worth fixing */
1539 # error "You cannot disable DES on systems without SIGALRM."
1540 #endif /* OPENSSL_NO_DES */
1542 #define COND(c) (run && count<0x7fffffff)
1543 #define COUNT(d) (count)
1545 signal(SIGALRM
,sig_done
);
1547 #endif /* SIGALRM */
1549 #ifndef OPENSSL_NO_MD2
1552 for (j
=0; j
<SIZE_NUM
; j
++)
1554 print_message(names
[D_MD2
],c
[D_MD2
][j
],lengths
[j
]);
1556 for (count
=0,run
=1; COND(c
[D_MD2
][j
]); count
++)
1557 EVP_Digest(buf
,(unsigned long)lengths
[j
],&(md2
[0]),NULL
,EVP_md2(),NULL
);
1559 print_result(D_MD2
,j
,count
,d
);
1563 #ifndef OPENSSL_NO_MDC2
1566 for (j
=0; j
<SIZE_NUM
; j
++)
1568 print_message(names
[D_MDC2
],c
[D_MDC2
][j
],lengths
[j
]);
1570 for (count
=0,run
=1; COND(c
[D_MDC2
][j
]); count
++)
1571 EVP_Digest(buf
,(unsigned long)lengths
[j
],&(mdc2
[0]),NULL
,EVP_mdc2(),NULL
);
1573 print_result(D_MDC2
,j
,count
,d
);
1578 #ifndef OPENSSL_NO_MD4
1581 for (j
=0; j
<SIZE_NUM
; j
++)
1583 print_message(names
[D_MD4
],c
[D_MD4
][j
],lengths
[j
]);
1585 for (count
=0,run
=1; COND(c
[D_MD4
][j
]); count
++)
1586 EVP_Digest(&(buf
[0]),(unsigned long)lengths
[j
],&(md4
[0]),NULL
,EVP_md4(),NULL
);
1588 print_result(D_MD4
,j
,count
,d
);
1593 #ifndef OPENSSL_NO_MD5
1596 for (j
=0; j
<SIZE_NUM
; j
++)
1598 print_message(names
[D_MD5
],c
[D_MD5
][j
],lengths
[j
]);
1600 for (count
=0,run
=1; COND(c
[D_MD5
][j
]); count
++)
1601 MD5(buf
,lengths
[j
],md5
);
1603 print_result(D_MD5
,j
,count
,d
);
1608 #if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_HMAC)
1613 HMAC_CTX_init(&hctx
);
1614 HMAC_Init_ex(&hctx
,(unsigned char *)"This is a key...",
1615 16,EVP_md5(), NULL
);
1617 for (j
=0; j
<SIZE_NUM
; j
++)
1619 print_message(names
[D_HMAC
],c
[D_HMAC
][j
],lengths
[j
]);
1621 for (count
=0,run
=1; COND(c
[D_HMAC
][j
]); count
++)
1623 HMAC_Init_ex(&hctx
,NULL
,0,NULL
,NULL
);
1624 HMAC_Update(&hctx
,buf
,lengths
[j
]);
1625 HMAC_Final(&hctx
,&(hmac
[0]),NULL
);
1628 print_result(D_HMAC
,j
,count
,d
);
1630 HMAC_CTX_cleanup(&hctx
);
1633 #ifndef OPENSSL_NO_SHA
1636 for (j
=0; j
<SIZE_NUM
; j
++)
1638 print_message(names
[D_SHA1
],c
[D_SHA1
][j
],lengths
[j
]);
1640 for (count
=0,run
=1; COND(c
[D_SHA1
][j
]); count
++)
1642 EVP_Digest(buf
,(unsigned long)lengths
[j
],&(sha
[0]),NULL
,EVP_sha1(),NULL
);
1644 SHA1(buf
,lengths
[j
],sha
);
1647 print_result(D_SHA1
,j
,count
,d
);
1651 #ifndef OPENSSL_NO_SHA256
1654 for (j
=0; j
<SIZE_NUM
; j
++)
1656 print_message(names
[D_SHA256
],c
[D_SHA256
][j
],lengths
[j
]);
1658 for (count
=0,run
=1; COND(c
[D_SHA256
][j
]); count
++)
1659 SHA256(buf
,lengths
[j
],sha256
);
1661 print_result(D_SHA256
,j
,count
,d
);
1666 #ifndef OPENSSL_NO_SHA512
1669 for (j
=0; j
<SIZE_NUM
; j
++)
1671 print_message(names
[D_SHA512
],c
[D_SHA512
][j
],lengths
[j
]);
1673 for (count
=0,run
=1; COND(c
[D_SHA512
][j
]); count
++)
1674 SHA512(buf
,lengths
[j
],sha512
);
1676 print_result(D_SHA512
,j
,count
,d
);
1682 #ifndef OPENSSL_NO_WHIRLPOOL
1683 if (doit
[D_WHIRLPOOL
])
1685 for (j
=0; j
<SIZE_NUM
; j
++)
1687 print_message(names
[D_WHIRLPOOL
],c
[D_WHIRLPOOL
][j
],lengths
[j
]);
1689 for (count
=0,run
=1; COND(c
[D_WHIRLPOOL
][j
]); count
++)
1690 WHIRLPOOL(buf
,lengths
[j
],whirlpool
);
1692 print_result(D_WHIRLPOOL
,j
,count
,d
);
1697 #ifndef OPENSSL_NO_RIPEMD
1700 for (j
=0; j
<SIZE_NUM
; j
++)
1702 print_message(names
[D_RMD160
],c
[D_RMD160
][j
],lengths
[j
]);
1704 for (count
=0,run
=1; COND(c
[D_RMD160
][j
]); count
++)
1705 EVP_Digest(buf
,(unsigned long)lengths
[j
],&(rmd160
[0]),NULL
,EVP_ripemd160(),NULL
);
1707 print_result(D_RMD160
,j
,count
,d
);
1711 #ifndef OPENSSL_NO_RC4
1714 for (j
=0; j
<SIZE_NUM
; j
++)
1716 print_message(names
[D_RC4
],c
[D_RC4
][j
],lengths
[j
]);
1718 for (count
=0,run
=1; COND(c
[D_RC4
][j
]); count
++)
1719 RC4(&rc4_ks
,(unsigned int)lengths
[j
],
1722 print_result(D_RC4
,j
,count
,d
);
1726 #ifndef OPENSSL_NO_DES
1727 if (doit
[D_CBC_DES
])
1729 for (j
=0; j
<SIZE_NUM
; j
++)
1731 print_message(names
[D_CBC_DES
],c
[D_CBC_DES
][j
],lengths
[j
]);
1733 for (count
=0,run
=1; COND(c
[D_CBC_DES
][j
]); count
++)
1734 DES_ncbc_encrypt(buf
,buf
,lengths
[j
],&sch
,
1735 &DES_iv
,DES_ENCRYPT
);
1737 print_result(D_CBC_DES
,j
,count
,d
);
1741 if (doit
[D_EDE3_DES
])
1743 for (j
=0; j
<SIZE_NUM
; j
++)
1745 print_message(names
[D_EDE3_DES
],c
[D_EDE3_DES
][j
],lengths
[j
]);
1747 for (count
=0,run
=1; COND(c
[D_EDE3_DES
][j
]); count
++)
1748 DES_ede3_cbc_encrypt(buf
,buf
,lengths
[j
],
1750 &DES_iv
,DES_ENCRYPT
);
1752 print_result(D_EDE3_DES
,j
,count
,d
);
1756 #ifndef OPENSSL_NO_AES
1757 if (doit
[D_CBC_128_AES
])
1759 for (j
=0; j
<SIZE_NUM
; j
++)
1761 print_message(names
[D_CBC_128_AES
],c
[D_CBC_128_AES
][j
],lengths
[j
]);
1763 for (count
=0,run
=1; COND(c
[D_CBC_128_AES
][j
]); count
++)
1764 AES_cbc_encrypt(buf
,buf
,
1765 (unsigned long)lengths
[j
],&aes_ks1
,
1768 print_result(D_CBC_128_AES
,j
,count
,d
);
1771 if (doit
[D_CBC_192_AES
])
1773 for (j
=0; j
<SIZE_NUM
; j
++)
1775 print_message(names
[D_CBC_192_AES
],c
[D_CBC_192_AES
][j
],lengths
[j
]);
1777 for (count
=0,run
=1; COND(c
[D_CBC_192_AES
][j
]); count
++)
1778 AES_cbc_encrypt(buf
,buf
,
1779 (unsigned long)lengths
[j
],&aes_ks2
,
1782 print_result(D_CBC_192_AES
,j
,count
,d
);
1785 if (doit
[D_CBC_256_AES
])
1787 for (j
=0; j
<SIZE_NUM
; j
++)
1789 print_message(names
[D_CBC_256_AES
],c
[D_CBC_256_AES
][j
],lengths
[j
]);
1791 for (count
=0,run
=1; COND(c
[D_CBC_256_AES
][j
]); count
++)
1792 AES_cbc_encrypt(buf
,buf
,
1793 (unsigned long)lengths
[j
],&aes_ks3
,
1796 print_result(D_CBC_256_AES
,j
,count
,d
);
1800 if (doit
[D_IGE_128_AES
])
1802 for (j
=0; j
<SIZE_NUM
; j
++)
1804 print_message(names
[D_IGE_128_AES
],c
[D_IGE_128_AES
][j
],lengths
[j
]);
1806 for (count
=0,run
=1; COND(c
[D_IGE_128_AES
][j
]); count
++)
1807 AES_ige_encrypt(buf
,buf2
,
1808 (unsigned long)lengths
[j
],&aes_ks1
,
1811 print_result(D_IGE_128_AES
,j
,count
,d
);
1814 if (doit
[D_IGE_192_AES
])
1816 for (j
=0; j
<SIZE_NUM
; j
++)
1818 print_message(names
[D_IGE_192_AES
],c
[D_IGE_192_AES
][j
],lengths
[j
]);
1820 for (count
=0,run
=1; COND(c
[D_IGE_192_AES
][j
]); count
++)
1821 AES_ige_encrypt(buf
,buf2
,
1822 (unsigned long)lengths
[j
],&aes_ks2
,
1825 print_result(D_IGE_192_AES
,j
,count
,d
);
1828 if (doit
[D_IGE_256_AES
])
1830 for (j
=0; j
<SIZE_NUM
; j
++)
1832 print_message(names
[D_IGE_256_AES
],c
[D_IGE_256_AES
][j
],lengths
[j
]);
1834 for (count
=0,run
=1; COND(c
[D_IGE_256_AES
][j
]); count
++)
1835 AES_ige_encrypt(buf
,buf2
,
1836 (unsigned long)lengths
[j
],&aes_ks3
,
1839 print_result(D_IGE_256_AES
,j
,count
,d
);
1844 GCM128_CONTEXT
*ctx
= CRYPTO_gcm128_new(&aes_ks1
,(block128_f
)AES_encrypt
);
1845 CRYPTO_gcm128_setiv (ctx
,(unsigned char *)"0123456789ab",12);
1847 for (j
=0; j
<SIZE_NUM
; j
++)
1849 print_message(names
[D_GHASH
],c
[D_GHASH
][j
],lengths
[j
]);
1851 for (count
=0,run
=1; COND(c
[D_GHASH
][j
]); count
++)
1852 CRYPTO_gcm128_aad(ctx
,buf
,lengths
[j
]);
1854 print_result(D_GHASH
,j
,count
,d
);
1856 CRYPTO_gcm128_release(ctx
);
1860 #ifndef OPENSSL_NO_CAMELLIA
1861 if (doit
[D_CBC_128_CML
])
1863 for (j
=0; j
<SIZE_NUM
; j
++)
1865 print_message(names
[D_CBC_128_CML
],c
[D_CBC_128_CML
][j
],lengths
[j
]);
1867 for (count
=0,run
=1; COND(c
[D_CBC_128_CML
][j
]); count
++)
1868 Camellia_cbc_encrypt(buf
,buf
,
1869 (unsigned long)lengths
[j
],&camellia_ks1
,
1870 iv
,CAMELLIA_ENCRYPT
);
1872 print_result(D_CBC_128_CML
,j
,count
,d
);
1875 if (doit
[D_CBC_192_CML
])
1877 for (j
=0; j
<SIZE_NUM
; j
++)
1879 print_message(names
[D_CBC_192_CML
],c
[D_CBC_192_CML
][j
],lengths
[j
]);
1881 for (count
=0,run
=1; COND(c
[D_CBC_192_CML
][j
]); count
++)
1882 Camellia_cbc_encrypt(buf
,buf
,
1883 (unsigned long)lengths
[j
],&camellia_ks2
,
1884 iv
,CAMELLIA_ENCRYPT
);
1886 print_result(D_CBC_192_CML
,j
,count
,d
);
1889 if (doit
[D_CBC_256_CML
])
1891 for (j
=0; j
<SIZE_NUM
; j
++)
1893 print_message(names
[D_CBC_256_CML
],c
[D_CBC_256_CML
][j
],lengths
[j
]);
1895 for (count
=0,run
=1; COND(c
[D_CBC_256_CML
][j
]); count
++)
1896 Camellia_cbc_encrypt(buf
,buf
,
1897 (unsigned long)lengths
[j
],&camellia_ks3
,
1898 iv
,CAMELLIA_ENCRYPT
);
1900 print_result(D_CBC_256_CML
,j
,count
,d
);
1905 #ifndef OPENSSL_NO_IDEA
1906 if (doit
[D_CBC_IDEA
])
1908 for (j
=0; j
<SIZE_NUM
; j
++)
1910 print_message(names
[D_CBC_IDEA
],c
[D_CBC_IDEA
][j
],lengths
[j
]);
1912 for (count
=0,run
=1; COND(c
[D_CBC_IDEA
][j
]); count
++)
1913 idea_cbc_encrypt(buf
,buf
,
1914 (unsigned long)lengths
[j
],&idea_ks
,
1917 print_result(D_CBC_IDEA
,j
,count
,d
);
1921 #ifndef OPENSSL_NO_SEED
1922 if (doit
[D_CBC_SEED
])
1924 for (j
=0; j
<SIZE_NUM
; j
++)
1926 print_message(names
[D_CBC_SEED
],c
[D_CBC_SEED
][j
],lengths
[j
]);
1928 for (count
=0,run
=1; COND(c
[D_CBC_SEED
][j
]); count
++)
1929 SEED_cbc_encrypt(buf
,buf
,
1930 (unsigned long)lengths
[j
],&seed_ks
,iv
,1);
1932 print_result(D_CBC_SEED
,j
,count
,d
);
1936 #ifndef OPENSSL_NO_RC2
1937 if (doit
[D_CBC_RC2
])
1939 for (j
=0; j
<SIZE_NUM
; j
++)
1941 print_message(names
[D_CBC_RC2
],c
[D_CBC_RC2
][j
],lengths
[j
]);
1943 for (count
=0,run
=1; COND(c
[D_CBC_RC2
][j
]); count
++)
1944 RC2_cbc_encrypt(buf
,buf
,
1945 (unsigned long)lengths
[j
],&rc2_ks
,
1948 print_result(D_CBC_RC2
,j
,count
,d
);
1952 #ifndef OPENSSL_NO_RC5
1953 if (doit
[D_CBC_RC5
])
1955 for (j
=0; j
<SIZE_NUM
; j
++)
1957 print_message(names
[D_CBC_RC5
],c
[D_CBC_RC5
][j
],lengths
[j
]);
1959 for (count
=0,run
=1; COND(c
[D_CBC_RC5
][j
]); count
++)
1960 RC5_32_cbc_encrypt(buf
,buf
,
1961 (unsigned long)lengths
[j
],&rc5_ks
,
1964 print_result(D_CBC_RC5
,j
,count
,d
);
1968 #ifndef OPENSSL_NO_BF
1971 for (j
=0; j
<SIZE_NUM
; j
++)
1973 print_message(names
[D_CBC_BF
],c
[D_CBC_BF
][j
],lengths
[j
]);
1975 for (count
=0,run
=1; COND(c
[D_CBC_BF
][j
]); count
++)
1976 BF_cbc_encrypt(buf
,buf
,
1977 (unsigned long)lengths
[j
],&bf_ks
,
1980 print_result(D_CBC_BF
,j
,count
,d
);
1984 #ifndef OPENSSL_NO_CAST
1985 if (doit
[D_CBC_CAST
])
1987 for (j
=0; j
<SIZE_NUM
; j
++)
1989 print_message(names
[D_CBC_CAST
],c
[D_CBC_CAST
][j
],lengths
[j
]);
1991 for (count
=0,run
=1; COND(c
[D_CBC_CAST
][j
]); count
++)
1992 CAST_cbc_encrypt(buf
,buf
,
1993 (unsigned long)lengths
[j
],&cast_ks
,
1996 print_result(D_CBC_CAST
,j
,count
,d
);
2003 #ifdef EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
2004 if (multiblock
&& evp_cipher
)
2006 if (!(EVP_CIPHER_flags(evp_cipher
)&EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
))
2008 fprintf(stderr
,"%s is not multi-block capable\n",OBJ_nid2ln(evp_cipher
->nid
));
2011 multiblock_speed(evp_cipher
);
2016 for (j
=0; j
<SIZE_NUM
; j
++)
2023 names
[D_EVP
]=OBJ_nid2ln(evp_cipher
->nid
);
2024 /* -O3 -fschedule-insns messes up an
2025 * optimization here! names[D_EVP]
2026 * somehow becomes NULL */
2027 print_message(names
[D_EVP
],save_count
,
2030 EVP_CIPHER_CTX_init(&ctx
);
2032 EVP_DecryptInit_ex(&ctx
,evp_cipher
,NULL
,key16
,iv
);
2034 EVP_EncryptInit_ex(&ctx
,evp_cipher
,NULL
,key16
,iv
);
2035 EVP_CIPHER_CTX_set_padding(&ctx
, 0);
2039 for (count
=0,run
=1; COND(save_count
*4*lengths
[0]/lengths
[j
]); count
++)
2040 EVP_DecryptUpdate(&ctx
,buf
,&outl
,buf
,lengths
[j
]);
2042 for (count
=0,run
=1; COND(save_count
*4*lengths
[0]/lengths
[j
]); count
++)
2043 EVP_EncryptUpdate(&ctx
,buf
,&outl
,buf
,lengths
[j
]);
2045 EVP_DecryptFinal_ex(&ctx
,buf
,&outl
);
2047 EVP_EncryptFinal_ex(&ctx
,buf
,&outl
);
2049 EVP_CIPHER_CTX_cleanup(&ctx
);
2053 names
[D_EVP
]=OBJ_nid2ln(evp_md
->type
);
2054 print_message(names
[D_EVP
],save_count
,
2058 for (count
=0,run
=1; COND(save_count
*4*lengths
[0]/lengths
[j
]); count
++)
2059 EVP_Digest(buf
,lengths
[j
],&(md
[0]),NULL
,evp_md
,NULL
);
2063 print_result(D_EVP
,j
,count
,d
);
2067 if (prime_doit
[D_PRIME_TRIAL_DIVISION
])
2069 BIGNUM
*rnd
= BN_new();
2070 BIGNUM
*add
= BN_new();
2071 BN_CTX
*ctx
= BN_CTX_new();
2073 BN_set_word(add
, 2);
2074 prime_print_message(prime_names
[D_PRIME_TRIAL_DIVISION
],
2075 prime_c
[D_PRIME_TRIAL_DIVISION
]);
2078 for (count
=0, run
=1; COND(prime_c
[D_PRIME_TRIAL_DIVISION
]); count
++)
2079 if (!bn_probable_prime_dh(rnd
, 1024, add
, NULL
, ctx
)) count
--;
2082 prime_print_result(D_PRIME_TRIAL_DIVISION
, count
, d
);
2089 if (prime_doit
[D_PRIME_TRIAL_DIVISION_RETRY
])
2091 BIGNUM
*rnd
= BN_new();
2092 BN_CTX
*ctx
= BN_CTX_new();
2094 prime_print_message(prime_names
[D_PRIME_TRIAL_DIVISION_RETRY
],
2095 prime_c
[D_PRIME_TRIAL_DIVISION_RETRY
]);
2098 for (count
=0, run
=1; COND(prime_c
[D_PRIME_TRIAL_DIVISION_RETRY
]); count
++)
2099 if (!bn_probable_prime_dh_retry(rnd
, 1024, ctx
)) count
--;
2102 prime_print_result(D_PRIME_TRIAL_DIVISION_RETRY
, count
, d
);
2108 if (prime_doit
[D_PRIME_COPRIME
])
2110 BIGNUM
*rnd
= BN_new();
2111 BN_CTX
*ctx
= BN_CTX_new();
2113 prime_print_message(prime_names
[D_PRIME_COPRIME
],
2114 prime_c
[D_PRIME_COPRIME
]);
2117 for (count
=0, run
=1; COND(prime_c
[D_PRIME_COPRIME
]); count
++)
2118 if (!bn_probable_prime_dh_coprime(rnd
, 1024, ctx
)) count
--;
2121 prime_print_result(D_PRIME_COPRIME
, count
, d
);
2127 RAND_pseudo_bytes(buf
,36);
2128 #ifndef OPENSSL_NO_RSA
2129 for (j
=0; j
<RSA_NUM
; j
++)
2132 if (!rsa_doit
[j
]) continue;
2133 ret
=RSA_sign(NID_md5_sha1
, buf
,36, buf2
, &rsa_num
, rsa_key
[j
]);
2136 BIO_printf(bio_err
,"RSA sign failure. No RSA sign will be done.\n");
2137 ERR_print_errors(bio_err
);
2142 pkey_print_message("private","rsa",
2143 rsa_c
[j
][0],rsa_bits
[j
],
2145 /* RSA_blinding_on(rsa_key[j],NULL); */
2147 for (count
=0,run
=1; COND(rsa_c
[j
][0]); count
++)
2149 ret
=RSA_sign(NID_md5_sha1
, buf
,36, buf2
,
2150 &rsa_num
, rsa_key
[j
]);
2154 "RSA sign failure\n");
2155 ERR_print_errors(bio_err
);
2161 BIO_printf(bio_err
,mr
? "+R1:%ld:%d:%.2f\n"
2162 : "%ld %d bit private RSA's in %.2fs\n",
2163 count
,rsa_bits
[j
],d
);
2164 rsa_results
[j
][0]=d
/(double)count
;
2169 ret
=RSA_verify(NID_md5_sha1
, buf
,36, buf2
, rsa_num
, rsa_key
[j
]);
2172 BIO_printf(bio_err
,"RSA verify failure. No RSA verify will be done.\n");
2173 ERR_print_errors(bio_err
);
2178 pkey_print_message("public","rsa",
2179 rsa_c
[j
][1],rsa_bits
[j
],
2182 for (count
=0,run
=1; COND(rsa_c
[j
][1]); count
++)
2184 ret
=RSA_verify(NID_md5_sha1
, buf
,36, buf2
,
2185 rsa_num
, rsa_key
[j
]);
2189 "RSA verify failure\n");
2190 ERR_print_errors(bio_err
);
2196 BIO_printf(bio_err
,mr
? "+R2:%ld:%d:%.2f\n"
2197 : "%ld %d bit public RSA's in %.2fs\n",
2198 count
,rsa_bits
[j
],d
);
2199 rsa_results
[j
][1]=d
/(double)count
;
2205 /* if longer than 10s, don't do any more */
2206 for (j
++; j
<RSA_NUM
; j
++)
2212 RAND_pseudo_bytes(buf
,20);
2213 #ifndef OPENSSL_NO_DSA
2214 if (RAND_status() != 1)
2216 RAND_seed(rnd_seed
, sizeof rnd_seed
);
2219 for (j
=0; j
<DSA_NUM
; j
++)
2224 if (!dsa_doit
[j
]) continue;
2225 /* DSA_generate_key(dsa_key[j]); */
2226 /* DSA_sign_setup(dsa_key[j],NULL); */
2227 ret
=DSA_sign(EVP_PKEY_DSA
,buf
,20,buf2
,
2231 BIO_printf(bio_err
,"DSA sign failure. No DSA sign will be done.\n");
2232 ERR_print_errors(bio_err
);
2237 pkey_print_message("sign","dsa",
2238 dsa_c
[j
][0],dsa_bits
[j
],
2241 for (count
=0,run
=1; COND(dsa_c
[j
][0]); count
++)
2243 ret
=DSA_sign(EVP_PKEY_DSA
,buf
,20,buf2
,
2248 "DSA sign failure\n");
2249 ERR_print_errors(bio_err
);
2255 BIO_printf(bio_err
,mr
? "+R3:%ld:%d:%.2f\n"
2256 : "%ld %d bit DSA signs in %.2fs\n",
2257 count
,dsa_bits
[j
],d
);
2258 dsa_results
[j
][0]=d
/(double)count
;
2262 ret
=DSA_verify(EVP_PKEY_DSA
,buf
,20,buf2
,
2266 BIO_printf(bio_err
,"DSA verify failure. No DSA verify will be done.\n");
2267 ERR_print_errors(bio_err
);
2272 pkey_print_message("verify","dsa",
2273 dsa_c
[j
][1],dsa_bits
[j
],
2276 for (count
=0,run
=1; COND(dsa_c
[j
][1]); count
++)
2278 ret
=DSA_verify(EVP_PKEY_DSA
,buf
,20,buf2
,
2283 "DSA verify failure\n");
2284 ERR_print_errors(bio_err
);
2290 BIO_printf(bio_err
,mr
? "+R4:%ld:%d:%.2f\n"
2291 : "%ld %d bit DSA verify in %.2fs\n",
2292 count
,dsa_bits
[j
],d
);
2293 dsa_results
[j
][1]=d
/(double)count
;
2298 /* if longer than 10s, don't do any more */
2299 for (j
++; j
<DSA_NUM
; j
++)
2303 if (rnd_fake
) RAND_cleanup();
2306 #ifndef OPENSSL_NO_ECDSA
2307 if (RAND_status() != 1)
2309 RAND_seed(rnd_seed
, sizeof rnd_seed
);
2312 for (j
=0; j
<EC_NUM
; j
++)
2316 if (!ecdsa_doit
[j
]) continue; /* Ignore Curve */
2317 ecdsa
[j
] = EC_KEY_new_by_curve_name(test_curves
[j
]);
2318 if (ecdsa
[j
] == NULL
)
2320 BIO_printf(bio_err
,"ECDSA failure.\n");
2321 ERR_print_errors(bio_err
);
2327 EC_KEY_precompute_mult(ecdsa
[j
], NULL
);
2329 /* Perform ECDSA signature test */
2330 EC_KEY_generate_key(ecdsa
[j
]);
2331 ret
= ECDSA_sign(0, buf
, 20, ecdsasig
,
2332 &ecdsasiglen
, ecdsa
[j
]);
2335 BIO_printf(bio_err
,"ECDSA sign failure. No ECDSA sign will be done.\n");
2336 ERR_print_errors(bio_err
);
2341 pkey_print_message("sign","ecdsa",
2343 test_curves_bits
[j
],
2347 for (count
=0,run
=1; COND(ecdsa_c
[j
][0]);
2350 ret
=ECDSA_sign(0, buf
, 20,
2351 ecdsasig
, &ecdsasiglen
,
2355 BIO_printf(bio_err
, "ECDSA sign failure\n");
2356 ERR_print_errors(bio_err
);
2363 BIO_printf(bio_err
, mr
? "+R5:%ld:%d:%.2f\n" :
2364 "%ld %d bit ECDSA signs in %.2fs \n",
2365 count
, test_curves_bits
[j
], d
);
2366 ecdsa_results
[j
][0]=d
/(double)count
;
2370 /* Perform ECDSA verification test */
2371 ret
=ECDSA_verify(0, buf
, 20, ecdsasig
,
2372 ecdsasiglen
, ecdsa
[j
]);
2375 BIO_printf(bio_err
,"ECDSA verify failure. No ECDSA verify will be done.\n");
2376 ERR_print_errors(bio_err
);
2381 pkey_print_message("verify","ecdsa",
2383 test_curves_bits
[j
],
2386 for (count
=0,run
=1; COND(ecdsa_c
[j
][1]); count
++)
2388 ret
=ECDSA_verify(0, buf
, 20, ecdsasig
, ecdsasiglen
, ecdsa
[j
]);
2391 BIO_printf(bio_err
, "ECDSA verify failure\n");
2392 ERR_print_errors(bio_err
);
2398 BIO_printf(bio_err
, mr
? "+R6:%ld:%d:%.2f\n"
2399 : "%ld %d bit ECDSA verify in %.2fs\n",
2400 count
, test_curves_bits
[j
], d
);
2401 ecdsa_results
[j
][1]=d
/(double)count
;
2406 /* if longer than 10s, don't do any more */
2407 for (j
++; j
<EC_NUM
; j
++)
2412 if (rnd_fake
) RAND_cleanup();
2415 #ifndef OPENSSL_NO_ECDH
2416 if (RAND_status() != 1)
2418 RAND_seed(rnd_seed
, sizeof rnd_seed
);
2421 for (j
=0; j
<EC_NUM
; j
++)
2423 if (!ecdh_doit
[j
]) continue;
2424 ecdh_a
[j
] = EC_KEY_new_by_curve_name(test_curves
[j
]);
2425 ecdh_b
[j
] = EC_KEY_new_by_curve_name(test_curves
[j
]);
2426 if ((ecdh_a
[j
] == NULL
) || (ecdh_b
[j
] == NULL
))
2428 BIO_printf(bio_err
,"ECDH failure.\n");
2429 ERR_print_errors(bio_err
);
2434 /* generate two ECDH key pairs */
2435 if (!EC_KEY_generate_key(ecdh_a
[j
]) ||
2436 !EC_KEY_generate_key(ecdh_b
[j
]))
2438 BIO_printf(bio_err
,"ECDH key generation failure.\n");
2439 ERR_print_errors(bio_err
);
2444 /* If field size is not more than 24 octets, then use SHA-1 hash of result;
2445 * otherwise, use result (see section 4.8 of draft-ietf-tls-ecc-03.txt).
2447 int field_size
, outlen
;
2448 void *(*kdf
)(const void *in
, size_t inlen
, void *out
, size_t *xoutlen
);
2449 field_size
= EC_GROUP_get_degree(EC_KEY_get0_group(ecdh_a
[j
]));
2450 if (field_size
<= 24 * 8)
2452 outlen
= KDF1_SHA1_len
;
2457 outlen
= (field_size
+7)/8;
2460 secret_size_a
= ECDH_compute_key(secret_a
, outlen
,
2461 EC_KEY_get0_public_key(ecdh_b
[j
]),
2463 secret_size_b
= ECDH_compute_key(secret_b
, outlen
,
2464 EC_KEY_get0_public_key(ecdh_a
[j
]),
2466 if (secret_size_a
!= secret_size_b
)
2471 for (secret_idx
= 0;
2472 (secret_idx
< secret_size_a
)
2473 && (ecdh_checks
== 1);
2476 if (secret_a
[secret_idx
] != secret_b
[secret_idx
])
2480 if (ecdh_checks
== 0)
2482 BIO_printf(bio_err
,"ECDH computations don't match.\n");
2483 ERR_print_errors(bio_err
);
2487 pkey_print_message("","ecdh",
2489 test_curves_bits
[j
],
2492 for (count
=0,run
=1; COND(ecdh_c
[j
][0]); count
++)
2494 ECDH_compute_key(secret_a
, outlen
,
2495 EC_KEY_get0_public_key(ecdh_b
[j
]),
2499 BIO_printf(bio_err
, mr
? "+R7:%ld:%d:%.2f\n" :"%ld %d-bit ECDH ops in %.2fs\n",
2500 count
, test_curves_bits
[j
], d
);
2501 ecdh_results
[j
][0]=d
/(double)count
;
2509 /* if longer than 10s, don't do any more */
2510 for (j
++; j
<EC_NUM
; j
++)
2514 if (rnd_fake
) RAND_cleanup();
2521 fprintf(stdout
,"%s\n",SSLeay_version(SSLEAY_VERSION
));
2522 fprintf(stdout
,"%s\n",SSLeay_version(SSLEAY_BUILT_ON
));
2524 printf("%s ",BN_options());
2525 #ifndef OPENSSL_NO_MD2
2526 printf("%s ",MD2_options());
2528 #ifndef OPENSSL_NO_RC4
2529 printf("%s ",RC4_options());
2531 #ifndef OPENSSL_NO_DES
2532 printf("%s ",DES_options());
2534 #ifndef OPENSSL_NO_AES
2535 printf("%s ",AES_options());
2537 #ifndef OPENSSL_NO_IDEA
2538 printf("%s ",idea_options());
2540 #ifndef OPENSSL_NO_BF
2541 printf("%s ",BF_options());
2543 fprintf(stdout
,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS
));
2549 fprintf(stdout
,"+H");
2552 fprintf(stdout
,"The 'numbers' are in 1000s of bytes per second processed.\n");
2553 fprintf(stdout
,"type ");
2555 for (j
=0; j
<SIZE_NUM
; j
++)
2556 fprintf(stdout
,mr
? ":%d" : "%7d bytes",lengths
[j
]);
2557 fprintf(stdout
,"\n");
2560 for (k
=0; k
<ALGOR_NUM
; k
++)
2562 if (!doit
[k
]) continue;
2564 fprintf(stdout
,"+F:%d:%s",k
,names
[k
]);
2566 fprintf(stdout
,"%-13s",names
[k
]);
2567 for (j
=0; j
<SIZE_NUM
; j
++)
2569 if (results
[k
][j
] > 10000 && !mr
)
2570 fprintf(stdout
," %11.2fk",results
[k
][j
]/1e3
);
2572 fprintf(stdout
,mr
? ":%.2f" : " %11.2f ",results
[k
][j
]);
2574 fprintf(stdout
,"\n");
2576 #ifndef OPENSSL_NO_RSA
2578 for (k
=0; k
<RSA_NUM
; k
++)
2580 if (!rsa_doit
[k
]) continue;
2583 printf("%18ssign verify sign/s verify/s\n"," ");
2587 fprintf(stdout
,"+F2:%u:%u:%f:%f\n",
2588 k
,rsa_bits
[k
],rsa_results
[k
][0],
2591 fprintf(stdout
,"rsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n",
2592 rsa_bits
[k
],rsa_results
[k
][0],rsa_results
[k
][1],
2593 1.0/rsa_results
[k
][0],1.0/rsa_results
[k
][1]);
2596 #ifndef OPENSSL_NO_DSA
2598 for (k
=0; k
<DSA_NUM
; k
++)
2600 if (!dsa_doit
[k
]) continue;
2603 printf("%18ssign verify sign/s verify/s\n"," ");
2607 fprintf(stdout
,"+F3:%u:%u:%f:%f\n",
2608 k
,dsa_bits
[k
],dsa_results
[k
][0],dsa_results
[k
][1]);
2610 fprintf(stdout
,"dsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n",
2611 dsa_bits
[k
],dsa_results
[k
][0],dsa_results
[k
][1],
2612 1.0/dsa_results
[k
][0],1.0/dsa_results
[k
][1]);
2615 #ifndef OPENSSL_NO_ECDSA
2617 for (k
=0; k
<EC_NUM
; k
++)
2619 if (!ecdsa_doit
[k
]) continue;
2622 printf("%30ssign verify sign/s verify/s\n"," ");
2627 fprintf(stdout
,"+F4:%u:%u:%f:%f\n",
2628 k
, test_curves_bits
[k
],
2629 ecdsa_results
[k
][0],ecdsa_results
[k
][1]);
2632 "%4u bit ecdsa (%s) %8.4fs %8.4fs %8.1f %8.1f\n",
2633 test_curves_bits
[k
],
2634 test_curves_names
[k
],
2635 ecdsa_results
[k
][0],ecdsa_results
[k
][1],
2636 1.0/ecdsa_results
[k
][0],1.0/ecdsa_results
[k
][1]);
2641 #ifndef OPENSSL_NO_ECDH
2643 for (k
=0; k
<EC_NUM
; k
++)
2645 if (!ecdh_doit
[k
]) continue;
2648 printf("%30sop op/s\n"," ");
2652 fprintf(stdout
,"+F5:%u:%u:%f:%f\n",
2653 k
, test_curves_bits
[k
],
2654 ecdh_results
[k
][0], 1.0/ecdh_results
[k
][0]);
2657 fprintf(stdout
,"%4u bit ecdh (%s) %8.4fs %8.1f\n",
2658 test_curves_bits
[k
],
2659 test_curves_names
[k
],
2660 ecdh_results
[k
][0], 1.0/ecdh_results
[k
][0]);
2667 ERR_print_errors(bio_err
);
2668 if (buf
!= NULL
) OPENSSL_free(buf
);
2669 if (buf2
!= NULL
) OPENSSL_free(buf2
);
2670 #ifndef OPENSSL_NO_RSA
2671 for (i
=0; i
<RSA_NUM
; i
++)
2672 if (rsa_key
[i
] != NULL
)
2673 RSA_free(rsa_key
[i
]);
2675 #ifndef OPENSSL_NO_DSA
2676 for (i
=0; i
<DSA_NUM
; i
++)
2677 if (dsa_key
[i
] != NULL
)
2678 DSA_free(dsa_key
[i
]);
2681 #ifndef OPENSSL_NO_ECDSA
2682 for (i
=0; i
<EC_NUM
; i
++)
2683 if (ecdsa
[i
] != NULL
)
2684 EC_KEY_free(ecdsa
[i
]);
2686 #ifndef OPENSSL_NO_ECDH
2687 for (i
=0; i
<EC_NUM
; i
++)
2689 if (ecdh_a
[i
] != NULL
)
2690 EC_KEY_free(ecdh_a
[i
]);
2691 if (ecdh_b
[i
] != NULL
)
2692 EC_KEY_free(ecdh_b
[i
]);
2700 static void print_message(const char *s
, long num
, int length
)
2703 BIO_printf(bio_err
,mr
? "+DT:%s:%d:%d\n"
2704 : "Doing %s for %ds on %d size blocks: ",s
,SECONDS
,length
);
2705 (void)BIO_flush(bio_err
);
2708 BIO_printf(bio_err
,mr
? "+DN:%s:%ld:%d\n"
2709 : "Doing %s %ld times on %d size blocks: ",s
,num
,length
);
2710 (void)BIO_flush(bio_err
);
2717 static void prime_print_message(const char *s
, long num
)
2720 BIO_printf(bio_err
,mr
? "+DT:%s:%d\n"
2721 : "Doing %s for %ds: ", s
, PRIME_SECONDS
);
2722 (void)BIO_flush(bio_err
);
2723 alarm(PRIME_SECONDS
);
2725 BIO_printf(bio_err
,mr
? "+DN:%s:%ld\n"
2726 : "Doing %s %ld times: ", s
, num
);
2727 (void)BIO_flush(bio_err
);
2734 static void pkey_print_message(const char *str
, const char *str2
, long num
,
2738 BIO_printf(bio_err
,mr
? "+DTP:%d:%s:%s:%d\n"
2739 : "Doing %d bit %s %s's for %ds: ",bits
,str
,str2
,tm
);
2740 (void)BIO_flush(bio_err
);
2743 BIO_printf(bio_err
,mr
? "+DNP:%ld:%d:%s:%s\n"
2744 : "Doing %ld %d bit %s %s's: ",num
,bits
,str
,str2
);
2745 (void)BIO_flush(bio_err
);
2752 static void print_result(int alg
,int run_no
,int count
,double time_used
)
2754 BIO_printf(bio_err
,mr
? "+R:%d:%s:%f\n"
2755 : "%d %s's in %.2fs\n",count
,names
[alg
],time_used
);
2756 results
[alg
][run_no
]=((double)count
)/time_used
*lengths
[run_no
];
2759 static void prime_print_result(int alg
, int count
, double time_used
)
2762 mr
? "+R:%d:%s:%f:%f\n" : "%d %s's in %.2fs (%.2f microseconds / run)\n",
2763 count
, prime_names
[alg
], time_used
,
2764 time_used
/ ((double)count
) * 1000000);
2768 static char *sstrsep(char **string
, const char *delim
)
2771 char *token
= *string
;
2776 memset(isdelim
, 0, sizeof isdelim
);
2781 isdelim
[(unsigned char)(*delim
)] = 1;
2785 while (!isdelim
[(unsigned char)(**string
)])
2799 static int do_multi(int multi
)
2804 static char sep
[]=":";
2806 fds
=malloc(multi
*sizeof *fds
);
2807 for(n
=0 ; n
< multi
; ++n
)
2811 fprintf(stderr
, "pipe failure\n");
2825 if (dup(fd
[1]) == -1)
2827 fprintf(stderr
, "dup failed\n");
2836 printf("Forked child %d\n",n
);
2839 /* for now, assume the pipe is long enough to take all the output */
2840 for(n
=0 ; n
< multi
; ++n
)
2846 f
=fdopen(fds
[n
],"r");
2847 while(fgets(buf
,sizeof buf
,f
))
2854 fprintf(stderr
,"Don't understand line '%s' from child %d\n",
2858 printf("Got: %s from %d\n",buf
,n
);
2859 if(!strncmp(buf
,"+F:",3))
2865 alg
=atoi(sstrsep(&p
,sep
));
2867 for(j
=0 ; j
< SIZE_NUM
; ++j
)
2868 results
[alg
][j
]+=atof(sstrsep(&p
,sep
));
2870 else if(!strncmp(buf
,"+F2:",4))
2876 k
=atoi(sstrsep(&p
,sep
));
2879 d
=atof(sstrsep(&p
,sep
));
2881 rsa_results
[k
][0]=1/(1/rsa_results
[k
][0]+1/d
);
2883 rsa_results
[k
][0]=d
;
2885 d
=atof(sstrsep(&p
,sep
));
2887 rsa_results
[k
][1]=1/(1/rsa_results
[k
][1]+1/d
);
2889 rsa_results
[k
][1]=d
;
2891 else if(!strncmp(buf
,"+F2:",4))
2897 k
=atoi(sstrsep(&p
,sep
));
2900 d
=atof(sstrsep(&p
,sep
));
2902 rsa_results
[k
][0]=1/(1/rsa_results
[k
][0]+1/d
);
2904 rsa_results
[k
][0]=d
;
2906 d
=atof(sstrsep(&p
,sep
));
2908 rsa_results
[k
][1]=1/(1/rsa_results
[k
][1]+1/d
);
2910 rsa_results
[k
][1]=d
;
2912 #ifndef OPENSSL_NO_DSA
2913 else if(!strncmp(buf
,"+F3:",4))
2919 k
=atoi(sstrsep(&p
,sep
));
2922 d
=atof(sstrsep(&p
,sep
));
2924 dsa_results
[k
][0]=1/(1/dsa_results
[k
][0]+1/d
);
2926 dsa_results
[k
][0]=d
;
2928 d
=atof(sstrsep(&p
,sep
));
2930 dsa_results
[k
][1]=1/(1/dsa_results
[k
][1]+1/d
);
2932 dsa_results
[k
][1]=d
;
2935 #ifndef OPENSSL_NO_ECDSA
2936 else if(!strncmp(buf
,"+F4:",4))
2942 k
=atoi(sstrsep(&p
,sep
));
2945 d
=atof(sstrsep(&p
,sep
));
2947 ecdsa_results
[k
][0]=1/(1/ecdsa_results
[k
][0]+1/d
);
2949 ecdsa_results
[k
][0]=d
;
2951 d
=atof(sstrsep(&p
,sep
));
2953 ecdsa_results
[k
][1]=1/(1/ecdsa_results
[k
][1]+1/d
);
2955 ecdsa_results
[k
][1]=d
;
2959 #ifndef OPENSSL_NO_ECDH
2960 else if(!strncmp(buf
,"+F5:",4))
2966 k
=atoi(sstrsep(&p
,sep
));
2969 d
=atof(sstrsep(&p
,sep
));
2971 ecdh_results
[k
][0]=1/(1/ecdh_results
[k
][0]+1/d
);
2973 ecdh_results
[k
][0]=d
;
2978 else if(!strncmp(buf
,"+H:",3))
2982 fprintf(stderr
,"Unknown type '%s' from child %d\n",buf
,n
);
2992 static void multiblock_speed(const EVP_CIPHER
*evp_cipher
)
2994 static int mblengths
[]={8*1024,2*8*1024,4*8*1024,8*8*1024,8*16*1024};
2995 int j
,count
,num
=sizeof(lengths
)/sizeof(lengths
[0]);
2996 const char *alg_name
;
2997 unsigned char *inp
,*out
,no_key
[32],no_iv
[16];
3001 inp
= OPENSSL_malloc(mblengths
[num
-1]);
3002 out
= OPENSSL_malloc(mblengths
[num
-1]+1024);
3004 EVP_CIPHER_CTX_init(&ctx
);
3005 EVP_EncryptInit_ex(&ctx
,evp_cipher
,NULL
,no_key
,no_iv
);
3006 EVP_CIPHER_CTX_ctrl(&ctx
,EVP_CTRL_AEAD_SET_MAC_KEY
,sizeof(no_key
),no_key
);
3007 alg_name
=OBJ_nid2ln(evp_cipher
->nid
);
3009 for (j
=0; j
<num
; j
++)
3011 print_message(alg_name
,0,mblengths
[j
]);
3013 for (count
=0,run
=1; run
&& count
<0x7fffffff; count
++)
3015 unsigned char aad
[13];
3016 EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM mb_param
= {NULL
,aad
,sizeof(aad
),0};
3017 size_t len
= mblengths
[j
];
3025 mb_param
.out
= NULL
;
3028 mb_param
.interleave
= 8;
3030 packlen
=EVP_CIPHER_CTX_ctrl(&ctx
,
3031 EVP_CTRL_TLS1_1_MULTIBLOCK_AAD
,
3032 sizeof(mb_param
),&mb_param
);
3039 EVP_CIPHER_CTX_ctrl(&ctx
,
3040 EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT
,
3041 sizeof(mb_param
),&mb_param
);
3051 pad
=EVP_CIPHER_CTX_ctrl(&ctx
,
3052 EVP_CTRL_AEAD_TLS1_AAD
,13,aad
);
3053 EVP_Cipher(&ctx
,out
,inp
,len
+pad
);
3057 BIO_printf(bio_err
,mr
? "+R:%d:%s:%f\n"
3058 : "%d %s's in %.2fs\n",count
,"evp",d
);
3059 results
[D_EVP
][j
]=((double)count
)/d
*mblengths
[j
];
3064 fprintf(stdout
,"+H");
3065 for (j
=0; j
<num
; j
++)
3066 fprintf(stdout
,":%d",mblengths
[j
]);
3067 fprintf(stdout
,"\n");
3068 fprintf(stdout
,"+F:%d:%s",D_EVP
,alg_name
);
3069 for (j
=0; j
<num
; j
++)
3070 fprintf(stdout
,":%.2f",results
[D_EVP
][j
]);
3071 fprintf(stdout
,"\n");
3075 fprintf(stdout
,"The 'numbers' are in 1000s of bytes per second processed.\n");
3076 fprintf(stdout
,"type ");
3077 for (j
=0; j
<num
; j
++)
3078 fprintf(stdout
,"%7d bytes",mblengths
[j
]);
3079 fprintf(stdout
,"\n");
3080 fprintf(stdout
,"%-24s",alg_name
);
3082 for (j
=0; j
<num
; j
++)
3084 if (results
[D_EVP
][j
] > 10000)
3085 fprintf(stdout
," %11.2fk",results
[D_EVP
][j
]/1e3
);
3087 fprintf(stdout
," %11.2f ",results
[D_EVP
][j
]);
3089 fprintf(stdout
,"\n");