blob: 36e885a594fcc99f2f0a7b944ae5d02adda41fe3 [file] [log] [blame]
Richard Levitte7876e442001-09-27 15:43:55 +00001/* apps/speed.c -*- mode:C; c-file-style: "eay" -*- */
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00002/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00003 * 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 */
Bodo Möllere172d602002-08-09 08:43:04 +000058/* ====================================================================
Felix Laurie von Massenbach7e965dc2014-05-27 12:41:20 +010059 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
Bodo Möllere172d602002-08-09 08:43:04 +000060 *
61 * Portions of the attached software ("Contribution") are developed by
62 * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
63 *
64 * The Contribution is licensed pursuant to the OpenSSL open source
65 * license provided above.
66 *
Bodo Möllere172d602002-08-09 08:43:04 +000067 * The ECDH and ECDSA speed test software is originally written by
68 * Sumit Gupta of Sun Microsystems Laboratories.
69 *
70 */
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000071
72/* most of this code has been pilfered from my libdes speed.c program */
73
Richard Levitte85d686e2003-02-14 01:02:58 +000074#ifndef OPENSSL_NO_SPEED
75
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000076#undef SECONDS
Felix Laurie von Massenbachb3596422014-05-27 00:33:42 +010077#define SECONDS 3
78#define PRIME_SECONDS 10
79#define RSA_SECONDS 10
80#define DSA_SECONDS 10
Bodo Möllere172d602002-08-09 08:43:04 +000081#define ECDSA_SECONDS 10
82#define ECDH_SECONDS 10
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000083
84/* 11-Sep-92 Andrew Daviel Support for Silicon Graphics IRIX added */
85/* 06-Apr-92 Luke Brennan Support for VMS and add extra signal calls */
86
87#undef PROG
88#define PROG speed_main
89
90#include <stdio.h>
91#include <stdlib.h>
Richard Levitte4d8743f2003-11-28 13:10:58 +000092
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000093#include <string.h>
Ralf S. Engelschall58964a41998-12-21 10:56:39 +000094#include <math.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000095#include "apps.h"
Richard Levittecf1b7d92001-02-19 16:06:34 +000096#ifdef OPENSSL_NO_STDIO
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000097#define APPS_WIN16
98#endif
Bodo Möllerec577821999-04-23 22:13:45 +000099#include <openssl/crypto.h>
100#include <openssl/rand.h>
101#include <openssl/err.h>
Ben Laurie646d5692000-11-20 04:14:19 +0000102#include <openssl/evp.h>
103#include <openssl/objects.h>
Richard Levittef559f312001-11-05 12:43:17 +0000104#if !defined(OPENSSL_SYS_MSDOS)
Richard Levittea4a8f7b2001-09-28 10:34:48 +0000105#include OPENSSL_UNISTD
Richard Levittef559f312001-11-05 12:43:17 +0000106#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000107
Richard Levitte4d8743f2003-11-28 13:10:58 +0000108#ifndef OPENSSL_SYS_NETWARE
109#include <signal.h>
110#endif
111
Andy Polyakovbdba4592011-12-15 22:30:03 +0000112#if defined(_WIN32) || defined(__CYGWIN__)
Andy Polyakov0a39d8f2005-11-06 11:40:59 +0000113#include <windows.h>
Andy Polyakov7aba22b2011-12-19 14:33:09 +0000114# if defined(__CYGWIN__) && !defined(_WIN32)
Andy Polyakovbdba4592011-12-15 22:30:03 +0000115 /* <windows.h> should define _WIN32, which normally is mutually
116 * exclusive with __CYGWIN__, but if it didn't... */
117# define _WIN32
118 /* this is done because Cygwin alarm() fails sometimes. */
119# endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000120#endif
121
Geoff Thorpef0eae952004-05-17 19:05:32 +0000122#include <openssl/bn.h>
Richard Levittecf1b7d92001-02-19 16:06:34 +0000123#ifndef OPENSSL_NO_DES
Richard Levitte125cc352002-03-22 02:42:57 +0000124#include <openssl/des.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000125#endif
Richard Levitteba1b8882002-01-02 16:57:57 +0000126#ifndef OPENSSL_NO_AES
127#include <openssl/aes.h>
128#endif
Bodo Möllerf3dea9a2006-06-09 15:44:59 +0000129#ifndef OPENSSL_NO_CAMELLIA
130#include <openssl/camellia.h>
131#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000132#ifndef OPENSSL_NO_MD2
Bodo Möllerec577821999-04-23 22:13:45 +0000133#include <openssl/md2.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000134#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000135#ifndef OPENSSL_NO_MDC2
Bodo Möllerec577821999-04-23 22:13:45 +0000136#include <openssl/mdc2.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000137#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000138#ifndef OPENSSL_NO_MD4
Richard Levitte30094582000-08-14 14:05:53 +0000139#include <openssl/md4.h>
140#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000141#ifndef OPENSSL_NO_MD5
Bodo Möllerec577821999-04-23 22:13:45 +0000142#include <openssl/md5.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000143#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000144#ifndef OPENSSL_NO_HMAC
Ulf Möller5271ebd1999-06-30 00:42:56 +0000145#include <openssl/hmac.h>
146#endif
147#include <openssl/evp.h>
Richard Levittecf1b7d92001-02-19 16:06:34 +0000148#ifndef OPENSSL_NO_SHA
Bodo Möllerec577821999-04-23 22:13:45 +0000149#include <openssl/sha.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000150#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000151#ifndef OPENSSL_NO_RIPEMD
Bodo Möllerec577821999-04-23 22:13:45 +0000152#include <openssl/ripemd.h>
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000153#endif
Nils Larschae93dc132006-12-01 21:42:55 +0000154#ifndef OPENSSL_NO_WHIRLPOOL
155#include <openssl/whrlpool.h>
156#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000157#ifndef OPENSSL_NO_RC4
Bodo Möllerec577821999-04-23 22:13:45 +0000158#include <openssl/rc4.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000159#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000160#ifndef OPENSSL_NO_RC5
Bodo Möllerec577821999-04-23 22:13:45 +0000161#include <openssl/rc5.h>
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000162#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000163#ifndef OPENSSL_NO_RC2
Bodo Möllerec577821999-04-23 22:13:45 +0000164#include <openssl/rc2.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000165#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000166#ifndef OPENSSL_NO_IDEA
Bodo Möllerec577821999-04-23 22:13:45 +0000167#include <openssl/idea.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000168#endif
Bodo Möller96afc1c2007-04-23 23:48:59 +0000169#ifndef OPENSSL_NO_SEED
170#include <openssl/seed.h>
171#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000172#ifndef OPENSSL_NO_BF
Bodo Möllerec577821999-04-23 22:13:45 +0000173#include <openssl/blowfish.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000174#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000175#ifndef OPENSSL_NO_CAST
Bodo Möllerec577821999-04-23 22:13:45 +0000176#include <openssl/cast.h>
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000177#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000178#ifndef OPENSSL_NO_RSA
Bodo Möllerec577821999-04-23 22:13:45 +0000179#include <openssl/rsa.h>
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000180#include "./testrsa.h"
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000181#endif
Bodo Möllerec577821999-04-23 22:13:45 +0000182#include <openssl/x509.h>
Richard Levittecf1b7d92001-02-19 16:06:34 +0000183#ifndef OPENSSL_NO_DSA
Geoff Thorpe823a67b2004-04-19 18:13:07 +0000184#include <openssl/dsa.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000185#include "./testdsa.h"
186#endif
Bodo Möllere172d602002-08-09 08:43:04 +0000187#ifndef OPENSSL_NO_ECDSA
188#include <openssl/ecdsa.h>
189#endif
190#ifndef OPENSSL_NO_ECDH
191#include <openssl/ecdh.h>
192#endif
Andy Polyakov6acb4ff2010-07-09 14:10:51 +0000193#include <openssl/modes.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000194
Felix Laurie von Massenbachb5419b82014-05-26 21:57:25 +0100195#include "../crypto/bn/bn_lcl.h"
196
Dr. Stephen Hensonebaa2cf2010-03-03 19:56:34 +0000197#ifndef HAVE_FORK
198# if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_NETWARE)
199# define HAVE_FORK 0
200# else
201# define HAVE_FORK 1
202# endif
203#endif
204
205#if HAVE_FORK
206#undef NO_FORK
Dr. Stephen Hensonb318cfb2009-08-10 15:30:40 +0000207#else
Dr. Stephen Hensonebaa2cf2010-03-03 19:56:34 +0000208#define NO_FORK
Dr. Stephen Henson77c7f172009-08-10 15:52:49 +0000209#endif
Richard Levitte66d3e742001-10-25 16:08:17 +0000210
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000211#undef BUFSIZE
Richard Levitte563cd0f2004-06-28 16:32:12 +0000212#define BUFSIZE ((long)1024*8+1)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000213int run=0;
214
Ben Laurie0e211562001-10-25 14:27:17 +0000215static int mr=0;
216static int usertime=1;
Richard Levitte7876e442001-09-27 15:43:55 +0000217
Ben Laurie0e211562001-10-25 14:27:17 +0000218static double Time_F(int s);
Ben Laurie646d5692000-11-20 04:14:19 +0000219static void print_message(const char *s,long num,int length);
Felix Laurie von Massenbachb5419b82014-05-26 21:57:25 +0100220static void prime_print_message(const char *s, long num);
Nils Larsch689c6f22005-03-20 23:12:13 +0000221static void pkey_print_message(const char *str, const char *str2,
222 long num, int bits, int sec);
Ben Laurie0e211562001-10-25 14:27:17 +0000223static void print_result(int alg,int run_no,int count,double time_used);
Felix Laurie von Massenbachb3596422014-05-27 00:33:42 +0100224static void prime_print_result(int alg, int count, double time_used);
Dr. Stephen Hensonb318cfb2009-08-10 15:30:40 +0000225#ifndef NO_FORK
Ben Laurie0e211562001-10-25 14:27:17 +0000226static int do_multi(int multi);
Richard Levitte66d3e742001-10-25 16:08:17 +0000227#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000228
Andy Polyakov6acb4ff2010-07-09 14:10:51 +0000229#define ALGOR_NUM 30
Ben Laurie0e211562001-10-25 14:27:17 +0000230#define SIZE_NUM 5
Felix Laurie von Massenbachb5419b82014-05-26 21:57:25 +0100231#define PRIME_NUM 2
Ben Laurie0e211562001-10-25 14:27:17 +0000232#define RSA_NUM 4
233#define DSA_NUM 3
Bodo Möllere172d602002-08-09 08:43:04 +0000234
Bodo Möller5c6bf032002-10-28 13:23:24 +0000235#define EC_NUM 16
Bodo Möllere172d602002-08-09 08:43:04 +0000236#define MAX_ECDH_SIZE 256
237
Ben Laurie0e211562001-10-25 14:27:17 +0000238static const char *names[ALGOR_NUM]={
239 "md2","mdc2","md4","md5","hmac(md5)","sha1","rmd160","rc4",
Bodo Möller96afc1c2007-04-23 23:48:59 +0000240 "des cbc","des ede3","idea cbc","seed cbc",
Richard Levitteba1b8882002-01-02 16:57:57 +0000241 "rc2 cbc","rc5-32/12 cbc","blowfish cbc","cast cbc",
Bodo Möllerf3dea9a2006-06-09 15:44:59 +0000242 "aes-128 cbc","aes-192 cbc","aes-256 cbc",
243 "camellia-128 cbc","camellia-192 cbc","camellia-256 cbc",
Ben Laurie5f09d0e2007-05-13 12:57:59 +0000244 "evp","sha256","sha512","whirlpool",
Andy Polyakov6acb4ff2010-07-09 14:10:51 +0000245 "aes-128 ige","aes-192 ige","aes-256 ige","ghash" };
Ben Laurie0e211562001-10-25 14:27:17 +0000246static double results[ALGOR_NUM][SIZE_NUM];
Richard Levitteba1b8882002-01-02 16:57:57 +0000247static int lengths[SIZE_NUM]={16,64,256,1024,8*1024};
Felix Laurie von Massenbachb5419b82014-05-26 21:57:25 +0100248static const char *prime_names[PRIME_NUM]={
249 "prime trial division", "prime coprime" };
Dr. Stephen Henson17ebc102010-02-02 13:35:27 +0000250#ifndef OPENSSL_NO_RSA
Ben Laurie0e211562001-10-25 14:27:17 +0000251static double rsa_results[RSA_NUM][2];
Dr. Stephen Henson17ebc102010-02-02 13:35:27 +0000252#endif
253#ifndef OPENSSL_NO_DSA
Ben Laurie0e211562001-10-25 14:27:17 +0000254static double dsa_results[DSA_NUM][2];
Dr. Stephen Henson17ebc102010-02-02 13:35:27 +0000255#endif
Nils Larsch3eeaab42005-07-16 12:37:36 +0000256#ifndef OPENSSL_NO_ECDSA
Bodo Möllere172d602002-08-09 08:43:04 +0000257static double ecdsa_results[EC_NUM][2];
Nils Larsch3eeaab42005-07-16 12:37:36 +0000258#endif
259#ifndef OPENSSL_NO_ECDH
Bodo Möllere172d602002-08-09 08:43:04 +0000260static double ecdh_results[EC_NUM][1];
Nils Larsch3eeaab42005-07-16 12:37:36 +0000261#endif
Bodo Möllere172d602002-08-09 08:43:04 +0000262
Nils Larsch3eeaab42005-07-16 12:37:36 +0000263#if defined(OPENSSL_NO_DSA) && !(defined(OPENSSL_NO_ECDSA) && defined(OPENSSL_NO_ECDH))
264static const char rnd_seed[] = "string to make the random number generator think it has entropy";
265static int rnd_fake = 0;
266#endif
Ben Laurie0e211562001-10-25 14:27:17 +0000267
Dr. Stephen Hensonb83eddc2001-11-06 13:40:27 +0000268#ifdef SIGALRM
269#if defined(__STDC__) || defined(sgi) || defined(_AIX)
270#define SIGRETTYPE void
271#else
272#define SIGRETTYPE int
273#endif
274
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000275static SIGRETTYPE sig_done(int sig);
Ulf Möller6b691a51999-04-19 21:31:43 +0000276static SIGRETTYPE sig_done(int sig)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000277 {
278 signal(SIGALRM,sig_done);
279 run=0;
280#ifdef LINT
281 sig=sig;
282#endif
283 }
284#endif
285
286#define START 0
287#define STOP 1
288
Andy Polyakov0a39d8f2005-11-06 11:40:59 +0000289#if defined(_WIN32)
Richard Levitte4d8743f2003-11-28 13:10:58 +0000290
Andy Polyakovbdba4592011-12-15 22:30:03 +0000291#if !defined(SIGALRM)
292# define SIGALRM
293#endif
Andy Polyakov0a39d8f2005-11-06 11:40:59 +0000294static unsigned int lapse,schlock;
Andy Polyakovbdba4592011-12-15 22:30:03 +0000295static void alarm_win32(unsigned int secs) { lapse = secs*1000; }
296#define alarm alarm_win32
Andy Polyakov0a39d8f2005-11-06 11:40:59 +0000297
298static DWORD WINAPI sleepy(VOID *arg)
299 {
300 schlock = 1;
301 Sleep(lapse);
302 run = 0;
303 return 0;
304 }
305
Richard Levitte4d8743f2003-11-28 13:10:58 +0000306static double Time_F(int s)
307 {
Andy Polyakovd582c982010-01-17 17:31:38 +0000308 double ret;
309 static HANDLE thr;
310
Andy Polyakov0a39d8f2005-11-06 11:40:59 +0000311 if (s == START)
312 {
Andy Polyakov0a39d8f2005-11-06 11:40:59 +0000313 schlock = 0;
314 thr = CreateThread(NULL,4096,sleepy,NULL,0,NULL);
315 if (thr==NULL)
316 {
317 DWORD ret=GetLastError();
318 BIO_printf(bio_err,"unable to CreateThread (%d)",ret);
319 ExitProcess(ret);
320 }
Andy Polyakov0a39d8f2005-11-06 11:40:59 +0000321 while (!schlock) Sleep(0); /* scheduler spinlock */
Andy Polyakovd582c982010-01-17 17:31:38 +0000322 ret = app_tminterval(s,usertime);
323 }
324 else
325 {
326 ret = app_tminterval(s,usertime);
327 if (run) TerminateThread(thr,0);
328 CloseHandle(thr);
Andy Polyakov0a39d8f2005-11-06 11:40:59 +0000329 }
Richard Levitte4d8743f2003-11-28 13:10:58 +0000330
Andy Polyakovd582c982010-01-17 17:31:38 +0000331 return ret;
Andy Polyakov0a39d8f2005-11-06 11:40:59 +0000332 }
Richard Levitte4d8743f2003-11-28 13:10:58 +0000333#else
334
Ben Laurie0e211562001-10-25 14:27:17 +0000335static double Time_F(int s)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000336 {
Andy Polyakovd582c982010-01-17 17:31:38 +0000337 double ret = app_tminterval(s,usertime);
338 if (s == STOP) alarm(0);
339 return ret;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000340 }
Andy Polyakov0a39d8f2005-11-06 11:40:59 +0000341#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000342
Bodo Möller176f31d2003-02-28 15:37:10 +0000343
Nils Larsch3eeaab42005-07-16 12:37:36 +0000344#ifndef OPENSSL_NO_ECDH
Bodo Möller176f31d2003-02-28 15:37:10 +0000345static const int KDF1_SHA1_len = 20;
Nils Larsch965a1cb2005-04-23 10:11:16 +0000346static void *KDF1_SHA1(const void *in, size_t inlen, void *out, size_t *outlen)
Bodo Möller176f31d2003-02-28 15:37:10 +0000347 {
348#ifndef OPENSSL_NO_SHA
Nils Larsch965a1cb2005-04-23 10:11:16 +0000349 if (*outlen < SHA_DIGEST_LENGTH)
Bodo Möller176f31d2003-02-28 15:37:10 +0000350 return NULL;
Nils Larsch965a1cb2005-04-23 10:11:16 +0000351 else
352 *outlen = SHA_DIGEST_LENGTH;
Bodo Möller176f31d2003-02-28 15:37:10 +0000353 return SHA1(in, inlen, out);
354#else
355 return NULL;
Nils Larsch3eeaab42005-07-16 12:37:36 +0000356#endif /* OPENSSL_NO_SHA */
Bodo Möller176f31d2003-02-28 15:37:10 +0000357 }
Nils Larsch3eeaab42005-07-16 12:37:36 +0000358#endif /* OPENSSL_NO_ECDH */
Bodo Möller176f31d2003-02-28 15:37:10 +0000359
360
Ralf S. Engelschall667ac4e2000-02-11 09:47:18 +0000361int MAIN(int, char **);
362
Ulf Möller6b691a51999-04-19 21:31:43 +0000363int MAIN(int argc, char **argv)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000364 {
365 unsigned char *buf=NULL,*buf2=NULL;
Ben Laurie18c77bf1999-10-03 18:09:45 +0000366 int mret=1;
Bodo Mölleraf28dd62002-03-18 13:10:45 +0000367 long count=0,save_count=0;
Ben Laurie18c77bf1999-10-03 18:09:45 +0000368 int i,j,k;
Bodo Mölleraf28dd62002-03-18 13:10:45 +0000369#if !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_DSA)
370 long rsa_count;
371#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000372#ifndef OPENSSL_NO_RSA
Richard Levitte5614bb92000-09-14 11:09:03 +0000373 unsigned rsa_num;
Ulf Möllerb2293b12001-01-09 21:39:16 +0000374#endif
Richard Levitte83c40e72001-11-15 20:19:40 +0000375 unsigned char md[EVP_MAX_MD_SIZE];
Richard Levittecf1b7d92001-02-19 16:06:34 +0000376#ifndef OPENSSL_NO_MD2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000377 unsigned char md2[MD2_DIGEST_LENGTH];
378#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000379#ifndef OPENSSL_NO_MDC2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000380 unsigned char mdc2[MDC2_DIGEST_LENGTH];
381#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000382#ifndef OPENSSL_NO_MD4
Richard Levitte30094582000-08-14 14:05:53 +0000383 unsigned char md4[MD4_DIGEST_LENGTH];
384#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000385#ifndef OPENSSL_NO_MD5
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000386 unsigned char md5[MD5_DIGEST_LENGTH];
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000387 unsigned char hmac[MD5_DIGEST_LENGTH];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000388#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000389#ifndef OPENSSL_NO_SHA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000390 unsigned char sha[SHA_DIGEST_LENGTH];
Andy Polyakov4b235062005-05-22 08:55:15 +0000391#ifndef OPENSSL_NO_SHA256
Andy Polyakov46ceb152004-05-20 21:49:38 +0000392 unsigned char sha256[SHA256_DIGEST_LENGTH];
Andy Polyakov4b235062005-05-22 08:55:15 +0000393#endif
394#ifndef OPENSSL_NO_SHA512
Andy Polyakov46ceb152004-05-20 21:49:38 +0000395 unsigned char sha512[SHA512_DIGEST_LENGTH];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000396#endif
Andy Polyakov4b235062005-05-22 08:55:15 +0000397#endif
Nils Larschae93dc132006-12-01 21:42:55 +0000398#ifndef OPENSSL_NO_WHIRLPOOL
399 unsigned char whirlpool[WHIRLPOOL_DIGEST_LENGTH];
400#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000401#ifndef OPENSSL_NO_RIPEMD
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000402 unsigned char rmd160[RIPEMD160_DIGEST_LENGTH];
403#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000404#ifndef OPENSSL_NO_RC4
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000405 RC4_KEY rc4_ks;
406#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000407#ifndef OPENSSL_NO_RC5
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000408 RC5_32_KEY rc5_ks;
409#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000410#ifndef OPENSSL_NO_RC2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000411 RC2_KEY rc2_ks;
412#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000413#ifndef OPENSSL_NO_IDEA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000414 IDEA_KEY_SCHEDULE idea_ks;
415#endif
Bodo Möller96afc1c2007-04-23 23:48:59 +0000416#ifndef OPENSSL_NO_SEED
417 SEED_KEY_SCHEDULE seed_ks;
418#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000419#ifndef OPENSSL_NO_BF
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000420 BF_KEY bf_ks;
421#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000422#ifndef OPENSSL_NO_CAST
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000423 CAST_KEY cast_ks;
424#endif
Richard Levitteba1b8882002-01-02 16:57:57 +0000425 static const unsigned char key16[16]=
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000426 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
427 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
Nils Larsch63d74072005-05-31 18:22:53 +0000428#ifndef OPENSSL_NO_AES
Richard Levitteba1b8882002-01-02 16:57:57 +0000429 static const unsigned char key24[24]=
430 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
431 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
432 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
433 static const unsigned char key32[32]=
434 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
435 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
436 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,
437 0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,0x56};
Nils Larsch63d74072005-05-31 18:22:53 +0000438#endif
Bodo Möllerf3dea9a2006-06-09 15:44:59 +0000439#ifndef OPENSSL_NO_CAMELLIA
440 static const unsigned char ckey24[24]=
441 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
442 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
443 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
444 static const unsigned char ckey32[32]=
445 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
446 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,
447 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,
448 0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,0x56};
449#endif
Richard Levitteba1b8882002-01-02 16:57:57 +0000450#ifndef OPENSSL_NO_AES
451#define MAX_BLOCK_SIZE 128
452#else
453#define MAX_BLOCK_SIZE 64
454#endif
455 unsigned char DES_iv[8];
Ben Lauriefdf35582007-11-16 14:41:09 +0000456 unsigned char iv[2*MAX_BLOCK_SIZE/8];
Richard Levittecf1b7d92001-02-19 16:06:34 +0000457#ifndef OPENSSL_NO_DES
Richard Levitte125cc352002-03-22 02:42:57 +0000458 static DES_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};
459 static DES_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
460 static DES_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
Richard Levittec2e4f172001-10-24 21:21:12 +0000461 DES_key_schedule sch;
462 DES_key_schedule sch2;
463 DES_key_schedule sch3;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000464#endif
Richard Levitteba1b8882002-01-02 16:57:57 +0000465#ifndef OPENSSL_NO_AES
466 AES_KEY aes_ks1, aes_ks2, aes_ks3;
467#endif
Bodo Möllerf3dea9a2006-06-09 15:44:59 +0000468#ifndef OPENSSL_NO_CAMELLIA
469 CAMELLIA_KEY camellia_ks1, camellia_ks2, camellia_ks3;
470#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000471#define D_MD2 0
472#define D_MDC2 1
Richard Levitte30094582000-08-14 14:05:53 +0000473#define D_MD4 2
474#define D_MD5 3
475#define D_HMAC 4
476#define D_SHA1 5
477#define D_RMD160 6
478#define D_RC4 7
479#define D_CBC_DES 8
480#define D_EDE3_DES 9
481#define D_CBC_IDEA 10
Bodo Möller96afc1c2007-04-23 23:48:59 +0000482#define D_CBC_SEED 11
483#define D_CBC_RC2 12
484#define D_CBC_RC5 13
485#define D_CBC_BF 14
486#define D_CBC_CAST 15
487#define D_CBC_128_AES 16
488#define D_CBC_192_AES 17
489#define D_CBC_256_AES 18
490#define D_CBC_128_CML 19
491#define D_CBC_192_CML 20
492#define D_CBC_256_CML 21
493#define D_EVP 22
494#define D_SHA256 23
495#define D_SHA512 24
496#define D_WHIRLPOOL 25
Ben Laurie5f09d0e2007-05-13 12:57:59 +0000497#define D_IGE_128_AES 26
498#define D_IGE_192_AES 27
499#define D_IGE_256_AES 28
Ben Laurie71fa4512012-06-03 22:00:21 +0000500#define D_GHASH 29
Richard Levitteba1b8882002-01-02 16:57:57 +0000501 double d=0.0;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000502 long c[ALGOR_NUM][SIZE_NUM];
Felix Laurie von Massenbachb5419b82014-05-26 21:57:25 +0100503
504#define D_PRIME_TRIAL_DIVISION 0
505#define D_PRIME_COPRIME 1
506 long prime_c[PRIME_NUM];
507
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000508#define R_DSA_512 0
509#define R_DSA_1024 1
510#define R_DSA_2048 2
511#define R_RSA_512 0
512#define R_RSA_1024 1
513#define R_RSA_2048 2
514#define R_RSA_4096 3
Bodo Möllere172d602002-08-09 08:43:04 +0000515
516#define R_EC_P160 0
Bodo Möller5c6bf032002-10-28 13:23:24 +0000517#define R_EC_P192 1
518#define R_EC_P224 2
519#define R_EC_P256 3
520#define R_EC_P384 4
521#define R_EC_P521 5
522#define R_EC_K163 6
523#define R_EC_K233 7
524#define R_EC_K283 8
525#define R_EC_K409 9
526#define R_EC_K571 10
527#define R_EC_B163 11
528#define R_EC_B233 12
529#define R_EC_B283 13
530#define R_EC_B409 14
531#define R_EC_B571 15
Bodo Möllere172d602002-08-09 08:43:04 +0000532
Richard Levittecf1b7d92001-02-19 16:06:34 +0000533#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000534 RSA *rsa_key[RSA_NUM];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000535 long rsa_c[RSA_NUM][2];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000536 static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,4096};
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000537 static unsigned char *rsa_data[RSA_NUM]=
538 {test512,test1024,test2048,test4096};
539 static int rsa_data_length[RSA_NUM]={
540 sizeof(test512),sizeof(test1024),
541 sizeof(test2048),sizeof(test4096)};
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000542#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000543#ifndef OPENSSL_NO_DSA
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000544 DSA *dsa_key[DSA_NUM];
545 long dsa_c[DSA_NUM][2];
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000546 static unsigned int dsa_bits[DSA_NUM]={512,1024,2048};
547#endif
Bodo Möllere172d602002-08-09 08:43:04 +0000548#ifndef OPENSSL_NO_EC
549 /* We only test over the following curves as they are representative,
550 * To add tests over more curves, simply add the curve NID
551 * and curve name to the following arrays and increase the
552 * EC_NUM value accordingly.
553 */
554 static unsigned int test_curves[EC_NUM] =
555 {
556 /* Prime Curves */
Bodo Möller7eb18f12002-08-15 09:21:31 +0000557 NID_secp160r1,
Bodo Möller5c6bf032002-10-28 13:23:24 +0000558 NID_X9_62_prime192v1,
Bodo Möller7eb18f12002-08-15 09:21:31 +0000559 NID_secp224r1,
560 NID_X9_62_prime256v1,
561 NID_secp384r1,
562 NID_secp521r1,
Bodo Möllere172d602002-08-09 08:43:04 +0000563 /* Binary Curves */
Bodo Möller7eb18f12002-08-15 09:21:31 +0000564 NID_sect163k1,
565 NID_sect233k1,
566 NID_sect283k1,
567 NID_sect409k1,
568 NID_sect571k1,
569 NID_sect163r2,
570 NID_sect233r1,
571 NID_sect283r1,
572 NID_sect409r1,
573 NID_sect571r1
Bodo Möllere172d602002-08-09 08:43:04 +0000574 };
Nils Larsch689c6f22005-03-20 23:12:13 +0000575 static const char * test_curves_names[EC_NUM] =
Bodo Möllere172d602002-08-09 08:43:04 +0000576 {
577 /* Prime Curves */
578 "secp160r1",
Bodo Möller5c6bf032002-10-28 13:23:24 +0000579 "nistp192",
Bodo Möllere172d602002-08-09 08:43:04 +0000580 "nistp224",
581 "nistp256",
582 "nistp384",
583 "nistp521",
584 /* Binary Curves */
585 "nistk163",
586 "nistk233",
587 "nistk283",
588 "nistk409",
589 "nistk571",
590 "nistb163",
591 "nistb233",
592 "nistb283",
593 "nistb409",
594 "nistb571"
595 };
596 static int test_curves_bits[EC_NUM] =
597 {
Bodo Möller5c6bf032002-10-28 13:23:24 +0000598 160, 192, 224, 256, 384, 521,
Bodo Möllere172d602002-08-09 08:43:04 +0000599 163, 233, 283, 409, 571,
600 163, 233, 283, 409, 571
601 };
602
603#endif
604
605#ifndef OPENSSL_NO_ECDSA
Nils Larsch689c6f22005-03-20 23:12:13 +0000606 unsigned char ecdsasig[256];
607 unsigned int ecdsasiglen;
608 EC_KEY *ecdsa[EC_NUM];
609 long ecdsa_c[EC_NUM][2];
Bodo Möllere172d602002-08-09 08:43:04 +0000610#endif
611
612#ifndef OPENSSL_NO_ECDH
Nils Larsch689c6f22005-03-20 23:12:13 +0000613 EC_KEY *ecdh_a[EC_NUM], *ecdh_b[EC_NUM];
614 unsigned char secret_a[MAX_ECDH_SIZE], secret_b[MAX_ECDH_SIZE];
615 int secret_size_a, secret_size_b;
616 int ecdh_checks = 0;
617 int secret_idx = 0;
618 long ecdh_c[EC_NUM][2];
Bodo Möllere172d602002-08-09 08:43:04 +0000619#endif
620
Felix Laurie von Massenbachb5419b82014-05-26 21:57:25 +0100621 int prime_doit[PRIME_NUM];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000622 int rsa_doit[RSA_NUM];
623 int dsa_doit[DSA_NUM];
Nils Larsch3eeaab42005-07-16 12:37:36 +0000624#ifndef OPENSSL_NO_ECDSA
Bodo Möllere172d602002-08-09 08:43:04 +0000625 int ecdsa_doit[EC_NUM];
Nils Larsch3eeaab42005-07-16 12:37:36 +0000626#endif
627#ifndef OPENSSL_NO_ECDH
Bodo Möllere172d602002-08-09 08:43:04 +0000628 int ecdh_doit[EC_NUM];
Nils Larsch3eeaab42005-07-16 12:37:36 +0000629#endif
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000630 int doit[ALGOR_NUM];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000631 int pr_header=0;
Richard Levitte83c40e72001-11-15 20:19:40 +0000632 const EVP_CIPHER *evp_cipher=NULL;
633 const EVP_MD *evp_md=NULL;
Ben Laurie3f37e732001-07-08 12:14:41 +0000634 int decrypt=0;
Dr. Stephen Hensonb318cfb2009-08-10 15:30:40 +0000635#ifndef NO_FORK
Ben Laurie0e211562001-10-25 14:27:17 +0000636 int multi=0;
Richard Levitte66d3e742001-10-25 16:08:17 +0000637#endif
Richard Levitte4e74239c2000-06-30 17:16:46 +0000638
639#ifndef TIMES
640 usertime=-1;
641#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000642
643 apps_startup();
Bodo Möller396f6311999-09-08 21:58:13 +0000644 memset(results, 0, sizeof(results));
Richard Levittecf1b7d92001-02-19 16:06:34 +0000645#ifndef OPENSSL_NO_DSA
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000646 memset(dsa_key,0,sizeof(dsa_key));
647#endif
Bodo Möllere172d602002-08-09 08:43:04 +0000648#ifndef OPENSSL_NO_ECDSA
649 for (i=0; i<EC_NUM; i++) ecdsa[i] = NULL;
650#endif
651#ifndef OPENSSL_NO_ECDH
652 for (i=0; i<EC_NUM; i++)
653 {
654 ecdh_a[i] = NULL;
655 ecdh_b[i] = NULL;
656 }
657#endif
658
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000659
660 if (bio_err == NULL)
661 if ((bio_err=BIO_new(BIO_s_file())) != NULL)
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000662 BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000663
Dr. Stephen Henson3647bee2002-02-22 14:01:21 +0000664 if (!load_config(bio_err, NULL))
665 goto end;
666
Richard Levittecf1b7d92001-02-19 16:06:34 +0000667#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000668 memset(rsa_key,0,sizeof(rsa_key));
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000669 for (i=0; i<RSA_NUM; i++)
670 rsa_key[i]=NULL;
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000671#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000672
Richard Levitte26a3a482000-06-01 22:19:21 +0000673 if ((buf=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000674 {
675 BIO_printf(bio_err,"out of memory\n");
676 goto end;
677 }
Richard Levitte26a3a482000-06-01 22:19:21 +0000678 if ((buf2=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000679 {
680 BIO_printf(bio_err,"out of memory\n");
681 goto end;
682 }
683
684 memset(c,0,sizeof(c));
Richard Levitteba1b8882002-01-02 16:57:57 +0000685 memset(DES_iv,0,sizeof(DES_iv));
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000686 memset(iv,0,sizeof(iv));
687
688 for (i=0; i<ALGOR_NUM; i++)
689 doit[i]=0;
690 for (i=0; i<RSA_NUM; i++)
691 rsa_doit[i]=0;
692 for (i=0; i<DSA_NUM; i++)
693 dsa_doit[i]=0;
Bodo Möllere172d602002-08-09 08:43:04 +0000694#ifndef OPENSSL_NO_ECDSA
695 for (i=0; i<EC_NUM; i++)
696 ecdsa_doit[i]=0;
697#endif
698#ifndef OPENSSL_NO_ECDH
699 for (i=0; i<EC_NUM; i++)
700 ecdh_doit[i]=0;
701#endif
702
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000703
704 j=0;
705 argc--;
706 argv++;
707 while (argc)
708 {
Richard Levitte4e74239c2000-06-30 17:16:46 +0000709 if ((argc > 0) && (strcmp(*argv,"-elapsed") == 0))
Richard Levitte7876e442001-09-27 15:43:55 +0000710 {
Richard Levitte4e74239c2000-06-30 17:16:46 +0000711 usertime = 0;
Richard Levitte7876e442001-09-27 15:43:55 +0000712 j--; /* Otherwise, -elapsed gets confused with
713 an algorithm. */
714 }
Ben Laurie646d5692000-11-20 04:14:19 +0000715 else if ((argc > 0) && (strcmp(*argv,"-evp") == 0))
716 {
717 argc--;
718 argv++;
719 if(argc == 0)
720 {
721 BIO_printf(bio_err,"no EVP given\n");
722 goto end;
723 }
Richard Levitte83c40e72001-11-15 20:19:40 +0000724 evp_cipher=EVP_get_cipherbyname(*argv);
725 if(!evp_cipher)
Ben Laurie646d5692000-11-20 04:14:19 +0000726 {
Richard Levitte83c40e72001-11-15 20:19:40 +0000727 evp_md=EVP_get_digestbyname(*argv);
728 }
729 if(!evp_cipher && !evp_md)
730 {
731 BIO_printf(bio_err,"%s is an unknown cipher or digest\n",*argv);
Ben Laurie646d5692000-11-20 04:14:19 +0000732 goto end;
733 }
734 doit[D_EVP]=1;
735 }
Richard Levitte7876e442001-09-27 15:43:55 +0000736 else if (argc > 0 && !strcmp(*argv,"-decrypt"))
737 {
Ben Laurie3f37e732001-07-08 12:14:41 +0000738 decrypt=1;
Richard Levitte7876e442001-09-27 15:43:55 +0000739 j--; /* Otherwise, -elapsed gets confused with
740 an algorithm. */
741 }
Richard Levitte0b13e9f2003-01-30 17:39:26 +0000742#ifndef OPENSSL_NO_ENGINE
Richard Levitte7876e442001-09-27 15:43:55 +0000743 else if ((argc > 0) && (strcmp(*argv,"-engine") == 0))
Richard Levitte5270e702000-10-26 21:07:28 +0000744 {
745 argc--;
746 argv++;
747 if(argc == 0)
748 {
749 BIO_printf(bio_err,"no engine given\n");
750 goto end;
751 }
Ben Lauriec8bbd982010-06-12 14:13:23 +0000752 setup_engine(bio_err, *argv, 0);
Richard Levitte531d6302001-06-18 06:22:33 +0000753 /* j will be increased again further down. We just
Richard Levitte5270e702000-10-26 21:07:28 +0000754 don't want speed to confuse an engine with an
755 algorithm, especially when none is given (which
756 means all of them should be run) */
757 j--;
758 }
Richard Levitte0b13e9f2003-01-30 17:39:26 +0000759#endif
Dr. Stephen Hensonb318cfb2009-08-10 15:30:40 +0000760#ifndef NO_FORK
Ben Laurie0e211562001-10-25 14:27:17 +0000761 else if ((argc > 0) && (strcmp(*argv,"-multi") == 0))
762 {
763 argc--;
764 argv++;
765 if(argc == 0)
766 {
767 BIO_printf(bio_err,"no multi count given\n");
768 goto end;
769 }
770 multi=atoi(argv[0]);
771 if(multi <= 0)
772 {
773 BIO_printf(bio_err,"bad multi count\n");
774 goto end;
775 }
Richard Levitte66d3e742001-10-25 16:08:17 +0000776 j--; /* Otherwise, -mr gets confused with
777 an algorithm. */
Ben Laurie0e211562001-10-25 14:27:17 +0000778 }
Richard Levitte66d3e742001-10-25 16:08:17 +0000779#endif
Ben Laurie0e211562001-10-25 14:27:17 +0000780 else if (argc > 0 && !strcmp(*argv,"-mr"))
781 {
782 mr=1;
783 j--; /* Otherwise, -mr gets confused with
784 an algorithm. */
785 }
Richard Levitte5270e702000-10-26 21:07:28 +0000786 else
Richard Levittecf1b7d92001-02-19 16:06:34 +0000787#ifndef OPENSSL_NO_MD2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000788 if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1;
789 else
790#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000791#ifndef OPENSSL_NO_MDC2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000792 if (strcmp(*argv,"mdc2") == 0) doit[D_MDC2]=1;
793 else
794#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000795#ifndef OPENSSL_NO_MD4
Richard Levitte30094582000-08-14 14:05:53 +0000796 if (strcmp(*argv,"md4") == 0) doit[D_MD4]=1;
797 else
798#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000799#ifndef OPENSSL_NO_MD5
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000800 if (strcmp(*argv,"md5") == 0) doit[D_MD5]=1;
801 else
802#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000803#ifndef OPENSSL_NO_MD5
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000804 if (strcmp(*argv,"hmac") == 0) doit[D_HMAC]=1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000805 else
806#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000807#ifndef OPENSSL_NO_SHA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000808 if (strcmp(*argv,"sha1") == 0) doit[D_SHA1]=1;
809 else
Andy Polyakov46ceb152004-05-20 21:49:38 +0000810 if (strcmp(*argv,"sha") == 0) doit[D_SHA1]=1,
811 doit[D_SHA256]=1,
812 doit[D_SHA512]=1;
813 else
Andy Polyakov4b235062005-05-22 08:55:15 +0000814#ifndef OPENSSL_NO_SHA256
Andy Polyakov63ba7e22004-05-31 12:40:22 +0000815 if (strcmp(*argv,"sha256") == 0) doit[D_SHA256]=1;
Andy Polyakov46ceb152004-05-20 21:49:38 +0000816 else
Andy Polyakov4b235062005-05-22 08:55:15 +0000817#endif
818#ifndef OPENSSL_NO_SHA512
Andy Polyakov63ba7e22004-05-31 12:40:22 +0000819 if (strcmp(*argv,"sha512") == 0) doit[D_SHA512]=1;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000820 else
821#endif
Andy Polyakov4b235062005-05-22 08:55:15 +0000822#endif
Nils Larschae93dc132006-12-01 21:42:55 +0000823#ifndef OPENSSL_NO_WHIRLPOOL
824 if (strcmp(*argv,"whirlpool") == 0) doit[D_WHIRLPOOL]=1;
825 else
826#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000827#ifndef OPENSSL_NO_RIPEMD
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000828 if (strcmp(*argv,"ripemd") == 0) doit[D_RMD160]=1;
829 else
830 if (strcmp(*argv,"rmd160") == 0) doit[D_RMD160]=1;
831 else
832 if (strcmp(*argv,"ripemd160") == 0) doit[D_RMD160]=1;
833 else
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000834#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000835#ifndef OPENSSL_NO_RC4
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000836 if (strcmp(*argv,"rc4") == 0) doit[D_RC4]=1;
837 else
838#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000839#ifndef OPENSSL_NO_DES
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000840 if (strcmp(*argv,"des-cbc") == 0) doit[D_CBC_DES]=1;
841 else if (strcmp(*argv,"des-ede3") == 0) doit[D_EDE3_DES]=1;
842 else
843#endif
Richard Levitteba1b8882002-01-02 16:57:57 +0000844#ifndef OPENSSL_NO_AES
845 if (strcmp(*argv,"aes-128-cbc") == 0) doit[D_CBC_128_AES]=1;
846 else if (strcmp(*argv,"aes-192-cbc") == 0) doit[D_CBC_192_AES]=1;
847 else if (strcmp(*argv,"aes-256-cbc") == 0) doit[D_CBC_256_AES]=1;
Ben Laurie5f09d0e2007-05-13 12:57:59 +0000848 else if (strcmp(*argv,"aes-128-ige") == 0) doit[D_IGE_128_AES]=1;
849 else if (strcmp(*argv,"aes-192-ige") == 0) doit[D_IGE_192_AES]=1;
850 else if (strcmp(*argv,"aes-256-ige") == 0) doit[D_IGE_256_AES]=1;
851 else
Richard Levitteba1b8882002-01-02 16:57:57 +0000852#endif
Bodo Möllerf3dea9a2006-06-09 15:44:59 +0000853#ifndef OPENSSL_NO_CAMELLIA
854 if (strcmp(*argv,"camellia-128-cbc") == 0) doit[D_CBC_128_CML]=1;
855 else if (strcmp(*argv,"camellia-192-cbc") == 0) doit[D_CBC_192_CML]=1;
856 else if (strcmp(*argv,"camellia-256-cbc") == 0) doit[D_CBC_256_CML]=1;
857 else
858#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000859#ifndef OPENSSL_NO_RSA
Richard Levitteccb96432000-11-08 17:51:37 +0000860#if 0 /* was: #ifdef RSAref */
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000861 if (strcmp(*argv,"rsaref") == 0)
862 {
Richard Levitte5270e702000-10-26 21:07:28 +0000863 RSA_set_default_openssl_method(RSA_PKCS1_RSAref());
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000864 j--;
865 }
866 else
867#endif
Dr. Stephen Hensonc1cd88a1999-09-08 18:19:45 +0000868#ifndef RSA_NULL
Paul C. Suttone170a5c1999-01-02 14:42:23 +0000869 if (strcmp(*argv,"openssl") == 0)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000870 {
Geoff Thorpe6dc5d572001-09-25 20:35:01 +0000871 RSA_set_default_method(RSA_PKCS1_SSLeay());
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000872 j--;
873 }
874 else
Dr. Stephen Hensonc1cd88a1999-09-08 18:19:45 +0000875#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000876#endif /* !OPENSSL_NO_RSA */
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000877 if (strcmp(*argv,"dsa512") == 0) dsa_doit[R_DSA_512]=2;
878 else if (strcmp(*argv,"dsa1024") == 0) dsa_doit[R_DSA_1024]=2;
879 else if (strcmp(*argv,"dsa2048") == 0) dsa_doit[R_DSA_2048]=2;
880 else if (strcmp(*argv,"rsa512") == 0) rsa_doit[R_RSA_512]=2;
881 else if (strcmp(*argv,"rsa1024") == 0) rsa_doit[R_RSA_1024]=2;
882 else if (strcmp(*argv,"rsa2048") == 0) rsa_doit[R_RSA_2048]=2;
883 else if (strcmp(*argv,"rsa4096") == 0) rsa_doit[R_RSA_4096]=2;
884 else
Richard Levittecf1b7d92001-02-19 16:06:34 +0000885#ifndef OPENSSL_NO_RC2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000886 if (strcmp(*argv,"rc2-cbc") == 0) doit[D_CBC_RC2]=1;
887 else if (strcmp(*argv,"rc2") == 0) doit[D_CBC_RC2]=1;
888 else
889#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000890#ifndef OPENSSL_NO_RC5
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000891 if (strcmp(*argv,"rc5-cbc") == 0) doit[D_CBC_RC5]=1;
892 else if (strcmp(*argv,"rc5") == 0) doit[D_CBC_RC5]=1;
893 else
894#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000895#ifndef OPENSSL_NO_IDEA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000896 if (strcmp(*argv,"idea-cbc") == 0) doit[D_CBC_IDEA]=1;
897 else if (strcmp(*argv,"idea") == 0) doit[D_CBC_IDEA]=1;
898 else
899#endif
Bodo Möller96afc1c2007-04-23 23:48:59 +0000900#ifndef OPENSSL_NO_SEED
901 if (strcmp(*argv,"seed-cbc") == 0) doit[D_CBC_SEED]=1;
902 else if (strcmp(*argv,"seed") == 0) doit[D_CBC_SEED]=1;
903 else
904#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000905#ifndef OPENSSL_NO_BF
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000906 if (strcmp(*argv,"bf-cbc") == 0) doit[D_CBC_BF]=1;
907 else if (strcmp(*argv,"blowfish") == 0) doit[D_CBC_BF]=1;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000908 else if (strcmp(*argv,"bf") == 0) doit[D_CBC_BF]=1;
909 else
910#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000911#ifndef OPENSSL_NO_CAST
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000912 if (strcmp(*argv,"cast-cbc") == 0) doit[D_CBC_CAST]=1;
913 else if (strcmp(*argv,"cast") == 0) doit[D_CBC_CAST]=1;
914 else if (strcmp(*argv,"cast5") == 0) doit[D_CBC_CAST]=1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000915 else
916#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000917#ifndef OPENSSL_NO_DES
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000918 if (strcmp(*argv,"des") == 0)
919 {
920 doit[D_CBC_DES]=1;
921 doit[D_EDE3_DES]=1;
922 }
923 else
924#endif
Richard Levitteba1b8882002-01-02 16:57:57 +0000925#ifndef OPENSSL_NO_AES
926 if (strcmp(*argv,"aes") == 0)
927 {
928 doit[D_CBC_128_AES]=1;
929 doit[D_CBC_192_AES]=1;
930 doit[D_CBC_256_AES]=1;
931 }
Andy Polyakov6acb4ff2010-07-09 14:10:51 +0000932 else if (strcmp(*argv,"ghash") == 0)
933 {
934 doit[D_GHASH]=1;
935 }
Richard Levitteba1b8882002-01-02 16:57:57 +0000936 else
937#endif
Bodo Möllerf3dea9a2006-06-09 15:44:59 +0000938#ifndef OPENSSL_NO_CAMELLIA
939 if (strcmp(*argv,"camellia") == 0)
940 {
941 doit[D_CBC_128_CML]=1;
942 doit[D_CBC_192_CML]=1;
943 doit[D_CBC_256_CML]=1;
944 }
945 else
946#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000947#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000948 if (strcmp(*argv,"rsa") == 0)
949 {
950 rsa_doit[R_RSA_512]=1;
951 rsa_doit[R_RSA_1024]=1;
952 rsa_doit[R_RSA_2048]=1;
953 rsa_doit[R_RSA_4096]=1;
954 }
955 else
956#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000957#ifndef OPENSSL_NO_DSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000958 if (strcmp(*argv,"dsa") == 0)
959 {
960 dsa_doit[R_DSA_512]=1;
961 dsa_doit[R_DSA_1024]=1;
Lutz Jänickecdb42bc2004-01-08 07:46:37 +0000962 dsa_doit[R_DSA_2048]=1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000963 }
964 else
965#endif
Bodo Möllere172d602002-08-09 08:43:04 +0000966#ifndef OPENSSL_NO_ECDSA
967 if (strcmp(*argv,"ecdsap160") == 0) ecdsa_doit[R_EC_P160]=2;
Nils Larsch7ab2d302005-04-29 15:21:09 +0000968 else if (strcmp(*argv,"ecdsap192") == 0) ecdsa_doit[R_EC_P192]=2;
Bodo Möllere172d602002-08-09 08:43:04 +0000969 else if (strcmp(*argv,"ecdsap224") == 0) ecdsa_doit[R_EC_P224]=2;
970 else if (strcmp(*argv,"ecdsap256") == 0) ecdsa_doit[R_EC_P256]=2;
971 else if (strcmp(*argv,"ecdsap384") == 0) ecdsa_doit[R_EC_P384]=2;
972 else if (strcmp(*argv,"ecdsap521") == 0) ecdsa_doit[R_EC_P521]=2;
973 else if (strcmp(*argv,"ecdsak163") == 0) ecdsa_doit[R_EC_K163]=2;
974 else if (strcmp(*argv,"ecdsak233") == 0) ecdsa_doit[R_EC_K233]=2;
975 else if (strcmp(*argv,"ecdsak283") == 0) ecdsa_doit[R_EC_K283]=2;
976 else if (strcmp(*argv,"ecdsak409") == 0) ecdsa_doit[R_EC_K409]=2;
977 else if (strcmp(*argv,"ecdsak571") == 0) ecdsa_doit[R_EC_K571]=2;
978 else if (strcmp(*argv,"ecdsab163") == 0) ecdsa_doit[R_EC_B163]=2;
979 else if (strcmp(*argv,"ecdsab233") == 0) ecdsa_doit[R_EC_B233]=2;
980 else if (strcmp(*argv,"ecdsab283") == 0) ecdsa_doit[R_EC_B283]=2;
981 else if (strcmp(*argv,"ecdsab409") == 0) ecdsa_doit[R_EC_B409]=2;
982 else if (strcmp(*argv,"ecdsab571") == 0) ecdsa_doit[R_EC_B571]=2;
983 else if (strcmp(*argv,"ecdsa") == 0)
984 {
985 for (i=0; i < EC_NUM; i++)
986 ecdsa_doit[i]=1;
987 }
988 else
989#endif
990#ifndef OPENSSL_NO_ECDH
Felix Laurie von Massenbach8c9336c2014-05-26 21:58:55 +0100991 if (strcmp(*argv,"ecdhp160") == 0) ecdh_doit[R_EC_P160]=2;
Nils Larsch7ab2d302005-04-29 15:21:09 +0000992 else if (strcmp(*argv,"ecdhp192") == 0) ecdh_doit[R_EC_P192]=2;
Bodo Möllere172d602002-08-09 08:43:04 +0000993 else if (strcmp(*argv,"ecdhp224") == 0) ecdh_doit[R_EC_P224]=2;
994 else if (strcmp(*argv,"ecdhp256") == 0) ecdh_doit[R_EC_P256]=2;
995 else if (strcmp(*argv,"ecdhp384") == 0) ecdh_doit[R_EC_P384]=2;
996 else if (strcmp(*argv,"ecdhp521") == 0) ecdh_doit[R_EC_P521]=2;
997 else if (strcmp(*argv,"ecdhk163") == 0) ecdh_doit[R_EC_K163]=2;
998 else if (strcmp(*argv,"ecdhk233") == 0) ecdh_doit[R_EC_K233]=2;
999 else if (strcmp(*argv,"ecdhk283") == 0) ecdh_doit[R_EC_K283]=2;
1000 else if (strcmp(*argv,"ecdhk409") == 0) ecdh_doit[R_EC_K409]=2;
1001 else if (strcmp(*argv,"ecdhk571") == 0) ecdh_doit[R_EC_K571]=2;
1002 else if (strcmp(*argv,"ecdhb163") == 0) ecdh_doit[R_EC_B163]=2;
1003 else if (strcmp(*argv,"ecdhb233") == 0) ecdh_doit[R_EC_B233]=2;
1004 else if (strcmp(*argv,"ecdhb283") == 0) ecdh_doit[R_EC_B283]=2;
1005 else if (strcmp(*argv,"ecdhb409") == 0) ecdh_doit[R_EC_B409]=2;
1006 else if (strcmp(*argv,"ecdhb571") == 0) ecdh_doit[R_EC_B571]=2;
1007 else if (strcmp(*argv,"ecdh") == 0)
1008 {
1009 for (i=0; i < EC_NUM; i++)
1010 ecdh_doit[i]=1;
1011 }
1012 else
1013#endif
Felix Laurie von Massenbachb5419b82014-05-26 21:57:25 +01001014 if (strcmp(*argv,"prime-trial-division") == 0) prime_doit[D_PRIME_TRIAL_DIVISION]=1;
Felix Laurie von Massenbach8c9336c2014-05-26 21:58:55 +01001015 else if (strcmp(*argv,"prime-coprime") == 0) prime_doit[D_PRIME_COPRIME]=1;
Felix Laurie von Massenbachb5419b82014-05-26 21:57:25 +01001016 else
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001017 {
Richard Levitte30094582000-08-14 14:05:53 +00001018 BIO_printf(bio_err,"Error: bad option or value\n");
1019 BIO_printf(bio_err,"\n");
1020 BIO_printf(bio_err,"Available values:\n");
Richard Levittecf1b7d92001-02-19 16:06:34 +00001021#ifndef OPENSSL_NO_MD2
Richard Levitte30094582000-08-14 14:05:53 +00001022 BIO_printf(bio_err,"md2 ");
1023#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001024#ifndef OPENSSL_NO_MDC2
Richard Levitte30094582000-08-14 14:05:53 +00001025 BIO_printf(bio_err,"mdc2 ");
1026#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001027#ifndef OPENSSL_NO_MD4
Richard Levitte30094582000-08-14 14:05:53 +00001028 BIO_printf(bio_err,"md4 ");
1029#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001030#ifndef OPENSSL_NO_MD5
Richard Levitte30094582000-08-14 14:05:53 +00001031 BIO_printf(bio_err,"md5 ");
Richard Levittecf1b7d92001-02-19 16:06:34 +00001032#ifndef OPENSSL_NO_HMAC
Richard Levitte30094582000-08-14 14:05:53 +00001033 BIO_printf(bio_err,"hmac ");
1034#endif
1035#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001036#ifndef OPENSSL_NO_SHA1
Richard Levitte30094582000-08-14 14:05:53 +00001037 BIO_printf(bio_err,"sha1 ");
Andy Polyakov4b235062005-05-22 08:55:15 +00001038#endif
1039#ifndef OPENSSL_NO_SHA256
1040 BIO_printf(bio_err,"sha256 ");
1041#endif
1042#ifndef OPENSSL_NO_SHA512
1043 BIO_printf(bio_err,"sha512 ");
Richard Levitte30094582000-08-14 14:05:53 +00001044#endif
Nils Larschae93dc132006-12-01 21:42:55 +00001045#ifndef OPENSSL_NO_WHIRLPOOL
1046 BIO_printf(bio_err,"whirlpool");
1047#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001048#ifndef OPENSSL_NO_RIPEMD160
Richard Levitte30094582000-08-14 14:05:53 +00001049 BIO_printf(bio_err,"rmd160");
1050#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001051#if !defined(OPENSSL_NO_MD2) || !defined(OPENSSL_NO_MDC2) || \
1052 !defined(OPENSSL_NO_MD4) || !defined(OPENSSL_NO_MD5) || \
Nils Larschae93dc132006-12-01 21:42:55 +00001053 !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160) || \
1054 !defined(OPENSSL_NO_WHIRLPOOL)
Richard Levitte30094582000-08-14 14:05:53 +00001055 BIO_printf(bio_err,"\n");
1056#endif
1057
Richard Levittecf1b7d92001-02-19 16:06:34 +00001058#ifndef OPENSSL_NO_IDEA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001059 BIO_printf(bio_err,"idea-cbc ");
1060#endif
Bodo Möller96afc1c2007-04-23 23:48:59 +00001061#ifndef OPENSSL_NO_SEED
1062 BIO_printf(bio_err,"seed-cbc ");
1063#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001064#ifndef OPENSSL_NO_RC2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001065 BIO_printf(bio_err,"rc2-cbc ");
1066#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001067#ifndef OPENSSL_NO_RC5
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001068 BIO_printf(bio_err,"rc5-cbc ");
1069#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001070#ifndef OPENSSL_NO_BF
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001071 BIO_printf(bio_err,"bf-cbc");
1072#endif
Bodo Möller96afc1c2007-04-23 23:48:59 +00001073#if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || !defined(OPENSSL_NO_RC2) || \
Richard Levittecf1b7d92001-02-19 16:06:34 +00001074 !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_RC5)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001075 BIO_printf(bio_err,"\n");
1076#endif
Richard Levitteba1b8882002-01-02 16:57:57 +00001077#ifndef OPENSSL_NO_DES
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001078 BIO_printf(bio_err,"des-cbc des-ede3 ");
Richard Levitteba1b8882002-01-02 16:57:57 +00001079#endif
1080#ifndef OPENSSL_NO_AES
1081 BIO_printf(bio_err,"aes-128-cbc aes-192-cbc aes-256-cbc ");
Ben Laurie5f09d0e2007-05-13 12:57:59 +00001082 BIO_printf(bio_err,"aes-128-ige aes-192-ige aes-256-ige ");
Richard Levitteba1b8882002-01-02 16:57:57 +00001083#endif
Bodo Möllerf3dea9a2006-06-09 15:44:59 +00001084#ifndef OPENSSL_NO_CAMELLIA
1085 BIO_printf(bio_err,"\n");
1086 BIO_printf(bio_err,"camellia-128-cbc camellia-192-cbc camellia-256-cbc ");
1087#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001088#ifndef OPENSSL_NO_RC4
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001089 BIO_printf(bio_err,"rc4");
1090#endif
Richard Levitte30094582000-08-14 14:05:53 +00001091 BIO_printf(bio_err,"\n");
1092
Richard Levittecf1b7d92001-02-19 16:06:34 +00001093#ifndef OPENSSL_NO_RSA
Richard Levitte30094582000-08-14 14:05:53 +00001094 BIO_printf(bio_err,"rsa512 rsa1024 rsa2048 rsa4096\n");
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001095#endif
Richard Levitte30094582000-08-14 14:05:53 +00001096
Richard Levittecf1b7d92001-02-19 16:06:34 +00001097#ifndef OPENSSL_NO_DSA
Richard Levitte30094582000-08-14 14:05:53 +00001098 BIO_printf(bio_err,"dsa512 dsa1024 dsa2048\n");
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001099#endif
Bodo Möllere172d602002-08-09 08:43:04 +00001100#ifndef OPENSSL_NO_ECDSA
Nils Larsch7ab2d302005-04-29 15:21:09 +00001101 BIO_printf(bio_err,"ecdsap160 ecdsap192 ecdsap224 ecdsap256 ecdsap384 ecdsap521\n");
Bodo Möllere172d602002-08-09 08:43:04 +00001102 BIO_printf(bio_err,"ecdsak163 ecdsak233 ecdsak283 ecdsak409 ecdsak571\n");
1103 BIO_printf(bio_err,"ecdsab163 ecdsab233 ecdsab283 ecdsab409 ecdsab571\n");
1104 BIO_printf(bio_err,"ecdsa\n");
1105#endif
1106#ifndef OPENSSL_NO_ECDH
Nils Larsch7ab2d302005-04-29 15:21:09 +00001107 BIO_printf(bio_err,"ecdhp160 ecdhp192 ecdhp224 ecdhp256 ecdhp384 ecdhp521\n");
Bodo Möllere172d602002-08-09 08:43:04 +00001108 BIO_printf(bio_err,"ecdhk163 ecdhk233 ecdhk283 ecdhk409 ecdhk571\n");
1109 BIO_printf(bio_err,"ecdhb163 ecdhb233 ecdhb283 ecdhb409 ecdhb571\n");
1110 BIO_printf(bio_err,"ecdh\n");
1111#endif
Richard Levitte30094582000-08-14 14:05:53 +00001112
Richard Levittecf1b7d92001-02-19 16:06:34 +00001113#ifndef OPENSSL_NO_IDEA
Richard Levitte30094582000-08-14 14:05:53 +00001114 BIO_printf(bio_err,"idea ");
1115#endif
Bodo Möller96afc1c2007-04-23 23:48:59 +00001116#ifndef OPENSSL_NO_SEED
1117 BIO_printf(bio_err,"seed ");
1118#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001119#ifndef OPENSSL_NO_RC2
Richard Levitte30094582000-08-14 14:05:53 +00001120 BIO_printf(bio_err,"rc2 ");
1121#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001122#ifndef OPENSSL_NO_DES
Richard Levitte30094582000-08-14 14:05:53 +00001123 BIO_printf(bio_err,"des ");
1124#endif
Richard Levitteba1b8882002-01-02 16:57:57 +00001125#ifndef OPENSSL_NO_AES
1126 BIO_printf(bio_err,"aes ");
1127#endif
Bodo Möllerf3dea9a2006-06-09 15:44:59 +00001128#ifndef OPENSSL_NO_CAMELLIA
1129 BIO_printf(bio_err,"camellia ");
1130#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001131#ifndef OPENSSL_NO_RSA
Richard Levitte30094582000-08-14 14:05:53 +00001132 BIO_printf(bio_err,"rsa ");
1133#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001134#ifndef OPENSSL_NO_BF
Richard Levitte30094582000-08-14 14:05:53 +00001135 BIO_printf(bio_err,"blowfish");
1136#endif
Bodo Möller96afc1c2007-04-23 23:48:59 +00001137#if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || \
1138 !defined(OPENSSL_NO_RC2) || !defined(OPENSSL_NO_DES) || \
1139 !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_BF) || \
1140 !defined(OPENSSL_NO_AES) || !defined(OPENSSL_NO_CAMELLIA)
Richard Levitte4e74239c2000-06-30 17:16:46 +00001141 BIO_printf(bio_err,"\n");
Richard Levitte30094582000-08-14 14:05:53 +00001142#endif
Felix Laurie von Massenbachb5419b82014-05-26 21:57:25 +01001143 BIO_printf(bio_err,"prime-trial-division prime-coprime\n");
Richard Levitte30094582000-08-14 14:05:53 +00001144
Richard Levitte4e74239c2000-06-30 17:16:46 +00001145 BIO_printf(bio_err,"\n");
Richard Levitte30094582000-08-14 14:05:53 +00001146 BIO_printf(bio_err,"Available options:\n");
Richard Levitte5d9470f2002-09-25 12:41:59 +00001147#if defined(TIMES) || defined(USE_TOD)
Richard Levitte4e74239c2000-06-30 17:16:46 +00001148 BIO_printf(bio_err,"-elapsed measure time in real time instead of CPU user time.\n");
Richard Levitte3132e192000-08-03 21:54:31 +00001149#endif
Richard Levitte0b13e9f2003-01-30 17:39:26 +00001150#ifndef OPENSSL_NO_ENGINE
Richard Levitte5270e702000-10-26 21:07:28 +00001151 BIO_printf(bio_err,"-engine e use engine e, possibly a hardware device.\n");
Richard Levitte0b13e9f2003-01-30 17:39:26 +00001152#endif
Ben Laurie0e211562001-10-25 14:27:17 +00001153 BIO_printf(bio_err,"-evp e use EVP e.\n");
1154 BIO_printf(bio_err,"-decrypt time decryption instead of encryption (only EVP).\n");
1155 BIO_printf(bio_err,"-mr produce machine readable output.\n");
Dr. Stephen Hensonb318cfb2009-08-10 15:30:40 +00001156#ifndef NO_FORK
Ben Laurie0e211562001-10-25 14:27:17 +00001157 BIO_printf(bio_err,"-multi n run n benchmarks in parallel.\n");
Richard Levitte66d3e742001-10-25 16:08:17 +00001158#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001159 goto end;
1160 }
1161 argc--;
1162 argv++;
1163 j++;
1164 }
1165
Dr. Stephen Hensonb318cfb2009-08-10 15:30:40 +00001166#ifndef NO_FORK
Ben Laurie0e211562001-10-25 14:27:17 +00001167 if(multi && do_multi(multi))
1168 goto show_res;
Richard Levitte66d3e742001-10-25 16:08:17 +00001169#endif
Ben Laurie0e211562001-10-25 14:27:17 +00001170
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001171 if (j == 0)
1172 {
1173 for (i=0; i<ALGOR_NUM; i++)
Bodo Möller53d28672000-11-29 11:04:31 +00001174 {
1175 if (i != D_EVP)
1176 doit[i]=1;
1177 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001178 for (i=0; i<RSA_NUM; i++)
1179 rsa_doit[i]=1;
1180 for (i=0; i<DSA_NUM; i++)
1181 dsa_doit[i]=1;
Dr. Stephen Hensonef236ec2009-04-23 16:32:42 +00001182#ifndef OPENSSL_NO_ECDSA
1183 for (i=0; i<EC_NUM; i++)
1184 ecdsa_doit[i]=1;
1185#endif
1186#ifndef OPENSSL_NO_ECDH
1187 for (i=0; i<EC_NUM; i++)
1188 ecdh_doit[i]=1;
1189#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001190 }
1191 for (i=0; i<ALGOR_NUM; i++)
1192 if (doit[i]) pr_header++;
1193
Ben Laurie0e211562001-10-25 14:27:17 +00001194 if (usertime == 0 && !mr)
Richard Levitte4e74239c2000-06-30 17:16:46 +00001195 BIO_printf(bio_err,"You have chosen to measure elapsed time instead of user CPU time.\n");
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001196
Richard Levittecf1b7d92001-02-19 16:06:34 +00001197#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001198 for (i=0; i<RSA_NUM; i++)
1199 {
Richard Levitte5e4ca422000-11-06 23:16:04 +00001200 const unsigned char *p;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001201
1202 p=rsa_data[i];
1203 rsa_key[i]=d2i_RSAPrivateKey(NULL,&p,rsa_data_length[i]);
1204 if (rsa_key[i] == NULL)
1205 {
1206 BIO_printf(bio_err,"internal error loading RSA key number %d\n",i);
1207 goto end;
1208 }
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001209#if 0
1210 else
1211 {
Ben Laurie0e211562001-10-25 14:27:17 +00001212 BIO_printf(bio_err,mr ? "+RK:%d:"
1213 : "Loaded RSA key, %d bit modulus and e= 0x",
1214 BN_num_bits(rsa_key[i]->n));
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001215 BN_print(bio_err,rsa_key[i]->e);
1216 BIO_printf(bio_err,"\n");
1217 }
1218#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001219 }
1220#endif
1221
Richard Levittecf1b7d92001-02-19 16:06:34 +00001222#ifndef OPENSSL_NO_DSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001223 dsa_key[0]=get_dsa512();
1224 dsa_key[1]=get_dsa1024();
1225 dsa_key[2]=get_dsa2048();
1226#endif
1227
Richard Levittecf1b7d92001-02-19 16:06:34 +00001228#ifndef OPENSSL_NO_DES
Richard Levittec2e4f172001-10-24 21:21:12 +00001229 DES_set_key_unchecked(&key,&sch);
1230 DES_set_key_unchecked(&key2,&sch2);
1231 DES_set_key_unchecked(&key3,&sch3);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001232#endif
Richard Levitteba1b8882002-01-02 16:57:57 +00001233#ifndef OPENSSL_NO_AES
1234 AES_set_encrypt_key(key16,128,&aes_ks1);
1235 AES_set_encrypt_key(key24,192,&aes_ks2);
1236 AES_set_encrypt_key(key32,256,&aes_ks3);
1237#endif
Bodo Möllerf3dea9a2006-06-09 15:44:59 +00001238#ifndef OPENSSL_NO_CAMELLIA
1239 Camellia_set_key(key16,128,&camellia_ks1);
1240 Camellia_set_key(ckey24,192,&camellia_ks2);
1241 Camellia_set_key(ckey32,256,&camellia_ks3);
1242#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001243#ifndef OPENSSL_NO_IDEA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001244 idea_set_encrypt_key(key16,&idea_ks);
1245#endif
Bodo Möller96afc1c2007-04-23 23:48:59 +00001246#ifndef OPENSSL_NO_SEED
1247 SEED_set_key(key16,&seed_ks);
1248#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001249#ifndef OPENSSL_NO_RC4
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001250 RC4_set_key(&rc4_ks,16,key16);
1251#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001252#ifndef OPENSSL_NO_RC2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001253 RC2_set_key(&rc2_ks,16,key16,128);
1254#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001255#ifndef OPENSSL_NO_RC5
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001256 RC5_32_set_key(&rc5_ks,16,key16,12);
1257#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001258#ifndef OPENSSL_NO_BF
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001259 BF_set_key(&bf_ks,16,key16);
1260#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001261#ifndef OPENSSL_NO_CAST
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001262 CAST_set_key(&cast_ks,16,key16);
1263#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001264#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001265 memset(rsa_c,0,sizeof(rsa_c));
Ulf Möllerf5d7a031999-04-27 01:14:46 +00001266#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001267#ifndef SIGALRM
Richard Levittecf1b7d92001-02-19 16:06:34 +00001268#ifndef OPENSSL_NO_DES
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001269 BIO_printf(bio_err,"First we calculate the approximate speed ...\n");
1270 count=10;
1271 do {
Nils Larsch689c6f22005-03-20 23:12:13 +00001272 long it;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001273 count*=2;
Dr. Stephen Hensonb83eddc2001-11-06 13:40:27 +00001274 Time_F(START);
Nils Larsch689c6f22005-03-20 23:12:13 +00001275 for (it=count; it; it--)
Dr. Stephen Henson91f08282010-11-18 13:22:53 +00001276 DES_ecb_encrypt((DES_cblock *)buf,
1277 (DES_cblock *)buf,
Richard Levitte3d90a322001-10-02 11:49:55 +00001278 &sch,DES_ENCRYPT);
Ben Laurie0e211562001-10-25 14:27:17 +00001279 d=Time_F(STOP);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001280 } while (d <3);
Ben Laurie646d5692000-11-20 04:14:19 +00001281 save_count=count;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001282 c[D_MD2][0]=count/10;
1283 c[D_MDC2][0]=count/10;
Richard Levitte30094582000-08-14 14:05:53 +00001284 c[D_MD4][0]=count;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001285 c[D_MD5][0]=count;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001286 c[D_HMAC][0]=count;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001287 c[D_SHA1][0]=count;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001288 c[D_RMD160][0]=count;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001289 c[D_RC4][0]=count*5;
1290 c[D_CBC_DES][0]=count;
1291 c[D_EDE3_DES][0]=count/3;
1292 c[D_CBC_IDEA][0]=count;
Bodo Möller96afc1c2007-04-23 23:48:59 +00001293 c[D_CBC_SEED][0]=count;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001294 c[D_CBC_RC2][0]=count;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001295 c[D_CBC_RC5][0]=count;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001296 c[D_CBC_BF][0]=count;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001297 c[D_CBC_CAST][0]=count;
Lutz Jänicke95de3d22003-11-18 18:27:12 +00001298 c[D_CBC_128_AES][0]=count;
1299 c[D_CBC_192_AES][0]=count;
1300 c[D_CBC_256_AES][0]=count;
Bodo Möllerf3dea9a2006-06-09 15:44:59 +00001301 c[D_CBC_128_CML][0]=count;
1302 c[D_CBC_192_CML][0]=count;
1303 c[D_CBC_256_CML][0]=count;
Andy Polyakov46ceb152004-05-20 21:49:38 +00001304 c[D_SHA256][0]=count;
1305 c[D_SHA512][0]=count;
Nils Larschae93dc132006-12-01 21:42:55 +00001306 c[D_WHIRLPOOL][0]=count;
Ben Laurie5f09d0e2007-05-13 12:57:59 +00001307 c[D_IGE_128_AES][0]=count;
1308 c[D_IGE_192_AES][0]=count;
1309 c[D_IGE_256_AES][0]=count;
Andy Polyakov6acb4ff2010-07-09 14:10:51 +00001310 c[D_GHASH][0]=count;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001311
1312 for (i=1; i<SIZE_NUM; i++)
1313 {
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001314 long l0,l1;
1315
Felix Laurie von Massenbach8c9336c2014-05-26 21:58:55 +01001316 l0=(long)lengths[0];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001317 l1=(long)lengths[i];
Felix Laurie von Massenbach8c9336c2014-05-26 21:58:55 +01001318
1319 c[D_MD2][i]=c[D_MD2][0]*4*l0/l1;
1320 c[D_MDC2][i]=c[D_MDC2][0]*4*l0/l1;
1321 c[D_MD4][i]=c[D_MD4][0]*4*l0/l1;
1322 c[D_MD5][i]=c[D_MD5][0]*4*l0/l1;
1323 c[D_HMAC][i]=c[D_HMAC][0]*4*l0/l1;
1324 c[D_SHA1][i]=c[D_SHA1][0]*4*l0/l1;
1325 c[D_RMD160][i]=c[D_RMD160][0]*4*l0/l1;
1326 c[D_SHA256][i]=c[D_SHA256][0]*4*l0/l1;
1327 c[D_SHA512][i]=c[D_SHA512][0]*4*l0/l1;
1328 c[D_WHIRLPOOL][i]=c[D_WHIRLPOOL][0]*4*l0/l1;
1329
1330 l0=(long)lengths[i-1];
1331
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001332 c[D_RC4][i]=c[D_RC4][i-1]*l0/l1;
1333 c[D_CBC_DES][i]=c[D_CBC_DES][i-1]*l0/l1;
1334 c[D_EDE3_DES][i]=c[D_EDE3_DES][i-1]*l0/l1;
1335 c[D_CBC_IDEA][i]=c[D_CBC_IDEA][i-1]*l0/l1;
Bodo Möller96afc1c2007-04-23 23:48:59 +00001336 c[D_CBC_SEED][i]=c[D_CBC_SEED][i-1]*l0/l1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001337 c[D_CBC_RC2][i]=c[D_CBC_RC2][i-1]*l0/l1;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001338 c[D_CBC_RC5][i]=c[D_CBC_RC5][i-1]*l0/l1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001339 c[D_CBC_BF][i]=c[D_CBC_BF][i-1]*l0/l1;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001340 c[D_CBC_CAST][i]=c[D_CBC_CAST][i-1]*l0/l1;
Lutz Jänicke95de3d22003-11-18 18:27:12 +00001341 c[D_CBC_128_AES][i]=c[D_CBC_128_AES][i-1]*l0/l1;
1342 c[D_CBC_192_AES][i]=c[D_CBC_192_AES][i-1]*l0/l1;
1343 c[D_CBC_256_AES][i]=c[D_CBC_256_AES][i-1]*l0/l1;
Bodo Möllerf3dea9a2006-06-09 15:44:59 +00001344 c[D_CBC_128_CML][i]=c[D_CBC_128_CML][i-1]*l0/l1;
1345 c[D_CBC_192_CML][i]=c[D_CBC_192_CML][i-1]*l0/l1;
1346 c[D_CBC_256_CML][i]=c[D_CBC_256_CML][i-1]*l0/l1;
Ben Laurie5f09d0e2007-05-13 12:57:59 +00001347 c[D_IGE_128_AES][i]=c[D_IGE_128_AES][i-1]*l0/l1;
1348 c[D_IGE_192_AES][i]=c[D_IGE_192_AES][i-1]*l0/l1;
1349 c[D_IGE_256_AES][i]=c[D_IGE_256_AES][i-1]*l0/l1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001350 }
Felix Laurie von Massenbachb5419b82014-05-26 21:57:25 +01001351
1352 prime_c[D_PRIME_TRIAL_DIVISION]=count;
1353 prime_c[D_PRIME_COPRIME]=count;
1354
Richard Levittecf1b7d92001-02-19 16:06:34 +00001355#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001356 rsa_c[R_RSA_512][0]=count/2000;
1357 rsa_c[R_RSA_512][1]=count/400;
1358 for (i=1; i<RSA_NUM; i++)
1359 {
1360 rsa_c[i][0]=rsa_c[i-1][0]/8;
1361 rsa_c[i][1]=rsa_c[i-1][1]/4;
1362 if ((rsa_doit[i] <= 1) && (rsa_c[i][0] == 0))
1363 rsa_doit[i]=0;
1364 else
1365 {
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +00001366 if (rsa_c[i][0] == 0)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001367 {
1368 rsa_c[i][0]=1;
1369 rsa_c[i][1]=20;
1370 }
1371 }
1372 }
Ulf Möllerf5d7a031999-04-27 01:14:46 +00001373#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001374
Bodo Möllerf89aebb2001-03-22 15:06:19 +00001375#ifndef OPENSSL_NO_DSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001376 dsa_c[R_DSA_512][0]=count/1000;
1377 dsa_c[R_DSA_512][1]=count/1000/2;
1378 for (i=1; i<DSA_NUM; i++)
1379 {
1380 dsa_c[i][0]=dsa_c[i-1][0]/4;
1381 dsa_c[i][1]=dsa_c[i-1][1]/4;
1382 if ((dsa_doit[i] <= 1) && (dsa_c[i][0] == 0))
1383 dsa_doit[i]=0;
1384 else
1385 {
1386 if (dsa_c[i] == 0)
1387 {
1388 dsa_c[i][0]=1;
1389 dsa_c[i][1]=1;
1390 }
1391 }
1392 }
Bodo Möllerf89aebb2001-03-22 15:06:19 +00001393#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001394
Bodo Möllere172d602002-08-09 08:43:04 +00001395#ifndef OPENSSL_NO_ECDSA
1396 ecdsa_c[R_EC_P160][0]=count/1000;
1397 ecdsa_c[R_EC_P160][1]=count/1000/2;
Nils Larsch689c6f22005-03-20 23:12:13 +00001398 for (i=R_EC_P192; i<=R_EC_P521; i++)
Bodo Möllere172d602002-08-09 08:43:04 +00001399 {
1400 ecdsa_c[i][0]=ecdsa_c[i-1][0]/2;
1401 ecdsa_c[i][1]=ecdsa_c[i-1][1]/2;
1402 if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
1403 ecdsa_doit[i]=0;
1404 else
1405 {
1406 if (ecdsa_c[i] == 0)
1407 {
1408 ecdsa_c[i][0]=1;
1409 ecdsa_c[i][1]=1;
1410 }
1411 }
1412 }
1413 ecdsa_c[R_EC_K163][0]=count/1000;
1414 ecdsa_c[R_EC_K163][1]=count/1000/2;
1415 for (i=R_EC_K233; i<=R_EC_K571; i++)
1416 {
1417 ecdsa_c[i][0]=ecdsa_c[i-1][0]/2;
1418 ecdsa_c[i][1]=ecdsa_c[i-1][1]/2;
1419 if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
1420 ecdsa_doit[i]=0;
1421 else
1422 {
1423 if (ecdsa_c[i] == 0)
1424 {
1425 ecdsa_c[i][0]=1;
1426 ecdsa_c[i][1]=1;
1427 }
1428 }
1429 }
1430 ecdsa_c[R_EC_B163][0]=count/1000;
1431 ecdsa_c[R_EC_B163][1]=count/1000/2;
1432 for (i=R_EC_B233; i<=R_EC_B571; i++)
1433 {
1434 ecdsa_c[i][0]=ecdsa_c[i-1][0]/2;
1435 ecdsa_c[i][1]=ecdsa_c[i-1][1]/2;
1436 if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
1437 ecdsa_doit[i]=0;
1438 else
1439 {
1440 if (ecdsa_c[i] == 0)
1441 {
1442 ecdsa_c[i][0]=1;
1443 ecdsa_c[i][1]=1;
1444 }
1445 }
1446 }
1447#endif
1448
1449#ifndef OPENSSL_NO_ECDH
1450 ecdh_c[R_EC_P160][0]=count/1000;
1451 ecdh_c[R_EC_P160][1]=count/1000;
Nils Larsch689c6f22005-03-20 23:12:13 +00001452 for (i=R_EC_P192; i<=R_EC_P521; i++)
Bodo Möllere172d602002-08-09 08:43:04 +00001453 {
1454 ecdh_c[i][0]=ecdh_c[i-1][0]/2;
1455 ecdh_c[i][1]=ecdh_c[i-1][1]/2;
1456 if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
1457 ecdh_doit[i]=0;
1458 else
1459 {
1460 if (ecdh_c[i] == 0)
1461 {
1462 ecdh_c[i][0]=1;
1463 ecdh_c[i][1]=1;
1464 }
1465 }
1466 }
1467 ecdh_c[R_EC_K163][0]=count/1000;
1468 ecdh_c[R_EC_K163][1]=count/1000;
1469 for (i=R_EC_K233; i<=R_EC_K571; i++)
1470 {
1471 ecdh_c[i][0]=ecdh_c[i-1][0]/2;
1472 ecdh_c[i][1]=ecdh_c[i-1][1]/2;
1473 if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
1474 ecdh_doit[i]=0;
1475 else
1476 {
1477 if (ecdh_c[i] == 0)
1478 {
1479 ecdh_c[i][0]=1;
1480 ecdh_c[i][1]=1;
1481 }
1482 }
1483 }
1484 ecdh_c[R_EC_B163][0]=count/1000;
1485 ecdh_c[R_EC_B163][1]=count/1000;
1486 for (i=R_EC_B233; i<=R_EC_B571; i++)
1487 {
1488 ecdh_c[i][0]=ecdh_c[i-1][0]/2;
1489 ecdh_c[i][1]=ecdh_c[i-1][1]/2;
1490 if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
1491 ecdh_doit[i]=0;
1492 else
1493 {
1494 if (ecdh_c[i] == 0)
1495 {
1496 ecdh_c[i][0]=1;
1497 ecdh_c[i][1]=1;
1498 }
1499 }
1500 }
1501#endif
1502
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001503#define COND(d) (count < (d))
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001504#define COUNT(d) (d)
1505#else
Bodo Möller63da21c2000-01-07 12:15:54 +00001506/* not worth fixing */
1507# error "You cannot disable DES on systems without SIGALRM."
Richard Levittecf1b7d92001-02-19 16:06:34 +00001508#endif /* OPENSSL_NO_DES */
Bodo Möller63da21c2000-01-07 12:15:54 +00001509#else
Andy Polyakovd582c982010-01-17 17:31:38 +00001510#define COND(c) (run && count<0x7fffffff)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001511#define COUNT(d) (count)
Andy Polyakov0a39d8f2005-11-06 11:40:59 +00001512#ifndef _WIN32
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001513 signal(SIGALRM,sig_done);
Andy Polyakov0a39d8f2005-11-06 11:40:59 +00001514#endif
Bodo Möller63da21c2000-01-07 12:15:54 +00001515#endif /* SIGALRM */
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001516
Richard Levittecf1b7d92001-02-19 16:06:34 +00001517#ifndef OPENSSL_NO_MD2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001518 if (doit[D_MD2])
1519 {
1520 for (j=0; j<SIZE_NUM; j++)
1521 {
1522 print_message(names[D_MD2],c[D_MD2][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001523 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001524 for (count=0,run=1; COND(c[D_MD2][j]); count++)
Ben Laurie0e211562001-10-25 14:27:17 +00001525 EVP_Digest(buf,(unsigned long)lengths[j],&(md2[0]),NULL,EVP_md2(),NULL);
1526 d=Time_F(STOP);
1527 print_result(D_MD2,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001528 }
1529 }
1530#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001531#ifndef OPENSSL_NO_MDC2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001532 if (doit[D_MDC2])
1533 {
1534 for (j=0; j<SIZE_NUM; j++)
1535 {
1536 print_message(names[D_MDC2],c[D_MDC2][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001537 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001538 for (count=0,run=1; COND(c[D_MDC2][j]); count++)
Ben Laurie0e211562001-10-25 14:27:17 +00001539 EVP_Digest(buf,(unsigned long)lengths[j],&(mdc2[0]),NULL,EVP_mdc2(),NULL);
1540 d=Time_F(STOP);
1541 print_result(D_MDC2,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001542 }
1543 }
1544#endif
1545
Richard Levittecf1b7d92001-02-19 16:06:34 +00001546#ifndef OPENSSL_NO_MD4
Richard Levitte30094582000-08-14 14:05:53 +00001547 if (doit[D_MD4])
1548 {
1549 for (j=0; j<SIZE_NUM; j++)
1550 {
1551 print_message(names[D_MD4],c[D_MD4][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001552 Time_F(START);
Richard Levitte30094582000-08-14 14:05:53 +00001553 for (count=0,run=1; COND(c[D_MD4][j]); count++)
Ben Laurie0e211562001-10-25 14:27:17 +00001554 EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md4[0]),NULL,EVP_md4(),NULL);
1555 d=Time_F(STOP);
1556 print_result(D_MD4,j,count,d);
Richard Levitte30094582000-08-14 14:05:53 +00001557 }
1558 }
1559#endif
1560
Richard Levittecf1b7d92001-02-19 16:06:34 +00001561#ifndef OPENSSL_NO_MD5
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001562 if (doit[D_MD5])
1563 {
1564 for (j=0; j<SIZE_NUM; j++)
1565 {
1566 print_message(names[D_MD5],c[D_MD5][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001567 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001568 for (count=0,run=1; COND(c[D_MD5][j]); count++)
Andy Polyakov27e0c862012-09-28 09:25:49 +00001569 MD5(buf,lengths[j],md5);
Ben Laurie0e211562001-10-25 14:27:17 +00001570 d=Time_F(STOP);
1571 print_result(D_MD5,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001572 }
1573 }
1574#endif
1575
Richard Levittecf1b7d92001-02-19 16:06:34 +00001576#if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_HMAC)
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001577 if (doit[D_HMAC])
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001578 {
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001579 HMAC_CTX hctx;
Ben Lauriedbad1692001-07-30 23:57:25 +00001580
1581 HMAC_CTX_init(&hctx);
Ben Laurieff3fa482001-12-09 21:53:31 +00001582 HMAC_Init_ex(&hctx,(unsigned char *)"This is a key...",
Dr. Stephen Hensonde941e22002-03-14 18:22:23 +00001583 16,EVP_md5(), NULL);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001584
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001585 for (j=0; j<SIZE_NUM; j++)
1586 {
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001587 print_message(names[D_HMAC],c[D_HMAC][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001588 Time_F(START);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001589 for (count=0,run=1; COND(c[D_HMAC][j]); count++)
1590 {
Dr. Stephen Hensonde941e22002-03-14 18:22:23 +00001591 HMAC_Init_ex(&hctx,NULL,0,NULL,NULL);
1592 HMAC_Update(&hctx,buf,lengths[j]);
1593 HMAC_Final(&hctx,&(hmac[0]),NULL);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001594 }
Ben Laurie0e211562001-10-25 14:27:17 +00001595 d=Time_F(STOP);
1596 print_result(D_HMAC,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001597 }
Ben Lauriedbad1692001-07-30 23:57:25 +00001598 HMAC_CTX_cleanup(&hctx);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001599 }
1600#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001601#ifndef OPENSSL_NO_SHA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001602 if (doit[D_SHA1])
1603 {
1604 for (j=0; j<SIZE_NUM; j++)
1605 {
1606 print_message(names[D_SHA1],c[D_SHA1][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001607 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001608 for (count=0,run=1; COND(c[D_SHA1][j]); count++)
Andy Polyakov6acb4ff2010-07-09 14:10:51 +00001609#if 0
Ben Laurie0e211562001-10-25 14:27:17 +00001610 EVP_Digest(buf,(unsigned long)lengths[j],&(sha[0]),NULL,EVP_sha1(),NULL);
Andy Polyakov6acb4ff2010-07-09 14:10:51 +00001611#else
1612 SHA1(buf,lengths[j],sha);
1613#endif
Ben Laurie0e211562001-10-25 14:27:17 +00001614 d=Time_F(STOP);
1615 print_result(D_SHA1,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001616 }
1617 }
Andy Polyakov46ceb152004-05-20 21:49:38 +00001618
Andy Polyakovc88f8f72004-07-25 18:57:35 +00001619#ifndef OPENSSL_NO_SHA256
Andy Polyakov46ceb152004-05-20 21:49:38 +00001620 if (doit[D_SHA256])
1621 {
1622 for (j=0; j<SIZE_NUM; j++)
1623 {
1624 print_message(names[D_SHA256],c[D_SHA256][j],lengths[j]);
1625 Time_F(START);
1626 for (count=0,run=1; COND(c[D_SHA256][j]); count++)
1627 SHA256(buf,lengths[j],sha256);
1628 d=Time_F(STOP);
1629 print_result(D_SHA256,j,count,d);
1630 }
1631 }
Andy Polyakovc88f8f72004-07-25 18:57:35 +00001632#endif
Andy Polyakov46ceb152004-05-20 21:49:38 +00001633
Andy Polyakovc88f8f72004-07-25 18:57:35 +00001634#ifndef OPENSSL_NO_SHA512
Andy Polyakov46ceb152004-05-20 21:49:38 +00001635 if (doit[D_SHA512])
1636 {
1637 for (j=0; j<SIZE_NUM; j++)
1638 {
1639 print_message(names[D_SHA512],c[D_SHA512][j],lengths[j]);
1640 Time_F(START);
1641 for (count=0,run=1; COND(c[D_SHA512][j]); count++)
1642 SHA512(buf,lengths[j],sha512);
1643 d=Time_F(STOP);
1644 print_result(D_SHA512,j,count,d);
1645 }
1646 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001647#endif
Andy Polyakovc88f8f72004-07-25 18:57:35 +00001648#endif
Nils Larschae93dc132006-12-01 21:42:55 +00001649
1650#ifndef OPENSSL_NO_WHIRLPOOL
1651 if (doit[D_WHIRLPOOL])
1652 {
1653 for (j=0; j<SIZE_NUM; j++)
1654 {
1655 print_message(names[D_WHIRLPOOL],c[D_WHIRLPOOL][j],lengths[j]);
1656 Time_F(START);
1657 for (count=0,run=1; COND(c[D_WHIRLPOOL][j]); count++)
1658 WHIRLPOOL(buf,lengths[j],whirlpool);
1659 d=Time_F(STOP);
1660 print_result(D_WHIRLPOOL,j,count,d);
1661 }
1662 }
1663#endif
1664
Richard Levittecf1b7d92001-02-19 16:06:34 +00001665#ifndef OPENSSL_NO_RIPEMD
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001666 if (doit[D_RMD160])
1667 {
1668 for (j=0; j<SIZE_NUM; j++)
1669 {
1670 print_message(names[D_RMD160],c[D_RMD160][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001671 Time_F(START);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001672 for (count=0,run=1; COND(c[D_RMD160][j]); count++)
Ben Laurie0e211562001-10-25 14:27:17 +00001673 EVP_Digest(buf,(unsigned long)lengths[j],&(rmd160[0]),NULL,EVP_ripemd160(),NULL);
1674 d=Time_F(STOP);
1675 print_result(D_RMD160,j,count,d);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001676 }
1677 }
1678#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001679#ifndef OPENSSL_NO_RC4
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001680 if (doit[D_RC4])
1681 {
1682 for (j=0; j<SIZE_NUM; j++)
1683 {
1684 print_message(names[D_RC4],c[D_RC4][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001685 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001686 for (count=0,run=1; COND(c[D_RC4][j]); count++)
1687 RC4(&rc4_ks,(unsigned int)lengths[j],
1688 buf,buf);
Ben Laurie0e211562001-10-25 14:27:17 +00001689 d=Time_F(STOP);
1690 print_result(D_RC4,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001691 }
1692 }
1693#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001694#ifndef OPENSSL_NO_DES
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001695 if (doit[D_CBC_DES])
1696 {
1697 for (j=0; j<SIZE_NUM; j++)
1698 {
1699 print_message(names[D_CBC_DES],c[D_CBC_DES][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001700 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001701 for (count=0,run=1; COND(c[D_CBC_DES][j]); count++)
Richard Levittec2e4f172001-10-24 21:21:12 +00001702 DES_ncbc_encrypt(buf,buf,lengths[j],&sch,
Richard Levitteba1b8882002-01-02 16:57:57 +00001703 &DES_iv,DES_ENCRYPT);
Ben Laurie0e211562001-10-25 14:27:17 +00001704 d=Time_F(STOP);
1705 print_result(D_CBC_DES,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001706 }
1707 }
1708
1709 if (doit[D_EDE3_DES])
1710 {
1711 for (j=0; j<SIZE_NUM; j++)
1712 {
1713 print_message(names[D_EDE3_DES],c[D_EDE3_DES][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001714 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001715 for (count=0,run=1; COND(c[D_EDE3_DES][j]); count++)
Richard Levittec2e4f172001-10-24 21:21:12 +00001716 DES_ede3_cbc_encrypt(buf,buf,lengths[j],
Ben Lauriedbad1692001-07-30 23:57:25 +00001717 &sch,&sch2,&sch3,
Richard Levitteba1b8882002-01-02 16:57:57 +00001718 &DES_iv,DES_ENCRYPT);
Ben Laurie0e211562001-10-25 14:27:17 +00001719 d=Time_F(STOP);
1720 print_result(D_EDE3_DES,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001721 }
1722 }
1723#endif
Richard Levitteba1b8882002-01-02 16:57:57 +00001724#ifndef OPENSSL_NO_AES
1725 if (doit[D_CBC_128_AES])
1726 {
1727 for (j=0; j<SIZE_NUM; j++)
1728 {
1729 print_message(names[D_CBC_128_AES],c[D_CBC_128_AES][j],lengths[j]);
1730 Time_F(START);
1731 for (count=0,run=1; COND(c[D_CBC_128_AES][j]); count++)
1732 AES_cbc_encrypt(buf,buf,
1733 (unsigned long)lengths[j],&aes_ks1,
1734 iv,AES_ENCRYPT);
1735 d=Time_F(STOP);
1736 print_result(D_CBC_128_AES,j,count,d);
1737 }
1738 }
1739 if (doit[D_CBC_192_AES])
1740 {
1741 for (j=0; j<SIZE_NUM; j++)
1742 {
1743 print_message(names[D_CBC_192_AES],c[D_CBC_192_AES][j],lengths[j]);
1744 Time_F(START);
1745 for (count=0,run=1; COND(c[D_CBC_192_AES][j]); count++)
1746 AES_cbc_encrypt(buf,buf,
1747 (unsigned long)lengths[j],&aes_ks2,
1748 iv,AES_ENCRYPT);
1749 d=Time_F(STOP);
1750 print_result(D_CBC_192_AES,j,count,d);
1751 }
1752 }
1753 if (doit[D_CBC_256_AES])
1754 {
1755 for (j=0; j<SIZE_NUM; j++)
1756 {
1757 print_message(names[D_CBC_256_AES],c[D_CBC_256_AES][j],lengths[j]);
1758 Time_F(START);
1759 for (count=0,run=1; COND(c[D_CBC_256_AES][j]); count++)
1760 AES_cbc_encrypt(buf,buf,
1761 (unsigned long)lengths[j],&aes_ks3,
1762 iv,AES_ENCRYPT);
1763 d=Time_F(STOP);
1764 print_result(D_CBC_256_AES,j,count,d);
1765 }
1766 }
1767
Ben Laurie5f09d0e2007-05-13 12:57:59 +00001768 if (doit[D_IGE_128_AES])
1769 {
1770 for (j=0; j<SIZE_NUM; j++)
1771 {
1772 print_message(names[D_IGE_128_AES],c[D_IGE_128_AES][j],lengths[j]);
1773 Time_F(START);
1774 for (count=0,run=1; COND(c[D_IGE_128_AES][j]); count++)
Ben Laurie69ab0852007-05-13 15:14:38 +00001775 AES_ige_encrypt(buf,buf2,
Ben Laurie5f09d0e2007-05-13 12:57:59 +00001776 (unsigned long)lengths[j],&aes_ks1,
1777 iv,AES_ENCRYPT);
1778 d=Time_F(STOP);
1779 print_result(D_IGE_128_AES,j,count,d);
1780 }
1781 }
1782 if (doit[D_IGE_192_AES])
1783 {
1784 for (j=0; j<SIZE_NUM; j++)
1785 {
1786 print_message(names[D_IGE_192_AES],c[D_IGE_192_AES][j],lengths[j]);
1787 Time_F(START);
1788 for (count=0,run=1; COND(c[D_IGE_192_AES][j]); count++)
Ben Laurie69ab0852007-05-13 15:14:38 +00001789 AES_ige_encrypt(buf,buf2,
Ben Laurie5f09d0e2007-05-13 12:57:59 +00001790 (unsigned long)lengths[j],&aes_ks2,
1791 iv,AES_ENCRYPT);
1792 d=Time_F(STOP);
1793 print_result(D_IGE_192_AES,j,count,d);
1794 }
1795 }
1796 if (doit[D_IGE_256_AES])
1797 {
1798 for (j=0; j<SIZE_NUM; j++)
1799 {
1800 print_message(names[D_IGE_256_AES],c[D_IGE_256_AES][j],lengths[j]);
1801 Time_F(START);
1802 for (count=0,run=1; COND(c[D_IGE_256_AES][j]); count++)
Ben Laurie69ab0852007-05-13 15:14:38 +00001803 AES_ige_encrypt(buf,buf2,
Ben Laurie5f09d0e2007-05-13 12:57:59 +00001804 (unsigned long)lengths[j],&aes_ks3,
1805 iv,AES_ENCRYPT);
1806 d=Time_F(STOP);
1807 print_result(D_IGE_256_AES,j,count,d);
1808 }
1809 }
Andy Polyakov6acb4ff2010-07-09 14:10:51 +00001810 if (doit[D_GHASH])
1811 {
1812 GCM128_CONTEXT *ctx = CRYPTO_gcm128_new(&aes_ks1,(block128_f)AES_encrypt);
Ben Laurie3c530fe2010-07-27 16:57:05 +00001813 CRYPTO_gcm128_setiv (ctx,(unsigned char *)"0123456789ab",12);
Ben Laurie5f09d0e2007-05-13 12:57:59 +00001814
Andy Polyakov6acb4ff2010-07-09 14:10:51 +00001815 for (j=0; j<SIZE_NUM; j++)
1816 {
1817 print_message(names[D_GHASH],c[D_GHASH][j],lengths[j]);
1818 Time_F(START);
1819 for (count=0,run=1; COND(c[D_GHASH][j]); count++)
1820 CRYPTO_gcm128_aad(ctx,buf,lengths[j]);
1821 d=Time_F(STOP);
1822 print_result(D_GHASH,j,count,d);
1823 }
1824 CRYPTO_gcm128_release(ctx);
1825 }
Ben Laurie5f09d0e2007-05-13 12:57:59 +00001826
Richard Levitteba1b8882002-01-02 16:57:57 +00001827#endif
Bodo Möllerf3dea9a2006-06-09 15:44:59 +00001828#ifndef OPENSSL_NO_CAMELLIA
1829 if (doit[D_CBC_128_CML])
1830 {
1831 for (j=0; j<SIZE_NUM; j++)
1832 {
1833 print_message(names[D_CBC_128_CML],c[D_CBC_128_CML][j],lengths[j]);
1834 Time_F(START);
1835 for (count=0,run=1; COND(c[D_CBC_128_CML][j]); count++)
1836 Camellia_cbc_encrypt(buf,buf,
1837 (unsigned long)lengths[j],&camellia_ks1,
1838 iv,CAMELLIA_ENCRYPT);
1839 d=Time_F(STOP);
1840 print_result(D_CBC_128_CML,j,count,d);
1841 }
1842 }
1843 if (doit[D_CBC_192_CML])
1844 {
1845 for (j=0; j<SIZE_NUM; j++)
1846 {
1847 print_message(names[D_CBC_192_CML],c[D_CBC_192_CML][j],lengths[j]);
1848 Time_F(START);
1849 for (count=0,run=1; COND(c[D_CBC_192_CML][j]); count++)
1850 Camellia_cbc_encrypt(buf,buf,
1851 (unsigned long)lengths[j],&camellia_ks2,
1852 iv,CAMELLIA_ENCRYPT);
1853 d=Time_F(STOP);
1854 print_result(D_CBC_192_CML,j,count,d);
1855 }
1856 }
1857 if (doit[D_CBC_256_CML])
1858 {
1859 for (j=0; j<SIZE_NUM; j++)
1860 {
1861 print_message(names[D_CBC_256_CML],c[D_CBC_256_CML][j],lengths[j]);
1862 Time_F(START);
1863 for (count=0,run=1; COND(c[D_CBC_256_CML][j]); count++)
1864 Camellia_cbc_encrypt(buf,buf,
1865 (unsigned long)lengths[j],&camellia_ks3,
1866 iv,CAMELLIA_ENCRYPT);
1867 d=Time_F(STOP);
1868 print_result(D_CBC_256_CML,j,count,d);
1869 }
1870 }
1871
1872#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001873#ifndef OPENSSL_NO_IDEA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001874 if (doit[D_CBC_IDEA])
1875 {
1876 for (j=0; j<SIZE_NUM; j++)
1877 {
1878 print_message(names[D_CBC_IDEA],c[D_CBC_IDEA][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001879 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001880 for (count=0,run=1; COND(c[D_CBC_IDEA][j]); count++)
1881 idea_cbc_encrypt(buf,buf,
1882 (unsigned long)lengths[j],&idea_ks,
Bodo Möller12ba4131999-05-18 15:06:20 +00001883 iv,IDEA_ENCRYPT);
Ben Laurie0e211562001-10-25 14:27:17 +00001884 d=Time_F(STOP);
1885 print_result(D_CBC_IDEA,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001886 }
1887 }
1888#endif
Bodo Möller96afc1c2007-04-23 23:48:59 +00001889#ifndef OPENSSL_NO_SEED
1890 if (doit[D_CBC_SEED])
1891 {
1892 for (j=0; j<SIZE_NUM; j++)
1893 {
1894 print_message(names[D_CBC_SEED],c[D_CBC_SEED][j],lengths[j]);
1895 Time_F(START);
1896 for (count=0,run=1; COND(c[D_CBC_SEED][j]); count++)
1897 SEED_cbc_encrypt(buf,buf,
1898 (unsigned long)lengths[j],&seed_ks,iv,1);
1899 d=Time_F(STOP);
1900 print_result(D_CBC_SEED,j,count,d);
1901 }
1902 }
1903#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001904#ifndef OPENSSL_NO_RC2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001905 if (doit[D_CBC_RC2])
1906 {
1907 for (j=0; j<SIZE_NUM; j++)
1908 {
1909 print_message(names[D_CBC_RC2],c[D_CBC_RC2][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001910 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001911 for (count=0,run=1; COND(c[D_CBC_RC2][j]); count++)
1912 RC2_cbc_encrypt(buf,buf,
1913 (unsigned long)lengths[j],&rc2_ks,
Bodo Möller12ba4131999-05-18 15:06:20 +00001914 iv,RC2_ENCRYPT);
Ben Laurie0e211562001-10-25 14:27:17 +00001915 d=Time_F(STOP);
1916 print_result(D_CBC_RC2,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001917 }
1918 }
1919#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001920#ifndef OPENSSL_NO_RC5
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001921 if (doit[D_CBC_RC5])
1922 {
1923 for (j=0; j<SIZE_NUM; j++)
1924 {
1925 print_message(names[D_CBC_RC5],c[D_CBC_RC5][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001926 Time_F(START);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001927 for (count=0,run=1; COND(c[D_CBC_RC5][j]); count++)
1928 RC5_32_cbc_encrypt(buf,buf,
1929 (unsigned long)lengths[j],&rc5_ks,
Bodo Möller12ba4131999-05-18 15:06:20 +00001930 iv,RC5_ENCRYPT);
Ben Laurie0e211562001-10-25 14:27:17 +00001931 d=Time_F(STOP);
1932 print_result(D_CBC_RC5,j,count,d);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001933 }
1934 }
1935#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001936#ifndef OPENSSL_NO_BF
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001937 if (doit[D_CBC_BF])
1938 {
1939 for (j=0; j<SIZE_NUM; j++)
1940 {
1941 print_message(names[D_CBC_BF],c[D_CBC_BF][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001942 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001943 for (count=0,run=1; COND(c[D_CBC_BF][j]); count++)
1944 BF_cbc_encrypt(buf,buf,
1945 (unsigned long)lengths[j],&bf_ks,
Bodo Möller12ba4131999-05-18 15:06:20 +00001946 iv,BF_ENCRYPT);
Ben Laurie0e211562001-10-25 14:27:17 +00001947 d=Time_F(STOP);
1948 print_result(D_CBC_BF,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001949 }
1950 }
1951#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001952#ifndef OPENSSL_NO_CAST
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001953 if (doit[D_CBC_CAST])
1954 {
1955 for (j=0; j<SIZE_NUM; j++)
1956 {
1957 print_message(names[D_CBC_CAST],c[D_CBC_CAST][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001958 Time_F(START);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001959 for (count=0,run=1; COND(c[D_CBC_CAST][j]); count++)
1960 CAST_cbc_encrypt(buf,buf,
1961 (unsigned long)lengths[j],&cast_ks,
Bodo Möller12ba4131999-05-18 15:06:20 +00001962 iv,CAST_ENCRYPT);
Ben Laurie0e211562001-10-25 14:27:17 +00001963 d=Time_F(STOP);
1964 print_result(D_CBC_CAST,j,count,d);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001965 }
1966 }
1967#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001968
Ben Laurie646d5692000-11-20 04:14:19 +00001969 if (doit[D_EVP])
1970 {
1971 for (j=0; j<SIZE_NUM; j++)
1972 {
Richard Levitte83c40e72001-11-15 20:19:40 +00001973 if (evp_cipher)
1974 {
1975 EVP_CIPHER_CTX ctx;
1976 int outl;
Ben Laurie646d5692000-11-20 04:14:19 +00001977
Richard Levitte83c40e72001-11-15 20:19:40 +00001978 names[D_EVP]=OBJ_nid2ln(evp_cipher->nid);
Richard Levitteba1b8882002-01-02 16:57:57 +00001979 /* -O3 -fschedule-insns messes up an
1980 * optimization here! names[D_EVP]
1981 * somehow becomes NULL */
Richard Levitte83c40e72001-11-15 20:19:40 +00001982 print_message(names[D_EVP],save_count,
1983 lengths[j]);
1984
1985 EVP_CIPHER_CTX_init(&ctx);
1986 if(decrypt)
1987 EVP_DecryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
1988 else
1989 EVP_EncryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
Richard Levitte563cd0f2004-06-28 16:32:12 +00001990 EVP_CIPHER_CTX_set_padding(&ctx, 0);
Richard Levitte83c40e72001-11-15 20:19:40 +00001991
1992 Time_F(START);
1993 if(decrypt)
1994 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1995 EVP_DecryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
1996 else
1997 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1998 EVP_EncryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
1999 if(decrypt)
2000 EVP_DecryptFinal_ex(&ctx,buf,&outl);
2001 else
2002 EVP_EncryptFinal_ex(&ctx,buf,&outl);
2003 d=Time_F(STOP);
Dr. Stephen Henson876e96f2003-01-04 18:25:24 +00002004 EVP_CIPHER_CTX_cleanup(&ctx);
Richard Levitte83c40e72001-11-15 20:19:40 +00002005 }
2006 if (evp_md)
2007 {
2008 names[D_EVP]=OBJ_nid2ln(evp_md->type);
2009 print_message(names[D_EVP],save_count,
2010 lengths[j]);
2011
2012 Time_F(START);
Ben Laurie3f37e732001-07-08 12:14:41 +00002013 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
Richard Levitte83c40e72001-11-15 20:19:40 +00002014 EVP_Digest(buf,lengths[j],&(md[0]),NULL,evp_md,NULL);
2015
2016 d=Time_F(STOP);
2017 }
Ben Laurie0e211562001-10-25 14:27:17 +00002018 print_result(D_EVP,j,count,d);
Ben Laurie646d5692000-11-20 04:14:19 +00002019 }
2020 }
Felix Laurie von Massenbachb3596422014-05-27 00:33:42 +01002021
2022 if (prime_doit[D_PRIME_TRIAL_DIVISION])
Felix Laurie von Massenbachb5419b82014-05-26 21:57:25 +01002023 {
2024 BIGNUM *rnd = BN_new();
2025 BIGNUM *add = BN_new();
2026 BN_CTX *ctx = BN_CTX_new();
2027
Felix Laurie von Massenbachb3596422014-05-27 00:33:42 +01002028 BN_set_word(add, 2);
2029 prime_print_message(prime_names[D_PRIME_TRIAL_DIVISION],
2030 prime_c[D_PRIME_TRIAL_DIVISION]);
Felix Laurie von Massenbachb5419b82014-05-26 21:57:25 +01002031
Felix Laurie von Massenbachb3596422014-05-27 00:33:42 +01002032 Time_F(START);
2033 for (count=0, run=1; COND(prime_c[D_PRIME_TRIAL_DIVISION]); count++)
2034 bn_probable_prime_dh(rnd, 1024, add, NULL, ctx);
2035
2036 d=Time_F(STOP);
2037 prime_print_result(D_PRIME_TRIAL_DIVISION, count, d);
Felix Laurie von Massenbachb5419b82014-05-26 21:57:25 +01002038
2039 BN_CTX_free(ctx);
2040 BN_free(add);
2041 BN_free(rnd);
Felix Laurie von Massenbachb3596422014-05-27 00:33:42 +01002042
Felix Laurie von Massenbachb5419b82014-05-26 21:57:25 +01002043 }
Felix Laurie von Massenbachb0513812014-05-27 00:37:03 +01002044
2045 if (prime_doit[D_PRIME_COPRIME])
2046 {
2047 BIGNUM *rnd = BN_new();
2048 BIGNUM *add = BN_new();
2049 BN_CTX *ctx = BN_CTX_new();
2050
2051 BN_set_word(add, 2);
2052 prime_print_message(prime_names[D_PRIME_COPRIME],
2053 prime_c[D_PRIME_COPRIME]);
2054
2055 Time_F(START);
2056 for (count=0, run=1; COND(prime_c[D_PRIME_COPRIME]); count++)
Felix Laurie von Massenbachc09ec5d2014-05-27 02:12:59 +01002057 bn_probable_prime_dh_coprime_safe(rnd, 1024, add, NULL, ctx);
Felix Laurie von Massenbachb0513812014-05-27 00:37:03 +01002058
2059 d=Time_F(STOP);
2060 prime_print_result(D_PRIME_COPRIME, count, d);
2061
2062 BN_CTX_free(ctx);
2063 BN_free(add);
2064 BN_free(rnd);
2065
2066 }
Ben Laurie646d5692000-11-20 04:14:19 +00002067
Ulf Möller373b5752000-01-16 15:58:17 +00002068 RAND_pseudo_bytes(buf,36);
Richard Levittecf1b7d92001-02-19 16:06:34 +00002069#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002070 for (j=0; j<RSA_NUM; j++)
2071 {
Dr. Stephen Hensonc91e1251999-10-02 01:18:19 +00002072 int ret;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002073 if (!rsa_doit[j]) continue;
Dr. Stephen Hensonc91e1251999-10-02 01:18:19 +00002074 ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num, rsa_key[j]);
Richard Levitte03ea28c2000-09-12 08:12:52 +00002075 if (ret == 0)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002076 {
Richard Levitte03ea28c2000-09-12 08:12:52 +00002077 BIO_printf(bio_err,"RSA sign failure. No RSA sign will be done.\n");
2078 ERR_print_errors(bio_err);
2079 rsa_count=1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002080 }
Richard Levitte03ea28c2000-09-12 08:12:52 +00002081 else
2082 {
2083 pkey_print_message("private","rsa",
2084 rsa_c[j][0],rsa_bits[j],
2085 RSA_SECONDS);
2086/* RSA_blinding_on(rsa_key[j],NULL); */
Ben Laurie0e211562001-10-25 14:27:17 +00002087 Time_F(START);
Richard Levitte03ea28c2000-09-12 08:12:52 +00002088 for (count=0,run=1; COND(rsa_c[j][0]); count++)
2089 {
2090 ret=RSA_sign(NID_md5_sha1, buf,36, buf2,
2091 &rsa_num, rsa_key[j]);
2092 if (ret == 0)
2093 {
2094 BIO_printf(bio_err,
2095 "RSA sign failure\n");
2096 ERR_print_errors(bio_err);
2097 count=1;
2098 break;
2099 }
2100 }
Ben Laurie0e211562001-10-25 14:27:17 +00002101 d=Time_F(STOP);
2102 BIO_printf(bio_err,mr ? "+R1:%ld:%d:%.2f\n"
2103 : "%ld %d bit private RSA's in %.2fs\n",
2104 count,rsa_bits[j],d);
Richard Levitte03ea28c2000-09-12 08:12:52 +00002105 rsa_results[j][0]=d/(double)count;
2106 rsa_count=count;
2107 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002108
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00002109#if 1
Dr. Stephen Hensonc91e1251999-10-02 01:18:19 +00002110 ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num, rsa_key[j]);
Richard Levitte03ea28c2000-09-12 08:12:52 +00002111 if (ret <= 0)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002112 {
Richard Levitte03ea28c2000-09-12 08:12:52 +00002113 BIO_printf(bio_err,"RSA verify failure. No RSA verify will be done.\n");
2114 ERR_print_errors(bio_err);
Richard Levitte51740b12001-03-16 10:30:10 +00002115 rsa_doit[j] = 0;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002116 }
Richard Levitte03ea28c2000-09-12 08:12:52 +00002117 else
2118 {
2119 pkey_print_message("public","rsa",
2120 rsa_c[j][1],rsa_bits[j],
2121 RSA_SECONDS);
Ben Laurie0e211562001-10-25 14:27:17 +00002122 Time_F(START);
Richard Levitte03ea28c2000-09-12 08:12:52 +00002123 for (count=0,run=1; COND(rsa_c[j][1]); count++)
2124 {
2125 ret=RSA_verify(NID_md5_sha1, buf,36, buf2,
2126 rsa_num, rsa_key[j]);
Dr. Stephen Hensonbab53402009-01-07 23:44:27 +00002127 if (ret <= 0)
Richard Levitte03ea28c2000-09-12 08:12:52 +00002128 {
2129 BIO_printf(bio_err,
2130 "RSA verify failure\n");
2131 ERR_print_errors(bio_err);
2132 count=1;
2133 break;
2134 }
2135 }
Ben Laurie0e211562001-10-25 14:27:17 +00002136 d=Time_F(STOP);
2137 BIO_printf(bio_err,mr ? "+R2:%ld:%d:%.2f\n"
2138 : "%ld %d bit public RSA's in %.2fs\n",
2139 count,rsa_bits[j],d);
Richard Levitte03ea28c2000-09-12 08:12:52 +00002140 rsa_results[j][1]=d/(double)count;
2141 }
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00002142#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002143
2144 if (rsa_count <= 1)
2145 {
2146 /* if longer than 10s, don't do any more */
2147 for (j++; j<RSA_NUM; j++)
2148 rsa_doit[j]=0;
2149 }
2150 }
2151#endif
2152
Ulf Möller373b5752000-01-16 15:58:17 +00002153 RAND_pseudo_bytes(buf,20);
Richard Levittecf1b7d92001-02-19 16:06:34 +00002154#ifndef OPENSSL_NO_DSA
Ulf Möller99a97052000-03-01 17:42:06 +00002155 if (RAND_status() != 1)
2156 {
2157 RAND_seed(rnd_seed, sizeof rnd_seed);
2158 rnd_fake = 1;
2159 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002160 for (j=0; j<DSA_NUM; j++)
2161 {
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00002162 unsigned int kk;
Richard Levitte03ea28c2000-09-12 08:12:52 +00002163 int ret;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00002164
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002165 if (!dsa_doit[j]) continue;
Geoff Thorpeaf436bc2001-07-11 18:59:25 +00002166/* DSA_generate_key(dsa_key[j]); */
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002167/* DSA_sign_setup(dsa_key[j],NULL); */
Richard Levitte03ea28c2000-09-12 08:12:52 +00002168 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +00002169 &kk,dsa_key[j]);
Richard Levitte03ea28c2000-09-12 08:12:52 +00002170 if (ret == 0)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002171 {
Richard Levitte03ea28c2000-09-12 08:12:52 +00002172 BIO_printf(bio_err,"DSA sign failure. No DSA sign will be done.\n");
2173 ERR_print_errors(bio_err);
2174 rsa_count=1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002175 }
Richard Levitte03ea28c2000-09-12 08:12:52 +00002176 else
2177 {
2178 pkey_print_message("sign","dsa",
2179 dsa_c[j][0],dsa_bits[j],
2180 DSA_SECONDS);
Ben Laurie0e211562001-10-25 14:27:17 +00002181 Time_F(START);
Richard Levitte03ea28c2000-09-12 08:12:52 +00002182 for (count=0,run=1; COND(dsa_c[j][0]); count++)
2183 {
2184 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
2185 &kk,dsa_key[j]);
2186 if (ret == 0)
2187 {
2188 BIO_printf(bio_err,
2189 "DSA sign failure\n");
2190 ERR_print_errors(bio_err);
2191 count=1;
2192 break;
2193 }
2194 }
Ben Laurie0e211562001-10-25 14:27:17 +00002195 d=Time_F(STOP);
2196 BIO_printf(bio_err,mr ? "+R3:%ld:%d:%.2f\n"
2197 : "%ld %d bit DSA signs in %.2fs\n",
2198 count,dsa_bits[j],d);
Richard Levitte03ea28c2000-09-12 08:12:52 +00002199 dsa_results[j][0]=d/(double)count;
2200 rsa_count=count;
2201 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002202
Richard Levitte03ea28c2000-09-12 08:12:52 +00002203 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +00002204 kk,dsa_key[j]);
Richard Levitte03ea28c2000-09-12 08:12:52 +00002205 if (ret <= 0)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002206 {
Richard Levitte03ea28c2000-09-12 08:12:52 +00002207 BIO_printf(bio_err,"DSA verify failure. No DSA verify will be done.\n");
2208 ERR_print_errors(bio_err);
2209 dsa_doit[j] = 0;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002210 }
Richard Levitte03ea28c2000-09-12 08:12:52 +00002211 else
2212 {
2213 pkey_print_message("verify","dsa",
2214 dsa_c[j][1],dsa_bits[j],
2215 DSA_SECONDS);
Ben Laurie0e211562001-10-25 14:27:17 +00002216 Time_F(START);
Richard Levitte03ea28c2000-09-12 08:12:52 +00002217 for (count=0,run=1; COND(dsa_c[j][1]); count++)
2218 {
2219 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
2220 kk,dsa_key[j]);
2221 if (ret <= 0)
2222 {
2223 BIO_printf(bio_err,
2224 "DSA verify failure\n");
2225 ERR_print_errors(bio_err);
2226 count=1;
2227 break;
2228 }
2229 }
Ben Laurie0e211562001-10-25 14:27:17 +00002230 d=Time_F(STOP);
2231 BIO_printf(bio_err,mr ? "+R4:%ld:%d:%.2f\n"
2232 : "%ld %d bit DSA verify in %.2fs\n",
2233 count,dsa_bits[j],d);
Richard Levitte03ea28c2000-09-12 08:12:52 +00002234 dsa_results[j][1]=d/(double)count;
2235 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002236
2237 if (rsa_count <= 1)
2238 {
2239 /* if longer than 10s, don't do any more */
2240 for (j++; j<DSA_NUM; j++)
2241 dsa_doit[j]=0;
2242 }
2243 }
Ulf Möller99a97052000-03-01 17:42:06 +00002244 if (rnd_fake) RAND_cleanup();
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002245#endif
Bodo Möllere172d602002-08-09 08:43:04 +00002246
2247#ifndef OPENSSL_NO_ECDSA
2248 if (RAND_status() != 1)
2249 {
2250 RAND_seed(rnd_seed, sizeof rnd_seed);
2251 rnd_fake = 1;
2252 }
2253 for (j=0; j<EC_NUM; j++)
2254 {
2255 int ret;
2256
2257 if (!ecdsa_doit[j]) continue; /* Ignore Curve */
Nils Larsch9dd84052005-05-16 10:11:04 +00002258 ecdsa[j] = EC_KEY_new_by_curve_name(test_curves[j]);
Bodo Möllere172d602002-08-09 08:43:04 +00002259 if (ecdsa[j] == NULL)
2260 {
2261 BIO_printf(bio_err,"ECDSA failure.\n");
2262 ERR_print_errors(bio_err);
2263 rsa_count=1;
2264 }
2265 else
2266 {
Nils Larsch9dd84052005-05-16 10:11:04 +00002267#if 1
2268 EC_KEY_precompute_mult(ecdsa[j], NULL);
2269#endif
2270 /* Perform ECDSA signature test */
2271 EC_KEY_generate_key(ecdsa[j]);
2272 ret = ECDSA_sign(0, buf, 20, ecdsasig,
2273 &ecdsasiglen, ecdsa[j]);
2274 if (ret == 0)
Bodo Möllere172d602002-08-09 08:43:04 +00002275 {
Nils Larsch9dd84052005-05-16 10:11:04 +00002276 BIO_printf(bio_err,"ECDSA sign failure. No ECDSA sign will be done.\n");
Bodo Möllere172d602002-08-09 08:43:04 +00002277 ERR_print_errors(bio_err);
2278 rsa_count=1;
2279 }
2280 else
2281 {
Nils Larsch9dd84052005-05-16 10:11:04 +00002282 pkey_print_message("sign","ecdsa",
2283 ecdsa_c[j][0],
Bodo Möllere172d602002-08-09 08:43:04 +00002284 test_curves_bits[j],
2285 ECDSA_SECONDS);
Bodo Möllere172d602002-08-09 08:43:04 +00002286
Nils Larsch9dd84052005-05-16 10:11:04 +00002287 Time_F(START);
2288 for (count=0,run=1; COND(ecdsa_c[j][0]);
2289 count++)
Bodo Möllere172d602002-08-09 08:43:04 +00002290 {
Nils Larsch9dd84052005-05-16 10:11:04 +00002291 ret=ECDSA_sign(0, buf, 20,
2292 ecdsasig, &ecdsasiglen,
2293 ecdsa[j]);
2294 if (ret == 0)
2295 {
2296 BIO_printf(bio_err, "ECDSA sign failure\n");
2297 ERR_print_errors(bio_err);
2298 count=1;
2299 break;
2300 }
Bodo Möllere172d602002-08-09 08:43:04 +00002301 }
Nils Larsch9dd84052005-05-16 10:11:04 +00002302 d=Time_F(STOP);
2303
2304 BIO_printf(bio_err, mr ? "+R5:%ld:%d:%.2f\n" :
2305 "%ld %d bit ECDSA signs in %.2fs \n",
2306 count, test_curves_bits[j], d);
2307 ecdsa_results[j][0]=d/(double)count;
2308 rsa_count=count;
2309 }
2310
2311 /* Perform ECDSA verification test */
2312 ret=ECDSA_verify(0, buf, 20, ecdsasig,
2313 ecdsasiglen, ecdsa[j]);
2314 if (ret != 1)
2315 {
2316 BIO_printf(bio_err,"ECDSA verify failure. No ECDSA verify will be done.\n");
2317 ERR_print_errors(bio_err);
2318 ecdsa_doit[j] = 0;
2319 }
2320 else
2321 {
2322 pkey_print_message("verify","ecdsa",
2323 ecdsa_c[j][1],
2324 test_curves_bits[j],
2325 ECDSA_SECONDS);
2326 Time_F(START);
2327 for (count=0,run=1; COND(ecdsa_c[j][1]); count++)
2328 {
2329 ret=ECDSA_verify(0, buf, 20, ecdsasig, ecdsasiglen, ecdsa[j]);
2330 if (ret != 1)
2331 {
2332 BIO_printf(bio_err, "ECDSA verify failure\n");
2333 ERR_print_errors(bio_err);
2334 count=1;
2335 break;
2336 }
2337 }
2338 d=Time_F(STOP);
2339 BIO_printf(bio_err, mr? "+R6:%ld:%d:%.2f\n"
2340 : "%ld %d bit ECDSA verify in %.2fs\n",
2341 count, test_curves_bits[j], d);
2342 ecdsa_results[j][1]=d/(double)count;
2343 }
2344
2345 if (rsa_count <= 1)
2346 {
2347 /* if longer than 10s, don't do any more */
2348 for (j++; j<EC_NUM; j++)
2349 ecdsa_doit[j]=0;
Bodo Möllere172d602002-08-09 08:43:04 +00002350 }
2351 }
2352 }
2353 if (rnd_fake) RAND_cleanup();
2354#endif
2355
2356#ifndef OPENSSL_NO_ECDH
2357 if (RAND_status() != 1)
2358 {
2359 RAND_seed(rnd_seed, sizeof rnd_seed);
2360 rnd_fake = 1;
2361 }
2362 for (j=0; j<EC_NUM; j++)
2363 {
2364 if (!ecdh_doit[j]) continue;
Nils Larsch9dd84052005-05-16 10:11:04 +00002365 ecdh_a[j] = EC_KEY_new_by_curve_name(test_curves[j]);
2366 ecdh_b[j] = EC_KEY_new_by_curve_name(test_curves[j]);
Bodo Möllere172d602002-08-09 08:43:04 +00002367 if ((ecdh_a[j] == NULL) || (ecdh_b[j] == NULL))
2368 {
2369 BIO_printf(bio_err,"ECDH failure.\n");
2370 ERR_print_errors(bio_err);
2371 rsa_count=1;
2372 }
2373 else
2374 {
Nils Larsch9dd84052005-05-16 10:11:04 +00002375 /* generate two ECDH key pairs */
2376 if (!EC_KEY_generate_key(ecdh_a[j]) ||
2377 !EC_KEY_generate_key(ecdh_b[j]))
Bodo Möllere172d602002-08-09 08:43:04 +00002378 {
Nils Larsch9dd84052005-05-16 10:11:04 +00002379 BIO_printf(bio_err,"ECDH key generation failure.\n");
Bodo Möllere172d602002-08-09 08:43:04 +00002380 ERR_print_errors(bio_err);
Nils Larsch9dd84052005-05-16 10:11:04 +00002381 rsa_count=1;
Bodo Möllere172d602002-08-09 08:43:04 +00002382 }
2383 else
2384 {
Nils Larsch9dd84052005-05-16 10:11:04 +00002385 /* If field size is not more than 24 octets, then use SHA-1 hash of result;
2386 * otherwise, use result (see section 4.8 of draft-ietf-tls-ecc-03.txt).
2387 */
2388 int field_size, outlen;
2389 void *(*kdf)(const void *in, size_t inlen, void *out, size_t *xoutlen);
2390 field_size = EC_GROUP_get_degree(EC_KEY_get0_group(ecdh_a[j]));
2391 if (field_size <= 24 * 8)
Bodo Möllere172d602002-08-09 08:43:04 +00002392 {
Nils Larsch9dd84052005-05-16 10:11:04 +00002393 outlen = KDF1_SHA1_len;
2394 kdf = KDF1_SHA1;
Bodo Möllere172d602002-08-09 08:43:04 +00002395 }
2396 else
2397 {
Nils Larsch9dd84052005-05-16 10:11:04 +00002398 outlen = (field_size+7)/8;
2399 kdf = NULL;
Bodo Möllere172d602002-08-09 08:43:04 +00002400 }
Nils Larsch9dd84052005-05-16 10:11:04 +00002401 secret_size_a = ECDH_compute_key(secret_a, outlen,
2402 EC_KEY_get0_public_key(ecdh_b[j]),
2403 ecdh_a[j], kdf);
2404 secret_size_b = ECDH_compute_key(secret_b, outlen,
2405 EC_KEY_get0_public_key(ecdh_a[j]),
2406 ecdh_b[j], kdf);
2407 if (secret_size_a != secret_size_b)
2408 ecdh_checks = 0;
2409 else
2410 ecdh_checks = 1;
2411
2412 for (secret_idx = 0;
2413 (secret_idx < secret_size_a)
2414 && (ecdh_checks == 1);
2415 secret_idx++)
2416 {
2417 if (secret_a[secret_idx] != secret_b[secret_idx])
2418 ecdh_checks = 0;
2419 }
2420
2421 if (ecdh_checks == 0)
2422 {
2423 BIO_printf(bio_err,"ECDH computations don't match.\n");
2424 ERR_print_errors(bio_err);
2425 rsa_count=1;
2426 }
2427
2428 pkey_print_message("","ecdh",
2429 ecdh_c[j][0],
2430 test_curves_bits[j],
2431 ECDH_SECONDS);
2432 Time_F(START);
2433 for (count=0,run=1; COND(ecdh_c[j][0]); count++)
2434 {
2435 ECDH_compute_key(secret_a, outlen,
2436 EC_KEY_get0_public_key(ecdh_b[j]),
2437 ecdh_a[j], kdf);
2438 }
2439 d=Time_F(STOP);
2440 BIO_printf(bio_err, mr ? "+R7:%ld:%d:%.2f\n" :"%ld %d-bit ECDH ops in %.2fs\n",
2441 count, test_curves_bits[j], d);
2442 ecdh_results[j][0]=d/(double)count;
2443 rsa_count=count;
Bodo Möllere172d602002-08-09 08:43:04 +00002444 }
2445 }
2446
Nils Larsch9dd84052005-05-16 10:11:04 +00002447
Bodo Möllere172d602002-08-09 08:43:04 +00002448 if (rsa_count <= 1)
2449 {
2450 /* if longer than 10s, don't do any more */
2451 for (j++; j<EC_NUM; j++)
2452 ecdh_doit[j]=0;
2453 }
2454 }
2455 if (rnd_fake) RAND_cleanup();
2456#endif
Dr. Stephen Hensonb318cfb2009-08-10 15:30:40 +00002457#ifndef NO_FORK
Ben Laurie0e211562001-10-25 14:27:17 +00002458show_res:
Dr. Stephen Hensonb83eddc2001-11-06 13:40:27 +00002459#endif
Ben Laurie0e211562001-10-25 14:27:17 +00002460 if(!mr)
2461 {
2462 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_VERSION));
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002463 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_BUILT_ON));
Ben Laurie0e211562001-10-25 14:27:17 +00002464 printf("options:");
2465 printf("%s ",BN_options());
Richard Levittecf1b7d92001-02-19 16:06:34 +00002466#ifndef OPENSSL_NO_MD2
Ben Laurie0e211562001-10-25 14:27:17 +00002467 printf("%s ",MD2_options());
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002468#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00002469#ifndef OPENSSL_NO_RC4
Ben Laurie0e211562001-10-25 14:27:17 +00002470 printf("%s ",RC4_options());
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002471#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00002472#ifndef OPENSSL_NO_DES
Richard Levitte125cc352002-03-22 02:42:57 +00002473 printf("%s ",DES_options());
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002474#endif
Richard Levitteba1b8882002-01-02 16:57:57 +00002475#ifndef OPENSSL_NO_AES
2476 printf("%s ",AES_options());
2477#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00002478#ifndef OPENSSL_NO_IDEA
Ben Laurie0e211562001-10-25 14:27:17 +00002479 printf("%s ",idea_options());
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002480#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00002481#ifndef OPENSSL_NO_BF
Ben Laurie0e211562001-10-25 14:27:17 +00002482 printf("%s ",BF_options());
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002483#endif
Ben Laurie0e211562001-10-25 14:27:17 +00002484 fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS));
Ben Laurie0e211562001-10-25 14:27:17 +00002485 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002486
2487 if (pr_header)
2488 {
Ben Laurie0e211562001-10-25 14:27:17 +00002489 if(mr)
2490 fprintf(stdout,"+H");
2491 else
2492 {
2493 fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n");
2494 fprintf(stdout,"type ");
2495 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002496 for (j=0; j<SIZE_NUM; j++)
Ben Laurie0e211562001-10-25 14:27:17 +00002497 fprintf(stdout,mr ? ":%d" : "%7d bytes",lengths[j]);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002498 fprintf(stdout,"\n");
2499 }
2500
2501 for (k=0; k<ALGOR_NUM; k++)
2502 {
2503 if (!doit[k]) continue;
Ben Laurie0e211562001-10-25 14:27:17 +00002504 if(mr)
2505 fprintf(stdout,"+F:%d:%s",k,names[k]);
2506 else
2507 fprintf(stdout,"%-13s",names[k]);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002508 for (j=0; j<SIZE_NUM; j++)
2509 {
Ben Laurie0e211562001-10-25 14:27:17 +00002510 if (results[k][j] > 10000 && !mr)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002511 fprintf(stdout," %11.2fk",results[k][j]/1e3);
2512 else
Ben Laurie0e211562001-10-25 14:27:17 +00002513 fprintf(stdout,mr ? ":%.2f" : " %11.2f ",results[k][j]);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002514 }
2515 fprintf(stdout,"\n");
2516 }
Richard Levittecf1b7d92001-02-19 16:06:34 +00002517#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002518 j=1;
2519 for (k=0; k<RSA_NUM; k++)
2520 {
2521 if (!rsa_doit[k]) continue;
Ben Laurie0e211562001-10-25 14:27:17 +00002522 if (j && !mr)
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00002523 {
2524 printf("%18ssign verify sign/s verify/s\n"," ");
2525 j=0;
2526 }
Ben Laurie0e211562001-10-25 14:27:17 +00002527 if(mr)
2528 fprintf(stdout,"+F2:%u:%u:%f:%f\n",
2529 k,rsa_bits[k],rsa_results[k][0],
2530 rsa_results[k][1]);
2531 else
Bodo Möller46a64372005-05-16 01:43:31 +00002532 fprintf(stdout,"rsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n",
Ben Laurie0e211562001-10-25 14:27:17 +00002533 rsa_bits[k],rsa_results[k][0],rsa_results[k][1],
2534 1.0/rsa_results[k][0],1.0/rsa_results[k][1]);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002535 }
2536#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00002537#ifndef OPENSSL_NO_DSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002538 j=1;
2539 for (k=0; k<DSA_NUM; k++)
2540 {
2541 if (!dsa_doit[k]) continue;
Ben Laurie0e211562001-10-25 14:27:17 +00002542 if (j && !mr)
2543 {
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00002544 printf("%18ssign verify sign/s verify/s\n"," ");
2545 j=0;
2546 }
Ben Laurie0e211562001-10-25 14:27:17 +00002547 if(mr)
2548 fprintf(stdout,"+F3:%u:%u:%f:%f\n",
2549 k,dsa_bits[k],dsa_results[k][0],dsa_results[k][1]);
2550 else
Bodo Möller46a64372005-05-16 01:43:31 +00002551 fprintf(stdout,"dsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n",
Ben Laurie0e211562001-10-25 14:27:17 +00002552 dsa_bits[k],dsa_results[k][0],dsa_results[k][1],
2553 1.0/dsa_results[k][0],1.0/dsa_results[k][1]);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002554 }
2555#endif
Bodo Möllere172d602002-08-09 08:43:04 +00002556#ifndef OPENSSL_NO_ECDSA
2557 j=1;
2558 for (k=0; k<EC_NUM; k++)
2559 {
2560 if (!ecdsa_doit[k]) continue;
2561 if (j && !mr)
2562 {
2563 printf("%30ssign verify sign/s verify/s\n"," ");
2564 j=0;
2565 }
2566
2567 if (mr)
2568 fprintf(stdout,"+F4:%u:%u:%f:%f\n",
2569 k, test_curves_bits[k],
2570 ecdsa_results[k][0],ecdsa_results[k][1]);
2571 else
2572 fprintf(stdout,
2573 "%4u bit ecdsa (%s) %8.4fs %8.4fs %8.1f %8.1f\n",
2574 test_curves_bits[k],
2575 test_curves_names[k],
2576 ecdsa_results[k][0],ecdsa_results[k][1],
2577 1.0/ecdsa_results[k][0],1.0/ecdsa_results[k][1]);
2578 }
2579#endif
2580
2581
2582#ifndef OPENSSL_NO_ECDH
2583 j=1;
2584 for (k=0; k<EC_NUM; k++)
2585 {
2586 if (!ecdh_doit[k]) continue;
2587 if (j && !mr)
2588 {
2589 printf("%30sop op/s\n"," ");
2590 j=0;
2591 }
2592 if (mr)
2593 fprintf(stdout,"+F5:%u:%u:%f:%f\n",
2594 k, test_curves_bits[k],
2595 ecdh_results[k][0], 1.0/ecdh_results[k][0]);
2596
2597 else
2598 fprintf(stdout,"%4u bit ecdh (%s) %8.4fs %8.1f\n",
2599 test_curves_bits[k],
2600 test_curves_names[k],
2601 ecdh_results[k][0], 1.0/ecdh_results[k][0]);
2602 }
2603#endif
2604
Ben Laurie18c77bf1999-10-03 18:09:45 +00002605 mret=0;
Bodo Möllere172d602002-08-09 08:43:04 +00002606
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002607end:
Richard Levitte5270e702000-10-26 21:07:28 +00002608 ERR_print_errors(bio_err);
Richard Levitte26a3a482000-06-01 22:19:21 +00002609 if (buf != NULL) OPENSSL_free(buf);
2610 if (buf2 != NULL) OPENSSL_free(buf2);
Richard Levittecf1b7d92001-02-19 16:06:34 +00002611#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002612 for (i=0; i<RSA_NUM; i++)
2613 if (rsa_key[i] != NULL)
2614 RSA_free(rsa_key[i]);
2615#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00002616#ifndef OPENSSL_NO_DSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002617 for (i=0; i<DSA_NUM; i++)
2618 if (dsa_key[i] != NULL)
2619 DSA_free(dsa_key[i]);
2620#endif
Bodo Möllere172d602002-08-09 08:43:04 +00002621
2622#ifndef OPENSSL_NO_ECDSA
2623 for (i=0; i<EC_NUM; i++)
2624 if (ecdsa[i] != NULL)
2625 EC_KEY_free(ecdsa[i]);
2626#endif
2627#ifndef OPENSSL_NO_ECDH
2628 for (i=0; i<EC_NUM; i++)
2629 {
2630 if (ecdh_a[i] != NULL)
2631 EC_KEY_free(ecdh_a[i]);
2632 if (ecdh_b[i] != NULL)
2633 EC_KEY_free(ecdh_b[i]);
2634 }
2635#endif
2636
Richard Levittec04f8cf2001-06-23 16:37:32 +00002637 apps_shutdown();
Richard Levitte1c3e4a32002-12-03 16:33:03 +00002638 OPENSSL_EXIT(mret);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002639 }
2640
Ben Laurie646d5692000-11-20 04:14:19 +00002641static void print_message(const char *s, long num, int length)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002642 {
2643#ifdef SIGALRM
Ben Laurie0e211562001-10-25 14:27:17 +00002644 BIO_printf(bio_err,mr ? "+DT:%s:%d:%d\n"
2645 : "Doing %s for %ds on %d size blocks: ",s,SECONDS,length);
Bodo Möllerd58d0921999-06-10 16:29:32 +00002646 (void)BIO_flush(bio_err);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002647 alarm(SECONDS);
2648#else
Ben Laurie0e211562001-10-25 14:27:17 +00002649 BIO_printf(bio_err,mr ? "+DN:%s:%ld:%d\n"
2650 : "Doing %s %ld times on %d size blocks: ",s,num,length);
Bodo Möllerd58d0921999-06-10 16:29:32 +00002651 (void)BIO_flush(bio_err);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002652#endif
2653#ifdef LINT
2654 num=num;
2655#endif
2656 }
2657
Felix Laurie von Massenbachb5419b82014-05-26 21:57:25 +01002658static void prime_print_message(const char *s, long num)
2659 {
2660#ifdef SIGALRM
2661 BIO_printf(bio_err,mr ? "+DT:%s:%d\n"
Felix Laurie von Massenbachb3596422014-05-27 00:33:42 +01002662 : "Doing %s for %ds: ", s, PRIME_SECONDS);
Felix Laurie von Massenbachb5419b82014-05-26 21:57:25 +01002663 (void)BIO_flush(bio_err);
Felix Laurie von Massenbachb3596422014-05-27 00:33:42 +01002664 alarm(PRIME_SECONDS);
Felix Laurie von Massenbachb5419b82014-05-26 21:57:25 +01002665#else
2666 BIO_printf(bio_err,mr ? "+DN:%s:%ld\n"
2667 : "Doing %s %ld times: ", s, num);
2668 (void)BIO_flush(bio_err);
2669#endif
2670#ifdef LINT
2671 num=num;
2672#endif
2673 }
2674
Nils Larsch689c6f22005-03-20 23:12:13 +00002675static void pkey_print_message(const char *str, const char *str2, long num,
2676 int bits, int tm)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002677 {
2678#ifdef SIGALRM
Ben Laurie0e211562001-10-25 14:27:17 +00002679 BIO_printf(bio_err,mr ? "+DTP:%d:%s:%s:%d\n"
2680 : "Doing %d bit %s %s's for %ds: ",bits,str,str2,tm);
Bodo Möllerd58d0921999-06-10 16:29:32 +00002681 (void)BIO_flush(bio_err);
Andy Polyakov5beb93e2012-01-11 21:48:31 +00002682 alarm(tm);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002683#else
Ben Laurie0e211562001-10-25 14:27:17 +00002684 BIO_printf(bio_err,mr ? "+DNP:%ld:%d:%s:%s\n"
2685 : "Doing %ld %d bit %s %s's: ",num,bits,str,str2);
Bodo Möllerd58d0921999-06-10 16:29:32 +00002686 (void)BIO_flush(bio_err);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00002687#endif
2688#ifdef LINT
2689 num=num;
2690#endif
2691 }
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00002692
Ben Laurie0e211562001-10-25 14:27:17 +00002693static void print_result(int alg,int run_no,int count,double time_used)
2694 {
Richard Levitte3ae70932003-04-03 23:39:48 +00002695 BIO_printf(bio_err,mr ? "+R:%d:%s:%f\n"
2696 : "%d %s's in %.2fs\n",count,names[alg],time_used);
Ben Laurie0e211562001-10-25 14:27:17 +00002697 results[alg][run_no]=((double)count)/time_used*lengths[run_no];
2698 }
2699
Felix Laurie von Massenbachb3596422014-05-27 00:33:42 +01002700static void prime_print_result(int alg, int count, double time_used)
2701 {
2702 BIO_printf(bio_err,
Felix Laurie von Massenbachc09ec5d2014-05-27 02:12:59 +01002703 mr ? "+R:%d:%s:%f:%f\n" : "%d %s's in %.2fs (%.2f microseconds / run)\n",
Felix Laurie von Massenbachb3596422014-05-27 00:33:42 +01002704 count, prime_names[alg], time_used,
Felix Laurie von Massenbachc09ec5d2014-05-27 02:12:59 +01002705 time_used / ((double)count) * 1000000);
Felix Laurie von Massenbachb3596422014-05-27 00:33:42 +01002706 }
2707
Dr. Stephen Hensonb318cfb2009-08-10 15:30:40 +00002708#ifndef NO_FORK
Ben Laurie0e211562001-10-25 14:27:17 +00002709static char *sstrsep(char **string, const char *delim)
2710 {
2711 char isdelim[256];
2712 char *token = *string;
2713
2714 if (**string == 0)
2715 return NULL;
2716
Ben Laurie54a656e2002-11-13 15:43:43 +00002717 memset(isdelim, 0, sizeof isdelim);
Ben Laurie0e211562001-10-25 14:27:17 +00002718 isdelim[0] = 1;
2719
2720 while (*delim)
2721 {
2722 isdelim[(unsigned char)(*delim)] = 1;
2723 delim++;
2724 }
2725
2726 while (!isdelim[(unsigned char)(**string)])
2727 {
2728 (*string)++;
2729 }
2730
2731 if (**string)
2732 {
2733 **string = 0;
2734 (*string)++;
2735 }
2736
2737 return token;
2738 }
2739
2740static int do_multi(int multi)
2741 {
2742 int n;
2743 int fd[2];
2744 int *fds;
2745 static char sep[]=":";
2746
2747 fds=malloc(multi*sizeof *fds);
2748 for(n=0 ; n < multi ; ++n)
2749 {
Dr. Stephen Henson27131fe2011-03-17 14:43:13 +00002750 if (pipe(fd) == -1)
2751 {
2752 fprintf(stderr, "pipe failure\n");
2753 exit(1);
2754 }
Lutz Jänicked88d9412008-12-10 08:03:47 +00002755 fflush(stdout);
2756 fflush(stderr);
Ben Laurie0e211562001-10-25 14:27:17 +00002757 if(fork())
2758 {
2759 close(fd[1]);
2760 fds[n]=fd[0];
2761 }
2762 else
2763 {
2764 close(fd[0]);
2765 close(1);
Dr. Stephen Henson27131fe2011-03-17 14:43:13 +00002766 if (dup(fd[1]) == -1)
2767 {
2768 fprintf(stderr, "dup failed\n");
2769 exit(1);
2770 }
Ben Laurie0e211562001-10-25 14:27:17 +00002771 close(fd[1]);
2772 mr=1;
2773 usertime=0;
Ben Laurie44907e62007-04-05 15:45:22 +00002774 free(fds);
Ben Laurie0e211562001-10-25 14:27:17 +00002775 return 0;
2776 }
2777 printf("Forked child %d\n",n);
2778 }
2779
2780 /* for now, assume the pipe is long enough to take all the output */
2781 for(n=0 ; n < multi ; ++n)
2782 {
2783 FILE *f;
2784 char buf[1024];
2785 char *p;
2786
2787 f=fdopen(fds[n],"r");
2788 while(fgets(buf,sizeof buf,f))
2789 {
2790 p=strchr(buf,'\n');
2791 if(p)
2792 *p='\0';
2793 if(buf[0] != '+')
2794 {
2795 fprintf(stderr,"Don't understand line '%s' from child %d\n",
2796 buf,n);
2797 continue;
2798 }
2799 printf("Got: %s from %d\n",buf,n);
2800 if(!strncmp(buf,"+F:",3))
2801 {
2802 int alg;
2803 int j;
2804
2805 p=buf+3;
2806 alg=atoi(sstrsep(&p,sep));
2807 sstrsep(&p,sep);
2808 for(j=0 ; j < SIZE_NUM ; ++j)
2809 results[alg][j]+=atof(sstrsep(&p,sep));
2810 }
2811 else if(!strncmp(buf,"+F2:",4))
2812 {
2813 int k;
2814 double d;
2815
2816 p=buf+4;
2817 k=atoi(sstrsep(&p,sep));
2818 sstrsep(&p,sep);
2819
2820 d=atof(sstrsep(&p,sep));
2821 if(n)
2822 rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d);
2823 else
2824 rsa_results[k][0]=d;
2825
2826 d=atof(sstrsep(&p,sep));
2827 if(n)
2828 rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d);
2829 else
2830 rsa_results[k][1]=d;
2831 }
2832 else if(!strncmp(buf,"+F2:",4))
2833 {
2834 int k;
2835 double d;
2836
2837 p=buf+4;
2838 k=atoi(sstrsep(&p,sep));
2839 sstrsep(&p,sep);
2840
2841 d=atof(sstrsep(&p,sep));
2842 if(n)
2843 rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d);
2844 else
2845 rsa_results[k][0]=d;
2846
2847 d=atof(sstrsep(&p,sep));
2848 if(n)
2849 rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d);
2850 else
2851 rsa_results[k][1]=d;
2852 }
Dr. Stephen Henson329c7442011-03-10 18:26:50 +00002853#ifndef OPENSSL_NO_DSA
Ben Laurie0e211562001-10-25 14:27:17 +00002854 else if(!strncmp(buf,"+F3:",4))
2855 {
2856 int k;
2857 double d;
2858
2859 p=buf+4;
2860 k=atoi(sstrsep(&p,sep));
2861 sstrsep(&p,sep);
2862
2863 d=atof(sstrsep(&p,sep));
2864 if(n)
2865 dsa_results[k][0]=1/(1/dsa_results[k][0]+1/d);
2866 else
2867 dsa_results[k][0]=d;
2868
2869 d=atof(sstrsep(&p,sep));
2870 if(n)
2871 dsa_results[k][1]=1/(1/dsa_results[k][1]+1/d);
2872 else
2873 dsa_results[k][1]=d;
2874 }
Dr. Stephen Henson329c7442011-03-10 18:26:50 +00002875#endif
Bodo Möllere172d602002-08-09 08:43:04 +00002876#ifndef OPENSSL_NO_ECDSA
2877 else if(!strncmp(buf,"+F4:",4))
2878 {
2879 int k;
2880 double d;
2881
2882 p=buf+4;
2883 k=atoi(sstrsep(&p,sep));
2884 sstrsep(&p,sep);
2885
2886 d=atof(sstrsep(&p,sep));
2887 if(n)
2888 ecdsa_results[k][0]=1/(1/ecdsa_results[k][0]+1/d);
2889 else
2890 ecdsa_results[k][0]=d;
2891
2892 d=atof(sstrsep(&p,sep));
2893 if(n)
2894 ecdsa_results[k][1]=1/(1/ecdsa_results[k][1]+1/d);
2895 else
2896 ecdsa_results[k][1]=d;
2897 }
2898#endif
2899
2900#ifndef OPENSSL_NO_ECDH
2901 else if(!strncmp(buf,"+F5:",4))
2902 {
2903 int k;
2904 double d;
2905
2906 p=buf+4;
2907 k=atoi(sstrsep(&p,sep));
2908 sstrsep(&p,sep);
2909
2910 d=atof(sstrsep(&p,sep));
2911 if(n)
2912 ecdh_results[k][0]=1/(1/ecdh_results[k][0]+1/d);
2913 else
2914 ecdh_results[k][0]=d;
2915
2916 }
2917#endif
2918
Ben Laurie0e211562001-10-25 14:27:17 +00002919 else if(!strncmp(buf,"+H:",3))
2920 {
2921 }
2922 else
2923 fprintf(stderr,"Unknown type '%s' from child %d\n",buf,n);
2924 }
Ben Laurie231671b2007-04-04 16:00:03 +00002925
2926 fclose(f);
Ben Laurie0e211562001-10-25 14:27:17 +00002927 }
Ben Laurie3dfb6b32007-04-07 13:20:09 +00002928 free(fds);
Ben Laurie0e211562001-10-25 14:27:17 +00002929 return 1;
2930 }
Richard Levitte66d3e742001-10-25 16:08:17 +00002931#endif
Richard Levitte85d686e2003-02-14 01:02:58 +00002932#endif