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