Branch data Line data Source code
1 : : /* apps/speed.c -*- mode:C; c-file-style: "eay" -*- */
2 : : /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 : : * All rights reserved.
4 : : *
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.
8 : : *
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).
15 : : *
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.
22 : : *
23 : : * Redistribution and use in source and binary forms, with or without
24 : : * modification, are permitted provided that the following conditions
25 : : * are met:
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)"
40 : : *
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
51 : : * SUCH DAMAGE.
52 : : *
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.]
57 : : */
58 : : /* ====================================================================
59 : : * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
60 : : *
61 : : * Portions of the attached software ("Contribution") are developed by
62 : : * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
63 : : *
64 : : * The Contribution is licensed pursuant to the OpenSSL open source
65 : : * license provided above.
66 : : *
67 : : * The ECDH and ECDSA speed test software is originally written by
68 : : * Sumit Gupta of Sun Microsystems Laboratories.
69 : : *
70 : : */
71 : :
72 : : /* most of this code has been pilfered from my libdes speed.c program */
73 : :
74 : : #ifndef OPENSSL_NO_SPEED
75 : :
76 : : #undef SECONDS
77 : : #define SECONDS 3
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
83 : :
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 */
86 : :
87 : : #undef PROG
88 : : #define PROG speed_main
89 : :
90 : : #include <stdio.h>
91 : : #include <stdlib.h>
92 : :
93 : : #include <string.h>
94 : : #include <math.h>
95 : : #include "apps.h"
96 : : #ifdef OPENSSL_NO_STDIO
97 : : #define APPS_WIN16
98 : : #endif
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
106 : : #endif
107 : :
108 : : #ifndef OPENSSL_SYS_NETWARE
109 : : #include <signal.h>
110 : : #endif
111 : :
112 : : #if defined(_WIN32) || defined(__CYGWIN__)
113 : : #include <windows.h>
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... */
117 : : # define _WIN32
118 : : /* this is done because Cygwin alarm() fails sometimes. */
119 : : # endif
120 : : #endif
121 : :
122 : : #include <openssl/bn.h>
123 : : #ifndef OPENSSL_NO_DES
124 : : #include <openssl/des.h>
125 : : #endif
126 : : #ifndef OPENSSL_NO_AES
127 : : #include <openssl/aes.h>
128 : : #endif
129 : : #ifndef OPENSSL_NO_CAMELLIA
130 : : #include <openssl/camellia.h>
131 : : #endif
132 : : #ifndef OPENSSL_NO_MD2
133 : : #include <openssl/md2.h>
134 : : #endif
135 : : #ifndef OPENSSL_NO_MDC2
136 : : #include <openssl/mdc2.h>
137 : : #endif
138 : : #ifndef OPENSSL_NO_MD4
139 : : #include <openssl/md4.h>
140 : : #endif
141 : : #ifndef OPENSSL_NO_MD5
142 : : #include <openssl/md5.h>
143 : : #endif
144 : : #ifndef OPENSSL_NO_HMAC
145 : : #include <openssl/hmac.h>
146 : : #endif
147 : : #include <openssl/evp.h>
148 : : #ifndef OPENSSL_NO_SHA
149 : : #include <openssl/sha.h>
150 : : #endif
151 : : #ifndef OPENSSL_NO_RIPEMD
152 : : #include <openssl/ripemd.h>
153 : : #endif
154 : : #ifndef OPENSSL_NO_WHIRLPOOL
155 : : #include <openssl/whrlpool.h>
156 : : #endif
157 : : #ifndef OPENSSL_NO_RC4
158 : : #include <openssl/rc4.h>
159 : : #endif
160 : : #ifndef OPENSSL_NO_RC5
161 : : #include <openssl/rc5.h>
162 : : #endif
163 : : #ifndef OPENSSL_NO_RC2
164 : : #include <openssl/rc2.h>
165 : : #endif
166 : : #ifndef OPENSSL_NO_IDEA
167 : : #include <openssl/idea.h>
168 : : #endif
169 : : #ifndef OPENSSL_NO_SEED
170 : : #include <openssl/seed.h>
171 : : #endif
172 : : #ifndef OPENSSL_NO_BF
173 : : #include <openssl/blowfish.h>
174 : : #endif
175 : : #ifndef OPENSSL_NO_CAST
176 : : #include <openssl/cast.h>
177 : : #endif
178 : : #ifndef OPENSSL_NO_RSA
179 : : #include <openssl/rsa.h>
180 : : #include "./testrsa.h"
181 : : #endif
182 : : #include <openssl/x509.h>
183 : : #ifndef OPENSSL_NO_DSA
184 : : #include <openssl/dsa.h>
185 : : #include "./testdsa.h"
186 : : #endif
187 : : #ifndef OPENSSL_NO_ECDSA
188 : : #include <openssl/ecdsa.h>
189 : : #endif
190 : : #ifndef OPENSSL_NO_ECDH
191 : : #include <openssl/ecdh.h>
192 : : #endif
193 : : #include <openssl/modes.h>
194 : :
195 : : #include "../crypto/bn/bn_lcl.h"
196 : :
197 : : #ifndef HAVE_FORK
198 : : # if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_NETWARE)
199 : : # define HAVE_FORK 0
200 : : # else
201 : : # define HAVE_FORK 1
202 : : # endif
203 : : #endif
204 : :
205 : : #if HAVE_FORK
206 : : #undef NO_FORK
207 : : #else
208 : : #define NO_FORK
209 : : #endif
210 : :
211 : : #undef BUFSIZE
212 : : #define BUFSIZE ((long)1024*8+1)
213 : : int run=0;
214 : :
215 : : static int mr=0;
216 : : static int usertime=1;
217 : :
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);
225 : : #ifndef NO_FORK
226 : : static int do_multi(int multi);
227 : : #endif
228 : :
229 : : #define ALGOR_NUM 30
230 : : #define SIZE_NUM 5
231 : : #define PRIME_NUM 3
232 : : #define RSA_NUM 7
233 : : #define DSA_NUM 3
234 : :
235 : : #define EC_NUM 16
236 : : #define MAX_ECDH_SIZE 256
237 : :
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];
252 : : #endif
253 : : #ifndef OPENSSL_NO_DSA
254 : : static double dsa_results[DSA_NUM][2];
255 : : #endif
256 : : #ifndef OPENSSL_NO_ECDSA
257 : : static double ecdsa_results[EC_NUM][2];
258 : : #endif
259 : : #ifndef OPENSSL_NO_ECDH
260 : : static double ecdh_results[EC_NUM][1];
261 : : #endif
262 : :
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;
266 : : #endif
267 : :
268 : : #ifdef SIGALRM
269 : : #if defined(__STDC__) || defined(sgi) || defined(_AIX)
270 : : #define SIGRETTYPE void
271 : : #else
272 : : #define SIGRETTYPE int
273 : : #endif
274 : :
275 : : static SIGRETTYPE sig_done(int sig);
276 : 0 : static SIGRETTYPE sig_done(int sig)
277 : : {
278 : 0 : signal(SIGALRM,sig_done);
279 : 0 : run=0;
280 : : #ifdef LINT
281 : : sig=sig;
282 : : #endif
283 : 0 : }
284 : : #endif
285 : :
286 : : #define START 0
287 : : #define STOP 1
288 : :
289 : : #if defined(_WIN32)
290 : :
291 : : #if !defined(SIGALRM)
292 : : # define SIGALRM
293 : : #endif
294 : : static unsigned int lapse,schlock;
295 : : static void alarm_win32(unsigned int secs) { lapse = secs*1000; }
296 : : #define alarm alarm_win32
297 : :
298 : : static DWORD WINAPI sleepy(VOID *arg)
299 : : {
300 : : schlock = 1;
301 : : Sleep(lapse);
302 : : run = 0;
303 : : return 0;
304 : : }
305 : :
306 : : static double Time_F(int s)
307 : : {
308 : : double ret;
309 : : static HANDLE thr;
310 : :
311 : : if (s == START)
312 : : {
313 : : schlock = 0;
314 : : thr = CreateThread(NULL,4096,sleepy,NULL,0,NULL);
315 : : if (thr==NULL)
316 : : {
317 : : DWORD ret=GetLastError();
318 : : BIO_printf(bio_err,"unable to CreateThread (%d)",ret);
319 : : ExitProcess(ret);
320 : : }
321 : : while (!schlock) Sleep(0); /* scheduler spinlock */
322 : : ret = app_tminterval(s,usertime);
323 : : }
324 : : else
325 : : {
326 : : ret = app_tminterval(s,usertime);
327 : : if (run) TerminateThread(thr,0);
328 : : CloseHandle(thr);
329 : : }
330 : :
331 : : return ret;
332 : : }
333 : : #else
334 : :
335 : 0 : static double Time_F(int s)
336 : : {
337 : 0 : double ret = app_tminterval(s,usertime);
338 [ # # ]: 0 : if (s == STOP) alarm(0);
339 : 0 : return ret;
340 : : }
341 : : #endif
342 : :
343 : :
344 : : #ifndef OPENSSL_NO_ECDH
345 : : static const int KDF1_SHA1_len = 20;
346 : 0 : static void *KDF1_SHA1(const void *in, size_t inlen, void *out, size_t *outlen)
347 : : {
348 : : #ifndef OPENSSL_NO_SHA
349 [ # # ]: 0 : if (*outlen < SHA_DIGEST_LENGTH)
350 : : return NULL;
351 : : else
352 : 0 : *outlen = SHA_DIGEST_LENGTH;
353 : 0 : return SHA1(in, inlen, out);
354 : : #else
355 : : return NULL;
356 : : #endif /* OPENSSL_NO_SHA */
357 : : }
358 : : #endif /* OPENSSL_NO_ECDH */
359 : :
360 : : static void multiblock_speed(const EVP_CIPHER *evp_cipher);
361 : :
362 : : int MAIN(int, char **);
363 : :
364 : 0 : int MAIN(int argc, char **argv)
365 : : {
366 : 0 : unsigned char *buf=NULL,*buf2=NULL;
367 : 0 : int mret=1;
368 : 0 : long count=0,save_count=0;
369 : : int i,j,k;
370 : : #if !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_DSA)
371 : : long rsa_count;
372 : : #endif
373 : : #ifndef OPENSSL_NO_RSA
374 : : unsigned rsa_num;
375 : : #endif
376 : : unsigned char md[EVP_MAX_MD_SIZE];
377 : : #ifndef OPENSSL_NO_MD2
378 : : unsigned char md2[MD2_DIGEST_LENGTH];
379 : : #endif
380 : : #ifndef OPENSSL_NO_MDC2
381 : : unsigned char mdc2[MDC2_DIGEST_LENGTH];
382 : : #endif
383 : : #ifndef OPENSSL_NO_MD4
384 : : unsigned char md4[MD4_DIGEST_LENGTH];
385 : : #endif
386 : : #ifndef OPENSSL_NO_MD5
387 : : unsigned char md5[MD5_DIGEST_LENGTH];
388 : : unsigned char hmac[MD5_DIGEST_LENGTH];
389 : : #endif
390 : : #ifndef OPENSSL_NO_SHA
391 : : unsigned char sha[SHA_DIGEST_LENGTH];
392 : : #ifndef OPENSSL_NO_SHA256
393 : : unsigned char sha256[SHA256_DIGEST_LENGTH];
394 : : #endif
395 : : #ifndef OPENSSL_NO_SHA512
396 : : unsigned char sha512[SHA512_DIGEST_LENGTH];
397 : : #endif
398 : : #endif
399 : : #ifndef OPENSSL_NO_WHIRLPOOL
400 : : unsigned char whirlpool[WHIRLPOOL_DIGEST_LENGTH];
401 : : #endif
402 : : #ifndef OPENSSL_NO_RIPEMD
403 : : unsigned char rmd160[RIPEMD160_DIGEST_LENGTH];
404 : : #endif
405 : : #ifndef OPENSSL_NO_RC4
406 : : RC4_KEY rc4_ks;
407 : : #endif
408 : : #ifndef OPENSSL_NO_RC5
409 : : RC5_32_KEY rc5_ks;
410 : : #endif
411 : : #ifndef OPENSSL_NO_RC2
412 : : RC2_KEY rc2_ks;
413 : : #endif
414 : : #ifndef OPENSSL_NO_IDEA
415 : : IDEA_KEY_SCHEDULE idea_ks;
416 : : #endif
417 : : #ifndef OPENSSL_NO_SEED
418 : : SEED_KEY_SCHEDULE seed_ks;
419 : : #endif
420 : : #ifndef OPENSSL_NO_BF
421 : : BF_KEY bf_ks;
422 : : #endif
423 : : #ifndef OPENSSL_NO_CAST
424 : : CAST_KEY cast_ks;
425 : : #endif
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};
439 : : #endif
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};
450 : : #endif
451 : : #ifndef OPENSSL_NO_AES
452 : : #define MAX_BLOCK_SIZE 128
453 : : #else
454 : : #define MAX_BLOCK_SIZE 64
455 : : #endif
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;
465 : : #endif
466 : : #ifndef OPENSSL_NO_AES
467 : : AES_KEY aes_ks1, aes_ks2, aes_ks3;
468 : : #endif
469 : : #ifndef OPENSSL_NO_CAMELLIA
470 : : CAMELLIA_KEY camellia_ks1, camellia_ks2, camellia_ks3;
471 : : #endif
472 : : #define D_MD2 0
473 : : #define D_MDC2 1
474 : : #define D_MD4 2
475 : : #define D_MD5 3
476 : : #define D_HMAC 4
477 : : #define D_SHA1 5
478 : : #define D_RMD160 6
479 : : #define D_RC4 7
480 : : #define D_CBC_DES 8
481 : : #define D_EDE3_DES 9
482 : : #define D_CBC_IDEA 10
483 : : #define D_CBC_SEED 11
484 : : #define D_CBC_RC2 12
485 : : #define D_CBC_RC5 13
486 : : #define D_CBC_BF 14
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
494 : : #define D_EVP 22
495 : : #define D_SHA256 23
496 : : #define D_SHA512 24
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
501 : : #define D_GHASH 29
502 : 0 : double d=0.0;
503 : : long c[ALGOR_NUM][SIZE_NUM];
504 : :
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];
509 : :
510 : : #define R_DSA_512 0
511 : : #define R_DSA_1024 1
512 : : #define R_DSA_2048 2
513 : : #define R_RSA_512 0
514 : : #define R_RSA_1024 1
515 : : #define R_RSA_2048 2
516 : : #define R_RSA_3072 3
517 : : #define R_RSA_4096 4
518 : : #define R_RSA_7680 5
519 : : #define R_RSA_15360 6
520 : :
521 : : #define R_EC_P160 0
522 : : #define R_EC_P192 1
523 : : #define R_EC_P224 2
524 : : #define R_EC_P256 3
525 : : #define R_EC_P384 4
526 : : #define R_EC_P521 5
527 : : #define R_EC_K163 6
528 : : #define R_EC_K233 7
529 : : #define R_EC_K283 8
530 : : #define R_EC_K409 9
531 : : #define R_EC_K571 10
532 : : #define R_EC_B163 11
533 : : #define R_EC_B233 12
534 : : #define R_EC_B283 13
535 : : #define R_EC_B409 14
536 : : #define R_EC_B571 15
537 : :
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),
548 : : sizeof(test15360)};
549 : : #endif
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};
554 : : #endif
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.
560 : : */
561 : : static unsigned int test_curves[EC_NUM] =
562 : : {
563 : : /* Prime Curves */
564 : : NID_secp160r1,
565 : : NID_X9_62_prime192v1,
566 : : NID_secp224r1,
567 : : NID_X9_62_prime256v1,
568 : : NID_secp384r1,
569 : : NID_secp521r1,
570 : : /* Binary Curves */
571 : : NID_sect163k1,
572 : : NID_sect233k1,
573 : : NID_sect283k1,
574 : : NID_sect409k1,
575 : : NID_sect571k1,
576 : : NID_sect163r2,
577 : : NID_sect233r1,
578 : : NID_sect283r1,
579 : : NID_sect409r1,
580 : : NID_sect571r1
581 : : };
582 : : static const char * test_curves_names[EC_NUM] =
583 : : {
584 : : /* Prime Curves */
585 : : "secp160r1",
586 : : "nistp192",
587 : : "nistp224",
588 : : "nistp256",
589 : : "nistp384",
590 : : "nistp521",
591 : : /* Binary Curves */
592 : : "nistk163",
593 : : "nistk233",
594 : : "nistk283",
595 : : "nistk409",
596 : : "nistk571",
597 : : "nistb163",
598 : : "nistb233",
599 : : "nistb283",
600 : : "nistb409",
601 : : "nistb571"
602 : : };
603 : : static int test_curves_bits[EC_NUM] =
604 : : {
605 : : 160, 192, 224, 256, 384, 521,
606 : : 163, 233, 283, 409, 571,
607 : : 163, 233, 283, 409, 571
608 : : };
609 : :
610 : : #endif
611 : :
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];
617 : : #endif
618 : :
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;
623 : 0 : int ecdh_checks = 0;
624 : 0 : int secret_idx = 0;
625 : : long ecdh_c[EC_NUM][2];
626 : : #endif
627 : :
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];
633 : : #endif
634 : : #ifndef OPENSSL_NO_ECDH
635 : : int ecdh_doit[EC_NUM];
636 : : #endif
637 : : int doit[ALGOR_NUM];
638 : 0 : int pr_header=0;
639 : 0 : const EVP_CIPHER *evp_cipher=NULL;
640 : 0 : const EVP_MD *evp_md=NULL;
641 : 0 : int decrypt=0;
642 : : #ifndef NO_FORK
643 : 0 : int multi=0;
644 : : #endif
645 : 0 : int multiblock=0;
646 : :
647 : : #ifndef TIMES
648 : 0 : usertime=-1;
649 : : #endif
650 : :
651 : 0 : apps_startup();
652 : : memset(results, 0, sizeof(results));
653 : : #ifndef OPENSSL_NO_DSA
654 : : memset(dsa_key,0,sizeof(dsa_key));
655 : : #endif
656 : : #ifndef OPENSSL_NO_ECDSA
657 [ # # ]: 0 : for (i=0; i<EC_NUM; i++) ecdsa[i] = NULL;
658 : : #endif
659 : : #ifndef OPENSSL_NO_ECDH
660 [ # # ]: 0 : for (i=0; i<EC_NUM; i++)
661 : : {
662 : 0 : ecdh_a[i] = NULL;
663 : 0 : ecdh_b[i] = NULL;
664 : : }
665 : : #endif
666 : :
667 : :
668 [ # # ]: 0 : if (bio_err == NULL)
669 [ # # ]: 0 : if ((bio_err=BIO_new(BIO_s_file())) != NULL)
670 : 0 : BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
671 : :
672 [ # # ]: 0 : if (!load_config(bio_err, NULL))
673 : : goto end;
674 : :
675 : : #ifndef OPENSSL_NO_RSA
676 : : memset(rsa_key,0,sizeof(rsa_key));
677 [ # # ]: 0 : for (i=0; i<RSA_NUM; i++)
678 : 0 : rsa_key[i]=NULL;
679 : : #endif
680 : :
681 [ # # ]: 0 : if ((buf=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
682 : : {
683 : 0 : BIO_printf(bio_err,"out of memory\n");
684 : 0 : goto end;
685 : : }
686 [ # # ]: 0 : if ((buf2=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
687 : : {
688 : 0 : BIO_printf(bio_err,"out of memory\n");
689 : 0 : goto end;
690 : : }
691 : :
692 : : memset(c,0,sizeof(c));
693 : : memset(DES_iv,0,sizeof(DES_iv));
694 : : memset(iv,0,sizeof(iv));
695 : :
696 [ # # ]: 0 : for (i=0; i<ALGOR_NUM; i++)
697 : 0 : doit[i]=0;
698 [ # # ]: 0 : for (i=0; i<RSA_NUM; i++)
699 : 0 : rsa_doit[i]=0;
700 [ # # ]: 0 : for (i=0; i<DSA_NUM; i++)
701 : 0 : dsa_doit[i]=0;
702 : : #ifndef OPENSSL_NO_ECDSA
703 [ # # ]: 0 : for (i=0; i<EC_NUM; i++)
704 : 0 : ecdsa_doit[i]=0;
705 : : #endif
706 : : #ifndef OPENSSL_NO_ECDH
707 [ # # ]: 0 : for (i=0; i<EC_NUM; i++)
708 : 0 : ecdh_doit[i]=0;
709 : : #endif
710 [ # # ]: 0 : for (i=0; i<PRIME_NUM; i++)
711 : 0 : prime_doit[i]=0;
712 : :
713 : :
714 : 0 : j=0;
715 : 0 : argc--;
716 : 0 : argv++;
717 [ # # ]: 0 : while (argc)
718 : : {
719 [ # # ][ # # ]: 0 : if ((argc > 0) && (strcmp(*argv,"-elapsed") == 0))
720 : : {
721 : 0 : usertime = 0;
722 : 0 : j--; /* Otherwise, -elapsed gets confused with
723 : : an algorithm. */
724 : : }
725 [ # # ][ # # ]: 0 : else if ((argc > 0) && (strcmp(*argv,"-evp") == 0))
726 : : {
727 : 0 : argc--;
728 : 0 : argv++;
729 [ # # ]: 0 : if(argc == 0)
730 : : {
731 : 0 : BIO_printf(bio_err,"no EVP given\n");
732 : 0 : goto end;
733 : : }
734 : 0 : evp_cipher=EVP_get_cipherbyname(*argv);
735 [ # # ]: 0 : if(!evp_cipher)
736 : : {
737 : 0 : evp_md=EVP_get_digestbyname(*argv);
738 : : }
739 [ # # ]: 0 : if(!evp_cipher && !evp_md)
740 : : {
741 : 0 : BIO_printf(bio_err,"%s is an unknown cipher or digest\n",*argv);
742 : 0 : goto end;
743 : : }
744 : 0 : doit[D_EVP]=1;
745 : : }
746 [ # # ][ # # ]: 0 : else if (argc > 0 && !strcmp(*argv,"-decrypt"))
747 : : {
748 : 0 : decrypt=1;
749 : 0 : j--; /* Otherwise, -elapsed gets confused with
750 : : an algorithm. */
751 : : }
752 : : #ifndef OPENSSL_NO_ENGINE
753 [ # # ][ # # ]: 0 : else if ((argc > 0) && (strcmp(*argv,"-engine") == 0))
754 : : {
755 : 0 : argc--;
756 : 0 : argv++;
757 [ # # ]: 0 : if(argc == 0)
758 : : {
759 : 0 : BIO_printf(bio_err,"no engine given\n");
760 : 0 : goto end;
761 : : }
762 : 0 : 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) */
767 : 0 : j--;
768 : : }
769 : : #endif
770 : : #ifndef NO_FORK
771 [ # # ][ # # ]: 0 : else if ((argc > 0) && (strcmp(*argv,"-multi") == 0))
772 : : {
773 : 0 : argc--;
774 : 0 : argv++;
775 [ # # ]: 0 : if(argc == 0)
776 : : {
777 : 0 : BIO_printf(bio_err,"no multi count given\n");
778 : 0 : goto end;
779 : : }
780 : 0 : multi=atoi(argv[0]);
781 [ # # ]: 0 : if(multi <= 0)
782 : : {
783 : 0 : BIO_printf(bio_err,"bad multi count\n");
784 : 0 : goto end;
785 : : }
786 : 0 : j--; /* Otherwise, -mr gets confused with
787 : : an algorithm. */
788 : : }
789 : : #endif
790 [ # # ][ # # ]: 0 : else if (argc > 0 && !strcmp(*argv,"-mr"))
791 : : {
792 : 0 : mr=1;
793 : 0 : j--; /* Otherwise, -mr gets confused with
794 : : an algorithm. */
795 : : }
796 [ # # ][ # # ]: 0 : else if (argc > 0 && !strcmp(*argv,"-mb"))
797 : : {
798 : 0 : multiblock=1;
799 : 0 : j--;
800 : : }
801 : : else
802 : : #ifndef OPENSSL_NO_MD2
803 : : if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1;
804 : : else
805 : : #endif
806 : : #ifndef OPENSSL_NO_MDC2
807 [ # # ]: 0 : if (strcmp(*argv,"mdc2") == 0) doit[D_MDC2]=1;
808 : : else
809 : : #endif
810 : : #ifndef OPENSSL_NO_MD4
811 [ # # ]: 0 : if (strcmp(*argv,"md4") == 0) doit[D_MD4]=1;
812 : : else
813 : : #endif
814 : : #ifndef OPENSSL_NO_MD5
815 [ # # ]: 0 : if (strcmp(*argv,"md5") == 0) doit[D_MD5]=1;
816 : : else
817 : : #endif
818 : : #ifndef OPENSSL_NO_MD5
819 [ # # ]: 0 : if (strcmp(*argv,"hmac") == 0) doit[D_HMAC]=1;
820 : : else
821 : : #endif
822 : : #ifndef OPENSSL_NO_SHA
823 [ # # ]: 0 : if (strcmp(*argv,"sha1") == 0) doit[D_SHA1]=1;
824 : : else
825 [ # # ]: 0 : if (strcmp(*argv,"sha") == 0) doit[D_SHA1]=1,
826 : 0 : doit[D_SHA256]=1,
827 : 0 : doit[D_SHA512]=1;
828 : : else
829 : : #ifndef OPENSSL_NO_SHA256
830 [ # # ]: 0 : if (strcmp(*argv,"sha256") == 0) doit[D_SHA256]=1;
831 : : else
832 : : #endif
833 : : #ifndef OPENSSL_NO_SHA512
834 [ # # ]: 0 : if (strcmp(*argv,"sha512") == 0) doit[D_SHA512]=1;
835 : : else
836 : : #endif
837 : : #endif
838 : : #ifndef OPENSSL_NO_WHIRLPOOL
839 [ # # ]: 0 : if (strcmp(*argv,"whirlpool") == 0) doit[D_WHIRLPOOL]=1;
840 : : else
841 : : #endif
842 : : #ifndef OPENSSL_NO_RIPEMD
843 [ # # ]: 0 : if (strcmp(*argv,"ripemd") == 0) doit[D_RMD160]=1;
844 : : else
845 [ # # ]: 0 : if (strcmp(*argv,"rmd160") == 0) doit[D_RMD160]=1;
846 : : else
847 [ # # ]: 0 : if (strcmp(*argv,"ripemd160") == 0) doit[D_RMD160]=1;
848 : : else
849 : : #endif
850 : : #ifndef OPENSSL_NO_RC4
851 [ # # ]: 0 : if (strcmp(*argv,"rc4") == 0) doit[D_RC4]=1;
852 : : else
853 : : #endif
854 : : #ifndef OPENSSL_NO_DES
855 [ # # ]: 0 : if (strcmp(*argv,"des-cbc") == 0) doit[D_CBC_DES]=1;
856 [ # # ]: 0 : else if (strcmp(*argv,"des-ede3") == 0) doit[D_EDE3_DES]=1;
857 : : else
858 : : #endif
859 : : #ifndef OPENSSL_NO_AES
860 [ # # ]: 0 : if (strcmp(*argv,"aes-128-cbc") == 0) doit[D_CBC_128_AES]=1;
861 [ # # ]: 0 : else if (strcmp(*argv,"aes-192-cbc") == 0) doit[D_CBC_192_AES]=1;
862 [ # # ]: 0 : else if (strcmp(*argv,"aes-256-cbc") == 0) doit[D_CBC_256_AES]=1;
863 [ # # ]: 0 : else if (strcmp(*argv,"aes-128-ige") == 0) doit[D_IGE_128_AES]=1;
864 [ # # ]: 0 : else if (strcmp(*argv,"aes-192-ige") == 0) doit[D_IGE_192_AES]=1;
865 [ # # ]: 0 : else if (strcmp(*argv,"aes-256-ige") == 0) doit[D_IGE_256_AES]=1;
866 : : else
867 : : #endif
868 : : #ifndef OPENSSL_NO_CAMELLIA
869 [ # # ]: 0 : if (strcmp(*argv,"camellia-128-cbc") == 0) doit[D_CBC_128_CML]=1;
870 [ # # ]: 0 : else if (strcmp(*argv,"camellia-192-cbc") == 0) doit[D_CBC_192_CML]=1;
871 [ # # ]: 0 : else if (strcmp(*argv,"camellia-256-cbc") == 0) doit[D_CBC_256_CML]=1;
872 : : else
873 : : #endif
874 : : #ifndef OPENSSL_NO_RSA
875 : : #if 0 /* was: #ifdef RSAref */
876 : : if (strcmp(*argv,"rsaref") == 0)
877 : : {
878 : : RSA_set_default_openssl_method(RSA_PKCS1_RSAref());
879 : : j--;
880 : : }
881 : : else
882 : : #endif
883 : : #ifndef RSA_NULL
884 [ # # ]: 0 : if (strcmp(*argv,"openssl") == 0)
885 : : {
886 : 0 : RSA_set_default_method(RSA_PKCS1_SSLeay());
887 : 0 : j--;
888 : : }
889 : : else
890 : : #endif
891 : : #endif /* !OPENSSL_NO_RSA */
892 [ # # ]: 0 : if (strcmp(*argv,"dsa512") == 0) dsa_doit[R_DSA_512]=2;
893 [ # # ]: 0 : else if (strcmp(*argv,"dsa1024") == 0) dsa_doit[R_DSA_1024]=2;
894 [ # # ]: 0 : else if (strcmp(*argv,"dsa2048") == 0) dsa_doit[R_DSA_2048]=2;
895 [ # # ]: 0 : else if (strcmp(*argv,"rsa512") == 0) rsa_doit[R_RSA_512]=2;
896 [ # # ]: 0 : else if (strcmp(*argv,"rsa1024") == 0) rsa_doit[R_RSA_1024]=2;
897 [ # # ]: 0 : else if (strcmp(*argv,"rsa2048") == 0) rsa_doit[R_RSA_2048]=2;
898 [ # # ]: 0 : else if (strcmp(*argv,"rsa3072") == 0) rsa_doit[R_RSA_3072]=2;
899 [ # # ]: 0 : else if (strcmp(*argv,"rsa4096") == 0) rsa_doit[R_RSA_4096]=2;
900 [ # # ]: 0 : else if (strcmp(*argv,"rsa7680") == 0) rsa_doit[R_RSA_7680]=2;
901 [ # # ]: 0 : else if (strcmp(*argv,"rsa15360") == 0) rsa_doit[R_RSA_15360]=2;
902 : : else
903 : : #ifndef OPENSSL_NO_RC2
904 [ # # ]: 0 : if (strcmp(*argv,"rc2-cbc") == 0) doit[D_CBC_RC2]=1;
905 [ # # ]: 0 : else if (strcmp(*argv,"rc2") == 0) doit[D_CBC_RC2]=1;
906 : : else
907 : : #endif
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;
911 : : else
912 : : #endif
913 : : #ifndef OPENSSL_NO_IDEA
914 [ # # ]: 0 : if (strcmp(*argv,"idea-cbc") == 0) doit[D_CBC_IDEA]=1;
915 [ # # ]: 0 : else if (strcmp(*argv,"idea") == 0) doit[D_CBC_IDEA]=1;
916 : : else
917 : : #endif
918 : : #ifndef OPENSSL_NO_SEED
919 [ # # ]: 0 : if (strcmp(*argv,"seed-cbc") == 0) doit[D_CBC_SEED]=1;
920 [ # # ]: 0 : else if (strcmp(*argv,"seed") == 0) doit[D_CBC_SEED]=1;
921 : : else
922 : : #endif
923 : : #ifndef OPENSSL_NO_BF
924 [ # # ]: 0 : if (strcmp(*argv,"bf-cbc") == 0) doit[D_CBC_BF]=1;
925 [ # # ]: 0 : else if (strcmp(*argv,"blowfish") == 0) doit[D_CBC_BF]=1;
926 [ # # ]: 0 : else if (strcmp(*argv,"bf") == 0) doit[D_CBC_BF]=1;
927 : : else
928 : : #endif
929 : : #ifndef OPENSSL_NO_CAST
930 [ # # ]: 0 : if (strcmp(*argv,"cast-cbc") == 0) doit[D_CBC_CAST]=1;
931 [ # # ]: 0 : else if (strcmp(*argv,"cast") == 0) doit[D_CBC_CAST]=1;
932 [ # # ]: 0 : else if (strcmp(*argv,"cast5") == 0) doit[D_CBC_CAST]=1;
933 : : else
934 : : #endif
935 : : #ifndef OPENSSL_NO_DES
936 [ # # ]: 0 : if (strcmp(*argv,"des") == 0)
937 : : {
938 : 0 : doit[D_CBC_DES]=1;
939 : 0 : doit[D_EDE3_DES]=1;
940 : : }
941 : : else
942 : : #endif
943 : : #ifndef OPENSSL_NO_AES
944 [ # # ]: 0 : if (strcmp(*argv,"aes") == 0)
945 : : {
946 : 0 : doit[D_CBC_128_AES]=1;
947 : 0 : doit[D_CBC_192_AES]=1;
948 : 0 : doit[D_CBC_256_AES]=1;
949 : : }
950 [ # # ]: 0 : else if (strcmp(*argv,"ghash") == 0)
951 : : {
952 : 0 : doit[D_GHASH]=1;
953 : : }
954 : : else
955 : : #endif
956 : : #ifndef OPENSSL_NO_CAMELLIA
957 [ # # ]: 0 : if (strcmp(*argv,"camellia") == 0)
958 : : {
959 : 0 : doit[D_CBC_128_CML]=1;
960 : 0 : doit[D_CBC_192_CML]=1;
961 : 0 : doit[D_CBC_256_CML]=1;
962 : : }
963 : : else
964 : : #endif
965 : : #ifndef OPENSSL_NO_RSA
966 [ # # ]: 0 : if (strcmp(*argv,"rsa") == 0)
967 : : {
968 : 0 : rsa_doit[R_RSA_512]=1;
969 : 0 : rsa_doit[R_RSA_1024]=1;
970 : 0 : rsa_doit[R_RSA_2048]=1;
971 : 0 : rsa_doit[R_RSA_3072]=1;
972 : 0 : rsa_doit[R_RSA_4096]=1;
973 : 0 : rsa_doit[R_RSA_7680]=1;
974 : 0 : rsa_doit[R_RSA_15360]=1;
975 : : }
976 : : else
977 : : #endif
978 : : #ifndef OPENSSL_NO_DSA
979 [ # # ]: 0 : if (strcmp(*argv,"dsa") == 0)
980 : : {
981 : 0 : dsa_doit[R_DSA_512]=1;
982 : 0 : dsa_doit[R_DSA_1024]=1;
983 : 0 : dsa_doit[R_DSA_2048]=1;
984 : : }
985 : : else
986 : : #endif
987 : : #ifndef OPENSSL_NO_ECDSA
988 [ # # ]: 0 : if (strcmp(*argv,"ecdsap160") == 0) ecdsa_doit[R_EC_P160]=2;
989 [ # # ]: 0 : else if (strcmp(*argv,"ecdsap192") == 0) ecdsa_doit[R_EC_P192]=2;
990 [ # # ]: 0 : else if (strcmp(*argv,"ecdsap224") == 0) ecdsa_doit[R_EC_P224]=2;
991 [ # # ]: 0 : else if (strcmp(*argv,"ecdsap256") == 0) ecdsa_doit[R_EC_P256]=2;
992 [ # # ]: 0 : else if (strcmp(*argv,"ecdsap384") == 0) ecdsa_doit[R_EC_P384]=2;
993 [ # # ]: 0 : else if (strcmp(*argv,"ecdsap521") == 0) ecdsa_doit[R_EC_P521]=2;
994 [ # # ]: 0 : else if (strcmp(*argv,"ecdsak163") == 0) ecdsa_doit[R_EC_K163]=2;
995 [ # # ]: 0 : else if (strcmp(*argv,"ecdsak233") == 0) ecdsa_doit[R_EC_K233]=2;
996 [ # # ]: 0 : else if (strcmp(*argv,"ecdsak283") == 0) ecdsa_doit[R_EC_K283]=2;
997 [ # # ]: 0 : else if (strcmp(*argv,"ecdsak409") == 0) ecdsa_doit[R_EC_K409]=2;
998 [ # # ]: 0 : else if (strcmp(*argv,"ecdsak571") == 0) ecdsa_doit[R_EC_K571]=2;
999 [ # # ]: 0 : else if (strcmp(*argv,"ecdsab163") == 0) ecdsa_doit[R_EC_B163]=2;
1000 [ # # ]: 0 : else if (strcmp(*argv,"ecdsab233") == 0) ecdsa_doit[R_EC_B233]=2;
1001 [ # # ]: 0 : else if (strcmp(*argv,"ecdsab283") == 0) ecdsa_doit[R_EC_B283]=2;
1002 [ # # ]: 0 : else if (strcmp(*argv,"ecdsab409") == 0) ecdsa_doit[R_EC_B409]=2;
1003 [ # # ]: 0 : else if (strcmp(*argv,"ecdsab571") == 0) ecdsa_doit[R_EC_B571]=2;
1004 [ # # ]: 0 : else if (strcmp(*argv,"ecdsa") == 0)
1005 : : {
1006 [ # # ]: 0 : for (i=0; i < EC_NUM; i++)
1007 : 0 : ecdsa_doit[i]=1;
1008 : : }
1009 : : else
1010 : : #endif
1011 : : #ifndef OPENSSL_NO_ECDH
1012 [ # # ]: 0 : if (strcmp(*argv,"ecdhp160") == 0) ecdh_doit[R_EC_P160]=2;
1013 [ # # ]: 0 : else if (strcmp(*argv,"ecdhp192") == 0) ecdh_doit[R_EC_P192]=2;
1014 [ # # ]: 0 : else if (strcmp(*argv,"ecdhp224") == 0) ecdh_doit[R_EC_P224]=2;
1015 [ # # ]: 0 : else if (strcmp(*argv,"ecdhp256") == 0) ecdh_doit[R_EC_P256]=2;
1016 [ # # ]: 0 : else if (strcmp(*argv,"ecdhp384") == 0) ecdh_doit[R_EC_P384]=2;
1017 [ # # ]: 0 : else if (strcmp(*argv,"ecdhp521") == 0) ecdh_doit[R_EC_P521]=2;
1018 [ # # ]: 0 : else if (strcmp(*argv,"ecdhk163") == 0) ecdh_doit[R_EC_K163]=2;
1019 [ # # ]: 0 : else if (strcmp(*argv,"ecdhk233") == 0) ecdh_doit[R_EC_K233]=2;
1020 [ # # ]: 0 : else if (strcmp(*argv,"ecdhk283") == 0) ecdh_doit[R_EC_K283]=2;
1021 [ # # ]: 0 : else if (strcmp(*argv,"ecdhk409") == 0) ecdh_doit[R_EC_K409]=2;
1022 [ # # ]: 0 : else if (strcmp(*argv,"ecdhk571") == 0) ecdh_doit[R_EC_K571]=2;
1023 [ # # ]: 0 : else if (strcmp(*argv,"ecdhb163") == 0) ecdh_doit[R_EC_B163]=2;
1024 [ # # ]: 0 : else if (strcmp(*argv,"ecdhb233") == 0) ecdh_doit[R_EC_B233]=2;
1025 [ # # ]: 0 : else if (strcmp(*argv,"ecdhb283") == 0) ecdh_doit[R_EC_B283]=2;
1026 [ # # ]: 0 : else if (strcmp(*argv,"ecdhb409") == 0) ecdh_doit[R_EC_B409]=2;
1027 [ # # ]: 0 : else if (strcmp(*argv,"ecdhb571") == 0) ecdh_doit[R_EC_B571]=2;
1028 [ # # ]: 0 : else if (strcmp(*argv,"ecdh") == 0)
1029 : : {
1030 [ # # ]: 0 : for (i=0; i < EC_NUM; i++)
1031 : 0 : ecdh_doit[i]=1;
1032 : : }
1033 : : else
1034 : : #endif
1035 [ # # ]: 0 : if (strcmp(*argv,"prime-trial-division") == 0)
1036 : 0 : prime_doit[D_PRIME_TRIAL_DIVISION] = 1;
1037 [ # # ]: 0 : else if (strcmp(*argv,"prime-trial-division-retry") == 0)
1038 : 0 : prime_doit[D_PRIME_TRIAL_DIVISION_RETRY] = 1;
1039 [ # # ]: 0 : else if (strcmp(*argv,"prime-coprime") == 0)
1040 : 0 : prime_doit[D_PRIME_COPRIME] = 1;
1041 [ # # ]: 0 : else if (strcmp(*argv,"prime") == 0)
1042 : : {
1043 [ # # ]: 0 : for (i=0; i < PRIME_NUM; i++)
1044 : 0 : prime_doit[i]=1;
1045 : : }
1046 : : else
1047 : : {
1048 : 0 : BIO_printf(bio_err,"Error: bad option or value\n");
1049 : 0 : BIO_printf(bio_err,"\n");
1050 : 0 : BIO_printf(bio_err,"Available values:\n");
1051 : : #ifndef OPENSSL_NO_MD2
1052 : : BIO_printf(bio_err,"md2 ");
1053 : : #endif
1054 : : #ifndef OPENSSL_NO_MDC2
1055 : 0 : BIO_printf(bio_err,"mdc2 ");
1056 : : #endif
1057 : : #ifndef OPENSSL_NO_MD4
1058 : 0 : BIO_printf(bio_err,"md4 ");
1059 : : #endif
1060 : : #ifndef OPENSSL_NO_MD5
1061 : 0 : BIO_printf(bio_err,"md5 ");
1062 : : #ifndef OPENSSL_NO_HMAC
1063 : 0 : BIO_printf(bio_err,"hmac ");
1064 : : #endif
1065 : : #endif
1066 : : #ifndef OPENSSL_NO_SHA1
1067 : 0 : BIO_printf(bio_err,"sha1 ");
1068 : : #endif
1069 : : #ifndef OPENSSL_NO_SHA256
1070 : 0 : BIO_printf(bio_err,"sha256 ");
1071 : : #endif
1072 : : #ifndef OPENSSL_NO_SHA512
1073 : 0 : BIO_printf(bio_err,"sha512 ");
1074 : : #endif
1075 : : #ifndef OPENSSL_NO_WHIRLPOOL
1076 : 0 : BIO_printf(bio_err,"whirlpool");
1077 : : #endif
1078 : : #ifndef OPENSSL_NO_RIPEMD160
1079 : 0 : BIO_printf(bio_err,"rmd160");
1080 : : #endif
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 : 0 : BIO_printf(bio_err,"\n");
1086 : : #endif
1087 : :
1088 : : #ifndef OPENSSL_NO_IDEA
1089 : 0 : BIO_printf(bio_err,"idea-cbc ");
1090 : : #endif
1091 : : #ifndef OPENSSL_NO_SEED
1092 : 0 : BIO_printf(bio_err,"seed-cbc ");
1093 : : #endif
1094 : : #ifndef OPENSSL_NO_RC2
1095 : 0 : BIO_printf(bio_err,"rc2-cbc ");
1096 : : #endif
1097 : : #ifndef OPENSSL_NO_RC5
1098 : : BIO_printf(bio_err,"rc5-cbc ");
1099 : : #endif
1100 : : #ifndef OPENSSL_NO_BF
1101 : 0 : BIO_printf(bio_err,"bf-cbc");
1102 : : #endif
1103 : : #if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || !defined(OPENSSL_NO_RC2) || \
1104 : : !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_RC5)
1105 : 0 : BIO_printf(bio_err,"\n");
1106 : : #endif
1107 : : #ifndef OPENSSL_NO_DES
1108 : 0 : BIO_printf(bio_err,"des-cbc des-ede3 ");
1109 : : #endif
1110 : : #ifndef OPENSSL_NO_AES
1111 : 0 : BIO_printf(bio_err,"aes-128-cbc aes-192-cbc aes-256-cbc ");
1112 : 0 : BIO_printf(bio_err,"aes-128-ige aes-192-ige aes-256-ige ");
1113 : : #endif
1114 : : #ifndef OPENSSL_NO_CAMELLIA
1115 : 0 : BIO_printf(bio_err,"\n");
1116 : 0 : BIO_printf(bio_err,"camellia-128-cbc camellia-192-cbc camellia-256-cbc ");
1117 : : #endif
1118 : : #ifndef OPENSSL_NO_RC4
1119 : 0 : BIO_printf(bio_err,"rc4");
1120 : : #endif
1121 : 0 : BIO_printf(bio_err,"\n");
1122 : :
1123 : : #ifndef OPENSSL_NO_RSA
1124 : 0 : BIO_printf(bio_err,"rsa512 rsa1024 rsa2048 rsa3072 rsa4096\n");
1125 : 0 : BIO_printf(bio_err,"rsa7680 rsa15360\n");
1126 : : #endif
1127 : :
1128 : : #ifndef OPENSSL_NO_DSA
1129 : 0 : BIO_printf(bio_err,"dsa512 dsa1024 dsa2048\n");
1130 : : #endif
1131 : : #ifndef OPENSSL_NO_ECDSA
1132 : 0 : BIO_printf(bio_err,"ecdsap160 ecdsap192 ecdsap224 ecdsap256 ecdsap384 ecdsap521\n");
1133 : 0 : BIO_printf(bio_err,"ecdsak163 ecdsak233 ecdsak283 ecdsak409 ecdsak571\n");
1134 : 0 : BIO_printf(bio_err,"ecdsab163 ecdsab233 ecdsab283 ecdsab409 ecdsab571\n");
1135 : 0 : BIO_printf(bio_err,"ecdsa\n");
1136 : : #endif
1137 : : #ifndef OPENSSL_NO_ECDH
1138 : 0 : BIO_printf(bio_err,"ecdhp160 ecdhp192 ecdhp224 ecdhp256 ecdhp384 ecdhp521\n");
1139 : 0 : BIO_printf(bio_err,"ecdhk163 ecdhk233 ecdhk283 ecdhk409 ecdhk571\n");
1140 : 0 : BIO_printf(bio_err,"ecdhb163 ecdhb233 ecdhb283 ecdhb409 ecdhb571\n");
1141 : 0 : BIO_printf(bio_err,"ecdh\n");
1142 : : #endif
1143 : :
1144 : : #ifndef OPENSSL_NO_IDEA
1145 : 0 : BIO_printf(bio_err,"idea ");
1146 : : #endif
1147 : : #ifndef OPENSSL_NO_SEED
1148 : 0 : BIO_printf(bio_err,"seed ");
1149 : : #endif
1150 : : #ifndef OPENSSL_NO_RC2
1151 : 0 : BIO_printf(bio_err,"rc2 ");
1152 : : #endif
1153 : : #ifndef OPENSSL_NO_DES
1154 : 0 : BIO_printf(bio_err,"des ");
1155 : : #endif
1156 : : #ifndef OPENSSL_NO_AES
1157 : 0 : BIO_printf(bio_err,"aes ");
1158 : : #endif
1159 : : #ifndef OPENSSL_NO_CAMELLIA
1160 : 0 : BIO_printf(bio_err,"camellia ");
1161 : : #endif
1162 : : #ifndef OPENSSL_NO_RSA
1163 : 0 : BIO_printf(bio_err,"rsa ");
1164 : : #endif
1165 : : #ifndef OPENSSL_NO_BF
1166 : 0 : BIO_printf(bio_err,"blowfish");
1167 : : #endif
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 : 0 : BIO_printf(bio_err,"\n");
1173 : : #endif
1174 : 0 : BIO_printf(bio_err,"prime-trial-division prime-coprime\n");
1175 : :
1176 : 0 : BIO_printf(bio_err,"\n");
1177 : 0 : 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");
1180 : : #endif
1181 : : #ifndef OPENSSL_NO_ENGINE
1182 : 0 : BIO_printf(bio_err,"-engine e use engine e, possibly a hardware device.\n");
1183 : : #endif
1184 : 0 : BIO_printf(bio_err,"-evp e use EVP e.\n");
1185 : 0 : BIO_printf(bio_err,"-decrypt time decryption instead of encryption (only EVP).\n");
1186 : 0 : BIO_printf(bio_err,"-mr produce machine readable output.\n");
1187 : : #ifndef NO_FORK
1188 : 0 : BIO_printf(bio_err,"-multi n run n benchmarks in parallel.\n");
1189 : : #endif
1190 : 0 : goto end;
1191 : : }
1192 : 0 : argc--;
1193 : 0 : argv++;
1194 : 0 : j++;
1195 : : }
1196 : :
1197 : : #ifndef NO_FORK
1198 [ # # ][ # # ]: 0 : if(multi && do_multi(multi))
1199 : : goto show_res;
1200 : : #endif
1201 : :
1202 [ # # ]: 0 : if (j == 0)
1203 : : {
1204 [ # # ]: 0 : for (i=0; i<ALGOR_NUM; i++)
1205 : : {
1206 [ # # ]: 0 : if (i != D_EVP)
1207 : 0 : doit[i]=1;
1208 : : }
1209 [ # # ]: 0 : for (i=0; i<RSA_NUM; i++)
1210 : 0 : rsa_doit[i]=1;
1211 [ # # ]: 0 : for (i=0; i<DSA_NUM; i++)
1212 : 0 : dsa_doit[i]=1;
1213 : : #ifndef OPENSSL_NO_ECDSA
1214 [ # # ]: 0 : for (i=0; i<EC_NUM; i++)
1215 : 0 : ecdsa_doit[i]=1;
1216 : : #endif
1217 : : #ifndef OPENSSL_NO_ECDH
1218 [ # # ]: 0 : for (i=0; i<EC_NUM; i++)
1219 : 0 : ecdh_doit[i]=1;
1220 : : #endif
1221 : : }
1222 [ # # ]: 0 : for (i=0; i<ALGOR_NUM; i++)
1223 [ # # ]: 0 : if (doit[i]) pr_header++;
1224 : :
1225 [ # # ][ # # ]: 0 : if (usertime == 0 && !mr)
1226 : 0 : BIO_printf(bio_err,"You have chosen to measure elapsed time instead of user CPU time.\n");
1227 : :
1228 : : #ifndef OPENSSL_NO_RSA
1229 [ # # ]: 0 : for (i=0; i<RSA_NUM; i++)
1230 : : {
1231 : : const unsigned char *p;
1232 : :
1233 : 0 : p=rsa_data[i];
1234 : 0 : rsa_key[i]=d2i_RSAPrivateKey(NULL,&p,rsa_data_length[i]);
1235 [ # # ]: 0 : if (rsa_key[i] == NULL)
1236 : : {
1237 : 0 : BIO_printf(bio_err,"internal error loading RSA key number %d\n",i);
1238 : 0 : goto end;
1239 : : }
1240 : : #if 0
1241 : : else
1242 : : {
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");
1248 : : }
1249 : : #endif
1250 : : }
1251 : : #endif
1252 : :
1253 : : #ifndef OPENSSL_NO_DSA
1254 : 0 : dsa_key[0]=get_dsa512();
1255 : 0 : dsa_key[1]=get_dsa1024();
1256 : 0 : dsa_key[2]=get_dsa2048();
1257 : : #endif
1258 : :
1259 : : #ifndef OPENSSL_NO_DES
1260 : 0 : DES_set_key_unchecked(&key,&sch);
1261 : 0 : DES_set_key_unchecked(&key2,&sch2);
1262 : 0 : DES_set_key_unchecked(&key3,&sch3);
1263 : : #endif
1264 : : #ifndef OPENSSL_NO_AES
1265 : 0 : AES_set_encrypt_key(key16,128,&aes_ks1);
1266 : 0 : AES_set_encrypt_key(key24,192,&aes_ks2);
1267 : 0 : AES_set_encrypt_key(key32,256,&aes_ks3);
1268 : : #endif
1269 : : #ifndef OPENSSL_NO_CAMELLIA
1270 : 0 : Camellia_set_key(key16,128,&camellia_ks1);
1271 : 0 : Camellia_set_key(ckey24,192,&camellia_ks2);
1272 : 0 : Camellia_set_key(ckey32,256,&camellia_ks3);
1273 : : #endif
1274 : : #ifndef OPENSSL_NO_IDEA
1275 : 0 : idea_set_encrypt_key(key16,&idea_ks);
1276 : : #endif
1277 : : #ifndef OPENSSL_NO_SEED
1278 : 0 : SEED_set_key(key16,&seed_ks);
1279 : : #endif
1280 : : #ifndef OPENSSL_NO_RC4
1281 : 0 : RC4_set_key(&rc4_ks,16,key16);
1282 : : #endif
1283 : : #ifndef OPENSSL_NO_RC2
1284 : 0 : RC2_set_key(&rc2_ks,16,key16,128);
1285 : : #endif
1286 : : #ifndef OPENSSL_NO_RC5
1287 : : RC5_32_set_key(&rc5_ks,16,key16,12);
1288 : : #endif
1289 : : #ifndef OPENSSL_NO_BF
1290 : 0 : BF_set_key(&bf_ks,16,key16);
1291 : : #endif
1292 : : #ifndef OPENSSL_NO_CAST
1293 : 0 : CAST_set_key(&cast_ks,16,key16);
1294 : : #endif
1295 : : #ifndef OPENSSL_NO_RSA
1296 : : memset(rsa_c,0,sizeof(rsa_c));
1297 : : #endif
1298 : : #ifndef SIGALRM
1299 : : #ifndef OPENSSL_NO_DES
1300 : : BIO_printf(bio_err,"First we calculate the approximate speed ...\n");
1301 : : count=10;
1302 : : do {
1303 : : long it;
1304 : : count*=2;
1305 : : Time_F(START);
1306 : : for (it=count; it; it--)
1307 : : DES_ecb_encrypt((DES_cblock *)buf,
1308 : : (DES_cblock *)buf,
1309 : : &sch,DES_ENCRYPT);
1310 : : d=Time_F(STOP);
1311 : : } while (d <3);
1312 : : save_count=count;
1313 : : c[D_MD2][0]=count/10;
1314 : : c[D_MDC2][0]=count/10;
1315 : : c[D_MD4][0]=count;
1316 : : c[D_MD5][0]=count;
1317 : : c[D_HMAC][0]=count;
1318 : : c[D_SHA1][0]=count;
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;
1342 : :
1343 : : for (i=1; i<SIZE_NUM; i++)
1344 : : {
1345 : : long l0,l1;
1346 : :
1347 : : l0=(long)lengths[0];
1348 : : l1=(long)lengths[i];
1349 : :
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;
1360 : :
1361 : : l0=(long)lengths[i-1];
1362 : :
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;
1381 : : }
1382 : :
1383 : : prime_c[D_PRIME_TRIAL_DIVISION]=count;
1384 : : prime_c[D_PRIME_TRIAL_DIVISION_RETRY]=count;
1385 : : prime_c[D_PRIME_COPRIME]=count;
1386 : :
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++)
1391 : : {
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))
1395 : : rsa_doit[i]=0;
1396 : : else
1397 : : {
1398 : : if (rsa_c[i][0] == 0)
1399 : : {
1400 : : rsa_c[i][0]=1;
1401 : : rsa_c[i][1]=20;
1402 : : }
1403 : : }
1404 : : }
1405 : : #endif
1406 : :
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++)
1411 : : {
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))
1415 : : dsa_doit[i]=0;
1416 : : else
1417 : : {
1418 : : if (dsa_c[i] == 0)
1419 : : {
1420 : : dsa_c[i][0]=1;
1421 : : dsa_c[i][1]=1;
1422 : : }
1423 : : }
1424 : : }
1425 : : #endif
1426 : :
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++)
1431 : : {
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))
1435 : : ecdsa_doit[i]=0;
1436 : : else
1437 : : {
1438 : : if (ecdsa_c[i] == 0)
1439 : : {
1440 : : ecdsa_c[i][0]=1;
1441 : : ecdsa_c[i][1]=1;
1442 : : }
1443 : : }
1444 : : }
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++)
1448 : : {
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))
1452 : : ecdsa_doit[i]=0;
1453 : : else
1454 : : {
1455 : : if (ecdsa_c[i] == 0)
1456 : : {
1457 : : ecdsa_c[i][0]=1;
1458 : : ecdsa_c[i][1]=1;
1459 : : }
1460 : : }
1461 : : }
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++)
1465 : : {
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))
1469 : : ecdsa_doit[i]=0;
1470 : : else
1471 : : {
1472 : : if (ecdsa_c[i] == 0)
1473 : : {
1474 : : ecdsa_c[i][0]=1;
1475 : : ecdsa_c[i][1]=1;
1476 : : }
1477 : : }
1478 : : }
1479 : : #endif
1480 : :
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++)
1485 : : {
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))
1489 : : ecdh_doit[i]=0;
1490 : : else
1491 : : {
1492 : : if (ecdh_c[i] == 0)
1493 : : {
1494 : : ecdh_c[i][0]=1;
1495 : : ecdh_c[i][1]=1;
1496 : : }
1497 : : }
1498 : : }
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++)
1502 : : {
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))
1506 : : ecdh_doit[i]=0;
1507 : : else
1508 : : {
1509 : : if (ecdh_c[i] == 0)
1510 : : {
1511 : : ecdh_c[i][0]=1;
1512 : : ecdh_c[i][1]=1;
1513 : : }
1514 : : }
1515 : : }
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++)
1519 : : {
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))
1523 : : ecdh_doit[i]=0;
1524 : : else
1525 : : {
1526 : : if (ecdh_c[i] == 0)
1527 : : {
1528 : : ecdh_c[i][0]=1;
1529 : : ecdh_c[i][1]=1;
1530 : : }
1531 : : }
1532 : : }
1533 : : #endif
1534 : :
1535 : : #define COND(d) (count < (d))
1536 : : #define COUNT(d) (d)
1537 : : #else
1538 : : /* not worth fixing */
1539 : : # error "You cannot disable DES on systems without SIGALRM."
1540 : : #endif /* OPENSSL_NO_DES */
1541 : : #else
1542 : : #define COND(c) (run && count<0x7fffffff)
1543 : : #define COUNT(d) (count)
1544 : : #ifndef _WIN32
1545 : 0 : signal(SIGALRM,sig_done);
1546 : : #endif
1547 : : #endif /* SIGALRM */
1548 : :
1549 : : #ifndef OPENSSL_NO_MD2
1550 : : if (doit[D_MD2])
1551 : : {
1552 : : for (j=0; j<SIZE_NUM; j++)
1553 : : {
1554 : : print_message(names[D_MD2],c[D_MD2][j],lengths[j]);
1555 : : Time_F(START);
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);
1558 : : d=Time_F(STOP);
1559 : : print_result(D_MD2,j,count,d);
1560 : : }
1561 : : }
1562 : : #endif
1563 : : #ifndef OPENSSL_NO_MDC2
1564 [ # # ]: 0 : if (doit[D_MDC2])
1565 : : {
1566 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1567 : : {
1568 : 0 : print_message(names[D_MDC2],c[D_MDC2][j],lengths[j]);
1569 : 0 : Time_F(START);
1570 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_MDC2][j]); count++)
1571 : 0 : EVP_Digest(buf,(unsigned long)lengths[j],&(mdc2[0]),NULL,EVP_mdc2(),NULL);
1572 : 0 : d=Time_F(STOP);
1573 : 0 : print_result(D_MDC2,j,count,d);
1574 : : }
1575 : : }
1576 : : #endif
1577 : :
1578 : : #ifndef OPENSSL_NO_MD4
1579 [ # # ]: 0 : if (doit[D_MD4])
1580 : : {
1581 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1582 : : {
1583 : 0 : print_message(names[D_MD4],c[D_MD4][j],lengths[j]);
1584 : 0 : Time_F(START);
1585 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_MD4][j]); count++)
1586 : 0 : EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md4[0]),NULL,EVP_md4(),NULL);
1587 : 0 : d=Time_F(STOP);
1588 : 0 : print_result(D_MD4,j,count,d);
1589 : : }
1590 : : }
1591 : : #endif
1592 : :
1593 : : #ifndef OPENSSL_NO_MD5
1594 [ # # ]: 0 : if (doit[D_MD5])
1595 : : {
1596 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1597 : : {
1598 : 0 : print_message(names[D_MD5],c[D_MD5][j],lengths[j]);
1599 : 0 : Time_F(START);
1600 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_MD5][j]); count++)
1601 : 0 : MD5(buf,lengths[j],md5);
1602 : 0 : d=Time_F(STOP);
1603 : 0 : print_result(D_MD5,j,count,d);
1604 : : }
1605 : : }
1606 : : #endif
1607 : :
1608 : : #if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_HMAC)
1609 [ # # ]: 0 : if (doit[D_HMAC])
1610 : : {
1611 : : HMAC_CTX hctx;
1612 : :
1613 : 0 : HMAC_CTX_init(&hctx);
1614 : 0 : HMAC_Init_ex(&hctx,(unsigned char *)"This is a key...",
1615 : : 16,EVP_md5(), NULL);
1616 : :
1617 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1618 : : {
1619 : 0 : print_message(names[D_HMAC],c[D_HMAC][j],lengths[j]);
1620 : 0 : Time_F(START);
1621 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_HMAC][j]); count++)
1622 : : {
1623 : 0 : HMAC_Init_ex(&hctx,NULL,0,NULL,NULL);
1624 : 0 : HMAC_Update(&hctx,buf,lengths[j]);
1625 : 0 : HMAC_Final(&hctx,&(hmac[0]),NULL);
1626 : : }
1627 : 0 : d=Time_F(STOP);
1628 : 0 : print_result(D_HMAC,j,count,d);
1629 : : }
1630 : 0 : HMAC_CTX_cleanup(&hctx);
1631 : : }
1632 : : #endif
1633 : : #ifndef OPENSSL_NO_SHA
1634 [ # # ]: 0 : if (doit[D_SHA1])
1635 : : {
1636 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1637 : : {
1638 : 0 : print_message(names[D_SHA1],c[D_SHA1][j],lengths[j]);
1639 : 0 : Time_F(START);
1640 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_SHA1][j]); count++)
1641 : : #if 0
1642 : : EVP_Digest(buf,(unsigned long)lengths[j],&(sha[0]),NULL,EVP_sha1(),NULL);
1643 : : #else
1644 : 0 : SHA1(buf,lengths[j],sha);
1645 : : #endif
1646 : 0 : d=Time_F(STOP);
1647 : 0 : print_result(D_SHA1,j,count,d);
1648 : : }
1649 : : }
1650 : :
1651 : : #ifndef OPENSSL_NO_SHA256
1652 [ # # ]: 0 : if (doit[D_SHA256])
1653 : : {
1654 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1655 : : {
1656 : 0 : print_message(names[D_SHA256],c[D_SHA256][j],lengths[j]);
1657 : 0 : Time_F(START);
1658 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_SHA256][j]); count++)
1659 : 0 : SHA256(buf,lengths[j],sha256);
1660 : 0 : d=Time_F(STOP);
1661 : 0 : print_result(D_SHA256,j,count,d);
1662 : : }
1663 : : }
1664 : : #endif
1665 : :
1666 : : #ifndef OPENSSL_NO_SHA512
1667 [ # # ]: 0 : if (doit[D_SHA512])
1668 : : {
1669 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1670 : : {
1671 : 0 : print_message(names[D_SHA512],c[D_SHA512][j],lengths[j]);
1672 : 0 : Time_F(START);
1673 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_SHA512][j]); count++)
1674 : 0 : SHA512(buf,lengths[j],sha512);
1675 : 0 : d=Time_F(STOP);
1676 : 0 : print_result(D_SHA512,j,count,d);
1677 : : }
1678 : : }
1679 : : #endif
1680 : : #endif
1681 : :
1682 : : #ifndef OPENSSL_NO_WHIRLPOOL
1683 [ # # ]: 0 : if (doit[D_WHIRLPOOL])
1684 : : {
1685 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1686 : : {
1687 : 0 : print_message(names[D_WHIRLPOOL],c[D_WHIRLPOOL][j],lengths[j]);
1688 : 0 : Time_F(START);
1689 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_WHIRLPOOL][j]); count++)
1690 : 0 : WHIRLPOOL(buf,lengths[j],whirlpool);
1691 : 0 : d=Time_F(STOP);
1692 : 0 : print_result(D_WHIRLPOOL,j,count,d);
1693 : : }
1694 : : }
1695 : : #endif
1696 : :
1697 : : #ifndef OPENSSL_NO_RIPEMD
1698 [ # # ]: 0 : if (doit[D_RMD160])
1699 : : {
1700 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1701 : : {
1702 : 0 : print_message(names[D_RMD160],c[D_RMD160][j],lengths[j]);
1703 : 0 : Time_F(START);
1704 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_RMD160][j]); count++)
1705 : 0 : EVP_Digest(buf,(unsigned long)lengths[j],&(rmd160[0]),NULL,EVP_ripemd160(),NULL);
1706 : 0 : d=Time_F(STOP);
1707 : 0 : print_result(D_RMD160,j,count,d);
1708 : : }
1709 : : }
1710 : : #endif
1711 : : #ifndef OPENSSL_NO_RC4
1712 [ # # ]: 0 : if (doit[D_RC4])
1713 : : {
1714 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1715 : : {
1716 : 0 : print_message(names[D_RC4],c[D_RC4][j],lengths[j]);
1717 : 0 : Time_F(START);
1718 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_RC4][j]); count++)
1719 : 0 : RC4(&rc4_ks,(unsigned int)lengths[j],
1720 : : buf,buf);
1721 : 0 : d=Time_F(STOP);
1722 : 0 : print_result(D_RC4,j,count,d);
1723 : : }
1724 : : }
1725 : : #endif
1726 : : #ifndef OPENSSL_NO_DES
1727 [ # # ]: 0 : if (doit[D_CBC_DES])
1728 : : {
1729 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1730 : : {
1731 : 0 : print_message(names[D_CBC_DES],c[D_CBC_DES][j],lengths[j]);
1732 : 0 : Time_F(START);
1733 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_CBC_DES][j]); count++)
1734 : 0 : DES_ncbc_encrypt(buf,buf,lengths[j],&sch,
1735 : : &DES_iv,DES_ENCRYPT);
1736 : 0 : d=Time_F(STOP);
1737 : 0 : print_result(D_CBC_DES,j,count,d);
1738 : : }
1739 : : }
1740 : :
1741 [ # # ]: 0 : if (doit[D_EDE3_DES])
1742 : : {
1743 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1744 : : {
1745 : 0 : print_message(names[D_EDE3_DES],c[D_EDE3_DES][j],lengths[j]);
1746 : 0 : Time_F(START);
1747 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_EDE3_DES][j]); count++)
1748 : 0 : DES_ede3_cbc_encrypt(buf,buf,lengths[j],
1749 : : &sch,&sch2,&sch3,
1750 : : &DES_iv,DES_ENCRYPT);
1751 : 0 : d=Time_F(STOP);
1752 : 0 : print_result(D_EDE3_DES,j,count,d);
1753 : : }
1754 : : }
1755 : : #endif
1756 : : #ifndef OPENSSL_NO_AES
1757 [ # # ]: 0 : if (doit[D_CBC_128_AES])
1758 : : {
1759 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1760 : : {
1761 : 0 : print_message(names[D_CBC_128_AES],c[D_CBC_128_AES][j],lengths[j]);
1762 : 0 : Time_F(START);
1763 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_CBC_128_AES][j]); count++)
1764 : 0 : AES_cbc_encrypt(buf,buf,
1765 : 0 : (unsigned long)lengths[j],&aes_ks1,
1766 : : iv,AES_ENCRYPT);
1767 : 0 : d=Time_F(STOP);
1768 : 0 : print_result(D_CBC_128_AES,j,count,d);
1769 : : }
1770 : : }
1771 [ # # ]: 0 : if (doit[D_CBC_192_AES])
1772 : : {
1773 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1774 : : {
1775 : 0 : print_message(names[D_CBC_192_AES],c[D_CBC_192_AES][j],lengths[j]);
1776 : 0 : Time_F(START);
1777 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_CBC_192_AES][j]); count++)
1778 : 0 : AES_cbc_encrypt(buf,buf,
1779 : 0 : (unsigned long)lengths[j],&aes_ks2,
1780 : : iv,AES_ENCRYPT);
1781 : 0 : d=Time_F(STOP);
1782 : 0 : print_result(D_CBC_192_AES,j,count,d);
1783 : : }
1784 : : }
1785 [ # # ]: 0 : if (doit[D_CBC_256_AES])
1786 : : {
1787 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1788 : : {
1789 : 0 : print_message(names[D_CBC_256_AES],c[D_CBC_256_AES][j],lengths[j]);
1790 : 0 : Time_F(START);
1791 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_CBC_256_AES][j]); count++)
1792 : 0 : AES_cbc_encrypt(buf,buf,
1793 : 0 : (unsigned long)lengths[j],&aes_ks3,
1794 : : iv,AES_ENCRYPT);
1795 : 0 : d=Time_F(STOP);
1796 : 0 : print_result(D_CBC_256_AES,j,count,d);
1797 : : }
1798 : : }
1799 : :
1800 [ # # ]: 0 : if (doit[D_IGE_128_AES])
1801 : : {
1802 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1803 : : {
1804 : 0 : print_message(names[D_IGE_128_AES],c[D_IGE_128_AES][j],lengths[j]);
1805 : 0 : Time_F(START);
1806 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_IGE_128_AES][j]); count++)
1807 : 0 : AES_ige_encrypt(buf,buf2,
1808 : 0 : (unsigned long)lengths[j],&aes_ks1,
1809 : : iv,AES_ENCRYPT);
1810 : 0 : d=Time_F(STOP);
1811 : 0 : print_result(D_IGE_128_AES,j,count,d);
1812 : : }
1813 : : }
1814 [ # # ]: 0 : if (doit[D_IGE_192_AES])
1815 : : {
1816 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1817 : : {
1818 : 0 : print_message(names[D_IGE_192_AES],c[D_IGE_192_AES][j],lengths[j]);
1819 : 0 : Time_F(START);
1820 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_IGE_192_AES][j]); count++)
1821 : 0 : AES_ige_encrypt(buf,buf2,
1822 : 0 : (unsigned long)lengths[j],&aes_ks2,
1823 : : iv,AES_ENCRYPT);
1824 : 0 : d=Time_F(STOP);
1825 : 0 : print_result(D_IGE_192_AES,j,count,d);
1826 : : }
1827 : : }
1828 [ # # ]: 0 : if (doit[D_IGE_256_AES])
1829 : : {
1830 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1831 : : {
1832 : 0 : print_message(names[D_IGE_256_AES],c[D_IGE_256_AES][j],lengths[j]);
1833 : 0 : Time_F(START);
1834 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_IGE_256_AES][j]); count++)
1835 : 0 : AES_ige_encrypt(buf,buf2,
1836 : 0 : (unsigned long)lengths[j],&aes_ks3,
1837 : : iv,AES_ENCRYPT);
1838 : 0 : d=Time_F(STOP);
1839 : 0 : print_result(D_IGE_256_AES,j,count,d);
1840 : : }
1841 : : }
1842 [ # # ]: 0 : if (doit[D_GHASH])
1843 : : {
1844 : 0 : GCM128_CONTEXT *ctx = CRYPTO_gcm128_new(&aes_ks1,(block128_f)AES_encrypt);
1845 : 0 : CRYPTO_gcm128_setiv (ctx,(unsigned char *)"0123456789ab",12);
1846 : :
1847 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1848 : : {
1849 : 0 : print_message(names[D_GHASH],c[D_GHASH][j],lengths[j]);
1850 : 0 : Time_F(START);
1851 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_GHASH][j]); count++)
1852 : 0 : CRYPTO_gcm128_aad(ctx,buf,lengths[j]);
1853 : 0 : d=Time_F(STOP);
1854 : 0 : print_result(D_GHASH,j,count,d);
1855 : : }
1856 : 0 : CRYPTO_gcm128_release(ctx);
1857 : : }
1858 : :
1859 : : #endif
1860 : : #ifndef OPENSSL_NO_CAMELLIA
1861 [ # # ]: 0 : if (doit[D_CBC_128_CML])
1862 : : {
1863 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1864 : : {
1865 : 0 : print_message(names[D_CBC_128_CML],c[D_CBC_128_CML][j],lengths[j]);
1866 : 0 : Time_F(START);
1867 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_CBC_128_CML][j]); count++)
1868 : 0 : Camellia_cbc_encrypt(buf,buf,
1869 : 0 : (unsigned long)lengths[j],&camellia_ks1,
1870 : : iv,CAMELLIA_ENCRYPT);
1871 : 0 : d=Time_F(STOP);
1872 : 0 : print_result(D_CBC_128_CML,j,count,d);
1873 : : }
1874 : : }
1875 [ # # ]: 0 : if (doit[D_CBC_192_CML])
1876 : : {
1877 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1878 : : {
1879 : 0 : print_message(names[D_CBC_192_CML],c[D_CBC_192_CML][j],lengths[j]);
1880 : 0 : Time_F(START);
1881 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_CBC_192_CML][j]); count++)
1882 : 0 : Camellia_cbc_encrypt(buf,buf,
1883 : 0 : (unsigned long)lengths[j],&camellia_ks2,
1884 : : iv,CAMELLIA_ENCRYPT);
1885 : 0 : d=Time_F(STOP);
1886 : 0 : print_result(D_CBC_192_CML,j,count,d);
1887 : : }
1888 : : }
1889 [ # # ]: 0 : if (doit[D_CBC_256_CML])
1890 : : {
1891 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1892 : : {
1893 : 0 : print_message(names[D_CBC_256_CML],c[D_CBC_256_CML][j],lengths[j]);
1894 : 0 : Time_F(START);
1895 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_CBC_256_CML][j]); count++)
1896 : 0 : Camellia_cbc_encrypt(buf,buf,
1897 : 0 : (unsigned long)lengths[j],&camellia_ks3,
1898 : : iv,CAMELLIA_ENCRYPT);
1899 : 0 : d=Time_F(STOP);
1900 : 0 : print_result(D_CBC_256_CML,j,count,d);
1901 : : }
1902 : : }
1903 : :
1904 : : #endif
1905 : : #ifndef OPENSSL_NO_IDEA
1906 [ # # ]: 0 : if (doit[D_CBC_IDEA])
1907 : : {
1908 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1909 : : {
1910 : 0 : print_message(names[D_CBC_IDEA],c[D_CBC_IDEA][j],lengths[j]);
1911 : 0 : Time_F(START);
1912 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_CBC_IDEA][j]); count++)
1913 : 0 : idea_cbc_encrypt(buf,buf,
1914 : 0 : (unsigned long)lengths[j],&idea_ks,
1915 : : iv,IDEA_ENCRYPT);
1916 : 0 : d=Time_F(STOP);
1917 : 0 : print_result(D_CBC_IDEA,j,count,d);
1918 : : }
1919 : : }
1920 : : #endif
1921 : : #ifndef OPENSSL_NO_SEED
1922 [ # # ]: 0 : if (doit[D_CBC_SEED])
1923 : : {
1924 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1925 : : {
1926 : 0 : print_message(names[D_CBC_SEED],c[D_CBC_SEED][j],lengths[j]);
1927 : 0 : Time_F(START);
1928 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_CBC_SEED][j]); count++)
1929 : 0 : SEED_cbc_encrypt(buf,buf,
1930 : 0 : (unsigned long)lengths[j],&seed_ks,iv,1);
1931 : 0 : d=Time_F(STOP);
1932 : 0 : print_result(D_CBC_SEED,j,count,d);
1933 : : }
1934 : : }
1935 : : #endif
1936 : : #ifndef OPENSSL_NO_RC2
1937 [ # # ]: 0 : if (doit[D_CBC_RC2])
1938 : : {
1939 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1940 : : {
1941 : 0 : print_message(names[D_CBC_RC2],c[D_CBC_RC2][j],lengths[j]);
1942 : 0 : Time_F(START);
1943 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_CBC_RC2][j]); count++)
1944 : 0 : RC2_cbc_encrypt(buf,buf,
1945 : 0 : (unsigned long)lengths[j],&rc2_ks,
1946 : : iv,RC2_ENCRYPT);
1947 : 0 : d=Time_F(STOP);
1948 : 0 : print_result(D_CBC_RC2,j,count,d);
1949 : : }
1950 : : }
1951 : : #endif
1952 : : #ifndef OPENSSL_NO_RC5
1953 : : if (doit[D_CBC_RC5])
1954 : : {
1955 : : for (j=0; j<SIZE_NUM; j++)
1956 : : {
1957 : : print_message(names[D_CBC_RC5],c[D_CBC_RC5][j],lengths[j]);
1958 : : Time_F(START);
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,
1962 : : iv,RC5_ENCRYPT);
1963 : : d=Time_F(STOP);
1964 : : print_result(D_CBC_RC5,j,count,d);
1965 : : }
1966 : : }
1967 : : #endif
1968 : : #ifndef OPENSSL_NO_BF
1969 [ # # ]: 0 : if (doit[D_CBC_BF])
1970 : : {
1971 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1972 : : {
1973 : 0 : print_message(names[D_CBC_BF],c[D_CBC_BF][j],lengths[j]);
1974 : 0 : Time_F(START);
1975 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_CBC_BF][j]); count++)
1976 : 0 : BF_cbc_encrypt(buf,buf,
1977 : 0 : (unsigned long)lengths[j],&bf_ks,
1978 : : iv,BF_ENCRYPT);
1979 : 0 : d=Time_F(STOP);
1980 : 0 : print_result(D_CBC_BF,j,count,d);
1981 : : }
1982 : : }
1983 : : #endif
1984 : : #ifndef OPENSSL_NO_CAST
1985 [ # # ]: 0 : if (doit[D_CBC_CAST])
1986 : : {
1987 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
1988 : : {
1989 : 0 : print_message(names[D_CBC_CAST],c[D_CBC_CAST][j],lengths[j]);
1990 : 0 : Time_F(START);
1991 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(c[D_CBC_CAST][j]); count++)
1992 : 0 : CAST_cbc_encrypt(buf,buf,
1993 : 0 : (unsigned long)lengths[j],&cast_ks,
1994 : : iv,CAST_ENCRYPT);
1995 : 0 : d=Time_F(STOP);
1996 : 0 : print_result(D_CBC_CAST,j,count,d);
1997 : : }
1998 : : }
1999 : : #endif
2000 : :
2001 [ # # ]: 0 : if (doit[D_EVP])
2002 : : {
2003 : : #ifdef EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
2004 [ # # ]: 0 : if (multiblock && evp_cipher)
2005 : : {
2006 [ # # ]: 0 : if (!(EVP_CIPHER_flags(evp_cipher)&EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK))
2007 : : {
2008 : 0 : fprintf(stderr,"%s is not multi-block capable\n",OBJ_nid2ln(evp_cipher->nid));
2009 : : goto end;
2010 : : }
2011 : 0 : multiblock_speed(evp_cipher);
2012 : 0 : mret=0;
2013 : 0 : goto end;
2014 : : }
2015 : : #endif
2016 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
2017 : : {
2018 [ # # ]: 0 : if (evp_cipher)
2019 : : {
2020 : : EVP_CIPHER_CTX ctx;
2021 : : int outl;
2022 : :
2023 : 0 : 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 : 0 : print_message(names[D_EVP],save_count,
2028 : : lengths[j]);
2029 : :
2030 : 0 : EVP_CIPHER_CTX_init(&ctx);
2031 [ # # ]: 0 : if(decrypt)
2032 : 0 : EVP_DecryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
2033 : : else
2034 : 0 : EVP_EncryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
2035 : 0 : EVP_CIPHER_CTX_set_padding(&ctx, 0);
2036 : :
2037 : 0 : Time_F(START);
2038 [ # # ]: 0 : if(decrypt)
2039 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
2040 : 0 : EVP_DecryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
2041 : : else
2042 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
2043 : 0 : EVP_EncryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
2044 [ # # ]: 0 : if(decrypt)
2045 : 0 : EVP_DecryptFinal_ex(&ctx,buf,&outl);
2046 : : else
2047 : 0 : EVP_EncryptFinal_ex(&ctx,buf,&outl);
2048 : 0 : d=Time_F(STOP);
2049 : 0 : EVP_CIPHER_CTX_cleanup(&ctx);
2050 : : }
2051 [ # # ]: 0 : if (evp_md)
2052 : : {
2053 : 0 : names[D_EVP]=OBJ_nid2ln(evp_md->type);
2054 : 0 : print_message(names[D_EVP],save_count,
2055 : : lengths[j]);
2056 : :
2057 : 0 : Time_F(START);
2058 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
2059 : 0 : EVP_Digest(buf,lengths[j],&(md[0]),NULL,evp_md,NULL);
2060 : :
2061 : 0 : d=Time_F(STOP);
2062 : : }
2063 : 0 : print_result(D_EVP,j,count,d);
2064 : : }
2065 : : }
2066 : :
2067 [ # # ]: 0 : if (prime_doit[D_PRIME_TRIAL_DIVISION])
2068 : : {
2069 : 0 : BIGNUM *rnd = BN_new();
2070 : 0 : BIGNUM *add = BN_new();
2071 : 0 : BN_CTX *ctx = BN_CTX_new();
2072 : :
2073 : 0 : BN_set_word(add, 2);
2074 : 0 : prime_print_message(prime_names[D_PRIME_TRIAL_DIVISION],
2075 : : prime_c[D_PRIME_TRIAL_DIVISION]);
2076 : :
2077 : 0 : Time_F(START);
2078 [ # # ][ # # ]: 0 : for (count=0, run=1; COND(prime_c[D_PRIME_TRIAL_DIVISION]); count++)
2079 [ # # ]: 0 : if (!bn_probable_prime_dh(rnd, 1024, add, NULL, ctx)) count--;
2080 : :
2081 : 0 : d=Time_F(STOP);
2082 : 0 : prime_print_result(D_PRIME_TRIAL_DIVISION, count, d);
2083 : :
2084 : 0 : BN_CTX_free(ctx);
2085 : 0 : BN_free(add);
2086 : 0 : BN_free(rnd);
2087 : : }
2088 : :
2089 [ # # ]: 0 : if (prime_doit[D_PRIME_TRIAL_DIVISION_RETRY])
2090 : : {
2091 : 0 : BIGNUM *rnd = BN_new();
2092 : 0 : BN_CTX *ctx = BN_CTX_new();
2093 : :
2094 : 0 : prime_print_message(prime_names[D_PRIME_TRIAL_DIVISION_RETRY],
2095 : : prime_c[D_PRIME_TRIAL_DIVISION_RETRY]);
2096 : :
2097 : 0 : Time_F(START);
2098 [ # # ][ # # ]: 0 : for (count=0, run=1; COND(prime_c[D_PRIME_TRIAL_DIVISION_RETRY]); count++)
2099 [ # # ]: 0 : if (!bn_probable_prime_dh_retry(rnd, 1024, ctx)) count--;
2100 : :
2101 : 0 : d=Time_F(STOP);
2102 : 0 : prime_print_result(D_PRIME_TRIAL_DIVISION_RETRY, count, d);
2103 : :
2104 : 0 : BN_CTX_free(ctx);
2105 : 0 : BN_free(rnd);
2106 : : }
2107 : :
2108 [ # # ]: 0 : if (prime_doit[D_PRIME_COPRIME])
2109 : : {
2110 : 0 : BIGNUM *rnd = BN_new();
2111 : 0 : BN_CTX *ctx = BN_CTX_new();
2112 : :
2113 : 0 : prime_print_message(prime_names[D_PRIME_COPRIME],
2114 : : prime_c[D_PRIME_COPRIME]);
2115 : :
2116 : 0 : Time_F(START);
2117 [ # # ][ # # ]: 0 : for (count=0, run=1; COND(prime_c[D_PRIME_COPRIME]); count++)
2118 [ # # ]: 0 : if (!bn_probable_prime_dh_coprime(rnd, 1024, ctx)) count--;
2119 : :
2120 : 0 : d=Time_F(STOP);
2121 : 0 : prime_print_result(D_PRIME_COPRIME, count, d);
2122 : :
2123 : 0 : BN_CTX_free(ctx);
2124 : 0 : BN_free(rnd);
2125 : : }
2126 : :
2127 : 0 : RAND_pseudo_bytes(buf,36);
2128 : : #ifndef OPENSSL_NO_RSA
2129 [ # # ]: 0 : for (j=0; j<RSA_NUM; j++)
2130 : : {
2131 : : int ret;
2132 [ # # ]: 0 : if (!rsa_doit[j]) continue;
2133 : 0 : ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num, rsa_key[j]);
2134 [ # # ]: 0 : if (ret == 0)
2135 : : {
2136 : 0 : BIO_printf(bio_err,"RSA sign failure. No RSA sign will be done.\n");
2137 : 0 : ERR_print_errors(bio_err);
2138 : 0 : rsa_count=1;
2139 : : }
2140 : : else
2141 : : {
2142 : 0 : pkey_print_message("private","rsa",
2143 : 0 : rsa_c[j][0],rsa_bits[j],
2144 : : RSA_SECONDS);
2145 : : /* RSA_blinding_on(rsa_key[j],NULL); */
2146 : 0 : Time_F(START);
2147 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(rsa_c[j][0]); count++)
2148 : : {
2149 : 0 : ret=RSA_sign(NID_md5_sha1, buf,36, buf2,
2150 : : &rsa_num, rsa_key[j]);
2151 [ # # ]: 0 : if (ret == 0)
2152 : : {
2153 : 0 : BIO_printf(bio_err,
2154 : : "RSA sign failure\n");
2155 : 0 : ERR_print_errors(bio_err);
2156 : 0 : count=1;
2157 : 0 : break;
2158 : : }
2159 : : }
2160 : 0 : d=Time_F(STOP);
2161 [ # # ]: 0 : 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 : 0 : rsa_results[j][0]=d/(double)count;
2165 : 0 : rsa_count=count;
2166 : : }
2167 : :
2168 : : #if 1
2169 : 0 : ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num, rsa_key[j]);
2170 [ # # ]: 0 : if (ret <= 0)
2171 : : {
2172 : 0 : BIO_printf(bio_err,"RSA verify failure. No RSA verify will be done.\n");
2173 : 0 : ERR_print_errors(bio_err);
2174 : 0 : rsa_doit[j] = 0;
2175 : : }
2176 : : else
2177 : : {
2178 : 0 : pkey_print_message("public","rsa",
2179 : 0 : rsa_c[j][1],rsa_bits[j],
2180 : : RSA_SECONDS);
2181 : 0 : Time_F(START);
2182 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(rsa_c[j][1]); count++)
2183 : : {
2184 : 0 : ret=RSA_verify(NID_md5_sha1, buf,36, buf2,
2185 : : rsa_num, rsa_key[j]);
2186 [ # # ]: 0 : if (ret <= 0)
2187 : : {
2188 : 0 : BIO_printf(bio_err,
2189 : : "RSA verify failure\n");
2190 : 0 : ERR_print_errors(bio_err);
2191 : 0 : count=1;
2192 : 0 : break;
2193 : : }
2194 : : }
2195 : 0 : d=Time_F(STOP);
2196 [ # # ]: 0 : 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 : 0 : rsa_results[j][1]=d/(double)count;
2200 : : }
2201 : : #endif
2202 : :
2203 [ # # ]: 0 : if (rsa_count <= 1)
2204 : : {
2205 : : /* if longer than 10s, don't do any more */
2206 [ # # ]: 0 : for (j++; j<RSA_NUM; j++)
2207 : 0 : rsa_doit[j]=0;
2208 : : }
2209 : : }
2210 : : #endif
2211 : :
2212 : 0 : RAND_pseudo_bytes(buf,20);
2213 : : #ifndef OPENSSL_NO_DSA
2214 [ # # ]: 0 : if (RAND_status() != 1)
2215 : : {
2216 : 0 : RAND_seed(rnd_seed, sizeof rnd_seed);
2217 : 0 : rnd_fake = 1;
2218 : : }
2219 [ # # ]: 0 : for (j=0; j<DSA_NUM; j++)
2220 : : {
2221 : : unsigned int kk;
2222 : : int ret;
2223 : :
2224 [ # # ]: 0 : if (!dsa_doit[j]) continue;
2225 : : /* DSA_generate_key(dsa_key[j]); */
2226 : : /* DSA_sign_setup(dsa_key[j],NULL); */
2227 : 0 : ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
2228 : : &kk,dsa_key[j]);
2229 [ # # ]: 0 : if (ret == 0)
2230 : : {
2231 : 0 : BIO_printf(bio_err,"DSA sign failure. No DSA sign will be done.\n");
2232 : 0 : ERR_print_errors(bio_err);
2233 : 0 : rsa_count=1;
2234 : : }
2235 : : else
2236 : : {
2237 : 0 : pkey_print_message("sign","dsa",
2238 : 0 : dsa_c[j][0],dsa_bits[j],
2239 : : DSA_SECONDS);
2240 : 0 : Time_F(START);
2241 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(dsa_c[j][0]); count++)
2242 : : {
2243 : 0 : ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
2244 : : &kk,dsa_key[j]);
2245 [ # # ]: 0 : if (ret == 0)
2246 : : {
2247 : 0 : BIO_printf(bio_err,
2248 : : "DSA sign failure\n");
2249 : 0 : ERR_print_errors(bio_err);
2250 : 0 : count=1;
2251 : 0 : break;
2252 : : }
2253 : : }
2254 : 0 : d=Time_F(STOP);
2255 [ # # ]: 0 : 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 : 0 : dsa_results[j][0]=d/(double)count;
2259 : 0 : rsa_count=count;
2260 : : }
2261 : :
2262 : 0 : ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
2263 : : kk,dsa_key[j]);
2264 [ # # ]: 0 : if (ret <= 0)
2265 : : {
2266 : 0 : BIO_printf(bio_err,"DSA verify failure. No DSA verify will be done.\n");
2267 : 0 : ERR_print_errors(bio_err);
2268 : 0 : dsa_doit[j] = 0;
2269 : : }
2270 : : else
2271 : : {
2272 : 0 : pkey_print_message("verify","dsa",
2273 : 0 : dsa_c[j][1],dsa_bits[j],
2274 : : DSA_SECONDS);
2275 : 0 : Time_F(START);
2276 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(dsa_c[j][1]); count++)
2277 : : {
2278 : 0 : ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
2279 : : kk,dsa_key[j]);
2280 [ # # ]: 0 : if (ret <= 0)
2281 : : {
2282 : 0 : BIO_printf(bio_err,
2283 : : "DSA verify failure\n");
2284 : 0 : ERR_print_errors(bio_err);
2285 : 0 : count=1;
2286 : 0 : break;
2287 : : }
2288 : : }
2289 : 0 : d=Time_F(STOP);
2290 [ # # ]: 0 : 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 : 0 : dsa_results[j][1]=d/(double)count;
2294 : : }
2295 : :
2296 [ # # ]: 0 : if (rsa_count <= 1)
2297 : : {
2298 : : /* if longer than 10s, don't do any more */
2299 [ # # ]: 0 : for (j++; j<DSA_NUM; j++)
2300 : 0 : dsa_doit[j]=0;
2301 : : }
2302 : : }
2303 [ # # ]: 0 : if (rnd_fake) RAND_cleanup();
2304 : : #endif
2305 : :
2306 : : #ifndef OPENSSL_NO_ECDSA
2307 [ # # ]: 0 : if (RAND_status() != 1)
2308 : : {
2309 : 0 : RAND_seed(rnd_seed, sizeof rnd_seed);
2310 : 0 : rnd_fake = 1;
2311 : : }
2312 [ # # ]: 0 : for (j=0; j<EC_NUM; j++)
2313 : : {
2314 : : int ret;
2315 : :
2316 [ # # ]: 0 : if (!ecdsa_doit[j]) continue; /* Ignore Curve */
2317 : 0 : ecdsa[j] = EC_KEY_new_by_curve_name(test_curves[j]);
2318 [ # # ]: 0 : if (ecdsa[j] == NULL)
2319 : : {
2320 : 0 : BIO_printf(bio_err,"ECDSA failure.\n");
2321 : 0 : ERR_print_errors(bio_err);
2322 : 0 : rsa_count=1;
2323 : : }
2324 : : else
2325 : : {
2326 : : #if 1
2327 : 0 : EC_KEY_precompute_mult(ecdsa[j], NULL);
2328 : : #endif
2329 : : /* Perform ECDSA signature test */
2330 : 0 : EC_KEY_generate_key(ecdsa[j]);
2331 : 0 : ret = ECDSA_sign(0, buf, 20, ecdsasig,
2332 : : &ecdsasiglen, ecdsa[j]);
2333 [ # # ]: 0 : if (ret == 0)
2334 : : {
2335 : 0 : BIO_printf(bio_err,"ECDSA sign failure. No ECDSA sign will be done.\n");
2336 : 0 : ERR_print_errors(bio_err);
2337 : 0 : rsa_count=1;
2338 : : }
2339 : : else
2340 : : {
2341 : 0 : pkey_print_message("sign","ecdsa",
2342 : : ecdsa_c[j][0],
2343 : : test_curves_bits[j],
2344 : : ECDSA_SECONDS);
2345 : :
2346 : 0 : Time_F(START);
2347 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(ecdsa_c[j][0]);
2348 : 0 : count++)
2349 : : {
2350 : 0 : ret=ECDSA_sign(0, buf, 20,
2351 : : ecdsasig, &ecdsasiglen,
2352 : : ecdsa[j]);
2353 [ # # ]: 0 : if (ret == 0)
2354 : : {
2355 : 0 : BIO_printf(bio_err, "ECDSA sign failure\n");
2356 : 0 : ERR_print_errors(bio_err);
2357 : 0 : count=1;
2358 : 0 : break;
2359 : : }
2360 : : }
2361 : 0 : d=Time_F(STOP);
2362 : :
2363 [ # # ]: 0 : 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 : 0 : ecdsa_results[j][0]=d/(double)count;
2367 : 0 : rsa_count=count;
2368 : : }
2369 : :
2370 : : /* Perform ECDSA verification test */
2371 : 0 : ret=ECDSA_verify(0, buf, 20, ecdsasig,
2372 : : ecdsasiglen, ecdsa[j]);
2373 [ # # ]: 0 : if (ret != 1)
2374 : : {
2375 : 0 : BIO_printf(bio_err,"ECDSA verify failure. No ECDSA verify will be done.\n");
2376 : 0 : ERR_print_errors(bio_err);
2377 : 0 : ecdsa_doit[j] = 0;
2378 : : }
2379 : : else
2380 : : {
2381 : 0 : pkey_print_message("verify","ecdsa",
2382 : : ecdsa_c[j][1],
2383 : : test_curves_bits[j],
2384 : : ECDSA_SECONDS);
2385 : 0 : Time_F(START);
2386 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(ecdsa_c[j][1]); count++)
2387 : : {
2388 : 0 : ret=ECDSA_verify(0, buf, 20, ecdsasig, ecdsasiglen, ecdsa[j]);
2389 [ # # ]: 0 : if (ret != 1)
2390 : : {
2391 : 0 : BIO_printf(bio_err, "ECDSA verify failure\n");
2392 : 0 : ERR_print_errors(bio_err);
2393 : 0 : count=1;
2394 : 0 : break;
2395 : : }
2396 : : }
2397 : 0 : d=Time_F(STOP);
2398 [ # # ]: 0 : 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 : 0 : ecdsa_results[j][1]=d/(double)count;
2402 : : }
2403 : :
2404 [ # # ]: 0 : if (rsa_count <= 1)
2405 : : {
2406 : : /* if longer than 10s, don't do any more */
2407 [ # # ]: 0 : for (j++; j<EC_NUM; j++)
2408 : 0 : ecdsa_doit[j]=0;
2409 : : }
2410 : : }
2411 : : }
2412 [ # # ]: 0 : if (rnd_fake) RAND_cleanup();
2413 : : #endif
2414 : :
2415 : : #ifndef OPENSSL_NO_ECDH
2416 [ # # ]: 0 : if (RAND_status() != 1)
2417 : : {
2418 : 0 : RAND_seed(rnd_seed, sizeof rnd_seed);
2419 : 0 : rnd_fake = 1;
2420 : : }
2421 [ # # ]: 0 : for (j=0; j<EC_NUM; j++)
2422 : : {
2423 [ # # ]: 0 : if (!ecdh_doit[j]) continue;
2424 : 0 : ecdh_a[j] = EC_KEY_new_by_curve_name(test_curves[j]);
2425 : 0 : ecdh_b[j] = EC_KEY_new_by_curve_name(test_curves[j]);
2426 [ # # ][ # # ]: 0 : if ((ecdh_a[j] == NULL) || (ecdh_b[j] == NULL))
2427 : : {
2428 : 0 : BIO_printf(bio_err,"ECDH failure.\n");
2429 : 0 : ERR_print_errors(bio_err);
2430 : 0 : rsa_count=1;
2431 : : }
2432 : : else
2433 : : {
2434 : : /* generate two ECDH key pairs */
2435 [ # # # # ]: 0 : if (!EC_KEY_generate_key(ecdh_a[j]) ||
2436 : 0 : !EC_KEY_generate_key(ecdh_b[j]))
2437 : : {
2438 : 0 : BIO_printf(bio_err,"ECDH key generation failure.\n");
2439 : 0 : ERR_print_errors(bio_err);
2440 : 0 : rsa_count=1;
2441 : : }
2442 : : else
2443 : : {
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).
2446 : : */
2447 : : int field_size, outlen;
2448 : : void *(*kdf)(const void *in, size_t inlen, void *out, size_t *xoutlen);
2449 : 0 : field_size = EC_GROUP_get_degree(EC_KEY_get0_group(ecdh_a[j]));
2450 [ # # ]: 0 : if (field_size <= 24 * 8)
2451 : : {
2452 : : outlen = KDF1_SHA1_len;
2453 : : kdf = KDF1_SHA1;
2454 : : }
2455 : : else
2456 : : {
2457 : 0 : outlen = (field_size+7)/8;
2458 : 0 : kdf = NULL;
2459 : : }
2460 : 0 : secret_size_a = ECDH_compute_key(secret_a, outlen,
2461 : : EC_KEY_get0_public_key(ecdh_b[j]),
2462 : : ecdh_a[j], kdf);
2463 : 0 : secret_size_b = ECDH_compute_key(secret_b, outlen,
2464 : : EC_KEY_get0_public_key(ecdh_a[j]),
2465 : : ecdh_b[j], kdf);
2466 [ # # ]: 0 : if (secret_size_a != secret_size_b)
2467 : : ecdh_checks = 0;
2468 : : else
2469 : 0 : ecdh_checks = 1;
2470 : :
2471 [ # # ]: 0 : for (secret_idx = 0;
2472 : 0 : (secret_idx < secret_size_a)
2473 : 0 : && (ecdh_checks == 1);
2474 : 0 : secret_idx++)
2475 : : {
2476 [ # # ]: 0 : if (secret_a[secret_idx] != secret_b[secret_idx])
2477 : 0 : ecdh_checks = 0;
2478 : : }
2479 : :
2480 [ # # ]: 0 : if (ecdh_checks == 0)
2481 : : {
2482 : 0 : BIO_printf(bio_err,"ECDH computations don't match.\n");
2483 : 0 : ERR_print_errors(bio_err);
2484 : 0 : rsa_count=1;
2485 : : }
2486 : :
2487 : 0 : pkey_print_message("","ecdh",
2488 : : ecdh_c[j][0],
2489 : : test_curves_bits[j],
2490 : : ECDH_SECONDS);
2491 : 0 : Time_F(START);
2492 [ # # ][ # # ]: 0 : for (count=0,run=1; COND(ecdh_c[j][0]); count++)
2493 : : {
2494 : 0 : ECDH_compute_key(secret_a, outlen,
2495 : : EC_KEY_get0_public_key(ecdh_b[j]),
2496 : : ecdh_a[j], kdf);
2497 : : }
2498 : 0 : d=Time_F(STOP);
2499 [ # # ]: 0 : 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 : 0 : ecdh_results[j][0]=d/(double)count;
2502 : 0 : rsa_count=count;
2503 : : }
2504 : : }
2505 : :
2506 : :
2507 [ # # ]: 0 : if (rsa_count <= 1)
2508 : : {
2509 : : /* if longer than 10s, don't do any more */
2510 [ # # ]: 0 : for (j++; j<EC_NUM; j++)
2511 : 0 : ecdh_doit[j]=0;
2512 : : }
2513 : : }
2514 [ # # ]: 0 : if (rnd_fake) RAND_cleanup();
2515 : : #endif
2516 : : #ifndef NO_FORK
2517 : : show_res:
2518 : : #endif
2519 [ # # ]: 0 : if(!mr)
2520 : : {
2521 : 0 : fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_VERSION));
2522 : 0 : fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_BUILT_ON));
2523 : : printf("options:");
2524 : 0 : printf("%s ",BN_options());
2525 : : #ifndef OPENSSL_NO_MD2
2526 : : printf("%s ",MD2_options());
2527 : : #endif
2528 : : #ifndef OPENSSL_NO_RC4
2529 : 0 : printf("%s ",RC4_options());
2530 : : #endif
2531 : : #ifndef OPENSSL_NO_DES
2532 : 0 : printf("%s ",DES_options());
2533 : : #endif
2534 : : #ifndef OPENSSL_NO_AES
2535 : 0 : printf("%s ",AES_options());
2536 : : #endif
2537 : : #ifndef OPENSSL_NO_IDEA
2538 : 0 : printf("%s ",idea_options());
2539 : : #endif
2540 : : #ifndef OPENSSL_NO_BF
2541 : 0 : printf("%s ",BF_options());
2542 : : #endif
2543 : 0 : fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS));
2544 : : }
2545 : :
2546 [ # # ]: 0 : if (pr_header)
2547 : : {
2548 [ # # ]: 0 : if(mr)
2549 : 0 : fprintf(stdout,"+H");
2550 : : else
2551 : : {
2552 : 0 : fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n");
2553 : 0 : fprintf(stdout,"type ");
2554 : : }
2555 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
2556 [ # # ]: 0 : fprintf(stdout,mr ? ":%d" : "%7d bytes",lengths[j]);
2557 : 0 : fprintf(stdout,"\n");
2558 : : }
2559 : :
2560 [ # # ]: 0 : for (k=0; k<ALGOR_NUM; k++)
2561 : : {
2562 [ # # ]: 0 : if (!doit[k]) continue;
2563 [ # # ]: 0 : if(mr)
2564 : 0 : fprintf(stdout,"+F:%d:%s",k,names[k]);
2565 : : else
2566 : 0 : fprintf(stdout,"%-13s",names[k]);
2567 [ # # ]: 0 : for (j=0; j<SIZE_NUM; j++)
2568 : : {
2569 [ # # ][ # # ]: 0 : if (results[k][j] > 10000 && !mr)
2570 : 0 : fprintf(stdout," %11.2fk",results[k][j]/1e3);
2571 : : else
2572 [ # # ]: 0 : fprintf(stdout,mr ? ":%.2f" : " %11.2f ",results[k][j]);
2573 : : }
2574 : 0 : fprintf(stdout,"\n");
2575 : : }
2576 : : #ifndef OPENSSL_NO_RSA
2577 : : j=1;
2578 [ # # ]: 0 : for (k=0; k<RSA_NUM; k++)
2579 : : {
2580 [ # # ]: 0 : if (!rsa_doit[k]) continue;
2581 [ # # ][ # # ]: 0 : if (j && !mr)
2582 : : {
2583 : : printf("%18ssign verify sign/s verify/s\n"," ");
2584 : 0 : j=0;
2585 : : }
2586 [ # # ]: 0 : if(mr)
2587 : 0 : fprintf(stdout,"+F2:%u:%u:%f:%f\n",
2588 : : k,rsa_bits[k],rsa_results[k][0],
2589 : : rsa_results[k][1]);
2590 : : else
2591 : 0 : 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 : 0 : 1.0/rsa_results[k][0],1.0/rsa_results[k][1]);
2594 : : }
2595 : : #endif
2596 : : #ifndef OPENSSL_NO_DSA
2597 : : j=1;
2598 [ # # ]: 0 : for (k=0; k<DSA_NUM; k++)
2599 : : {
2600 [ # # ]: 0 : if (!dsa_doit[k]) continue;
2601 [ # # ][ # # ]: 0 : if (j && !mr)
2602 : : {
2603 : : printf("%18ssign verify sign/s verify/s\n"," ");
2604 : 0 : j=0;
2605 : : }
2606 [ # # ]: 0 : if(mr)
2607 : 0 : fprintf(stdout,"+F3:%u:%u:%f:%f\n",
2608 : : k,dsa_bits[k],dsa_results[k][0],dsa_results[k][1]);
2609 : : else
2610 : 0 : 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 : 0 : 1.0/dsa_results[k][0],1.0/dsa_results[k][1]);
2613 : : }
2614 : : #endif
2615 : : #ifndef OPENSSL_NO_ECDSA
2616 : : j=1;
2617 [ # # ]: 0 : for (k=0; k<EC_NUM; k++)
2618 : : {
2619 [ # # ]: 0 : if (!ecdsa_doit[k]) continue;
2620 [ # # ][ # # ]: 0 : if (j && !mr)
2621 : : {
2622 : : printf("%30ssign verify sign/s verify/s\n"," ");
2623 : 0 : j=0;
2624 : : }
2625 : :
2626 [ # # ]: 0 : if (mr)
2627 : 0 : fprintf(stdout,"+F4:%u:%u:%f:%f\n",
2628 : : k, test_curves_bits[k],
2629 : : ecdsa_results[k][0],ecdsa_results[k][1]);
2630 : : else
2631 : 0 : fprintf(stdout,
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 : 0 : 1.0/ecdsa_results[k][0],1.0/ecdsa_results[k][1]);
2637 : : }
2638 : : #endif
2639 : :
2640 : :
2641 : : #ifndef OPENSSL_NO_ECDH
2642 : : j=1;
2643 [ # # ]: 0 : for (k=0; k<EC_NUM; k++)
2644 : : {
2645 [ # # ]: 0 : if (!ecdh_doit[k]) continue;
2646 [ # # ][ # # ]: 0 : if (j && !mr)
2647 : : {
2648 : : printf("%30sop op/s\n"," ");
2649 : 0 : j=0;
2650 : : }
2651 [ # # ]: 0 : if (mr)
2652 : 0 : fprintf(stdout,"+F5:%u:%u:%f:%f\n",
2653 : : k, test_curves_bits[k],
2654 : 0 : ecdh_results[k][0], 1.0/ecdh_results[k][0]);
2655 : :
2656 : : else
2657 : 0 : fprintf(stdout,"%4u bit ecdh (%s) %8.4fs %8.1f\n",
2658 : : test_curves_bits[k],
2659 : : test_curves_names[k],
2660 : 0 : ecdh_results[k][0], 1.0/ecdh_results[k][0]);
2661 : : }
2662 : : #endif
2663 : :
2664 : : mret=0;
2665 : :
2666 : : end:
2667 : 0 : ERR_print_errors(bio_err);
2668 [ # # ]: 0 : if (buf != NULL) OPENSSL_free(buf);
2669 [ # # ]: 0 : if (buf2 != NULL) OPENSSL_free(buf2);
2670 : : #ifndef OPENSSL_NO_RSA
2671 [ # # ]: 0 : for (i=0; i<RSA_NUM; i++)
2672 [ # # ]: 0 : if (rsa_key[i] != NULL)
2673 : 0 : RSA_free(rsa_key[i]);
2674 : : #endif
2675 : : #ifndef OPENSSL_NO_DSA
2676 [ # # ]: 0 : for (i=0; i<DSA_NUM; i++)
2677 [ # # ]: 0 : if (dsa_key[i] != NULL)
2678 : 0 : DSA_free(dsa_key[i]);
2679 : : #endif
2680 : :
2681 : : #ifndef OPENSSL_NO_ECDSA
2682 [ # # ]: 0 : for (i=0; i<EC_NUM; i++)
2683 [ # # ]: 0 : if (ecdsa[i] != NULL)
2684 : 0 : EC_KEY_free(ecdsa[i]);
2685 : : #endif
2686 : : #ifndef OPENSSL_NO_ECDH
2687 [ # # ]: 0 : for (i=0; i<EC_NUM; i++)
2688 : : {
2689 [ # # ]: 0 : if (ecdh_a[i] != NULL)
2690 : 0 : EC_KEY_free(ecdh_a[i]);
2691 [ # # ]: 0 : if (ecdh_b[i] != NULL)
2692 : 0 : EC_KEY_free(ecdh_b[i]);
2693 : : }
2694 : : #endif
2695 : :
2696 : : apps_shutdown();
2697 : 0 : OPENSSL_EXIT(mret);
2698 : : }
2699 : :
2700 : 0 : static void print_message(const char *s, long num, int length)
2701 : : {
2702 : : #ifdef SIGALRM
2703 [ # # ]: 0 : BIO_printf(bio_err,mr ? "+DT:%s:%d:%d\n"
2704 : : : "Doing %s for %ds on %d size blocks: ",s,SECONDS,length);
2705 : 0 : (void)BIO_flush(bio_err);
2706 : 0 : alarm(SECONDS);
2707 : : #else
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);
2711 : : #endif
2712 : : #ifdef LINT
2713 : : num=num;
2714 : : #endif
2715 : 0 : }
2716 : :
2717 : 0 : static void prime_print_message(const char *s, long num)
2718 : : {
2719 : : #ifdef SIGALRM
2720 [ # # ]: 0 : BIO_printf(bio_err,mr ? "+DT:%s:%d\n"
2721 : : : "Doing %s for %ds: ", s, PRIME_SECONDS);
2722 : 0 : (void)BIO_flush(bio_err);
2723 : 0 : alarm(PRIME_SECONDS);
2724 : : #else
2725 : : BIO_printf(bio_err,mr ? "+DN:%s:%ld\n"
2726 : : : "Doing %s %ld times: ", s, num);
2727 : : (void)BIO_flush(bio_err);
2728 : : #endif
2729 : : #ifdef LINT
2730 : : num=num;
2731 : : #endif
2732 : 0 : }
2733 : :
2734 : 0 : static void pkey_print_message(const char *str, const char *str2, long num,
2735 : : int bits, int tm)
2736 : : {
2737 : : #ifdef SIGALRM
2738 [ # # ]: 0 : 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 : 0 : (void)BIO_flush(bio_err);
2741 : 0 : alarm(tm);
2742 : : #else
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);
2746 : : #endif
2747 : : #ifdef LINT
2748 : : num=num;
2749 : : #endif
2750 : 0 : }
2751 : :
2752 : 0 : static void print_result(int alg,int run_no,int count,double time_used)
2753 : : {
2754 [ # # ]: 0 : BIO_printf(bio_err,mr ? "+R:%d:%s:%f\n"
2755 : : : "%d %s's in %.2fs\n",count,names[alg],time_used);
2756 : 0 : results[alg][run_no]=((double)count)/time_used*lengths[run_no];
2757 : 0 : }
2758 : :
2759 : 0 : static void prime_print_result(int alg, int count, double time_used)
2760 : : {
2761 [ # # ]: 0 : BIO_printf(bio_err,
2762 : 0 : mr ? "+R:%d:%s:%f:%f\n" : "%d %s's in %.2fs (%.2f microseconds / run)\n",
2763 : : count, prime_names[alg], time_used,
2764 : 0 : time_used / ((double)count) * 1000000);
2765 : 0 : }
2766 : :
2767 : : #ifndef NO_FORK
2768 : 0 : static char *sstrsep(char **string, const char *delim)
2769 : : {
2770 : : char isdelim[256];
2771 : 0 : char *token = *string;
2772 : :
2773 [ # # ]: 0 : if (**string == 0)
2774 : : return NULL;
2775 : :
2776 : : memset(isdelim, 0, sizeof isdelim);
2777 : 0 : isdelim[0] = 1;
2778 : :
2779 [ # # ]: 0 : while (*delim)
2780 : : {
2781 : 0 : isdelim[(unsigned char)(*delim)] = 1;
2782 : 0 : delim++;
2783 : : }
2784 : :
2785 [ # # ]: 0 : while (!isdelim[(unsigned char)(**string)])
2786 : : {
2787 : 0 : (*string)++;
2788 : : }
2789 : :
2790 [ # # ]: 0 : if (**string)
2791 : : {
2792 : 0 : **string = 0;
2793 : 0 : (*string)++;
2794 : : }
2795 : :
2796 : 0 : return token;
2797 : : }
2798 : :
2799 : 0 : static int do_multi(int multi)
2800 : : {
2801 : : int n;
2802 : : int fd[2];
2803 : : int *fds;
2804 : : static char sep[]=":";
2805 : :
2806 : 0 : fds=malloc(multi*sizeof *fds);
2807 [ # # ]: 0 : for(n=0 ; n < multi ; ++n)
2808 : : {
2809 [ # # ]: 0 : if (pipe(fd) == -1)
2810 : : {
2811 : 0 : fprintf(stderr, "pipe failure\n");
2812 : 0 : exit(1);
2813 : : }
2814 : 0 : fflush(stdout);
2815 : 0 : fflush(stderr);
2816 [ # # ]: 0 : if(fork())
2817 : : {
2818 : 0 : close(fd[1]);
2819 : 0 : fds[n]=fd[0];
2820 : : }
2821 : : else
2822 : : {
2823 : 0 : close(fd[0]);
2824 : 0 : close(1);
2825 [ # # ]: 0 : if (dup(fd[1]) == -1)
2826 : : {
2827 : 0 : fprintf(stderr, "dup failed\n");
2828 : 0 : exit(1);
2829 : : }
2830 : 0 : close(fd[1]);
2831 : 0 : mr=1;
2832 : 0 : usertime=0;
2833 : 0 : free(fds);
2834 : 0 : return 0;
2835 : : }
2836 : : printf("Forked child %d\n",n);
2837 : : }
2838 : :
2839 : : /* for now, assume the pipe is long enough to take all the output */
2840 [ # # ]: 0 : for(n=0 ; n < multi ; ++n)
2841 : : {
2842 : : FILE *f;
2843 : : char buf[1024];
2844 : : char *p;
2845 : :
2846 : 0 : f=fdopen(fds[n],"r");
2847 [ # # ]: 0 : while(fgets(buf,sizeof buf,f))
2848 : : {
2849 : 0 : p=strchr(buf,'\n');
2850 [ # # ]: 0 : if(p)
2851 : 0 : *p='\0';
2852 [ # # ]: 0 : if(buf[0] != '+')
2853 : : {
2854 : 0 : fprintf(stderr,"Don't understand line '%s' from child %d\n",
2855 : : buf,n);
2856 : 0 : continue;
2857 : : }
2858 : : printf("Got: %s from %d\n",buf,n);
2859 [ # # ]: 0 : if(!strncmp(buf,"+F:",3))
2860 : : {
2861 : : int alg;
2862 : : int j;
2863 : :
2864 : 0 : p=buf+3;
2865 : 0 : alg=atoi(sstrsep(&p,sep));
2866 : 0 : sstrsep(&p,sep);
2867 [ # # ]: 0 : for(j=0 ; j < SIZE_NUM ; ++j)
2868 : 0 : results[alg][j]+=atof(sstrsep(&p,sep));
2869 : : }
2870 [ # # ]: 0 : else if(!strncmp(buf,"+F2:",4))
2871 : : {
2872 : : int k;
2873 : : double d;
2874 : :
2875 : 0 : p=buf+4;
2876 : 0 : k=atoi(sstrsep(&p,sep));
2877 : 0 : sstrsep(&p,sep);
2878 : :
2879 : 0 : d=atof(sstrsep(&p,sep));
2880 [ # # ]: 0 : if(n)
2881 : 0 : rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d);
2882 : : else
2883 : 0 : rsa_results[k][0]=d;
2884 : :
2885 : 0 : d=atof(sstrsep(&p,sep));
2886 [ # # ]: 0 : if(n)
2887 : 0 : rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d);
2888 : : else
2889 : 0 : rsa_results[k][1]=d;
2890 : : }
2891 [ # # ]: 0 : else if(!strncmp(buf,"+F2:",4))
2892 : : {
2893 : : int k;
2894 : : double d;
2895 : :
2896 : 0 : p=buf+4;
2897 : 0 : k=atoi(sstrsep(&p,sep));
2898 : 0 : sstrsep(&p,sep);
2899 : :
2900 : 0 : d=atof(sstrsep(&p,sep));
2901 [ # # ]: 0 : if(n)
2902 : 0 : rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d);
2903 : : else
2904 : 0 : rsa_results[k][0]=d;
2905 : :
2906 : 0 : d=atof(sstrsep(&p,sep));
2907 [ # # ]: 0 : if(n)
2908 : 0 : rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d);
2909 : : else
2910 : 0 : rsa_results[k][1]=d;
2911 : : }
2912 : : #ifndef OPENSSL_NO_DSA
2913 [ # # ]: 0 : else if(!strncmp(buf,"+F3:",4))
2914 : : {
2915 : : int k;
2916 : : double d;
2917 : :
2918 : 0 : p=buf+4;
2919 : 0 : k=atoi(sstrsep(&p,sep));
2920 : 0 : sstrsep(&p,sep);
2921 : :
2922 : 0 : d=atof(sstrsep(&p,sep));
2923 [ # # ]: 0 : if(n)
2924 : 0 : dsa_results[k][0]=1/(1/dsa_results[k][0]+1/d);
2925 : : else
2926 : 0 : dsa_results[k][0]=d;
2927 : :
2928 : 0 : d=atof(sstrsep(&p,sep));
2929 [ # # ]: 0 : if(n)
2930 : 0 : dsa_results[k][1]=1/(1/dsa_results[k][1]+1/d);
2931 : : else
2932 : 0 : dsa_results[k][1]=d;
2933 : : }
2934 : : #endif
2935 : : #ifndef OPENSSL_NO_ECDSA
2936 [ # # ]: 0 : else if(!strncmp(buf,"+F4:",4))
2937 : : {
2938 : : int k;
2939 : : double d;
2940 : :
2941 : 0 : p=buf+4;
2942 : 0 : k=atoi(sstrsep(&p,sep));
2943 : 0 : sstrsep(&p,sep);
2944 : :
2945 : 0 : d=atof(sstrsep(&p,sep));
2946 [ # # ]: 0 : if(n)
2947 : 0 : ecdsa_results[k][0]=1/(1/ecdsa_results[k][0]+1/d);
2948 : : else
2949 : 0 : ecdsa_results[k][0]=d;
2950 : :
2951 : 0 : d=atof(sstrsep(&p,sep));
2952 [ # # ]: 0 : if(n)
2953 : 0 : ecdsa_results[k][1]=1/(1/ecdsa_results[k][1]+1/d);
2954 : : else
2955 : 0 : ecdsa_results[k][1]=d;
2956 : : }
2957 : : #endif
2958 : :
2959 : : #ifndef OPENSSL_NO_ECDH
2960 [ # # ]: 0 : else if(!strncmp(buf,"+F5:",4))
2961 : : {
2962 : : int k;
2963 : : double d;
2964 : :
2965 : 0 : p=buf+4;
2966 : 0 : k=atoi(sstrsep(&p,sep));
2967 : 0 : sstrsep(&p,sep);
2968 : :
2969 : 0 : d=atof(sstrsep(&p,sep));
2970 [ # # ]: 0 : if(n)
2971 : 0 : ecdh_results[k][0]=1/(1/ecdh_results[k][0]+1/d);
2972 : : else
2973 : 0 : ecdh_results[k][0]=d;
2974 : :
2975 : : }
2976 : : #endif
2977 : :
2978 [ # # ]: 0 : else if(!strncmp(buf,"+H:",3))
2979 : : {
2980 : : }
2981 : : else
2982 : 0 : fprintf(stderr,"Unknown type '%s' from child %d\n",buf,n);
2983 : : }
2984 : :
2985 : 0 : fclose(f);
2986 : : }
2987 : 0 : free(fds);
2988 : 0 : return 1;
2989 : : }
2990 : : #endif
2991 : :
2992 : 0 : static void multiblock_speed(const EVP_CIPHER *evp_cipher)
2993 : : {
2994 : : static int mblengths[]={8*1024,2*8*1024,4*8*1024,8*8*1024,8*16*1024};
2995 : 0 : 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];
2998 : : EVP_CIPHER_CTX ctx;
2999 : 0 : double d=0.0;
3000 : :
3001 : 0 : inp = OPENSSL_malloc(mblengths[num-1]);
3002 : 0 : out = OPENSSL_malloc(mblengths[num-1]+1024);
3003 : :
3004 : 0 : EVP_CIPHER_CTX_init(&ctx);
3005 : 0 : EVP_EncryptInit_ex(&ctx,evp_cipher,NULL,no_key,no_iv);
3006 : 0 : EVP_CIPHER_CTX_ctrl(&ctx,EVP_CTRL_AEAD_SET_MAC_KEY,sizeof(no_key),no_key);
3007 : 0 : alg_name=OBJ_nid2ln(evp_cipher->nid);
3008 : :
3009 [ # # ]: 0 : for (j=0; j<num; j++)
3010 : : {
3011 : 0 : print_message(alg_name,0,mblengths[j]);
3012 : 0 : Time_F(START);
3013 [ # # ][ # # ]: 0 : for (count=0,run=1; run && count<0x7fffffff; count++)
3014 : : {
3015 : : unsigned char aad[13];
3016 : : EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM mb_param;
3017 : 0 : size_t len = mblengths[j];
3018 : : int packlen;
3019 : :
3020 : : memset(aad,0,8);/* avoid uninitialized values */
3021 : 0 : aad[8] = 23; /* SSL3_RT_APPLICATION_DATA */
3022 : 0 : aad[9] = 3; /* version */
3023 : 0 : aad[10] = 2;
3024 : 0 : aad[11] = 0; /* length */
3025 : 0 : aad[12] = 0;
3026 : 0 : mb_param.out = NULL;
3027 : 0 : mb_param.inp = aad;
3028 : 0 : mb_param.len = len;
3029 : 0 : mb_param.interleave = 8;
3030 : :
3031 : 0 : packlen=EVP_CIPHER_CTX_ctrl(&ctx,
3032 : : EVP_CTRL_TLS1_1_MULTIBLOCK_AAD,
3033 : : sizeof(mb_param),&mb_param);
3034 : :
3035 [ # # ]: 0 : if (packlen>0)
3036 : : {
3037 : 0 : mb_param.out = out;
3038 : 0 : mb_param.inp = inp;
3039 : 0 : mb_param.len = len;
3040 : 0 : EVP_CIPHER_CTX_ctrl(&ctx,
3041 : : EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT,
3042 : : sizeof(mb_param),&mb_param);
3043 : : }
3044 : : else
3045 : : {
3046 : : int pad;
3047 : :
3048 : 0 : RAND_bytes(out,16);
3049 : 0 : len+=16;
3050 : 0 : aad[11] = len>>8;
3051 : 0 : aad[12] = len;
3052 : 0 : pad=EVP_CIPHER_CTX_ctrl(&ctx,
3053 : : EVP_CTRL_AEAD_TLS1_AAD,13,aad);
3054 : 0 : EVP_Cipher(&ctx,out,inp,len+pad);
3055 : : }
3056 : : }
3057 : 0 : d=Time_F(STOP);
3058 [ # # ]: 0 : BIO_printf(bio_err,mr ? "+R:%d:%s:%f\n"
3059 : : : "%d %s's in %.2fs\n",count,"evp",d);
3060 : 0 : results[D_EVP][j]=((double)count)/d*mblengths[j];
3061 : : }
3062 : :
3063 [ # # ]: 0 : if (mr)
3064 : : {
3065 : 0 : fprintf(stdout,"+H");
3066 [ # # ]: 0 : for (j=0; j<num; j++)
3067 : 0 : fprintf(stdout,":%d",mblengths[j]);
3068 : 0 : fprintf(stdout,"\n");
3069 : 0 : fprintf(stdout,"+F:%d:%s",D_EVP,alg_name);
3070 [ # # ]: 0 : for (j=0; j<num; j++)
3071 : 0 : fprintf(stdout,":%.2f",results[D_EVP][j]);
3072 : 0 : fprintf(stdout,"\n");
3073 : : }
3074 : : else
3075 : : {
3076 : 0 : fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n");
3077 : 0 : fprintf(stdout,"type ");
3078 [ # # ]: 0 : for (j=0; j<num; j++)
3079 : 0 : fprintf(stdout,"%7d bytes",mblengths[j]);
3080 : 0 : fprintf(stdout,"\n");
3081 : 0 : fprintf(stdout,"%-24s",alg_name);
3082 : :
3083 [ # # ]: 0 : for (j=0; j<num; j++)
3084 : : {
3085 [ # # ]: 0 : if (results[D_EVP][j] > 10000)
3086 : 0 : fprintf(stdout," %11.2fk",results[D_EVP][j]/1e3);
3087 : : else
3088 : 0 : fprintf(stdout," %11.2f ",results[D_EVP][j]);
3089 : : }
3090 : 0 : fprintf(stdout,"\n");
3091 : : }
3092 : :
3093 : 0 : OPENSSL_free(inp);
3094 : 0 : OPENSSL_free(out);
3095 : 0 : }
3096 : : #endif
|