]> git.ipfire.org Git - thirdparty/openssl.git/blame - apps/speed.c
ENGINE_register_all_complete() will register all implementations of all
[thirdparty/openssl.git] / apps / speed.c
CommitLineData
7876e448 1/* apps/speed.c -*- mode:C; c-file-style: "eay" -*- */
58964a49 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
d02b48c6
RE
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/* most of this code has been pilfered from my libdes speed.c program */
60
61#undef SECONDS
62#define SECONDS 3
dfeab068
RE
63#define RSA_SECONDS 10
64#define DSA_SECONDS 10
d02b48c6
RE
65
66/* 11-Sep-92 Andrew Daviel Support for Silicon Graphics IRIX added */
67/* 06-Apr-92 Luke Brennan Support for VMS and add extra signal calls */
68
69#undef PROG
70#define PROG speed_main
71
72#include <stdio.h>
73#include <stdlib.h>
74#include <signal.h>
75#include <string.h>
58964a49 76#include <math.h>
d02b48c6 77#include "apps.h"
cf1b7d96 78#ifdef OPENSSL_NO_STDIO
d02b48c6
RE
79#define APPS_WIN16
80#endif
ec577822
BM
81#include <openssl/crypto.h>
82#include <openssl/rand.h>
83#include <openssl/err.h>
646d5695
BL
84#include <openssl/evp.h>
85#include <openssl/objects.h>
d02b48c6 86
c3bdbcf6 87#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(OPENSSL_SYS_MACOSX)
2bfb4dbc 88# define USE_TOD
bc36ee62 89#elif !defined(OPENSSL_SYS_MSDOS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC))
2bfb4dbc 90# define TIMES
d02b48c6 91#endif
cf1b7d96 92#if !defined(_UNICOS) && !defined(__OpenBSD__) && !defined(sgi) && !defined(__FreeBSD__) && !(defined(__bsdi) || defined(__bsdi__)) && !defined(_AIX) && !defined(OPENSSL_SYS_MPE) && !defined(__NetBSD__) /* FIXME */
3132e196
RL
93# define TIMEB
94#endif
d02b48c6 95
d02b48c6 96#ifndef _IRIX
2bfb4dbc 97# include <time.h>
d02b48c6
RE
98#endif
99#ifdef TIMES
2bfb4dbc
BL
100# include <sys/types.h>
101# include <sys/times.h>
102#endif
103#ifdef USE_TOD
104# include <sys/time.h>
105# include <sys/resource.h>
d02b48c6 106#endif
7d7d2cbc
UM
107
108/* Depending on the VMS version, the tms structure is perhaps defined.
109 The __TMS macro will show if it was. If it wasn't defined, we should
110 undefine TIMES, since that tells the rest of the program how things
111 should be handled. -- Richard Levitte */
bc36ee62 112#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__TMS)
7d7d2cbc 113#undef TIMES
d02b48c6 114#endif
7d7d2cbc 115
3132e196 116#ifdef TIMEB
d02b48c6 117#include <sys/timeb.h>
3132e196
RL
118#endif
119
1cbb729f 120#if !defined(TIMES) && !defined(TIMEB) && !defined(USE_TOD)
3132e196
RL
121#error "It seems neither struct tms nor struct timeb is supported in this platform!"
122#endif
d02b48c6 123
dfeab068
RE
124#if defined(sun) || defined(__ultrix)
125#define _POSIX_SOURCE
d02b48c6
RE
126#include <limits.h>
127#include <sys/param.h>
128#endif
129
cf1b7d96 130#ifndef OPENSSL_NO_DES
ec577822 131#include <openssl/des.h>
d02b48c6 132#endif
cf1b7d96 133#ifndef OPENSSL_NO_MD2
ec577822 134#include <openssl/md2.h>
d02b48c6 135#endif
cf1b7d96 136#ifndef OPENSSL_NO_MDC2
ec577822 137#include <openssl/mdc2.h>
d02b48c6 138#endif
cf1b7d96 139#ifndef OPENSSL_NO_MD4
3009458e
RL
140#include <openssl/md4.h>
141#endif
cf1b7d96 142#ifndef OPENSSL_NO_MD5
ec577822 143#include <openssl/md5.h>
5271ebd9 144#endif
cf1b7d96 145#ifndef OPENSSL_NO_HMAC
ec577822 146#include <openssl/hmac.h>
d02b48c6 147#endif
5271ebd9 148#include <openssl/evp.h>
cf1b7d96 149#ifndef OPENSSL_NO_SHA
ec577822 150#include <openssl/sha.h>
d02b48c6 151#endif
cf1b7d96 152#ifndef OPENSSL_NO_RIPEMD
ec577822 153#include <openssl/ripemd.h>
58964a49 154#endif
cf1b7d96 155#ifndef OPENSSL_NO_RC4
ec577822 156#include <openssl/rc4.h>
d02b48c6 157#endif
cf1b7d96 158#ifndef OPENSSL_NO_RC5
ec577822 159#include <openssl/rc5.h>
58964a49 160#endif
cf1b7d96 161#ifndef OPENSSL_NO_RC2
ec577822 162#include <openssl/rc2.h>
d02b48c6 163#endif
cf1b7d96 164#ifndef OPENSSL_NO_IDEA
ec577822 165#include <openssl/idea.h>
d02b48c6 166#endif
cf1b7d96 167#ifndef OPENSSL_NO_BF
ec577822 168#include <openssl/blowfish.h>
d02b48c6 169#endif
cf1b7d96 170#ifndef OPENSSL_NO_CAST
ec577822 171#include <openssl/cast.h>
58964a49 172#endif
cf1b7d96 173#ifndef OPENSSL_NO_RSA
ec577822 174#include <openssl/rsa.h>
f5d7a031 175#include "./testrsa.h"
d02b48c6 176#endif
ec577822 177#include <openssl/x509.h>
cf1b7d96 178#ifndef OPENSSL_NO_DSA
d02b48c6
RE
179#include "./testdsa.h"
180#endif
181
182/* The following if from times(3) man page. It may need to be changed */
183#ifndef HZ
184# ifndef CLK_TCK
185# ifndef _BSD_CLK_TCK_ /* FreeBSD hack */
5c83b4c9 186# define HZ 100.0
d02b48c6
RE
187# else /* _BSD_CLK_TCK_ */
188# define HZ ((double)_BSD_CLK_TCK_)
189# endif
190# else /* CLK_TCK */
7876e448
RL
191# ifdef OPENSSL_SYS_LINUX /* Because it seems like some Linuxen
192 have weird values here... */
193# define HZ 100.0
194# else
195# define HZ ((double)CLK_TCK)
196# endif
d02b48c6
RE
197# endif
198#endif
199
200#undef BUFSIZE
58964a49 201#define BUFSIZE ((long)1024*8+1)
d02b48c6
RE
202int run=0;
203
7876e448
RL
204static char ftime_used = 0, times_used = 0, gettimeofday_used = 0, getrusage_used = 0;
205
4e74239c 206static double Time_F(int s, int usertime);
646d5695 207static void print_message(const char *s,long num,int length);
d02b48c6 208static void pkey_print_message(char *str,char *str2,long num,int bits,int sec);
d02b48c6
RE
209#ifdef SIGALRM
210#if defined(__STDC__) || defined(sgi) || defined(_AIX)
211#define SIGRETTYPE void
212#else
213#define SIGRETTYPE int
214#endif
215
d02b48c6 216static SIGRETTYPE sig_done(int sig);
6b691a5c 217static SIGRETTYPE sig_done(int sig)
d02b48c6
RE
218 {
219 signal(SIGALRM,sig_done);
220 run=0;
221#ifdef LINT
222 sig=sig;
223#endif
224 }
225#endif
226
227#define START 0
228#define STOP 1
229
4e74239c 230static double Time_F(int s, int usertime)
d02b48c6
RE
231 {
232 double ret;
2bfb4dbc
BL
233
234#ifdef USE_TOD
235 if(usertime)
236 {
237 static struct rusage tstart,tend;
238
7876e448 239 getrusage_used = 1;
2bfb4dbc
BL
240 if (s == START)
241 {
242 getrusage(RUSAGE_SELF,&tstart);
243 return(0);
244 }
245 else
246 {
247 long i;
248
249 getrusage(RUSAGE_SELF,&tend);
250 i=(long)tend.ru_utime.tv_usec-(long)tstart.ru_utime.tv_usec;
251 ret=((double)(tend.ru_utime.tv_sec-tstart.ru_utime.tv_sec))
252 +((double)i)/1000000.0;
253 return((ret < 0.001)?0.001:ret);
254 }
255 }
256 else
257 {
258 static struct timeval tstart,tend;
259 long i;
260
7876e448 261 gettimeofday_used = 1;
2bfb4dbc
BL
262 if (s == START)
263 {
264 gettimeofday(&tstart,NULL);
265 return(0);
266 }
267 else
268 {
269 gettimeofday(&tend,NULL);
270 i=(long)tend.tv_usec-(long)tstart.tv_usec;
271 ret=((double)(tend.tv_sec-tstart.tv_sec))+((double)i)/1000000.0;
272 return((ret < 0.001)?0.001:ret);
273 }
274 }
275#else /* ndef USE_TOD */
276
277# ifdef TIMES
4e74239c 278 if (usertime)
d02b48c6 279 {
4e74239c 280 static struct tms tstart,tend;
d02b48c6 281
7876e448 282 times_used = 1;
4e74239c
RL
283 if (s == START)
284 {
285 times(&tstart);
286 return(0);
287 }
288 else
289 {
290 times(&tend);
291 ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
292 return((ret < 1e-3)?1e-3:ret);
293 }
d02b48c6 294 }
2bfb4dbc 295# endif /* times() */
3132e196
RL
296# if defined(TIMES) && defined(TIMEB)
297 else
298# endif
299# ifdef TIMEB
d02b48c6 300 {
4e74239c
RL
301 static struct timeb tstart,tend;
302 long i;
303
7876e448 304 ftime_used = 1;
4e74239c
RL
305 if (s == START)
306 {
307 ftime(&tstart);
308 return(0);
309 }
310 else
311 {
312 ftime(&tend);
313 i=(long)tend.millitm-(long)tstart.millitm;
314 ret=((double)(tend.time-tstart.time))+((double)i)/1000.0;
315 return((ret < 0.001)?0.001:ret);
316 }
d02b48c6 317 }
3132e196 318# endif
2bfb4dbc 319#endif
d02b48c6
RE
320 }
321
667ac4ec
RE
322int MAIN(int, char **);
323
6b691a5c 324int MAIN(int argc, char **argv)
d02b48c6 325 {
5270e702 326 ENGINE *e;
d02b48c6 327 unsigned char *buf=NULL,*buf2=NULL;
18c77bf2 328 int mret=1;
646d5695 329#define ALGOR_NUM 16
d02b48c6
RE
330#define SIZE_NUM 5
331#define RSA_NUM 4
332#define DSA_NUM 3
646d5695 333 long count,rsa_count,save_count=0;
18c77bf2 334 int i,j,k;
cf1b7d96 335#ifndef OPENSSL_NO_RSA
5614bb91 336 unsigned rsa_num;
b2293b1e 337#endif
cf1b7d96 338#ifndef OPENSSL_NO_MD2
d02b48c6
RE
339 unsigned char md2[MD2_DIGEST_LENGTH];
340#endif
cf1b7d96 341#ifndef OPENSSL_NO_MDC2
d02b48c6
RE
342 unsigned char mdc2[MDC2_DIGEST_LENGTH];
343#endif
cf1b7d96 344#ifndef OPENSSL_NO_MD4
3009458e
RL
345 unsigned char md4[MD4_DIGEST_LENGTH];
346#endif
cf1b7d96 347#ifndef OPENSSL_NO_MD5
d02b48c6 348 unsigned char md5[MD5_DIGEST_LENGTH];
58964a49 349 unsigned char hmac[MD5_DIGEST_LENGTH];
d02b48c6 350#endif
cf1b7d96 351#ifndef OPENSSL_NO_SHA
d02b48c6
RE
352 unsigned char sha[SHA_DIGEST_LENGTH];
353#endif
cf1b7d96 354#ifndef OPENSSL_NO_RIPEMD
58964a49
RE
355 unsigned char rmd160[RIPEMD160_DIGEST_LENGTH];
356#endif
cf1b7d96 357#ifndef OPENSSL_NO_RC4
d02b48c6
RE
358 RC4_KEY rc4_ks;
359#endif
cf1b7d96 360#ifndef OPENSSL_NO_RC5
58964a49
RE
361 RC5_32_KEY rc5_ks;
362#endif
cf1b7d96 363#ifndef OPENSSL_NO_RC2
d02b48c6
RE
364 RC2_KEY rc2_ks;
365#endif
cf1b7d96 366#ifndef OPENSSL_NO_IDEA
d02b48c6
RE
367 IDEA_KEY_SCHEDULE idea_ks;
368#endif
cf1b7d96 369#ifndef OPENSSL_NO_BF
d02b48c6 370 BF_KEY bf_ks;
58964a49 371#endif
cf1b7d96 372#ifndef OPENSSL_NO_CAST
58964a49 373 CAST_KEY cast_ks;
d02b48c6
RE
374#endif
375 static unsigned char key16[16]=
376 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
377 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
378 unsigned char iv[8];
cf1b7d96 379#ifndef OPENSSL_NO_DES
5676d8cb 380 des_cblock *buf_as_des_cblock = NULL;
d02b48c6
RE
381 static des_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};
382 static des_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
383 static des_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
384 des_key_schedule sch,sch2,sch3;
385#endif
386#define D_MD2 0
387#define D_MDC2 1
3009458e
RL
388#define D_MD4 2
389#define D_MD5 3
390#define D_HMAC 4
391#define D_SHA1 5
392#define D_RMD160 6
393#define D_RC4 7
394#define D_CBC_DES 8
395#define D_EDE3_DES 9
396#define D_CBC_IDEA 10
397#define D_CBC_RC2 11
398#define D_CBC_RC5 12
399#define D_CBC_BF 13
400#define D_CBC_CAST 14
646d5695 401#define D_EVP 15
d02b48c6
RE
402 double d,results[ALGOR_NUM][SIZE_NUM];
403 static int lengths[SIZE_NUM]={8,64,256,1024,8*1024};
404 long c[ALGOR_NUM][SIZE_NUM];
646d5695 405 static const char *names[ALGOR_NUM]={
3009458e 406 "md2","mdc2","md4","md5","hmac(md5)","sha1","rmd160","rc4",
d02b48c6 407 "des cbc","des ede3","idea cbc",
58964a49 408 "rc2 cbc","rc5-32/12 cbc","blowfish cbc","cast cbc"};
d02b48c6
RE
409#define R_DSA_512 0
410#define R_DSA_1024 1
411#define R_DSA_2048 2
412#define R_RSA_512 0
413#define R_RSA_1024 1
414#define R_RSA_2048 2
415#define R_RSA_4096 3
cf1b7d96 416#ifndef OPENSSL_NO_RSA
d02b48c6 417 RSA *rsa_key[RSA_NUM];
d02b48c6 418 long rsa_c[RSA_NUM][2];
d02b48c6 419 double rsa_results[RSA_NUM][2];
d02b48c6 420 static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,4096};
d02b48c6
RE
421 static unsigned char *rsa_data[RSA_NUM]=
422 {test512,test1024,test2048,test4096};
423 static int rsa_data_length[RSA_NUM]={
424 sizeof(test512),sizeof(test1024),
425 sizeof(test2048),sizeof(test4096)};
58964a49 426#endif
cf1b7d96 427#ifndef OPENSSL_NO_DSA
58964a49
RE
428 DSA *dsa_key[DSA_NUM];
429 long dsa_c[DSA_NUM][2];
430 double dsa_results[DSA_NUM][2];
431 static unsigned int dsa_bits[DSA_NUM]={512,1024,2048};
432#endif
d02b48c6
RE
433 int rsa_doit[RSA_NUM];
434 int dsa_doit[DSA_NUM];
58964a49 435 int doit[ALGOR_NUM];
d02b48c6 436 int pr_header=0;
4e74239c 437 int usertime=1;
646d5695 438 const EVP_CIPHER *evp=NULL;
3f37e73b 439 int decrypt=0;
4e74239c
RL
440
441#ifndef TIMES
442 usertime=-1;
443#endif
d02b48c6
RE
444
445 apps_startup();
396f6314 446 memset(results, 0, sizeof(results));
cf1b7d96 447#ifndef OPENSSL_NO_DSA
dfeab068
RE
448 memset(dsa_key,0,sizeof(dsa_key));
449#endif
d02b48c6
RE
450
451 if (bio_err == NULL)
452 if ((bio_err=BIO_new(BIO_s_file())) != NULL)
58964a49 453 BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
d02b48c6 454
cf1b7d96 455#ifndef OPENSSL_NO_RSA
dfeab068 456 memset(rsa_key,0,sizeof(rsa_key));
d02b48c6
RE
457 for (i=0; i<RSA_NUM; i++)
458 rsa_key[i]=NULL;
dfeab068 459#endif
d02b48c6 460
26a3a48d 461 if ((buf=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
d02b48c6
RE
462 {
463 BIO_printf(bio_err,"out of memory\n");
464 goto end;
465 }
cf1b7d96 466#ifndef OPENSSL_NO_DES
12ba413c 467 buf_as_des_cblock = (des_cblock *)buf;
5676d8cb 468#endif
26a3a48d 469 if ((buf2=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
d02b48c6
RE
470 {
471 BIO_printf(bio_err,"out of memory\n");
472 goto end;
473 }
474
475 memset(c,0,sizeof(c));
476 memset(iv,0,sizeof(iv));
477
478 for (i=0; i<ALGOR_NUM; i++)
479 doit[i]=0;
480 for (i=0; i<RSA_NUM; i++)
481 rsa_doit[i]=0;
482 for (i=0; i<DSA_NUM; i++)
483 dsa_doit[i]=0;
484
485 j=0;
486 argc--;
487 argv++;
488 while (argc)
489 {
4e74239c 490 if ((argc > 0) && (strcmp(*argv,"-elapsed") == 0))
7876e448 491 {
4e74239c 492 usertime = 0;
7876e448
RL
493 j--; /* Otherwise, -elapsed gets confused with
494 an algorithm. */
495 }
646d5695
BL
496 else if ((argc > 0) && (strcmp(*argv,"-evp") == 0))
497 {
498 argc--;
499 argv++;
500 if(argc == 0)
501 {
502 BIO_printf(bio_err,"no EVP given\n");
503 goto end;
504 }
505 evp=EVP_get_cipherbyname(*argv);
506 if(!evp)
507 {
508 BIO_printf(bio_err,"%s is an unknown cipher\n",*argv);
509 goto end;
510 }
511 doit[D_EVP]=1;
512 }
7876e448
RL
513 else if (argc > 0 && !strcmp(*argv,"-decrypt"))
514 {
3f37e73b 515 decrypt=1;
7876e448
RL
516 j--; /* Otherwise, -elapsed gets confused with
517 an algorithm. */
518 }
519 else if ((argc > 0) && (strcmp(*argv,"-engine") == 0))
5270e702
RL
520 {
521 argc--;
522 argv++;
523 if(argc == 0)
524 {
525 BIO_printf(bio_err,"no engine given\n");
526 goto end;
527 }
531d630b
RL
528 e = setup_engine(bio_err, *argv, 0);
529 /* j will be increased again further down. We just
5270e702
RL
530 don't want speed to confuse an engine with an
531 algorithm, especially when none is given (which
532 means all of them should be run) */
533 j--;
534 }
535 else
cf1b7d96 536#ifndef OPENSSL_NO_MD2
d02b48c6
RE
537 if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1;
538 else
539#endif
cf1b7d96 540#ifndef OPENSSL_NO_MDC2
d02b48c6
RE
541 if (strcmp(*argv,"mdc2") == 0) doit[D_MDC2]=1;
542 else
543#endif
cf1b7d96 544#ifndef OPENSSL_NO_MD4
3009458e
RL
545 if (strcmp(*argv,"md4") == 0) doit[D_MD4]=1;
546 else
547#endif
cf1b7d96 548#ifndef OPENSSL_NO_MD5
d02b48c6
RE
549 if (strcmp(*argv,"md5") == 0) doit[D_MD5]=1;
550 else
551#endif
cf1b7d96 552#ifndef OPENSSL_NO_MD5
58964a49 553 if (strcmp(*argv,"hmac") == 0) doit[D_HMAC]=1;
d02b48c6
RE
554 else
555#endif
cf1b7d96 556#ifndef OPENSSL_NO_SHA
d02b48c6
RE
557 if (strcmp(*argv,"sha1") == 0) doit[D_SHA1]=1;
558 else
58964a49
RE
559 if (strcmp(*argv,"sha") == 0) doit[D_SHA1]=1;
560 else
561#endif
cf1b7d96 562#ifndef OPENSSL_NO_RIPEMD
58964a49
RE
563 if (strcmp(*argv,"ripemd") == 0) doit[D_RMD160]=1;
564 else
565 if (strcmp(*argv,"rmd160") == 0) doit[D_RMD160]=1;
566 else
567 if (strcmp(*argv,"ripemd160") == 0) doit[D_RMD160]=1;
568 else
d02b48c6 569#endif
cf1b7d96 570#ifndef OPENSSL_NO_RC4
d02b48c6
RE
571 if (strcmp(*argv,"rc4") == 0) doit[D_RC4]=1;
572 else
573#endif
cf1b7d96 574#ifndef OPENSSL_NO_DES
d02b48c6
RE
575 if (strcmp(*argv,"des-cbc") == 0) doit[D_CBC_DES]=1;
576 else if (strcmp(*argv,"des-ede3") == 0) doit[D_EDE3_DES]=1;
577 else
578#endif
cf1b7d96 579#ifndef OPENSSL_NO_RSA
ccb9643f 580#if 0 /* was: #ifdef RSAref */
d02b48c6
RE
581 if (strcmp(*argv,"rsaref") == 0)
582 {
5270e702 583 RSA_set_default_openssl_method(RSA_PKCS1_RSAref());
d02b48c6
RE
584 j--;
585 }
586 else
587#endif
c1cd88a0 588#ifndef RSA_NULL
e170a5c0 589 if (strcmp(*argv,"openssl") == 0)
d02b48c6 590 {
6dc5d570 591 RSA_set_default_method(RSA_PKCS1_SSLeay());
d02b48c6
RE
592 j--;
593 }
594 else
c1cd88a0 595#endif
cf1b7d96 596#endif /* !OPENSSL_NO_RSA */
d02b48c6
RE
597 if (strcmp(*argv,"dsa512") == 0) dsa_doit[R_DSA_512]=2;
598 else if (strcmp(*argv,"dsa1024") == 0) dsa_doit[R_DSA_1024]=2;
599 else if (strcmp(*argv,"dsa2048") == 0) dsa_doit[R_DSA_2048]=2;
600 else if (strcmp(*argv,"rsa512") == 0) rsa_doit[R_RSA_512]=2;
601 else if (strcmp(*argv,"rsa1024") == 0) rsa_doit[R_RSA_1024]=2;
602 else if (strcmp(*argv,"rsa2048") == 0) rsa_doit[R_RSA_2048]=2;
603 else if (strcmp(*argv,"rsa4096") == 0) rsa_doit[R_RSA_4096]=2;
604 else
cf1b7d96 605#ifndef OPENSSL_NO_RC2
d02b48c6
RE
606 if (strcmp(*argv,"rc2-cbc") == 0) doit[D_CBC_RC2]=1;
607 else if (strcmp(*argv,"rc2") == 0) doit[D_CBC_RC2]=1;
608 else
609#endif
cf1b7d96 610#ifndef OPENSSL_NO_RC5
58964a49
RE
611 if (strcmp(*argv,"rc5-cbc") == 0) doit[D_CBC_RC5]=1;
612 else if (strcmp(*argv,"rc5") == 0) doit[D_CBC_RC5]=1;
613 else
614#endif
cf1b7d96 615#ifndef OPENSSL_NO_IDEA
d02b48c6
RE
616 if (strcmp(*argv,"idea-cbc") == 0) doit[D_CBC_IDEA]=1;
617 else if (strcmp(*argv,"idea") == 0) doit[D_CBC_IDEA]=1;
618 else
619#endif
cf1b7d96 620#ifndef OPENSSL_NO_BF
d02b48c6
RE
621 if (strcmp(*argv,"bf-cbc") == 0) doit[D_CBC_BF]=1;
622 else if (strcmp(*argv,"blowfish") == 0) doit[D_CBC_BF]=1;
58964a49
RE
623 else if (strcmp(*argv,"bf") == 0) doit[D_CBC_BF]=1;
624 else
625#endif
cf1b7d96 626#ifndef OPENSSL_NO_CAST
58964a49
RE
627 if (strcmp(*argv,"cast-cbc") == 0) doit[D_CBC_CAST]=1;
628 else if (strcmp(*argv,"cast") == 0) doit[D_CBC_CAST]=1;
629 else if (strcmp(*argv,"cast5") == 0) doit[D_CBC_CAST]=1;
d02b48c6
RE
630 else
631#endif
cf1b7d96 632#ifndef OPENSSL_NO_DES
d02b48c6
RE
633 if (strcmp(*argv,"des") == 0)
634 {
635 doit[D_CBC_DES]=1;
636 doit[D_EDE3_DES]=1;
637 }
638 else
639#endif
cf1b7d96 640#ifndef OPENSSL_NO_RSA
d02b48c6
RE
641 if (strcmp(*argv,"rsa") == 0)
642 {
643 rsa_doit[R_RSA_512]=1;
644 rsa_doit[R_RSA_1024]=1;
645 rsa_doit[R_RSA_2048]=1;
646 rsa_doit[R_RSA_4096]=1;
647 }
648 else
649#endif
cf1b7d96 650#ifndef OPENSSL_NO_DSA
d02b48c6
RE
651 if (strcmp(*argv,"dsa") == 0)
652 {
653 dsa_doit[R_DSA_512]=1;
654 dsa_doit[R_DSA_1024]=1;
655 }
656 else
657#endif
658 {
3009458e
RL
659 BIO_printf(bio_err,"Error: bad option or value\n");
660 BIO_printf(bio_err,"\n");
661 BIO_printf(bio_err,"Available values:\n");
cf1b7d96 662#ifndef OPENSSL_NO_MD2
3009458e
RL
663 BIO_printf(bio_err,"md2 ");
664#endif
cf1b7d96 665#ifndef OPENSSL_NO_MDC2
3009458e
RL
666 BIO_printf(bio_err,"mdc2 ");
667#endif
cf1b7d96 668#ifndef OPENSSL_NO_MD4
3009458e
RL
669 BIO_printf(bio_err,"md4 ");
670#endif
cf1b7d96 671#ifndef OPENSSL_NO_MD5
3009458e 672 BIO_printf(bio_err,"md5 ");
cf1b7d96 673#ifndef OPENSSL_NO_HMAC
3009458e
RL
674 BIO_printf(bio_err,"hmac ");
675#endif
676#endif
cf1b7d96 677#ifndef OPENSSL_NO_SHA1
3009458e
RL
678 BIO_printf(bio_err,"sha1 ");
679#endif
cf1b7d96 680#ifndef OPENSSL_NO_RIPEMD160
3009458e
RL
681 BIO_printf(bio_err,"rmd160");
682#endif
cf1b7d96
RL
683#if !defined(OPENSSL_NO_MD2) || !defined(OPENSSL_NO_MDC2) || \
684 !defined(OPENSSL_NO_MD4) || !defined(OPENSSL_NO_MD5) || \
685 !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160)
3009458e
RL
686 BIO_printf(bio_err,"\n");
687#endif
688
cf1b7d96 689#ifndef OPENSSL_NO_IDEA
d02b48c6
RE
690 BIO_printf(bio_err,"idea-cbc ");
691#endif
cf1b7d96 692#ifndef OPENSSL_NO_RC2
d02b48c6
RE
693 BIO_printf(bio_err,"rc2-cbc ");
694#endif
cf1b7d96 695#ifndef OPENSSL_NO_RC5
58964a49
RE
696 BIO_printf(bio_err,"rc5-cbc ");
697#endif
cf1b7d96 698#ifndef OPENSSL_NO_BF
d02b48c6
RE
699 BIO_printf(bio_err,"bf-cbc");
700#endif
cf1b7d96
RL
701#if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_RC2) || \
702 !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_RC5)
d02b48c6
RE
703 BIO_printf(bio_err,"\n");
704#endif
3009458e 705
d02b48c6 706 BIO_printf(bio_err,"des-cbc des-ede3 ");
cf1b7d96 707#ifndef OPENSSL_NO_RC4
d02b48c6
RE
708 BIO_printf(bio_err,"rc4");
709#endif
3009458e
RL
710 BIO_printf(bio_err,"\n");
711
cf1b7d96 712#ifndef OPENSSL_NO_RSA
3009458e 713 BIO_printf(bio_err,"rsa512 rsa1024 rsa2048 rsa4096\n");
d02b48c6 714#endif
3009458e 715
cf1b7d96 716#ifndef OPENSSL_NO_DSA
3009458e
RL
717 BIO_printf(bio_err,"dsa512 dsa1024 dsa2048\n");
718#endif
719
cf1b7d96 720#ifndef OPENSSL_NO_IDEA
3009458e
RL
721 BIO_printf(bio_err,"idea ");
722#endif
cf1b7d96 723#ifndef OPENSSL_NO_RC2
3009458e
RL
724 BIO_printf(bio_err,"rc2 ");
725#endif
cf1b7d96 726#ifndef OPENSSL_NO_DES
3009458e 727 BIO_printf(bio_err,"des ");
d02b48c6 728#endif
cf1b7d96 729#ifndef OPENSSL_NO_RSA
3009458e
RL
730 BIO_printf(bio_err,"rsa ");
731#endif
cf1b7d96 732#ifndef OPENSSL_NO_BF
3009458e
RL
733 BIO_printf(bio_err,"blowfish");
734#endif
cf1b7d96
RL
735#if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_RC2) || \
736 !defined(OPENSSL_NO_DES) || !defined(OPENSSL_NO_RSA) || \
737 !defined(OPENSSL_NO_BF)
4e74239c 738 BIO_printf(bio_err,"\n");
3009458e
RL
739#endif
740
4e74239c 741 BIO_printf(bio_err,"\n");
3009458e 742 BIO_printf(bio_err,"Available options:\n");
5270e702 743#ifdef TIMES
4e74239c 744 BIO_printf(bio_err,"-elapsed measure time in real time instead of CPU user time.\n");
3132e196 745#endif
5270e702 746 BIO_printf(bio_err,"-engine e use engine e, possibly a hardware device.\n");
d02b48c6
RE
747 goto end;
748 }
749 argc--;
750 argv++;
751 j++;
752 }
753
754 if (j == 0)
755 {
756 for (i=0; i<ALGOR_NUM; i++)
53d28679
BM
757 {
758 if (i != D_EVP)
759 doit[i]=1;
760 }
d02b48c6
RE
761 for (i=0; i<RSA_NUM; i++)
762 rsa_doit[i]=1;
763 for (i=0; i<DSA_NUM; i++)
764 dsa_doit[i]=1;
765 }
766 for (i=0; i<ALGOR_NUM; i++)
767 if (doit[i]) pr_header++;
768
4e74239c
RL
769 if (usertime == 0)
770 BIO_printf(bio_err,"You have chosen to measure elapsed time instead of user CPU time.\n");
771 if (usertime <= 0)
772 {
773 BIO_printf(bio_err,"To get the most accurate results, try to run this\n");
774 BIO_printf(bio_err,"program when this computer is idle.\n");
775 }
d02b48c6 776
cf1b7d96 777#ifndef OPENSSL_NO_RSA
d02b48c6
RE
778 for (i=0; i<RSA_NUM; i++)
779 {
5e4ca422 780 const unsigned char *p;
d02b48c6
RE
781
782 p=rsa_data[i];
783 rsa_key[i]=d2i_RSAPrivateKey(NULL,&p,rsa_data_length[i]);
784 if (rsa_key[i] == NULL)
785 {
786 BIO_printf(bio_err,"internal error loading RSA key number %d\n",i);
787 goto end;
788 }
58964a49
RE
789#if 0
790 else
791 {
792 BIO_printf(bio_err,"Loaded RSA key, %d bit modulus and e= 0x",BN_num_bits(rsa_key[i]->n));
793 BN_print(bio_err,rsa_key[i]->e);
794 BIO_printf(bio_err,"\n");
795 }
796#endif
d02b48c6
RE
797 }
798#endif
799
cf1b7d96 800#ifndef OPENSSL_NO_DSA
d02b48c6
RE
801 dsa_key[0]=get_dsa512();
802 dsa_key[1]=get_dsa1024();
803 dsa_key[2]=get_dsa2048();
804#endif
805
cf1b7d96 806#ifndef OPENSSL_NO_DES
dbad1690
BL
807 des_set_key_unchecked(&key,&sch);
808 des_set_key_unchecked(&key2,&sch2);
809 des_set_key_unchecked(&key3,&sch3);
d02b48c6 810#endif
cf1b7d96 811#ifndef OPENSSL_NO_IDEA
d02b48c6
RE
812 idea_set_encrypt_key(key16,&idea_ks);
813#endif
cf1b7d96 814#ifndef OPENSSL_NO_RC4
d02b48c6
RE
815 RC4_set_key(&rc4_ks,16,key16);
816#endif
cf1b7d96 817#ifndef OPENSSL_NO_RC2
d02b48c6
RE
818 RC2_set_key(&rc2_ks,16,key16,128);
819#endif
cf1b7d96 820#ifndef OPENSSL_NO_RC5
58964a49
RE
821 RC5_32_set_key(&rc5_ks,16,key16,12);
822#endif
cf1b7d96 823#ifndef OPENSSL_NO_BF
d02b48c6
RE
824 BF_set_key(&bf_ks,16,key16);
825#endif
cf1b7d96 826#ifndef OPENSSL_NO_CAST
58964a49
RE
827 CAST_set_key(&cast_ks,16,key16);
828#endif
cf1b7d96 829#ifndef OPENSSL_NO_RSA
d02b48c6 830 memset(rsa_c,0,sizeof(rsa_c));
f5d7a031 831#endif
d02b48c6 832#ifndef SIGALRM
cf1b7d96 833#ifndef OPENSSL_NO_DES
d02b48c6
RE
834 BIO_printf(bio_err,"First we calculate the approximate speed ...\n");
835 count=10;
836 do {
837 long i;
838 count*=2;
4e74239c 839 Time_F(START,usertime);
d02b48c6 840 for (i=count; i; i--)
12ba413c
BM
841 des_ecb_encrypt(buf_as_des_cblock,buf_as_des_cblock,
842 &(sch[0]),DES_ENCRYPT);
4e74239c 843 d=Time_F(STOP,usertime);
d02b48c6 844 } while (d <3);
646d5695 845 save_count=count;
d02b48c6
RE
846 c[D_MD2][0]=count/10;
847 c[D_MDC2][0]=count/10;
3009458e 848 c[D_MD4][0]=count;
d02b48c6 849 c[D_MD5][0]=count;
58964a49 850 c[D_HMAC][0]=count;
d02b48c6 851 c[D_SHA1][0]=count;
58964a49 852 c[D_RMD160][0]=count;
d02b48c6
RE
853 c[D_RC4][0]=count*5;
854 c[D_CBC_DES][0]=count;
855 c[D_EDE3_DES][0]=count/3;
856 c[D_CBC_IDEA][0]=count;
857 c[D_CBC_RC2][0]=count;
58964a49 858 c[D_CBC_RC5][0]=count;
d02b48c6 859 c[D_CBC_BF][0]=count;
58964a49 860 c[D_CBC_CAST][0]=count;
d02b48c6
RE
861
862 for (i=1; i<SIZE_NUM; i++)
863 {
864 c[D_MD2][i]=c[D_MD2][0]*4*lengths[0]/lengths[i];
865 c[D_MDC2][i]=c[D_MDC2][0]*4*lengths[0]/lengths[i];
3009458e 866 c[D_MD4][i]=c[D_MD4][0]*4*lengths[0]/lengths[i];
d02b48c6 867 c[D_MD5][i]=c[D_MD5][0]*4*lengths[0]/lengths[i];
58964a49 868 c[D_HMAC][i]=c[D_HMAC][0]*4*lengths[0]/lengths[i];
d02b48c6 869 c[D_SHA1][i]=c[D_SHA1][0]*4*lengths[0]/lengths[i];
58964a49 870 c[D_RMD160][i]=c[D_RMD160][0]*4*lengths[0]/lengths[i];
d02b48c6
RE
871 }
872 for (i=1; i<SIZE_NUM; i++)
873 {
874 long l0,l1;
875
876 l0=(long)lengths[i-1];
877 l1=(long)lengths[i];
878 c[D_RC4][i]=c[D_RC4][i-1]*l0/l1;
879 c[D_CBC_DES][i]=c[D_CBC_DES][i-1]*l0/l1;
880 c[D_EDE3_DES][i]=c[D_EDE3_DES][i-1]*l0/l1;
881 c[D_CBC_IDEA][i]=c[D_CBC_IDEA][i-1]*l0/l1;
882 c[D_CBC_RC2][i]=c[D_CBC_RC2][i-1]*l0/l1;
58964a49 883 c[D_CBC_RC5][i]=c[D_CBC_RC5][i-1]*l0/l1;
d02b48c6 884 c[D_CBC_BF][i]=c[D_CBC_BF][i-1]*l0/l1;
58964a49 885 c[D_CBC_CAST][i]=c[D_CBC_CAST][i-1]*l0/l1;
d02b48c6 886 }
cf1b7d96 887#ifndef OPENSSL_NO_RSA
d02b48c6
RE
888 rsa_c[R_RSA_512][0]=count/2000;
889 rsa_c[R_RSA_512][1]=count/400;
890 for (i=1; i<RSA_NUM; i++)
891 {
892 rsa_c[i][0]=rsa_c[i-1][0]/8;
893 rsa_c[i][1]=rsa_c[i-1][1]/4;
894 if ((rsa_doit[i] <= 1) && (rsa_c[i][0] == 0))
895 rsa_doit[i]=0;
896 else
897 {
dfeab068 898 if (rsa_c[i][0] == 0)
d02b48c6
RE
899 {
900 rsa_c[i][0]=1;
901 rsa_c[i][1]=20;
902 }
903 }
904 }
f5d7a031 905#endif
d02b48c6 906
f89aebb1 907#ifndef OPENSSL_NO_DSA
d02b48c6
RE
908 dsa_c[R_DSA_512][0]=count/1000;
909 dsa_c[R_DSA_512][1]=count/1000/2;
910 for (i=1; i<DSA_NUM; i++)
911 {
912 dsa_c[i][0]=dsa_c[i-1][0]/4;
913 dsa_c[i][1]=dsa_c[i-1][1]/4;
914 if ((dsa_doit[i] <= 1) && (dsa_c[i][0] == 0))
915 dsa_doit[i]=0;
916 else
917 {
918 if (dsa_c[i] == 0)
919 {
920 dsa_c[i][0]=1;
921 dsa_c[i][1]=1;
922 }
923 }
924 }
f89aebb1 925#endif
d02b48c6 926
58964a49 927#define COND(d) (count < (d))
d02b48c6
RE
928#define COUNT(d) (d)
929#else
63da21c0
BM
930/* not worth fixing */
931# error "You cannot disable DES on systems without SIGALRM."
cf1b7d96 932#endif /* OPENSSL_NO_DES */
63da21c0 933#else
d02b48c6
RE
934#define COND(c) (run)
935#define COUNT(d) (count)
936 signal(SIGALRM,sig_done);
63da21c0 937#endif /* SIGALRM */
d02b48c6 938
cf1b7d96 939#ifndef OPENSSL_NO_MD2
d02b48c6
RE
940 if (doit[D_MD2])
941 {
942 for (j=0; j<SIZE_NUM; j++)
943 {
944 print_message(names[D_MD2],c[D_MD2][j],lengths[j]);
4e74239c 945 Time_F(START,usertime);
d02b48c6 946 for (count=0,run=1; COND(c[D_MD2][j]); count++)
323f289c 947 EVP_Digest(buf,(unsigned long)lengths[j],&(md2[0]),NULL,EVP_md2());
4e74239c 948 d=Time_F(STOP,usertime);
d02b48c6
RE
949 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
950 count,names[D_MD2],d);
951 results[D_MD2][j]=((double)count)/d*lengths[j];
952 }
953 }
954#endif
cf1b7d96 955#ifndef OPENSSL_NO_MDC2
d02b48c6
RE
956 if (doit[D_MDC2])
957 {
958 for (j=0; j<SIZE_NUM; j++)
959 {
960 print_message(names[D_MDC2],c[D_MDC2][j],lengths[j]);
4e74239c 961 Time_F(START,usertime);
d02b48c6 962 for (count=0,run=1; COND(c[D_MDC2][j]); count++)
323f289c 963 EVP_Digest(buf,(unsigned long)lengths[j],&(mdc2[0]),NULL,EVP_mdc2());
4e74239c 964 d=Time_F(STOP,usertime);
d02b48c6
RE
965 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
966 count,names[D_MDC2],d);
967 results[D_MDC2][j]=((double)count)/d*lengths[j];
968 }
969 }
970#endif
971
cf1b7d96 972#ifndef OPENSSL_NO_MD4
3009458e
RL
973 if (doit[D_MD4])
974 {
975 for (j=0; j<SIZE_NUM; j++)
976 {
977 print_message(names[D_MD4],c[D_MD4][j],lengths[j]);
978 Time_F(START,usertime);
979 for (count=0,run=1; COND(c[D_MD4][j]); count++)
323f289c 980 EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md4[0]),NULL,EVP_md4());
3009458e
RL
981 d=Time_F(STOP,usertime);
982 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
983 count,names[D_MD4],d);
984 results[D_MD4][j]=((double)count)/d*lengths[j];
985 }
986 }
987#endif
988
cf1b7d96 989#ifndef OPENSSL_NO_MD5
d02b48c6
RE
990 if (doit[D_MD5])
991 {
992 for (j=0; j<SIZE_NUM; j++)
993 {
994 print_message(names[D_MD5],c[D_MD5][j],lengths[j]);
4e74239c 995 Time_F(START,usertime);
d02b48c6 996 for (count=0,run=1; COND(c[D_MD5][j]); count++)
7d344704 997 EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md5[0]),NULL,EVP_get_digestbyname("md5"));
4e74239c 998 d=Time_F(STOP,usertime);
d02b48c6
RE
999 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1000 count,names[D_MD5],d);
1001 results[D_MD5][j]=((double)count)/d*lengths[j];
1002 }
1003 }
1004#endif
1005
cf1b7d96 1006#if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_HMAC)
58964a49 1007 if (doit[D_HMAC])
d02b48c6 1008 {
58964a49 1009 HMAC_CTX hctx;
dbad1690
BL
1010
1011 HMAC_CTX_init(&hctx);
58964a49
RE
1012 HMAC_Init(&hctx,(unsigned char *)"This is a key...",
1013 16,EVP_md5());
1014
d02b48c6
RE
1015 for (j=0; j<SIZE_NUM; j++)
1016 {
58964a49 1017 print_message(names[D_HMAC],c[D_HMAC][j],lengths[j]);
4e74239c 1018 Time_F(START,usertime);
58964a49
RE
1019 for (count=0,run=1; COND(c[D_HMAC][j]); count++)
1020 {
1021 HMAC_Init(&hctx,NULL,0,NULL);
1022 HMAC_Update(&hctx,buf,lengths[j]);
1023 HMAC_Final(&hctx,&(hmac[0]),NULL);
1024 }
4e74239c 1025 d=Time_F(STOP,usertime);
d02b48c6 1026 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
58964a49
RE
1027 count,names[D_HMAC],d);
1028 results[D_HMAC][j]=((double)count)/d*lengths[j];
d02b48c6 1029 }
dbad1690 1030 HMAC_CTX_cleanup(&hctx);
d02b48c6
RE
1031 }
1032#endif
cf1b7d96 1033#ifndef OPENSSL_NO_SHA
d02b48c6
RE
1034 if (doit[D_SHA1])
1035 {
1036 for (j=0; j<SIZE_NUM; j++)
1037 {
1038 print_message(names[D_SHA1],c[D_SHA1][j],lengths[j]);
4e74239c 1039 Time_F(START,usertime);
d02b48c6 1040 for (count=0,run=1; COND(c[D_SHA1][j]); count++)
323f289c 1041 EVP_Digest(buf,(unsigned long)lengths[j],&(sha[0]),NULL,EVP_sha1());
4e74239c 1042 d=Time_F(STOP,usertime);
d02b48c6
RE
1043 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1044 count,names[D_SHA1],d);
1045 results[D_SHA1][j]=((double)count)/d*lengths[j];
1046 }
1047 }
1048#endif
cf1b7d96 1049#ifndef OPENSSL_NO_RIPEMD
58964a49
RE
1050 if (doit[D_RMD160])
1051 {
1052 for (j=0; j<SIZE_NUM; j++)
1053 {
1054 print_message(names[D_RMD160],c[D_RMD160][j],lengths[j]);
4e74239c 1055 Time_F(START,usertime);
58964a49 1056 for (count=0,run=1; COND(c[D_RMD160][j]); count++)
323f289c 1057 EVP_Digest(buf,(unsigned long)lengths[j],&(rmd160[0]),NULL,EVP_ripemd160());
4e74239c 1058 d=Time_F(STOP,usertime);
58964a49
RE
1059 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1060 count,names[D_RMD160],d);
1061 results[D_RMD160][j]=((double)count)/d*lengths[j];
1062 }
1063 }
1064#endif
cf1b7d96 1065#ifndef OPENSSL_NO_RC4
d02b48c6
RE
1066 if (doit[D_RC4])
1067 {
1068 for (j=0; j<SIZE_NUM; j++)
1069 {
1070 print_message(names[D_RC4],c[D_RC4][j],lengths[j]);
4e74239c 1071 Time_F(START,usertime);
d02b48c6
RE
1072 for (count=0,run=1; COND(c[D_RC4][j]); count++)
1073 RC4(&rc4_ks,(unsigned int)lengths[j],
1074 buf,buf);
4e74239c 1075 d=Time_F(STOP,usertime);
d02b48c6
RE
1076 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1077 count,names[D_RC4],d);
1078 results[D_RC4][j]=((double)count)/d*lengths[j];
1079 }
1080 }
1081#endif
cf1b7d96 1082#ifndef OPENSSL_NO_DES
d02b48c6
RE
1083 if (doit[D_CBC_DES])
1084 {
1085 for (j=0; j<SIZE_NUM; j++)
1086 {
1087 print_message(names[D_CBC_DES],c[D_CBC_DES][j],lengths[j]);
4e74239c 1088 Time_F(START,usertime);
d02b48c6 1089 for (count=0,run=1; COND(c[D_CBC_DES][j]); count++)
dbad1690 1090 des_ncbc_encrypt(buf,buf,lengths[j],&sch,
edf0bfb5 1091 &iv,DES_ENCRYPT);
4e74239c 1092 d=Time_F(STOP,usertime);
d02b48c6 1093 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
dbad1690 1094 count,names[D_CBC_DES],d);
d02b48c6
RE
1095 results[D_CBC_DES][j]=((double)count)/d*lengths[j];
1096 }
1097 }
1098
1099 if (doit[D_EDE3_DES])
1100 {
1101 for (j=0; j<SIZE_NUM; j++)
1102 {
1103 print_message(names[D_EDE3_DES],c[D_EDE3_DES][j],lengths[j]);
4e74239c 1104 Time_F(START,usertime);
d02b48c6 1105 for (count=0,run=1; COND(c[D_EDE3_DES][j]); count++)
4e31df2c 1106 des_ede3_cbc_encrypt(buf,buf,lengths[j],
dbad1690 1107 &sch,&sch2,&sch3,
edf0bfb5 1108 &iv,DES_ENCRYPT);
4e74239c 1109 d=Time_F(STOP,usertime);
d02b48c6
RE
1110 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1111 count,names[D_EDE3_DES],d);
1112 results[D_EDE3_DES][j]=((double)count)/d*lengths[j];
1113 }
1114 }
1115#endif
cf1b7d96 1116#ifndef OPENSSL_NO_IDEA
d02b48c6
RE
1117 if (doit[D_CBC_IDEA])
1118 {
1119 for (j=0; j<SIZE_NUM; j++)
1120 {
1121 print_message(names[D_CBC_IDEA],c[D_CBC_IDEA][j],lengths[j]);
4e74239c 1122 Time_F(START,usertime);
d02b48c6
RE
1123 for (count=0,run=1; COND(c[D_CBC_IDEA][j]); count++)
1124 idea_cbc_encrypt(buf,buf,
1125 (unsigned long)lengths[j],&idea_ks,
12ba413c 1126 iv,IDEA_ENCRYPT);
4e74239c 1127 d=Time_F(STOP,usertime);
d02b48c6
RE
1128 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1129 count,names[D_CBC_IDEA],d);
1130 results[D_CBC_IDEA][j]=((double)count)/d*lengths[j];
1131 }
1132 }
1133#endif
cf1b7d96 1134#ifndef OPENSSL_NO_RC2
d02b48c6
RE
1135 if (doit[D_CBC_RC2])
1136 {
1137 for (j=0; j<SIZE_NUM; j++)
1138 {
1139 print_message(names[D_CBC_RC2],c[D_CBC_RC2][j],lengths[j]);
4e74239c 1140 Time_F(START,usertime);
d02b48c6
RE
1141 for (count=0,run=1; COND(c[D_CBC_RC2][j]); count++)
1142 RC2_cbc_encrypt(buf,buf,
1143 (unsigned long)lengths[j],&rc2_ks,
12ba413c 1144 iv,RC2_ENCRYPT);
4e74239c 1145 d=Time_F(STOP,usertime);
d02b48c6
RE
1146 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1147 count,names[D_CBC_RC2],d);
1148 results[D_CBC_RC2][j]=((double)count)/d*lengths[j];
1149 }
1150 }
1151#endif
cf1b7d96 1152#ifndef OPENSSL_NO_RC5
58964a49
RE
1153 if (doit[D_CBC_RC5])
1154 {
1155 for (j=0; j<SIZE_NUM; j++)
1156 {
1157 print_message(names[D_CBC_RC5],c[D_CBC_RC5][j],lengths[j]);
4e74239c 1158 Time_F(START,usertime);
58964a49
RE
1159 for (count=0,run=1; COND(c[D_CBC_RC5][j]); count++)
1160 RC5_32_cbc_encrypt(buf,buf,
1161 (unsigned long)lengths[j],&rc5_ks,
12ba413c 1162 iv,RC5_ENCRYPT);
4e74239c 1163 d=Time_F(STOP,usertime);
58964a49
RE
1164 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1165 count,names[D_CBC_RC5],d);
1166 results[D_CBC_RC5][j]=((double)count)/d*lengths[j];
1167 }
1168 }
1169#endif
cf1b7d96 1170#ifndef OPENSSL_NO_BF
d02b48c6
RE
1171 if (doit[D_CBC_BF])
1172 {
1173 for (j=0; j<SIZE_NUM; j++)
1174 {
1175 print_message(names[D_CBC_BF],c[D_CBC_BF][j],lengths[j]);
4e74239c 1176 Time_F(START,usertime);
d02b48c6
RE
1177 for (count=0,run=1; COND(c[D_CBC_BF][j]); count++)
1178 BF_cbc_encrypt(buf,buf,
1179 (unsigned long)lengths[j],&bf_ks,
12ba413c 1180 iv,BF_ENCRYPT);
4e74239c 1181 d=Time_F(STOP,usertime);
d02b48c6
RE
1182 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1183 count,names[D_CBC_BF],d);
1184 results[D_CBC_BF][j]=((double)count)/d*lengths[j];
1185 }
1186 }
1187#endif
cf1b7d96 1188#ifndef OPENSSL_NO_CAST
58964a49
RE
1189 if (doit[D_CBC_CAST])
1190 {
1191 for (j=0; j<SIZE_NUM; j++)
1192 {
1193 print_message(names[D_CBC_CAST],c[D_CBC_CAST][j],lengths[j]);
4e74239c 1194 Time_F(START,usertime);
58964a49
RE
1195 for (count=0,run=1; COND(c[D_CBC_CAST][j]); count++)
1196 CAST_cbc_encrypt(buf,buf,
1197 (unsigned long)lengths[j],&cast_ks,
12ba413c 1198 iv,CAST_ENCRYPT);
4e74239c 1199 d=Time_F(STOP,usertime);
58964a49
RE
1200 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1201 count,names[D_CBC_CAST],d);
1202 results[D_CBC_CAST][j]=((double)count)/d*lengths[j];
1203 }
1204 }
1205#endif
d02b48c6 1206
646d5695
BL
1207 if (doit[D_EVP])
1208 {
1209 for (j=0; j<SIZE_NUM; j++)
1210 {
1211 EVP_CIPHER_CTX ctx;
1212 int outl;
1213
1214 names[D_EVP]=OBJ_nid2ln(evp->nid);
1215 print_message(names[D_EVP],save_count,
1216 lengths[j]);
3f37e73b
BL
1217 if(decrypt)
1218 EVP_DecryptInit(&ctx,evp,key16,iv);
1219 else
1220 EVP_EncryptInit(&ctx,evp,key16,iv);
1221
646d5695 1222 Time_F(START,usertime);
3f37e73b
BL
1223 if(decrypt)
1224 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1225 EVP_DecryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
1226 else
1227 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1228 EVP_EncryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
1229 if(decrypt)
1230 EVP_DecryptFinal(&ctx,buf,&outl);
1231 else
1232 EVP_EncryptFinal(&ctx,buf,&outl);
646d5695
BL
1233 d=Time_F(STOP,usertime);
1234 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
1235 count,names[D_EVP],d);
1236 results[D_EVP][j]=((double)count)/d*lengths[j];
1237 }
1238 }
1239
373b575f 1240 RAND_pseudo_bytes(buf,36);
cf1b7d96 1241#ifndef OPENSSL_NO_RSA
d02b48c6
RE
1242 for (j=0; j<RSA_NUM; j++)
1243 {
c91e1259 1244 int ret;
d02b48c6 1245 if (!rsa_doit[j]) continue;
c91e1259 1246 ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num, rsa_key[j]);
03ea28c9
RL
1247 if (ret == 0)
1248 {
1249 BIO_printf(bio_err,"RSA sign failure. No RSA sign will be done.\n");
1250 ERR_print_errors(bio_err);
1251 rsa_count=1;
1252 }
1253 else
d02b48c6 1254 {
03ea28c9
RL
1255 pkey_print_message("private","rsa",
1256 rsa_c[j][0],rsa_bits[j],
1257 RSA_SECONDS);
1258/* RSA_blinding_on(rsa_key[j],NULL); */
1259 Time_F(START,usertime);
1260 for (count=0,run=1; COND(rsa_c[j][0]); count++)
d02b48c6 1261 {
03ea28c9
RL
1262 ret=RSA_sign(NID_md5_sha1, buf,36, buf2,
1263 &rsa_num, rsa_key[j]);
1264 if (ret == 0)
1265 {
1266 BIO_printf(bio_err,
1267 "RSA sign failure\n");
1268 ERR_print_errors(bio_err);
1269 count=1;
1270 break;
1271 }
d02b48c6 1272 }
03ea28c9
RL
1273 d=Time_F(STOP,usertime);
1274 BIO_printf(bio_err,
1275 "%ld %d bit private RSA's in %.2fs\n",
1276 count,rsa_bits[j],d);
1277 rsa_results[j][0]=d/(double)count;
1278 rsa_count=count;
d02b48c6 1279 }
d02b48c6 1280
58964a49 1281#if 1
c91e1259 1282 ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num, rsa_key[j]);
03ea28c9 1283 if (ret <= 0)
d02b48c6 1284 {
03ea28c9
RL
1285 BIO_printf(bio_err,"RSA verify failure. No RSA verify will be done.\n");
1286 ERR_print_errors(bio_err);
51740b12 1287 rsa_doit[j] = 0;
03ea28c9
RL
1288 }
1289 else
1290 {
1291 pkey_print_message("public","rsa",
1292 rsa_c[j][1],rsa_bits[j],
1293 RSA_SECONDS);
1294 Time_F(START,usertime);
1295 for (count=0,run=1; COND(rsa_c[j][1]); count++)
d02b48c6 1296 {
03ea28c9
RL
1297 ret=RSA_verify(NID_md5_sha1, buf,36, buf2,
1298 rsa_num, rsa_key[j]);
1299 if (ret == 0)
1300 {
1301 BIO_printf(bio_err,
1302 "RSA verify failure\n");
1303 ERR_print_errors(bio_err);
1304 count=1;
1305 break;
1306 }
d02b48c6 1307 }
03ea28c9
RL
1308 d=Time_F(STOP,usertime);
1309 BIO_printf(bio_err,
1310 "%ld %d bit public RSA's in %.2fs\n",
1311 count,rsa_bits[j],d);
1312 rsa_results[j][1]=d/(double)count;
d02b48c6 1313 }
58964a49 1314#endif
d02b48c6
RE
1315
1316 if (rsa_count <= 1)
1317 {
1318 /* if longer than 10s, don't do any more */
1319 for (j++; j<RSA_NUM; j++)
1320 rsa_doit[j]=0;
1321 }
1322 }
1323#endif
1324
373b575f 1325 RAND_pseudo_bytes(buf,20);
cf1b7d96 1326#ifndef OPENSSL_NO_DSA
99a97051
UM
1327 if (RAND_status() != 1)
1328 {
1329 RAND_seed(rnd_seed, sizeof rnd_seed);
1330 rnd_fake = 1;
1331 }
d02b48c6
RE
1332 for (j=0; j<DSA_NUM; j++)
1333 {
58964a49 1334 unsigned int kk;
03ea28c9 1335 int ret;
58964a49 1336
d02b48c6 1337 if (!dsa_doit[j]) continue;
af436bc1 1338/* DSA_generate_key(dsa_key[j]); */
d02b48c6 1339/* DSA_sign_setup(dsa_key[j],NULL); */
03ea28c9 1340 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
dfeab068 1341 &kk,dsa_key[j]);
03ea28c9
RL
1342 if (ret == 0)
1343 {
1344 BIO_printf(bio_err,"DSA sign failure. No DSA sign will be done.\n");
1345 ERR_print_errors(bio_err);
1346 rsa_count=1;
1347 }
1348 else
d02b48c6 1349 {
03ea28c9
RL
1350 pkey_print_message("sign","dsa",
1351 dsa_c[j][0],dsa_bits[j],
1352 DSA_SECONDS);
1353 Time_F(START,usertime);
1354 for (count=0,run=1; COND(dsa_c[j][0]); count++)
d02b48c6 1355 {
03ea28c9
RL
1356 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
1357 &kk,dsa_key[j]);
1358 if (ret == 0)
1359 {
1360 BIO_printf(bio_err,
1361 "DSA sign failure\n");
1362 ERR_print_errors(bio_err);
1363 count=1;
1364 break;
1365 }
d02b48c6 1366 }
03ea28c9
RL
1367 d=Time_F(STOP,usertime);
1368 BIO_printf(bio_err,"%ld %d bit DSA signs in %.2fs\n",
1369 count,dsa_bits[j],d);
1370 dsa_results[j][0]=d/(double)count;
1371 rsa_count=count;
d02b48c6 1372 }
d02b48c6 1373
03ea28c9 1374 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
dfeab068 1375 kk,dsa_key[j]);
03ea28c9
RL
1376 if (ret <= 0)
1377 {
1378 BIO_printf(bio_err,"DSA verify failure. No DSA verify will be done.\n");
1379 ERR_print_errors(bio_err);
1380 dsa_doit[j] = 0;
1381 }
1382 else
d02b48c6 1383 {
03ea28c9
RL
1384 pkey_print_message("verify","dsa",
1385 dsa_c[j][1],dsa_bits[j],
1386 DSA_SECONDS);
1387 Time_F(START,usertime);
1388 for (count=0,run=1; COND(dsa_c[j][1]); count++)
d02b48c6 1389 {
03ea28c9
RL
1390 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
1391 kk,dsa_key[j]);
1392 if (ret <= 0)
1393 {
1394 BIO_printf(bio_err,
1395 "DSA verify failure\n");
1396 ERR_print_errors(bio_err);
1397 count=1;
1398 break;
1399 }
d02b48c6 1400 }
03ea28c9
RL
1401 d=Time_F(STOP,usertime);
1402 BIO_printf(bio_err,"%ld %d bit DSA verify in %.2fs\n",
1403 count,dsa_bits[j],d);
1404 dsa_results[j][1]=d/(double)count;
d02b48c6 1405 }
d02b48c6
RE
1406
1407 if (rsa_count <= 1)
1408 {
1409 /* if longer than 10s, don't do any more */
1410 for (j++; j<DSA_NUM; j++)
1411 dsa_doit[j]=0;
1412 }
1413 }
99a97051 1414 if (rnd_fake) RAND_cleanup();
d02b48c6
RE
1415#endif
1416
1417 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_VERSION));
1418 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_BUILT_ON));
1419 printf("options:");
1420 printf("%s ",BN_options());
cf1b7d96 1421#ifndef OPENSSL_NO_MD2
d02b48c6
RE
1422 printf("%s ",MD2_options());
1423#endif
cf1b7d96 1424#ifndef OPENSSL_NO_RC4
d02b48c6
RE
1425 printf("%s ",RC4_options());
1426#endif
cf1b7d96 1427#ifndef OPENSSL_NO_DES
d02b48c6
RE
1428 printf("%s ",des_options());
1429#endif
cf1b7d96 1430#ifndef OPENSSL_NO_IDEA
d02b48c6
RE
1431 printf("%s ",idea_options());
1432#endif
cf1b7d96 1433#ifndef OPENSSL_NO_BF
d02b48c6
RE
1434 printf("%s ",BF_options());
1435#endif
58964a49 1436 fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS));
7876e448
RL
1437 printf("available timing options: ");
1438#ifdef TIMES
1439 printf("TIMES ");
1440#endif
1441#ifdef TIMEB
1442 printf("TIMEB ");
1443#endif
1444#ifdef USE_TOD
1445 printf("USE_TOD ");
1446#endif
1447#ifdef HZ
1448#define as_string(s) (#s)
1449 printf("HZ=%g", (double)HZ);
1450#endif
1451 printf("\n");
1452 printf("timing function used: %s%s%s%s%s%s%s\n",
1453 (ftime_used ? "ftime" : ""),
1454 (ftime_used + times_used > 1 ? "," : ""),
1455 (times_used ? "times" : ""),
1456 (ftime_used + times_used + gettimeofday_used > 1 ? "," : ""),
1457 (gettimeofday_used ? "gettimeofday" : ""),
1458 (ftime_used + times_used + gettimeofday_used + getrusage_used > 1 ? "," : ""),
1459 (getrusage_used ? "getrusage" : ""));
1460
d02b48c6
RE
1461
1462 if (pr_header)
1463 {
1464 fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n");
1465 fprintf(stdout,"type ");
1466 for (j=0; j<SIZE_NUM; j++)
1467 fprintf(stdout,"%7d bytes",lengths[j]);
1468 fprintf(stdout,"\n");
1469 }
1470
1471 for (k=0; k<ALGOR_NUM; k++)
1472 {
1473 if (!doit[k]) continue;
58964a49 1474 fprintf(stdout,"%-13s",names[k]);
d02b48c6
RE
1475 for (j=0; j<SIZE_NUM; j++)
1476 {
1477 if (results[k][j] > 10000)
1478 fprintf(stdout," %11.2fk",results[k][j]/1e3);
1479 else
1480 fprintf(stdout," %11.2f ",results[k][j]);
1481 }
1482 fprintf(stdout,"\n");
1483 }
cf1b7d96 1484#ifndef OPENSSL_NO_RSA
d02b48c6
RE
1485 j=1;
1486 for (k=0; k<RSA_NUM; k++)
1487 {
1488 if (!rsa_doit[k]) continue;
58964a49
RE
1489 if (j)
1490 {
1491 printf("%18ssign verify sign/s verify/s\n"," ");
1492 j=0;
1493 }
d58d092b 1494 fprintf(stdout,"rsa %4u bits %8.4fs %8.4fs %8.1f %8.1f",
58964a49
RE
1495 rsa_bits[k],rsa_results[k][0],rsa_results[k][1],
1496 1.0/rsa_results[k][0],1.0/rsa_results[k][1]);
d02b48c6
RE
1497 fprintf(stdout,"\n");
1498 }
1499#endif
cf1b7d96 1500#ifndef OPENSSL_NO_DSA
d02b48c6
RE
1501 j=1;
1502 for (k=0; k<DSA_NUM; k++)
1503 {
1504 if (!dsa_doit[k]) continue;
58964a49
RE
1505 if (j) {
1506 printf("%18ssign verify sign/s verify/s\n"," ");
1507 j=0;
1508 }
d58d092b 1509 fprintf(stdout,"dsa %4u bits %8.4fs %8.4fs %8.1f %8.1f",
58964a49
RE
1510 dsa_bits[k],dsa_results[k][0],dsa_results[k][1],
1511 1.0/dsa_results[k][0],1.0/dsa_results[k][1]);
d02b48c6
RE
1512 fprintf(stdout,"\n");
1513 }
1514#endif
18c77bf2 1515 mret=0;
d02b48c6 1516end:
5270e702 1517 ERR_print_errors(bio_err);
26a3a48d
RL
1518 if (buf != NULL) OPENSSL_free(buf);
1519 if (buf2 != NULL) OPENSSL_free(buf2);
cf1b7d96 1520#ifndef OPENSSL_NO_RSA
d02b48c6
RE
1521 for (i=0; i<RSA_NUM; i++)
1522 if (rsa_key[i] != NULL)
1523 RSA_free(rsa_key[i]);
1524#endif
cf1b7d96 1525#ifndef OPENSSL_NO_DSA
d02b48c6
RE
1526 for (i=0; i<DSA_NUM; i++)
1527 if (dsa_key[i] != NULL)
1528 DSA_free(dsa_key[i]);
1529#endif
c04f8cf4 1530 apps_shutdown();
18c77bf2 1531 EXIT(mret);
d02b48c6
RE
1532 }
1533
646d5695 1534static void print_message(const char *s, long num, int length)
d02b48c6
RE
1535 {
1536#ifdef SIGALRM
1537 BIO_printf(bio_err,"Doing %s for %ds on %d size blocks: ",s,SECONDS,length);
d58d092b 1538 (void)BIO_flush(bio_err);
d02b48c6
RE
1539 alarm(SECONDS);
1540#else
1541 BIO_printf(bio_err,"Doing %s %ld times on %d size blocks: ",s,num,length);
d58d092b 1542 (void)BIO_flush(bio_err);
d02b48c6
RE
1543#endif
1544#ifdef LINT
1545 num=num;
1546#endif
1547 }
1548
6b691a5c
UM
1549static void pkey_print_message(char *str, char *str2, long num, int bits,
1550 int tm)
d02b48c6
RE
1551 {
1552#ifdef SIGALRM
1553 BIO_printf(bio_err,"Doing %d bit %s %s's for %ds: ",bits,str,str2,tm);
d58d092b 1554 (void)BIO_flush(bio_err);
d02b48c6
RE
1555 alarm(RSA_SECONDS);
1556#else
1557 BIO_printf(bio_err,"Doing %ld %d bit %s %s's: ",num,bits,str,str2);
d58d092b 1558 (void)BIO_flush(bio_err);
d02b48c6
RE
1559#endif
1560#ifdef LINT
1561 num=num;
1562#endif
1563 }
58964a49 1564