1110007Smarkm/* apps/speed.c -*- mode:C; c-file-style: "eay" -*- */ 255714Skris/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 355714Skris * All rights reserved. 455714Skris * 555714Skris * This package is an SSL implementation written 655714Skris * by Eric Young (eay@cryptsoft.com). 755714Skris * The implementation was written so as to conform with Netscapes SSL. 855714Skris * 955714Skris * This library is free for commercial and non-commercial use as long as 1055714Skris * the following conditions are aheared to. The following conditions 1155714Skris * apply to all code found in this distribution, be it the RC4, RSA, 1255714Skris * lhash, DES, etc., code; not just the SSL code. The SSL documentation 1355714Skris * included with this distribution is covered by the same copyright terms 1455714Skris * except that the holder is Tim Hudson (tjh@cryptsoft.com). 1555714Skris * 1655714Skris * Copyright remains Eric Young's, and as such any Copyright notices in 1755714Skris * the code are not to be removed. 1855714Skris * If this package is used in a product, Eric Young should be given attribution 1955714Skris * as the author of the parts of the library used. 2055714Skris * This can be in the form of a textual message at program startup or 2155714Skris * in documentation (online or textual) provided with the package. 2255714Skris * 2355714Skris * Redistribution and use in source and binary forms, with or without 2455714Skris * modification, are permitted provided that the following conditions 2555714Skris * are met: 2655714Skris * 1. Redistributions of source code must retain the copyright 2755714Skris * notice, this list of conditions and the following disclaimer. 2855714Skris * 2. Redistributions in binary form must reproduce the above copyright 2955714Skris * notice, this list of conditions and the following disclaimer in the 3055714Skris * documentation and/or other materials provided with the distribution. 3155714Skris * 3. All advertising materials mentioning features or use of this software 3255714Skris * must display the following acknowledgement: 3355714Skris * "This product includes cryptographic software written by 3455714Skris * Eric Young (eay@cryptsoft.com)" 3555714Skris * The word 'cryptographic' can be left out if the rouines from the library 3655714Skris * being used are not cryptographic related :-). 3755714Skris * 4. If you include any Windows specific code (or a derivative thereof) from 3855714Skris * the apps directory (application code) you must include an acknowledgement: 3955714Skris * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 4055714Skris * 4155714Skris * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 4255714Skris * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 4355714Skris * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 4455714Skris * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 4555714Skris * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 4655714Skris * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 4755714Skris * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 4855714Skris * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 4955714Skris * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 5055714Skris * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 5155714Skris * SUCH DAMAGE. 5255714Skris * 5355714Skris * The licence and distribution terms for any publically available version or 5455714Skris * derivative of this code cannot be changed. i.e. this code cannot simply be 5555714Skris * copied and put under another distribution licence 5655714Skris * [including the GNU Public Licence.] 5755714Skris */ 58160817Ssimon/* ==================================================================== 59160817Ssimon * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. 60160817Ssimon * 61160817Ssimon * Portions of the attached software ("Contribution") are developed by 62160817Ssimon * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. 63160817Ssimon * 64160817Ssimon * The Contribution is licensed pursuant to the OpenSSL open source 65160817Ssimon * license provided above. 66160817Ssimon * 67160817Ssimon * The ECDH and ECDSA speed test software is originally written by 68160817Ssimon * Sumit Gupta of Sun Microsystems Laboratories. 69160817Ssimon * 70160817Ssimon */ 7155714Skris 7255714Skris/* most of this code has been pilfered from my libdes speed.c program */ 7355714Skris 74111150Snectar#ifndef OPENSSL_NO_SPEED 75111150Snectar 7655714Skris#undef SECONDS 7755714Skris#define SECONDS 3 7855714Skris#define RSA_SECONDS 10 7955714Skris#define DSA_SECONDS 10 80160817Ssimon#define ECDSA_SECONDS 10 81160817Ssimon#define ECDH_SECONDS 10 8255714Skris 8355714Skris/* 11-Sep-92 Andrew Daviel Support for Silicon Graphics IRIX added */ 8455714Skris/* 06-Apr-92 Luke Brennan Support for VMS and add extra signal calls */ 8555714Skris 8655714Skris#undef PROG 8755714Skris#define PROG speed_main 8855714Skris 8955714Skris#include <stdio.h> 9055714Skris#include <stdlib.h> 91160817Ssimon 9255714Skris#include <string.h> 9355714Skris#include <math.h> 9455714Skris#include "apps.h" 95110007Smarkm#ifdef OPENSSL_NO_STDIO 9655714Skris#define APPS_WIN16 9755714Skris#endif 9855714Skris#include <openssl/crypto.h> 9955714Skris#include <openssl/rand.h> 10055714Skris#include <openssl/err.h> 101110007Smarkm#include <openssl/evp.h> 102110007Smarkm#include <openssl/objects.h> 103110007Smarkm#if !defined(OPENSSL_SYS_MSDOS) 104110007Smarkm#include OPENSSL_UNISTD 105110007Smarkm#endif 10655714Skris 107160817Ssimon#ifndef OPENSSL_SYS_NETWARE 108160817Ssimon#include <signal.h> 109160817Ssimon#endif 110160817Ssimon 111238405Sjkim#if defined(_WIN32) || defined(__CYGWIN__) 112238405Sjkim#include <windows.h> 113238405Sjkim# if defined(__CYGWIN__) && !defined(_WIN32) 114238405Sjkim /* <windows.h> should define _WIN32, which normally is mutually 115238405Sjkim * exclusive with __CYGWIN__, but if it didn't... */ 116238405Sjkim# define _WIN32 117238405Sjkim /* this is done because Cygwin alarm() fails sometimes. */ 118238405Sjkim# endif 11955714Skris#endif 12055714Skris 121160817Ssimon#include <openssl/bn.h> 122110007Smarkm#ifndef OPENSSL_NO_DES 12355714Skris#include <openssl/des.h> 12455714Skris#endif 125110007Smarkm#ifndef OPENSSL_NO_AES 126110007Smarkm#include <openssl/aes.h> 127110007Smarkm#endif 128162914Ssimon#ifndef OPENSSL_NO_CAMELLIA 129162914Ssimon#include <openssl/camellia.h> 130162914Ssimon#endif 131110007Smarkm#ifndef OPENSSL_NO_MD2 13255714Skris#include <openssl/md2.h> 13355714Skris#endif 134110007Smarkm#ifndef OPENSSL_NO_MDC2 13555714Skris#include <openssl/mdc2.h> 13655714Skris#endif 137110007Smarkm#ifndef OPENSSL_NO_MD4 13868654Skris#include <openssl/md4.h> 13968654Skris#endif 140110007Smarkm#ifndef OPENSSL_NO_MD5 14155714Skris#include <openssl/md5.h> 14255714Skris#endif 143110007Smarkm#ifndef OPENSSL_NO_HMAC 14455714Skris#include <openssl/hmac.h> 14555714Skris#endif 14655714Skris#include <openssl/evp.h> 147110007Smarkm#ifndef OPENSSL_NO_SHA 14855714Skris#include <openssl/sha.h> 14955714Skris#endif 150110007Smarkm#ifndef OPENSSL_NO_RIPEMD 15155714Skris#include <openssl/ripemd.h> 15255714Skris#endif 153238405Sjkim#ifndef OPENSSL_NO_WHIRLPOOL 154238405Sjkim#include <openssl/whrlpool.h> 155238405Sjkim#endif 156110007Smarkm#ifndef OPENSSL_NO_RC4 15755714Skris#include <openssl/rc4.h> 15855714Skris#endif 159110007Smarkm#ifndef OPENSSL_NO_RC5 16055714Skris#include <openssl/rc5.h> 16155714Skris#endif 162110007Smarkm#ifndef OPENSSL_NO_RC2 16355714Skris#include <openssl/rc2.h> 16455714Skris#endif 165110007Smarkm#ifndef OPENSSL_NO_IDEA 16655714Skris#include <openssl/idea.h> 16755714Skris#endif 168194206Ssimon#ifndef OPENSSL_NO_SEED 169194206Ssimon#include <openssl/seed.h> 170194206Ssimon#endif 171110007Smarkm#ifndef OPENSSL_NO_BF 17255714Skris#include <openssl/blowfish.h> 17355714Skris#endif 174110007Smarkm#ifndef OPENSSL_NO_CAST 17555714Skris#include <openssl/cast.h> 17655714Skris#endif 177110007Smarkm#ifndef OPENSSL_NO_RSA 17855714Skris#include <openssl/rsa.h> 17955714Skris#include "./testrsa.h" 18055714Skris#endif 18155714Skris#include <openssl/x509.h> 182110007Smarkm#ifndef OPENSSL_NO_DSA 183160817Ssimon#include <openssl/dsa.h> 18455714Skris#include "./testdsa.h" 18555714Skris#endif 186160817Ssimon#ifndef OPENSSL_NO_ECDSA 187160817Ssimon#include <openssl/ecdsa.h> 188160817Ssimon#endif 189160817Ssimon#ifndef OPENSSL_NO_ECDH 190160817Ssimon#include <openssl/ecdh.h> 191160817Ssimon#endif 192238405Sjkim#include <openssl/modes.h> 19355714Skris 194238405Sjkim#ifdef OPENSSL_FIPS 195238405Sjkim#ifdef OPENSSL_DOING_MAKEDEPEND 196238405Sjkim#undef AES_set_encrypt_key 197238405Sjkim#undef AES_set_decrypt_key 198238405Sjkim#undef DES_set_key_unchecked 19955714Skris#endif 200238405Sjkim#define BF_set_key private_BF_set_key 201238405Sjkim#define CAST_set_key private_CAST_set_key 202238405Sjkim#define idea_set_encrypt_key private_idea_set_encrypt_key 203238405Sjkim#define SEED_set_key private_SEED_set_key 204238405Sjkim#define RC2_set_key private_RC2_set_key 205238405Sjkim#define RC4_set_key private_RC4_set_key 206238405Sjkim#define DES_set_key_unchecked private_DES_set_key_unchecked 207238405Sjkim#define AES_set_encrypt_key private_AES_set_encrypt_key 208238405Sjkim#define AES_set_decrypt_key private_AES_set_decrypt_key 209238405Sjkim#define Camellia_set_key private_Camellia_set_key 210238405Sjkim#endif 21155714Skris 212206046Ssimon#ifndef HAVE_FORK 213206046Ssimon# if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_NETWARE) 214206046Ssimon# define HAVE_FORK 0 215206046Ssimon# else 216206046Ssimon# define HAVE_FORK 1 217206046Ssimon# endif 218206046Ssimon#endif 219206046Ssimon 220206046Ssimon#if HAVE_FORK 221238405Sjkim#undef NO_FORK 222205128Ssimon#else 223238405Sjkim#define NO_FORK 224110007Smarkm#endif 225110007Smarkm 22655714Skris#undef BUFSIZE 22755714Skris#define BUFSIZE ((long)1024*8+1) 228279264Sdelphijstatic volatile int run=0; 22955714Skris 230110007Smarkmstatic int mr=0; 231110007Smarkmstatic int usertime=1; 232110007Smarkm 233110007Smarkmstatic double Time_F(int s); 234110007Smarkmstatic void print_message(const char *s,long num,int length); 235160817Ssimonstatic void pkey_print_message(const char *str, const char *str2, 236160817Ssimon long num, int bits, int sec); 237110007Smarkmstatic void print_result(int alg,int run_no,int count,double time_used); 238205128Ssimon#ifndef NO_FORK 239110007Smarkmstatic int do_multi(int multi); 240110007Smarkm#endif 241110007Smarkm 242238405Sjkim#define ALGOR_NUM 30 243110007Smarkm#define SIZE_NUM 5 244110007Smarkm#define RSA_NUM 4 245110007Smarkm#define DSA_NUM 3 246160817Ssimon 247160817Ssimon#define EC_NUM 16 248160817Ssimon#define MAX_ECDH_SIZE 256 249160817Ssimon 250110007Smarkmstatic const char *names[ALGOR_NUM]={ 251110007Smarkm "md2","mdc2","md4","md5","hmac(md5)","sha1","rmd160","rc4", 252194206Ssimon "des cbc","des ede3","idea cbc","seed cbc", 253110007Smarkm "rc2 cbc","rc5-32/12 cbc","blowfish cbc","cast cbc", 254162914Ssimon "aes-128 cbc","aes-192 cbc","aes-256 cbc", 255162914Ssimon "camellia-128 cbc","camellia-192 cbc","camellia-256 cbc", 256238405Sjkim "evp","sha256","sha512","whirlpool", 257246772Sjkim "aes-128 ige","aes-192 ige","aes-256 ige","ghash" }; 258110007Smarkmstatic double results[ALGOR_NUM][SIZE_NUM]; 259110007Smarkmstatic int lengths[SIZE_NUM]={16,64,256,1024,8*1024}; 260205128Ssimon#ifndef OPENSSL_NO_RSA 261110007Smarkmstatic double rsa_results[RSA_NUM][2]; 262205128Ssimon#endif 263205128Ssimon#ifndef OPENSSL_NO_DSA 264110007Smarkmstatic double dsa_results[DSA_NUM][2]; 265205128Ssimon#endif 266160817Ssimon#ifndef OPENSSL_NO_ECDSA 267160817Ssimonstatic double ecdsa_results[EC_NUM][2]; 268160817Ssimon#endif 269160817Ssimon#ifndef OPENSSL_NO_ECDH 270160817Ssimonstatic double ecdh_results[EC_NUM][1]; 271160817Ssimon#endif 272110007Smarkm 273160817Ssimon#if defined(OPENSSL_NO_DSA) && !(defined(OPENSSL_NO_ECDSA) && defined(OPENSSL_NO_ECDH)) 274160817Ssimonstatic const char rnd_seed[] = "string to make the random number generator think it has entropy"; 275160817Ssimonstatic int rnd_fake = 0; 276160817Ssimon#endif 277160817Ssimon 27855714Skris#ifdef SIGALRM 27955714Skris#if defined(__STDC__) || defined(sgi) || defined(_AIX) 28055714Skris#define SIGRETTYPE void 28155714Skris#else 28255714Skris#define SIGRETTYPE int 28355714Skris#endif 28455714Skris 28555714Skrisstatic SIGRETTYPE sig_done(int sig); 28655714Skrisstatic SIGRETTYPE sig_done(int sig) 28755714Skris { 28855714Skris signal(SIGALRM,sig_done); 28955714Skris run=0; 29055714Skris#ifdef LINT 29155714Skris sig=sig; 29255714Skris#endif 29355714Skris } 29455714Skris#endif 29555714Skris 29655714Skris#define START 0 29755714Skris#define STOP 1 29855714Skris 299238405Sjkim#if defined(_WIN32) 300160817Ssimon 301238405Sjkim#if !defined(SIGALRM) 302246772Sjkim# define SIGALRM 303238405Sjkim#endif 304238405Sjkimstatic unsigned int lapse,schlock; 305238405Sjkimstatic void alarm_win32(unsigned int secs) { lapse = secs*1000; } 306238405Sjkim#define alarm alarm_win32 307238405Sjkim 308238405Sjkimstatic DWORD WINAPI sleepy(VOID *arg) 30955714Skris { 310238405Sjkim schlock = 1; 311238405Sjkim Sleep(lapse); 312238405Sjkim run = 0; 313238405Sjkim return 0; 314238405Sjkim } 31555714Skris 316160817Ssimonstatic double Time_F(int s) 317160817Ssimon { 318238405Sjkim if (s == START) 319160817Ssimon { 320238405Sjkim HANDLE thr; 321238405Sjkim schlock = 0; 322238405Sjkim thr = CreateThread(NULL,4096,sleepy,NULL,0,NULL); 323238405Sjkim if (thr==NULL) 32468654Skris { 325238405Sjkim DWORD ret=GetLastError(); 326238405Sjkim BIO_printf(bio_err,"unable to CreateThread (%d)",ret); 327238405Sjkim ExitProcess(ret); 32868654Skris } 329238405Sjkim CloseHandle(thr); /* detach the thread */ 330238405Sjkim while (!schlock) Sleep(0); /* scheduler spinlock */ 33155714Skris } 33268654Skris 333238405Sjkim return app_tminterval(s,usertime); 334238405Sjkim } 335238405Sjkim#else 33655714Skris 337238405Sjkimstatic double Time_F(int s) 338238405Sjkim { 339238405Sjkim return app_tminterval(s,usertime); 340238405Sjkim } 34155714Skris#endif 34255714Skris 343160817Ssimon 344160817Ssimon#ifndef OPENSSL_NO_ECDH 345160817Ssimonstatic const int KDF1_SHA1_len = 20; 346160817Ssimonstatic void *KDF1_SHA1(const void *in, size_t inlen, void *out, size_t *outlen) 347160817Ssimon { 348160817Ssimon#ifndef OPENSSL_NO_SHA 349160817Ssimon if (*outlen < SHA_DIGEST_LENGTH) 350160817Ssimon return NULL; 351160817Ssimon else 352160817Ssimon *outlen = SHA_DIGEST_LENGTH; 353160817Ssimon return SHA1(in, inlen, out); 354160817Ssimon#else 355160817Ssimon return NULL; 356160817Ssimon#endif /* OPENSSL_NO_SHA */ 357160817Ssimon } 358160817Ssimon#endif /* OPENSSL_NO_ECDH */ 359160817Ssimon 360160817Ssimon 36159194Skrisint MAIN(int, char **); 36259194Skris 36355714Skrisint MAIN(int argc, char **argv) 36455714Skris { 36555714Skris unsigned char *buf=NULL,*buf2=NULL; 36659194Skris int mret=1; 367110007Smarkm long count=0,save_count=0; 36859194Skris int i,j,k; 369110007Smarkm#if !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_DSA) 370110007Smarkm long rsa_count; 371110007Smarkm#endif 372110007Smarkm#ifndef OPENSSL_NO_RSA 37368654Skris unsigned rsa_num; 374100931Snectar#endif 375110007Smarkm unsigned char md[EVP_MAX_MD_SIZE]; 376110007Smarkm#ifndef OPENSSL_NO_MD2 37755714Skris unsigned char md2[MD2_DIGEST_LENGTH]; 37855714Skris#endif 379110007Smarkm#ifndef OPENSSL_NO_MDC2 38055714Skris unsigned char mdc2[MDC2_DIGEST_LENGTH]; 38155714Skris#endif 382110007Smarkm#ifndef OPENSSL_NO_MD4 38368654Skris unsigned char md4[MD4_DIGEST_LENGTH]; 38468654Skris#endif 385110007Smarkm#ifndef OPENSSL_NO_MD5 38655714Skris unsigned char md5[MD5_DIGEST_LENGTH]; 38755714Skris unsigned char hmac[MD5_DIGEST_LENGTH]; 38855714Skris#endif 389110007Smarkm#ifndef OPENSSL_NO_SHA 39055714Skris unsigned char sha[SHA_DIGEST_LENGTH]; 391160817Ssimon#ifndef OPENSSL_NO_SHA256 392160817Ssimon unsigned char sha256[SHA256_DIGEST_LENGTH]; 39355714Skris#endif 394160817Ssimon#ifndef OPENSSL_NO_SHA512 395160817Ssimon unsigned char sha512[SHA512_DIGEST_LENGTH]; 396160817Ssimon#endif 397160817Ssimon#endif 398238405Sjkim#ifndef OPENSSL_NO_WHIRLPOOL 399238405Sjkim unsigned char whirlpool[WHIRLPOOL_DIGEST_LENGTH]; 400238405Sjkim#endif 401110007Smarkm#ifndef OPENSSL_NO_RIPEMD 40255714Skris unsigned char rmd160[RIPEMD160_DIGEST_LENGTH]; 40355714Skris#endif 404110007Smarkm#ifndef OPENSSL_NO_RC4 40555714Skris RC4_KEY rc4_ks; 40655714Skris#endif 407110007Smarkm#ifndef OPENSSL_NO_RC5 40855714Skris RC5_32_KEY rc5_ks; 40955714Skris#endif 410110007Smarkm#ifndef OPENSSL_NO_RC2 41155714Skris RC2_KEY rc2_ks; 41255714Skris#endif 413110007Smarkm#ifndef OPENSSL_NO_IDEA 41455714Skris IDEA_KEY_SCHEDULE idea_ks; 41555714Skris#endif 416194206Ssimon#ifndef OPENSSL_NO_SEED 417194206Ssimon SEED_KEY_SCHEDULE seed_ks; 418194206Ssimon#endif 419110007Smarkm#ifndef OPENSSL_NO_BF 42055714Skris BF_KEY bf_ks; 42155714Skris#endif 422110007Smarkm#ifndef OPENSSL_NO_CAST 42355714Skris CAST_KEY cast_ks; 42455714Skris#endif 425110007Smarkm static const unsigned char key16[16]= 42655714Skris {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0, 42755714Skris 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12}; 428160817Ssimon#ifndef OPENSSL_NO_AES 429110007Smarkm static const unsigned char key24[24]= 430110007Smarkm {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0, 431110007Smarkm 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12, 432110007Smarkm 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34}; 433110007Smarkm static const unsigned char key32[32]= 434110007Smarkm {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0, 435110007Smarkm 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12, 436110007Smarkm 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34, 437110007Smarkm 0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,0x56}; 438160817Ssimon#endif 439162914Ssimon#ifndef OPENSSL_NO_CAMELLIA 440162914Ssimon static const unsigned char ckey24[24]= 441162914Ssimon {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0, 442162914Ssimon 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12, 443162914Ssimon 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34}; 444162914Ssimon static const unsigned char ckey32[32]= 445162914Ssimon {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0, 446162914Ssimon 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12, 447162914Ssimon 0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34, 448162914Ssimon 0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,0x56}; 449162914Ssimon#endif 450110007Smarkm#ifndef OPENSSL_NO_AES 451110007Smarkm#define MAX_BLOCK_SIZE 128 452110007Smarkm#else 453110007Smarkm#define MAX_BLOCK_SIZE 64 45455714Skris#endif 455110007Smarkm unsigned char DES_iv[8]; 456194206Ssimon unsigned char iv[2*MAX_BLOCK_SIZE/8]; 457110007Smarkm#ifndef OPENSSL_NO_DES 458110007Smarkm static DES_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0}; 459110007Smarkm static DES_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12}; 460110007Smarkm static DES_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34}; 461110007Smarkm DES_key_schedule sch; 462110007Smarkm DES_key_schedule sch2; 463110007Smarkm DES_key_schedule sch3; 464110007Smarkm#endif 465110007Smarkm#ifndef OPENSSL_NO_AES 466110007Smarkm AES_KEY aes_ks1, aes_ks2, aes_ks3; 467110007Smarkm#endif 468162914Ssimon#ifndef OPENSSL_NO_CAMELLIA 469162914Ssimon CAMELLIA_KEY camellia_ks1, camellia_ks2, camellia_ks3; 470162914Ssimon#endif 47155714Skris#define D_MD2 0 47255714Skris#define D_MDC2 1 47368654Skris#define D_MD4 2 47468654Skris#define D_MD5 3 47568654Skris#define D_HMAC 4 47668654Skris#define D_SHA1 5 47768654Skris#define D_RMD160 6 47868654Skris#define D_RC4 7 47968654Skris#define D_CBC_DES 8 48068654Skris#define D_EDE3_DES 9 48168654Skris#define D_CBC_IDEA 10 482194206Ssimon#define D_CBC_SEED 11 483194206Ssimon#define D_CBC_RC2 12 484194206Ssimon#define D_CBC_RC5 13 485194206Ssimon#define D_CBC_BF 14 486194206Ssimon#define D_CBC_CAST 15 487194206Ssimon#define D_CBC_128_AES 16 488194206Ssimon#define D_CBC_192_AES 17 489194206Ssimon#define D_CBC_256_AES 18 490194206Ssimon#define D_CBC_128_CML 19 491194206Ssimon#define D_CBC_192_CML 20 492194206Ssimon#define D_CBC_256_CML 21 493194206Ssimon#define D_EVP 22 494194206Ssimon#define D_SHA256 23 495194206Ssimon#define D_SHA512 24 496238405Sjkim#define D_WHIRLPOOL 25 497238405Sjkim#define D_IGE_128_AES 26 498238405Sjkim#define D_IGE_192_AES 27 499238405Sjkim#define D_IGE_256_AES 28 500238405Sjkim#define D_GHASH 29 501110007Smarkm double d=0.0; 50255714Skris long c[ALGOR_NUM][SIZE_NUM]; 50355714Skris#define R_DSA_512 0 50455714Skris#define R_DSA_1024 1 50555714Skris#define R_DSA_2048 2 50655714Skris#define R_RSA_512 0 50755714Skris#define R_RSA_1024 1 50855714Skris#define R_RSA_2048 2 50955714Skris#define R_RSA_4096 3 510160817Ssimon 511160817Ssimon#define R_EC_P160 0 512160817Ssimon#define R_EC_P192 1 513160817Ssimon#define R_EC_P224 2 514160817Ssimon#define R_EC_P256 3 515160817Ssimon#define R_EC_P384 4 516160817Ssimon#define R_EC_P521 5 517160817Ssimon#define R_EC_K163 6 518160817Ssimon#define R_EC_K233 7 519160817Ssimon#define R_EC_K283 8 520160817Ssimon#define R_EC_K409 9 521160817Ssimon#define R_EC_K571 10 522160817Ssimon#define R_EC_B163 11 523160817Ssimon#define R_EC_B233 12 524160817Ssimon#define R_EC_B283 13 525160817Ssimon#define R_EC_B409 14 526160817Ssimon#define R_EC_B571 15 527160817Ssimon 528110007Smarkm#ifndef OPENSSL_NO_RSA 52955714Skris RSA *rsa_key[RSA_NUM]; 53055714Skris long rsa_c[RSA_NUM][2]; 53155714Skris static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,4096}; 53255714Skris static unsigned char *rsa_data[RSA_NUM]= 53355714Skris {test512,test1024,test2048,test4096}; 53455714Skris static int rsa_data_length[RSA_NUM]={ 53555714Skris sizeof(test512),sizeof(test1024), 53655714Skris sizeof(test2048),sizeof(test4096)}; 53755714Skris#endif 538110007Smarkm#ifndef OPENSSL_NO_DSA 53955714Skris DSA *dsa_key[DSA_NUM]; 54055714Skris long dsa_c[DSA_NUM][2]; 54155714Skris static unsigned int dsa_bits[DSA_NUM]={512,1024,2048}; 54255714Skris#endif 543160817Ssimon#ifndef OPENSSL_NO_EC 544160817Ssimon /* We only test over the following curves as they are representative, 545160817Ssimon * To add tests over more curves, simply add the curve NID 546160817Ssimon * and curve name to the following arrays and increase the 547160817Ssimon * EC_NUM value accordingly. 548160817Ssimon */ 549160817Ssimon static unsigned int test_curves[EC_NUM] = 550160817Ssimon { 551160817Ssimon /* Prime Curves */ 552160817Ssimon NID_secp160r1, 553160817Ssimon NID_X9_62_prime192v1, 554160817Ssimon NID_secp224r1, 555160817Ssimon NID_X9_62_prime256v1, 556160817Ssimon NID_secp384r1, 557160817Ssimon NID_secp521r1, 558160817Ssimon /* Binary Curves */ 559160817Ssimon NID_sect163k1, 560160817Ssimon NID_sect233k1, 561160817Ssimon NID_sect283k1, 562160817Ssimon NID_sect409k1, 563160817Ssimon NID_sect571k1, 564160817Ssimon NID_sect163r2, 565160817Ssimon NID_sect233r1, 566160817Ssimon NID_sect283r1, 567160817Ssimon NID_sect409r1, 568160817Ssimon NID_sect571r1 569160817Ssimon }; 570160817Ssimon static const char * test_curves_names[EC_NUM] = 571160817Ssimon { 572160817Ssimon /* Prime Curves */ 573160817Ssimon "secp160r1", 574160817Ssimon "nistp192", 575160817Ssimon "nistp224", 576160817Ssimon "nistp256", 577160817Ssimon "nistp384", 578160817Ssimon "nistp521", 579160817Ssimon /* Binary Curves */ 580160817Ssimon "nistk163", 581160817Ssimon "nistk233", 582160817Ssimon "nistk283", 583160817Ssimon "nistk409", 584160817Ssimon "nistk571", 585160817Ssimon "nistb163", 586160817Ssimon "nistb233", 587160817Ssimon "nistb283", 588160817Ssimon "nistb409", 589160817Ssimon "nistb571" 590160817Ssimon }; 591160817Ssimon static int test_curves_bits[EC_NUM] = 592160817Ssimon { 593160817Ssimon 160, 192, 224, 256, 384, 521, 594160817Ssimon 163, 233, 283, 409, 571, 595160817Ssimon 163, 233, 283, 409, 571 596160817Ssimon }; 597160817Ssimon 598160817Ssimon#endif 599160817Ssimon 600160817Ssimon#ifndef OPENSSL_NO_ECDSA 601160817Ssimon unsigned char ecdsasig[256]; 602160817Ssimon unsigned int ecdsasiglen; 603160817Ssimon EC_KEY *ecdsa[EC_NUM]; 604160817Ssimon long ecdsa_c[EC_NUM][2]; 605160817Ssimon#endif 606160817Ssimon 607160817Ssimon#ifndef OPENSSL_NO_ECDH 608160817Ssimon EC_KEY *ecdh_a[EC_NUM], *ecdh_b[EC_NUM]; 609160817Ssimon unsigned char secret_a[MAX_ECDH_SIZE], secret_b[MAX_ECDH_SIZE]; 610160817Ssimon int secret_size_a, secret_size_b; 611160817Ssimon int ecdh_checks = 0; 612160817Ssimon int secret_idx = 0; 613160817Ssimon long ecdh_c[EC_NUM][2]; 614160817Ssimon#endif 615160817Ssimon 61655714Skris int rsa_doit[RSA_NUM]; 61755714Skris int dsa_doit[DSA_NUM]; 618160817Ssimon#ifndef OPENSSL_NO_ECDSA 619160817Ssimon int ecdsa_doit[EC_NUM]; 620160817Ssimon#endif 621160817Ssimon#ifndef OPENSSL_NO_ECDH 622160817Ssimon int ecdh_doit[EC_NUM]; 623160817Ssimon#endif 62455714Skris int doit[ALGOR_NUM]; 62555714Skris int pr_header=0; 626110007Smarkm const EVP_CIPHER *evp_cipher=NULL; 627110007Smarkm const EVP_MD *evp_md=NULL; 628110007Smarkm int decrypt=0; 629205128Ssimon#ifndef NO_FORK 630110007Smarkm int multi=0; 631110007Smarkm#endif 63255714Skris 63368654Skris#ifndef TIMES 63468654Skris usertime=-1; 63568654Skris#endif 63668654Skris 63755714Skris apps_startup(); 63859194Skris memset(results, 0, sizeof(results)); 639110007Smarkm#ifndef OPENSSL_NO_DSA 64055714Skris memset(dsa_key,0,sizeof(dsa_key)); 64155714Skris#endif 642160817Ssimon#ifndef OPENSSL_NO_ECDSA 643160817Ssimon for (i=0; i<EC_NUM; i++) ecdsa[i] = NULL; 644160817Ssimon#endif 645160817Ssimon#ifndef OPENSSL_NO_ECDH 646160817Ssimon for (i=0; i<EC_NUM; i++) 647160817Ssimon { 648160817Ssimon ecdh_a[i] = NULL; 649160817Ssimon ecdh_b[i] = NULL; 650160817Ssimon } 651160817Ssimon#endif 65255714Skris 653160817Ssimon 65455714Skris if (bio_err == NULL) 65555714Skris if ((bio_err=BIO_new(BIO_s_file())) != NULL) 65655714Skris BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); 65755714Skris 658110007Smarkm if (!load_config(bio_err, NULL)) 659110007Smarkm goto end; 660110007Smarkm 661110007Smarkm#ifndef OPENSSL_NO_RSA 66255714Skris memset(rsa_key,0,sizeof(rsa_key)); 66355714Skris for (i=0; i<RSA_NUM; i++) 66455714Skris rsa_key[i]=NULL; 66555714Skris#endif 66655714Skris 66768654Skris if ((buf=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL) 66855714Skris { 66955714Skris BIO_printf(bio_err,"out of memory\n"); 67055714Skris goto end; 67155714Skris } 67268654Skris if ((buf2=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL) 67355714Skris { 67455714Skris BIO_printf(bio_err,"out of memory\n"); 67555714Skris goto end; 67655714Skris } 67755714Skris 67855714Skris memset(c,0,sizeof(c)); 679110007Smarkm memset(DES_iv,0,sizeof(DES_iv)); 68055714Skris memset(iv,0,sizeof(iv)); 68155714Skris 68255714Skris for (i=0; i<ALGOR_NUM; i++) 68355714Skris doit[i]=0; 68455714Skris for (i=0; i<RSA_NUM; i++) 68555714Skris rsa_doit[i]=0; 68655714Skris for (i=0; i<DSA_NUM; i++) 68755714Skris dsa_doit[i]=0; 688160817Ssimon#ifndef OPENSSL_NO_ECDSA 689160817Ssimon for (i=0; i<EC_NUM; i++) 690160817Ssimon ecdsa_doit[i]=0; 691160817Ssimon#endif 692160817Ssimon#ifndef OPENSSL_NO_ECDH 693160817Ssimon for (i=0; i<EC_NUM; i++) 694160817Ssimon ecdh_doit[i]=0; 695160817Ssimon#endif 696160817Ssimon 69755714Skris 69855714Skris j=0; 69955714Skris argc--; 70055714Skris argv++; 70155714Skris while (argc) 70255714Skris { 70368654Skris if ((argc > 0) && (strcmp(*argv,"-elapsed") == 0)) 704110007Smarkm { 70568654Skris usertime = 0; 706110007Smarkm j--; /* Otherwise, -elapsed gets confused with 707110007Smarkm an algorithm. */ 708110007Smarkm } 709110007Smarkm else if ((argc > 0) && (strcmp(*argv,"-evp") == 0)) 710110007Smarkm { 711110007Smarkm argc--; 712110007Smarkm argv++; 713110007Smarkm if(argc == 0) 714110007Smarkm { 715110007Smarkm BIO_printf(bio_err,"no EVP given\n"); 716110007Smarkm goto end; 717110007Smarkm } 718110007Smarkm evp_cipher=EVP_get_cipherbyname(*argv); 719110007Smarkm if(!evp_cipher) 720110007Smarkm { 721110007Smarkm evp_md=EVP_get_digestbyname(*argv); 722110007Smarkm } 723110007Smarkm if(!evp_cipher && !evp_md) 724110007Smarkm { 725110007Smarkm BIO_printf(bio_err,"%s is an unknown cipher or digest\n",*argv); 726110007Smarkm goto end; 727110007Smarkm } 728110007Smarkm doit[D_EVP]=1; 729110007Smarkm } 730110007Smarkm else if (argc > 0 && !strcmp(*argv,"-decrypt")) 731110007Smarkm { 732110007Smarkm decrypt=1; 733110007Smarkm j--; /* Otherwise, -elapsed gets confused with 734110007Smarkm an algorithm. */ 735110007Smarkm } 736111150Snectar#ifndef OPENSSL_NO_ENGINE 737110007Smarkm else if ((argc > 0) && (strcmp(*argv,"-engine") == 0)) 738110007Smarkm { 739110007Smarkm argc--; 740110007Smarkm argv++; 741110007Smarkm if(argc == 0) 742110007Smarkm { 743110007Smarkm BIO_printf(bio_err,"no engine given\n"); 744110007Smarkm goto end; 745110007Smarkm } 746215697Ssimon setup_engine(bio_err, *argv, 0); 747110007Smarkm /* j will be increased again further down. We just 748110007Smarkm don't want speed to confuse an engine with an 749110007Smarkm algorithm, especially when none is given (which 750110007Smarkm means all of them should be run) */ 751110007Smarkm j--; 752110007Smarkm } 753111150Snectar#endif 754205128Ssimon#ifndef NO_FORK 755110007Smarkm else if ((argc > 0) && (strcmp(*argv,"-multi") == 0)) 756110007Smarkm { 757110007Smarkm argc--; 758110007Smarkm argv++; 759110007Smarkm if(argc == 0) 760110007Smarkm { 761110007Smarkm BIO_printf(bio_err,"no multi count given\n"); 762110007Smarkm goto end; 763110007Smarkm } 764110007Smarkm multi=atoi(argv[0]); 765110007Smarkm if(multi <= 0) 766110007Smarkm { 767110007Smarkm BIO_printf(bio_err,"bad multi count\n"); 768110007Smarkm goto end; 769110007Smarkm } 770110007Smarkm j--; /* Otherwise, -mr gets confused with 771110007Smarkm an algorithm. */ 772110007Smarkm } 773110007Smarkm#endif 774110007Smarkm else if (argc > 0 && !strcmp(*argv,"-mr")) 775110007Smarkm { 776110007Smarkm mr=1; 777110007Smarkm j--; /* Otherwise, -mr gets confused with 778110007Smarkm an algorithm. */ 779110007Smarkm } 780110007Smarkm else 781110007Smarkm#ifndef OPENSSL_NO_MD2 78255714Skris if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1; 78355714Skris else 78455714Skris#endif 785110007Smarkm#ifndef OPENSSL_NO_MDC2 78655714Skris if (strcmp(*argv,"mdc2") == 0) doit[D_MDC2]=1; 78755714Skris else 78855714Skris#endif 789110007Smarkm#ifndef OPENSSL_NO_MD4 79068654Skris if (strcmp(*argv,"md4") == 0) doit[D_MD4]=1; 79168654Skris else 79268654Skris#endif 793110007Smarkm#ifndef OPENSSL_NO_MD5 79455714Skris if (strcmp(*argv,"md5") == 0) doit[D_MD5]=1; 79555714Skris else 79655714Skris#endif 797110007Smarkm#ifndef OPENSSL_NO_MD5 79855714Skris if (strcmp(*argv,"hmac") == 0) doit[D_HMAC]=1; 79955714Skris else 80055714Skris#endif 801110007Smarkm#ifndef OPENSSL_NO_SHA 80255714Skris if (strcmp(*argv,"sha1") == 0) doit[D_SHA1]=1; 80355714Skris else 804160817Ssimon if (strcmp(*argv,"sha") == 0) doit[D_SHA1]=1, 805160817Ssimon doit[D_SHA256]=1, 806160817Ssimon doit[D_SHA512]=1; 80755714Skris else 808160817Ssimon#ifndef OPENSSL_NO_SHA256 809160817Ssimon if (strcmp(*argv,"sha256") == 0) doit[D_SHA256]=1; 810160817Ssimon else 81155714Skris#endif 812160817Ssimon#ifndef OPENSSL_NO_SHA512 813160817Ssimon if (strcmp(*argv,"sha512") == 0) doit[D_SHA512]=1; 814160817Ssimon else 815160817Ssimon#endif 816160817Ssimon#endif 817238405Sjkim#ifndef OPENSSL_NO_WHIRLPOOL 818238405Sjkim if (strcmp(*argv,"whirlpool") == 0) doit[D_WHIRLPOOL]=1; 819238405Sjkim else 820238405Sjkim#endif 821110007Smarkm#ifndef OPENSSL_NO_RIPEMD 82255714Skris if (strcmp(*argv,"ripemd") == 0) doit[D_RMD160]=1; 82355714Skris else 82455714Skris if (strcmp(*argv,"rmd160") == 0) doit[D_RMD160]=1; 82555714Skris else 82655714Skris if (strcmp(*argv,"ripemd160") == 0) doit[D_RMD160]=1; 82755714Skris else 82855714Skris#endif 829110007Smarkm#ifndef OPENSSL_NO_RC4 83055714Skris if (strcmp(*argv,"rc4") == 0) doit[D_RC4]=1; 83155714Skris else 83255714Skris#endif 833110007Smarkm#ifndef OPENSSL_NO_DES 83455714Skris if (strcmp(*argv,"des-cbc") == 0) doit[D_CBC_DES]=1; 83555714Skris else if (strcmp(*argv,"des-ede3") == 0) doit[D_EDE3_DES]=1; 83655714Skris else 83755714Skris#endif 838110007Smarkm#ifndef OPENSSL_NO_AES 839110007Smarkm if (strcmp(*argv,"aes-128-cbc") == 0) doit[D_CBC_128_AES]=1; 840110007Smarkm else if (strcmp(*argv,"aes-192-cbc") == 0) doit[D_CBC_192_AES]=1; 841110007Smarkm else if (strcmp(*argv,"aes-256-cbc") == 0) doit[D_CBC_256_AES]=1; 842194206Ssimon else if (strcmp(*argv,"aes-128-ige") == 0) doit[D_IGE_128_AES]=1; 843194206Ssimon else if (strcmp(*argv,"aes-192-ige") == 0) doit[D_IGE_192_AES]=1; 844194206Ssimon else if (strcmp(*argv,"aes-256-ige") == 0) doit[D_IGE_256_AES]=1; 845194206Ssimon else 846110007Smarkm#endif 847162914Ssimon#ifndef OPENSSL_NO_CAMELLIA 848162914Ssimon if (strcmp(*argv,"camellia-128-cbc") == 0) doit[D_CBC_128_CML]=1; 849162914Ssimon else if (strcmp(*argv,"camellia-192-cbc") == 0) doit[D_CBC_192_CML]=1; 850162914Ssimon else if (strcmp(*argv,"camellia-256-cbc") == 0) doit[D_CBC_256_CML]=1; 851162914Ssimon else 852162914Ssimon#endif 853110007Smarkm#ifndef OPENSSL_NO_RSA 854110007Smarkm#if 0 /* was: #ifdef RSAref */ 85568654Skris if (strcmp(*argv,"rsaref") == 0) 85668654Skris { 857110007Smarkm RSA_set_default_openssl_method(RSA_PKCS1_RSAref()); 85868654Skris j--; 85968654Skris } 86068654Skris else 86168654Skris#endif 86259194Skris#ifndef RSA_NULL 86355714Skris if (strcmp(*argv,"openssl") == 0) 86455714Skris { 86568654Skris RSA_set_default_method(RSA_PKCS1_SSLeay()); 86655714Skris j--; 86755714Skris } 86855714Skris else 86959194Skris#endif 870110007Smarkm#endif /* !OPENSSL_NO_RSA */ 87155714Skris if (strcmp(*argv,"dsa512") == 0) dsa_doit[R_DSA_512]=2; 87255714Skris else if (strcmp(*argv,"dsa1024") == 0) dsa_doit[R_DSA_1024]=2; 87355714Skris else if (strcmp(*argv,"dsa2048") == 0) dsa_doit[R_DSA_2048]=2; 87455714Skris else if (strcmp(*argv,"rsa512") == 0) rsa_doit[R_RSA_512]=2; 87555714Skris else if (strcmp(*argv,"rsa1024") == 0) rsa_doit[R_RSA_1024]=2; 87655714Skris else if (strcmp(*argv,"rsa2048") == 0) rsa_doit[R_RSA_2048]=2; 87755714Skris else if (strcmp(*argv,"rsa4096") == 0) rsa_doit[R_RSA_4096]=2; 87855714Skris else 879110007Smarkm#ifndef OPENSSL_NO_RC2 88055714Skris if (strcmp(*argv,"rc2-cbc") == 0) doit[D_CBC_RC2]=1; 88155714Skris else if (strcmp(*argv,"rc2") == 0) doit[D_CBC_RC2]=1; 88255714Skris else 88355714Skris#endif 884110007Smarkm#ifndef OPENSSL_NO_RC5 88555714Skris if (strcmp(*argv,"rc5-cbc") == 0) doit[D_CBC_RC5]=1; 88655714Skris else if (strcmp(*argv,"rc5") == 0) doit[D_CBC_RC5]=1; 88755714Skris else 88855714Skris#endif 889110007Smarkm#ifndef OPENSSL_NO_IDEA 89055714Skris if (strcmp(*argv,"idea-cbc") == 0) doit[D_CBC_IDEA]=1; 89155714Skris else if (strcmp(*argv,"idea") == 0) doit[D_CBC_IDEA]=1; 89255714Skris else 89355714Skris#endif 894194206Ssimon#ifndef OPENSSL_NO_SEED 895194206Ssimon if (strcmp(*argv,"seed-cbc") == 0) doit[D_CBC_SEED]=1; 896194206Ssimon else if (strcmp(*argv,"seed") == 0) doit[D_CBC_SEED]=1; 897194206Ssimon else 898194206Ssimon#endif 899110007Smarkm#ifndef OPENSSL_NO_BF 90055714Skris if (strcmp(*argv,"bf-cbc") == 0) doit[D_CBC_BF]=1; 90155714Skris else if (strcmp(*argv,"blowfish") == 0) doit[D_CBC_BF]=1; 90255714Skris else if (strcmp(*argv,"bf") == 0) doit[D_CBC_BF]=1; 90355714Skris else 90455714Skris#endif 905110007Smarkm#ifndef OPENSSL_NO_CAST 90655714Skris if (strcmp(*argv,"cast-cbc") == 0) doit[D_CBC_CAST]=1; 90755714Skris else if (strcmp(*argv,"cast") == 0) doit[D_CBC_CAST]=1; 90855714Skris else if (strcmp(*argv,"cast5") == 0) doit[D_CBC_CAST]=1; 90955714Skris else 91055714Skris#endif 911110007Smarkm#ifndef OPENSSL_NO_DES 91255714Skris if (strcmp(*argv,"des") == 0) 91355714Skris { 91455714Skris doit[D_CBC_DES]=1; 91555714Skris doit[D_EDE3_DES]=1; 91655714Skris } 91755714Skris else 91855714Skris#endif 919110007Smarkm#ifndef OPENSSL_NO_AES 920110007Smarkm if (strcmp(*argv,"aes") == 0) 921110007Smarkm { 922110007Smarkm doit[D_CBC_128_AES]=1; 923110007Smarkm doit[D_CBC_192_AES]=1; 924110007Smarkm doit[D_CBC_256_AES]=1; 925110007Smarkm } 926238405Sjkim else if (strcmp(*argv,"ghash") == 0) 927238405Sjkim { 928238405Sjkim doit[D_GHASH]=1; 929238405Sjkim } 930110007Smarkm else 931110007Smarkm#endif 932162914Ssimon#ifndef OPENSSL_NO_CAMELLIA 933162914Ssimon if (strcmp(*argv,"camellia") == 0) 934162914Ssimon { 935162914Ssimon doit[D_CBC_128_CML]=1; 936162914Ssimon doit[D_CBC_192_CML]=1; 937162914Ssimon doit[D_CBC_256_CML]=1; 938162914Ssimon } 939162914Ssimon else 940162914Ssimon#endif 941110007Smarkm#ifndef OPENSSL_NO_RSA 94255714Skris if (strcmp(*argv,"rsa") == 0) 94355714Skris { 94455714Skris rsa_doit[R_RSA_512]=1; 94555714Skris rsa_doit[R_RSA_1024]=1; 94655714Skris rsa_doit[R_RSA_2048]=1; 94755714Skris rsa_doit[R_RSA_4096]=1; 94855714Skris } 94955714Skris else 95055714Skris#endif 951110007Smarkm#ifndef OPENSSL_NO_DSA 95255714Skris if (strcmp(*argv,"dsa") == 0) 95355714Skris { 95455714Skris dsa_doit[R_DSA_512]=1; 95555714Skris dsa_doit[R_DSA_1024]=1; 956127134Snectar dsa_doit[R_DSA_2048]=1; 95755714Skris } 95855714Skris else 95955714Skris#endif 960160817Ssimon#ifndef OPENSSL_NO_ECDSA 961160817Ssimon if (strcmp(*argv,"ecdsap160") == 0) ecdsa_doit[R_EC_P160]=2; 962160817Ssimon else if (strcmp(*argv,"ecdsap192") == 0) ecdsa_doit[R_EC_P192]=2; 963160817Ssimon else if (strcmp(*argv,"ecdsap224") == 0) ecdsa_doit[R_EC_P224]=2; 964160817Ssimon else if (strcmp(*argv,"ecdsap256") == 0) ecdsa_doit[R_EC_P256]=2; 965160817Ssimon else if (strcmp(*argv,"ecdsap384") == 0) ecdsa_doit[R_EC_P384]=2; 966160817Ssimon else if (strcmp(*argv,"ecdsap521") == 0) ecdsa_doit[R_EC_P521]=2; 967160817Ssimon else if (strcmp(*argv,"ecdsak163") == 0) ecdsa_doit[R_EC_K163]=2; 968160817Ssimon else if (strcmp(*argv,"ecdsak233") == 0) ecdsa_doit[R_EC_K233]=2; 969160817Ssimon else if (strcmp(*argv,"ecdsak283") == 0) ecdsa_doit[R_EC_K283]=2; 970160817Ssimon else if (strcmp(*argv,"ecdsak409") == 0) ecdsa_doit[R_EC_K409]=2; 971160817Ssimon else if (strcmp(*argv,"ecdsak571") == 0) ecdsa_doit[R_EC_K571]=2; 972160817Ssimon else if (strcmp(*argv,"ecdsab163") == 0) ecdsa_doit[R_EC_B163]=2; 973160817Ssimon else if (strcmp(*argv,"ecdsab233") == 0) ecdsa_doit[R_EC_B233]=2; 974160817Ssimon else if (strcmp(*argv,"ecdsab283") == 0) ecdsa_doit[R_EC_B283]=2; 975160817Ssimon else if (strcmp(*argv,"ecdsab409") == 0) ecdsa_doit[R_EC_B409]=2; 976160817Ssimon else if (strcmp(*argv,"ecdsab571") == 0) ecdsa_doit[R_EC_B571]=2; 977160817Ssimon else if (strcmp(*argv,"ecdsa") == 0) 97855714Skris { 979160817Ssimon for (i=0; i < EC_NUM; i++) 980160817Ssimon ecdsa_doit[i]=1; 981160817Ssimon } 982160817Ssimon else 983160817Ssimon#endif 984160817Ssimon#ifndef OPENSSL_NO_ECDH 985160817Ssimon if (strcmp(*argv,"ecdhp160") == 0) ecdh_doit[R_EC_P160]=2; 986160817Ssimon else if (strcmp(*argv,"ecdhp192") == 0) ecdh_doit[R_EC_P192]=2; 987160817Ssimon else if (strcmp(*argv,"ecdhp224") == 0) ecdh_doit[R_EC_P224]=2; 988160817Ssimon else if (strcmp(*argv,"ecdhp256") == 0) ecdh_doit[R_EC_P256]=2; 989160817Ssimon else if (strcmp(*argv,"ecdhp384") == 0) ecdh_doit[R_EC_P384]=2; 990160817Ssimon else if (strcmp(*argv,"ecdhp521") == 0) ecdh_doit[R_EC_P521]=2; 991160817Ssimon else if (strcmp(*argv,"ecdhk163") == 0) ecdh_doit[R_EC_K163]=2; 992160817Ssimon else if (strcmp(*argv,"ecdhk233") == 0) ecdh_doit[R_EC_K233]=2; 993160817Ssimon else if (strcmp(*argv,"ecdhk283") == 0) ecdh_doit[R_EC_K283]=2; 994160817Ssimon else if (strcmp(*argv,"ecdhk409") == 0) ecdh_doit[R_EC_K409]=2; 995160817Ssimon else if (strcmp(*argv,"ecdhk571") == 0) ecdh_doit[R_EC_K571]=2; 996160817Ssimon else if (strcmp(*argv,"ecdhb163") == 0) ecdh_doit[R_EC_B163]=2; 997160817Ssimon else if (strcmp(*argv,"ecdhb233") == 0) ecdh_doit[R_EC_B233]=2; 998160817Ssimon else if (strcmp(*argv,"ecdhb283") == 0) ecdh_doit[R_EC_B283]=2; 999160817Ssimon else if (strcmp(*argv,"ecdhb409") == 0) ecdh_doit[R_EC_B409]=2; 1000160817Ssimon else if (strcmp(*argv,"ecdhb571") == 0) ecdh_doit[R_EC_B571]=2; 1001160817Ssimon else if (strcmp(*argv,"ecdh") == 0) 1002160817Ssimon { 1003160817Ssimon for (i=0; i < EC_NUM; i++) 1004160817Ssimon ecdh_doit[i]=1; 1005160817Ssimon } 1006160817Ssimon else 1007160817Ssimon#endif 1008160817Ssimon { 100968654Skris BIO_printf(bio_err,"Error: bad option or value\n"); 101068654Skris BIO_printf(bio_err,"\n"); 101168654Skris BIO_printf(bio_err,"Available values:\n"); 1012110007Smarkm#ifndef OPENSSL_NO_MD2 101368654Skris BIO_printf(bio_err,"md2 "); 101468654Skris#endif 1015110007Smarkm#ifndef OPENSSL_NO_MDC2 101668654Skris BIO_printf(bio_err,"mdc2 "); 101768654Skris#endif 1018110007Smarkm#ifndef OPENSSL_NO_MD4 101968654Skris BIO_printf(bio_err,"md4 "); 102068654Skris#endif 1021110007Smarkm#ifndef OPENSSL_NO_MD5 102268654Skris BIO_printf(bio_err,"md5 "); 1023110007Smarkm#ifndef OPENSSL_NO_HMAC 102468654Skris BIO_printf(bio_err,"hmac "); 102568654Skris#endif 102668654Skris#endif 1027110007Smarkm#ifndef OPENSSL_NO_SHA1 102868654Skris BIO_printf(bio_err,"sha1 "); 102968654Skris#endif 1030160817Ssimon#ifndef OPENSSL_NO_SHA256 1031160817Ssimon BIO_printf(bio_err,"sha256 "); 1032160817Ssimon#endif 1033160817Ssimon#ifndef OPENSSL_NO_SHA512 1034160817Ssimon BIO_printf(bio_err,"sha512 "); 1035160817Ssimon#endif 1036238405Sjkim#ifndef OPENSSL_NO_WHIRLPOOL 1037238405Sjkim BIO_printf(bio_err,"whirlpool"); 1038238405Sjkim#endif 1039110007Smarkm#ifndef OPENSSL_NO_RIPEMD160 104068654Skris BIO_printf(bio_err,"rmd160"); 104168654Skris#endif 1042110007Smarkm#if !defined(OPENSSL_NO_MD2) || !defined(OPENSSL_NO_MDC2) || \ 1043110007Smarkm !defined(OPENSSL_NO_MD4) || !defined(OPENSSL_NO_MD5) || \ 1044238405Sjkim !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160) || \ 1045238405Sjkim !defined(OPENSSL_NO_WHIRLPOOL) 104668654Skris BIO_printf(bio_err,"\n"); 104768654Skris#endif 104868654Skris 1049110007Smarkm#ifndef OPENSSL_NO_IDEA 105055714Skris BIO_printf(bio_err,"idea-cbc "); 105155714Skris#endif 1052194206Ssimon#ifndef OPENSSL_NO_SEED 1053194206Ssimon BIO_printf(bio_err,"seed-cbc "); 1054194206Ssimon#endif 1055110007Smarkm#ifndef OPENSSL_NO_RC2 105655714Skris BIO_printf(bio_err,"rc2-cbc "); 105755714Skris#endif 1058110007Smarkm#ifndef OPENSSL_NO_RC5 105955714Skris BIO_printf(bio_err,"rc5-cbc "); 106055714Skris#endif 1061110007Smarkm#ifndef OPENSSL_NO_BF 106255714Skris BIO_printf(bio_err,"bf-cbc"); 106355714Skris#endif 1064194206Ssimon#if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || !defined(OPENSSL_NO_RC2) || \ 1065110007Smarkm !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_RC5) 106655714Skris BIO_printf(bio_err,"\n"); 106755714Skris#endif 1068110007Smarkm#ifndef OPENSSL_NO_DES 106955714Skris BIO_printf(bio_err,"des-cbc des-ede3 "); 1070110007Smarkm#endif 1071110007Smarkm#ifndef OPENSSL_NO_AES 1072110007Smarkm BIO_printf(bio_err,"aes-128-cbc aes-192-cbc aes-256-cbc "); 1073194206Ssimon BIO_printf(bio_err,"aes-128-ige aes-192-ige aes-256-ige "); 1074110007Smarkm#endif 1075162914Ssimon#ifndef OPENSSL_NO_CAMELLIA 1076162914Ssimon BIO_printf(bio_err,"\n"); 1077162914Ssimon BIO_printf(bio_err,"camellia-128-cbc camellia-192-cbc camellia-256-cbc "); 1078162914Ssimon#endif 1079110007Smarkm#ifndef OPENSSL_NO_RC4 108055714Skris BIO_printf(bio_err,"rc4"); 108155714Skris#endif 108268654Skris BIO_printf(bio_err,"\n"); 108368654Skris 1084110007Smarkm#ifndef OPENSSL_NO_RSA 108568654Skris BIO_printf(bio_err,"rsa512 rsa1024 rsa2048 rsa4096\n"); 108655714Skris#endif 108768654Skris 1088110007Smarkm#ifndef OPENSSL_NO_DSA 108968654Skris BIO_printf(bio_err,"dsa512 dsa1024 dsa2048\n"); 109055714Skris#endif 1091160817Ssimon#ifndef OPENSSL_NO_ECDSA 1092160817Ssimon BIO_printf(bio_err,"ecdsap160 ecdsap192 ecdsap224 ecdsap256 ecdsap384 ecdsap521\n"); 1093160817Ssimon BIO_printf(bio_err,"ecdsak163 ecdsak233 ecdsak283 ecdsak409 ecdsak571\n"); 1094160817Ssimon BIO_printf(bio_err,"ecdsab163 ecdsab233 ecdsab283 ecdsab409 ecdsab571\n"); 1095160817Ssimon BIO_printf(bio_err,"ecdsa\n"); 1096160817Ssimon#endif 1097160817Ssimon#ifndef OPENSSL_NO_ECDH 1098160817Ssimon BIO_printf(bio_err,"ecdhp160 ecdhp192 ecdhp224 ecdhp256 ecdhp384 ecdhp521\n"); 1099160817Ssimon BIO_printf(bio_err,"ecdhk163 ecdhk233 ecdhk283 ecdhk409 ecdhk571\n"); 1100160817Ssimon BIO_printf(bio_err,"ecdhb163 ecdhb233 ecdhb283 ecdhb409 ecdhb571\n"); 1101160817Ssimon BIO_printf(bio_err,"ecdh\n"); 1102160817Ssimon#endif 110368654Skris 1104110007Smarkm#ifndef OPENSSL_NO_IDEA 110568654Skris BIO_printf(bio_err,"idea "); 110668654Skris#endif 1107194206Ssimon#ifndef OPENSSL_NO_SEED 1108194206Ssimon BIO_printf(bio_err,"seed "); 1109194206Ssimon#endif 1110110007Smarkm#ifndef OPENSSL_NO_RC2 111168654Skris BIO_printf(bio_err,"rc2 "); 111268654Skris#endif 1113110007Smarkm#ifndef OPENSSL_NO_DES 111468654Skris BIO_printf(bio_err,"des "); 111568654Skris#endif 1116110007Smarkm#ifndef OPENSSL_NO_AES 1117110007Smarkm BIO_printf(bio_err,"aes "); 1118110007Smarkm#endif 1119162914Ssimon#ifndef OPENSSL_NO_CAMELLIA 1120162914Ssimon BIO_printf(bio_err,"camellia "); 1121162914Ssimon#endif 1122110007Smarkm#ifndef OPENSSL_NO_RSA 112368654Skris BIO_printf(bio_err,"rsa "); 112468654Skris#endif 1125110007Smarkm#ifndef OPENSSL_NO_BF 112668654Skris BIO_printf(bio_err,"blowfish"); 112768654Skris#endif 1128194206Ssimon#if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || \ 1129194206Ssimon !defined(OPENSSL_NO_RC2) || !defined(OPENSSL_NO_DES) || \ 1130194206Ssimon !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_BF) || \ 1131194206Ssimon !defined(OPENSSL_NO_AES) || !defined(OPENSSL_NO_CAMELLIA) 113268654Skris BIO_printf(bio_err,"\n"); 113368654Skris#endif 113468654Skris 113568654Skris BIO_printf(bio_err,"\n"); 113668654Skris BIO_printf(bio_err,"Available options:\n"); 1137110007Smarkm#if defined(TIMES) || defined(USE_TOD) 113868654Skris BIO_printf(bio_err,"-elapsed measure time in real time instead of CPU user time.\n"); 113968654Skris#endif 1140111150Snectar#ifndef OPENSSL_NO_ENGINE 1141110007Smarkm BIO_printf(bio_err,"-engine e use engine e, possibly a hardware device.\n"); 1142111150Snectar#endif 1143110007Smarkm BIO_printf(bio_err,"-evp e use EVP e.\n"); 1144110007Smarkm BIO_printf(bio_err,"-decrypt time decryption instead of encryption (only EVP).\n"); 1145110007Smarkm BIO_printf(bio_err,"-mr produce machine readable output.\n"); 1146205128Ssimon#ifndef NO_FORK 1147110007Smarkm BIO_printf(bio_err,"-multi n run n benchmarks in parallel.\n"); 1148110007Smarkm#endif 114955714Skris goto end; 115055714Skris } 115155714Skris argc--; 115255714Skris argv++; 115355714Skris j++; 115455714Skris } 115555714Skris 1156205128Ssimon#ifndef NO_FORK 1157110007Smarkm if(multi && do_multi(multi)) 1158110007Smarkm goto show_res; 1159110007Smarkm#endif 1160110007Smarkm 116155714Skris if (j == 0) 116255714Skris { 116355714Skris for (i=0; i<ALGOR_NUM; i++) 1164110007Smarkm { 1165110007Smarkm if (i != D_EVP) 1166110007Smarkm doit[i]=1; 1167110007Smarkm } 116855714Skris for (i=0; i<RSA_NUM; i++) 116955714Skris rsa_doit[i]=1; 117055714Skris for (i=0; i<DSA_NUM; i++) 117155714Skris dsa_doit[i]=1; 1172238405Sjkim#ifndef OPENSSL_NO_ECDSA 1173238405Sjkim for (i=0; i<EC_NUM; i++) 1174238405Sjkim ecdsa_doit[i]=1; 1175238405Sjkim#endif 1176238405Sjkim#ifndef OPENSSL_NO_ECDH 1177238405Sjkim for (i=0; i<EC_NUM; i++) 1178238405Sjkim ecdh_doit[i]=1; 1179238405Sjkim#endif 118055714Skris } 118155714Skris for (i=0; i<ALGOR_NUM; i++) 118255714Skris if (doit[i]) pr_header++; 118355714Skris 1184110007Smarkm if (usertime == 0 && !mr) 118568654Skris BIO_printf(bio_err,"You have chosen to measure elapsed time instead of user CPU time.\n"); 118655714Skris 1187110007Smarkm#ifndef OPENSSL_NO_RSA 118855714Skris for (i=0; i<RSA_NUM; i++) 118955714Skris { 1190110007Smarkm const unsigned char *p; 119155714Skris 119255714Skris p=rsa_data[i]; 119355714Skris rsa_key[i]=d2i_RSAPrivateKey(NULL,&p,rsa_data_length[i]); 119455714Skris if (rsa_key[i] == NULL) 119555714Skris { 119655714Skris BIO_printf(bio_err,"internal error loading RSA key number %d\n",i); 119755714Skris goto end; 119855714Skris } 119955714Skris#if 0 120055714Skris else 120155714Skris { 1202110007Smarkm BIO_printf(bio_err,mr ? "+RK:%d:" 1203110007Smarkm : "Loaded RSA key, %d bit modulus and e= 0x", 1204110007Smarkm BN_num_bits(rsa_key[i]->n)); 120555714Skris BN_print(bio_err,rsa_key[i]->e); 120655714Skris BIO_printf(bio_err,"\n"); 120755714Skris } 120855714Skris#endif 120955714Skris } 121055714Skris#endif 121155714Skris 1212110007Smarkm#ifndef OPENSSL_NO_DSA 121355714Skris dsa_key[0]=get_dsa512(); 121455714Skris dsa_key[1]=get_dsa1024(); 121555714Skris dsa_key[2]=get_dsa2048(); 121655714Skris#endif 121755714Skris 1218110007Smarkm#ifndef OPENSSL_NO_DES 1219110007Smarkm DES_set_key_unchecked(&key,&sch); 1220110007Smarkm DES_set_key_unchecked(&key2,&sch2); 1221110007Smarkm DES_set_key_unchecked(&key3,&sch3); 122255714Skris#endif 1223110007Smarkm#ifndef OPENSSL_NO_AES 1224110007Smarkm AES_set_encrypt_key(key16,128,&aes_ks1); 1225110007Smarkm AES_set_encrypt_key(key24,192,&aes_ks2); 1226110007Smarkm AES_set_encrypt_key(key32,256,&aes_ks3); 1227110007Smarkm#endif 1228162914Ssimon#ifndef OPENSSL_NO_CAMELLIA 1229162914Ssimon Camellia_set_key(key16,128,&camellia_ks1); 1230162914Ssimon Camellia_set_key(ckey24,192,&camellia_ks2); 1231162914Ssimon Camellia_set_key(ckey32,256,&camellia_ks3); 1232162914Ssimon#endif 1233110007Smarkm#ifndef OPENSSL_NO_IDEA 123455714Skris idea_set_encrypt_key(key16,&idea_ks); 123555714Skris#endif 1236194206Ssimon#ifndef OPENSSL_NO_SEED 1237194206Ssimon SEED_set_key(key16,&seed_ks); 1238194206Ssimon#endif 1239110007Smarkm#ifndef OPENSSL_NO_RC4 124055714Skris RC4_set_key(&rc4_ks,16,key16); 124155714Skris#endif 1242110007Smarkm#ifndef OPENSSL_NO_RC2 124355714Skris RC2_set_key(&rc2_ks,16,key16,128); 124455714Skris#endif 1245110007Smarkm#ifndef OPENSSL_NO_RC5 124655714Skris RC5_32_set_key(&rc5_ks,16,key16,12); 124755714Skris#endif 1248110007Smarkm#ifndef OPENSSL_NO_BF 124955714Skris BF_set_key(&bf_ks,16,key16); 125055714Skris#endif 1251110007Smarkm#ifndef OPENSSL_NO_CAST 125255714Skris CAST_set_key(&cast_ks,16,key16); 125355714Skris#endif 1254110007Smarkm#ifndef OPENSSL_NO_RSA 125555714Skris memset(rsa_c,0,sizeof(rsa_c)); 125655714Skris#endif 125755714Skris#ifndef SIGALRM 1258110007Smarkm#ifndef OPENSSL_NO_DES 125955714Skris BIO_printf(bio_err,"First we calculate the approximate speed ...\n"); 126055714Skris count=10; 126155714Skris do { 1262160817Ssimon long it; 126355714Skris count*=2; 1264110007Smarkm Time_F(START); 1265160817Ssimon for (it=count; it; it--) 1266215697Ssimon DES_ecb_encrypt((DES_cblock *)buf, 1267215697Ssimon (DES_cblock *)buf, 1268110007Smarkm &sch,DES_ENCRYPT); 1269110007Smarkm d=Time_F(STOP); 127055714Skris } while (d <3); 1271110007Smarkm save_count=count; 127255714Skris c[D_MD2][0]=count/10; 127355714Skris c[D_MDC2][0]=count/10; 127468654Skris c[D_MD4][0]=count; 127555714Skris c[D_MD5][0]=count; 127655714Skris c[D_HMAC][0]=count; 127755714Skris c[D_SHA1][0]=count; 127855714Skris c[D_RMD160][0]=count; 127955714Skris c[D_RC4][0]=count*5; 128055714Skris c[D_CBC_DES][0]=count; 128155714Skris c[D_EDE3_DES][0]=count/3; 128255714Skris c[D_CBC_IDEA][0]=count; 1283194206Ssimon c[D_CBC_SEED][0]=count; 128455714Skris c[D_CBC_RC2][0]=count; 128555714Skris c[D_CBC_RC5][0]=count; 128655714Skris c[D_CBC_BF][0]=count; 128755714Skris c[D_CBC_CAST][0]=count; 1288127134Snectar c[D_CBC_128_AES][0]=count; 1289127134Snectar c[D_CBC_192_AES][0]=count; 1290127134Snectar c[D_CBC_256_AES][0]=count; 1291162914Ssimon c[D_CBC_128_CML][0]=count; 1292162914Ssimon c[D_CBC_192_CML][0]=count; 1293162914Ssimon c[D_CBC_256_CML][0]=count; 1294160817Ssimon c[D_SHA256][0]=count; 1295160817Ssimon c[D_SHA512][0]=count; 1296238405Sjkim c[D_WHIRLPOOL][0]=count; 1297194206Ssimon c[D_IGE_128_AES][0]=count; 1298194206Ssimon c[D_IGE_192_AES][0]=count; 1299194206Ssimon c[D_IGE_256_AES][0]=count; 1300238405Sjkim c[D_GHASH][0]=count; 130155714Skris 130255714Skris for (i=1; i<SIZE_NUM; i++) 130355714Skris { 130455714Skris c[D_MD2][i]=c[D_MD2][0]*4*lengths[0]/lengths[i]; 130555714Skris c[D_MDC2][i]=c[D_MDC2][0]*4*lengths[0]/lengths[i]; 130668654Skris c[D_MD4][i]=c[D_MD4][0]*4*lengths[0]/lengths[i]; 130755714Skris c[D_MD5][i]=c[D_MD5][0]*4*lengths[0]/lengths[i]; 130855714Skris c[D_HMAC][i]=c[D_HMAC][0]*4*lengths[0]/lengths[i]; 130955714Skris c[D_SHA1][i]=c[D_SHA1][0]*4*lengths[0]/lengths[i]; 131055714Skris c[D_RMD160][i]=c[D_RMD160][0]*4*lengths[0]/lengths[i]; 1311160817Ssimon c[D_SHA256][i]=c[D_SHA256][0]*4*lengths[0]/lengths[i]; 1312160817Ssimon c[D_SHA512][i]=c[D_SHA512][0]*4*lengths[0]/lengths[i]; 1313238405Sjkim c[D_WHIRLPOOL][i]=c[D_WHIRLPOOL][0]*4*lengths[0]/lengths[i]; 131455714Skris } 131555714Skris for (i=1; i<SIZE_NUM; i++) 131655714Skris { 131755714Skris long l0,l1; 131855714Skris 131955714Skris l0=(long)lengths[i-1]; 132055714Skris l1=(long)lengths[i]; 132155714Skris c[D_RC4][i]=c[D_RC4][i-1]*l0/l1; 132255714Skris c[D_CBC_DES][i]=c[D_CBC_DES][i-1]*l0/l1; 132355714Skris c[D_EDE3_DES][i]=c[D_EDE3_DES][i-1]*l0/l1; 132455714Skris c[D_CBC_IDEA][i]=c[D_CBC_IDEA][i-1]*l0/l1; 1325194206Ssimon c[D_CBC_SEED][i]=c[D_CBC_SEED][i-1]*l0/l1; 132655714Skris c[D_CBC_RC2][i]=c[D_CBC_RC2][i-1]*l0/l1; 132755714Skris c[D_CBC_RC5][i]=c[D_CBC_RC5][i-1]*l0/l1; 132855714Skris c[D_CBC_BF][i]=c[D_CBC_BF][i-1]*l0/l1; 132955714Skris c[D_CBC_CAST][i]=c[D_CBC_CAST][i-1]*l0/l1; 1330127134Snectar c[D_CBC_128_AES][i]=c[D_CBC_128_AES][i-1]*l0/l1; 1331127134Snectar c[D_CBC_192_AES][i]=c[D_CBC_192_AES][i-1]*l0/l1; 1332127134Snectar c[D_CBC_256_AES][i]=c[D_CBC_256_AES][i-1]*l0/l1; 1333162914Ssimon c[D_CBC_128_CML][i]=c[D_CBC_128_CML][i-1]*l0/l1; 1334162914Ssimon c[D_CBC_192_CML][i]=c[D_CBC_192_CML][i-1]*l0/l1; 1335162914Ssimon c[D_CBC_256_CML][i]=c[D_CBC_256_CML][i-1]*l0/l1; 1336194206Ssimon c[D_IGE_128_AES][i]=c[D_IGE_128_AES][i-1]*l0/l1; 1337194206Ssimon c[D_IGE_192_AES][i]=c[D_IGE_192_AES][i-1]*l0/l1; 1338194206Ssimon c[D_IGE_256_AES][i]=c[D_IGE_256_AES][i-1]*l0/l1; 133955714Skris } 1340110007Smarkm#ifndef OPENSSL_NO_RSA 134155714Skris rsa_c[R_RSA_512][0]=count/2000; 134255714Skris rsa_c[R_RSA_512][1]=count/400; 134355714Skris for (i=1; i<RSA_NUM; i++) 134455714Skris { 134555714Skris rsa_c[i][0]=rsa_c[i-1][0]/8; 134655714Skris rsa_c[i][1]=rsa_c[i-1][1]/4; 134755714Skris if ((rsa_doit[i] <= 1) && (rsa_c[i][0] == 0)) 134855714Skris rsa_doit[i]=0; 134955714Skris else 135055714Skris { 135155714Skris if (rsa_c[i][0] == 0) 135255714Skris { 135355714Skris rsa_c[i][0]=1; 135455714Skris rsa_c[i][1]=20; 135555714Skris } 135655714Skris } 135755714Skris } 135855714Skris#endif 135955714Skris 1360110007Smarkm#ifndef OPENSSL_NO_DSA 136155714Skris dsa_c[R_DSA_512][0]=count/1000; 136255714Skris dsa_c[R_DSA_512][1]=count/1000/2; 136355714Skris for (i=1; i<DSA_NUM; i++) 136455714Skris { 136555714Skris dsa_c[i][0]=dsa_c[i-1][0]/4; 136655714Skris dsa_c[i][1]=dsa_c[i-1][1]/4; 136755714Skris if ((dsa_doit[i] <= 1) && (dsa_c[i][0] == 0)) 136855714Skris dsa_doit[i]=0; 136955714Skris else 137055714Skris { 137155714Skris if (dsa_c[i] == 0) 137255714Skris { 137355714Skris dsa_c[i][0]=1; 137455714Skris dsa_c[i][1]=1; 137555714Skris } 137655714Skris } 137755714Skris } 137876870Skris#endif 137955714Skris 1380160817Ssimon#ifndef OPENSSL_NO_ECDSA 1381160817Ssimon ecdsa_c[R_EC_P160][0]=count/1000; 1382160817Ssimon ecdsa_c[R_EC_P160][1]=count/1000/2; 1383160817Ssimon for (i=R_EC_P192; i<=R_EC_P521; i++) 1384160817Ssimon { 1385160817Ssimon ecdsa_c[i][0]=ecdsa_c[i-1][0]/2; 1386160817Ssimon ecdsa_c[i][1]=ecdsa_c[i-1][1]/2; 1387160817Ssimon if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0)) 1388160817Ssimon ecdsa_doit[i]=0; 1389160817Ssimon else 1390160817Ssimon { 1391160817Ssimon if (ecdsa_c[i] == 0) 1392160817Ssimon { 1393160817Ssimon ecdsa_c[i][0]=1; 1394160817Ssimon ecdsa_c[i][1]=1; 1395160817Ssimon } 1396160817Ssimon } 1397160817Ssimon } 1398160817Ssimon ecdsa_c[R_EC_K163][0]=count/1000; 1399160817Ssimon ecdsa_c[R_EC_K163][1]=count/1000/2; 1400160817Ssimon for (i=R_EC_K233; i<=R_EC_K571; i++) 1401160817Ssimon { 1402160817Ssimon ecdsa_c[i][0]=ecdsa_c[i-1][0]/2; 1403160817Ssimon ecdsa_c[i][1]=ecdsa_c[i-1][1]/2; 1404160817Ssimon if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0)) 1405160817Ssimon ecdsa_doit[i]=0; 1406160817Ssimon else 1407160817Ssimon { 1408160817Ssimon if (ecdsa_c[i] == 0) 1409160817Ssimon { 1410160817Ssimon ecdsa_c[i][0]=1; 1411160817Ssimon ecdsa_c[i][1]=1; 1412160817Ssimon } 1413160817Ssimon } 1414160817Ssimon } 1415160817Ssimon ecdsa_c[R_EC_B163][0]=count/1000; 1416160817Ssimon ecdsa_c[R_EC_B163][1]=count/1000/2; 1417160817Ssimon for (i=R_EC_B233; i<=R_EC_B571; i++) 1418160817Ssimon { 1419160817Ssimon ecdsa_c[i][0]=ecdsa_c[i-1][0]/2; 1420160817Ssimon ecdsa_c[i][1]=ecdsa_c[i-1][1]/2; 1421160817Ssimon if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0)) 1422160817Ssimon ecdsa_doit[i]=0; 1423160817Ssimon else 1424160817Ssimon { 1425160817Ssimon if (ecdsa_c[i] == 0) 1426160817Ssimon { 1427160817Ssimon ecdsa_c[i][0]=1; 1428160817Ssimon ecdsa_c[i][1]=1; 1429160817Ssimon } 1430160817Ssimon } 1431160817Ssimon } 1432160817Ssimon#endif 1433160817Ssimon 1434160817Ssimon#ifndef OPENSSL_NO_ECDH 1435160817Ssimon ecdh_c[R_EC_P160][0]=count/1000; 1436160817Ssimon ecdh_c[R_EC_P160][1]=count/1000; 1437160817Ssimon for (i=R_EC_P192; i<=R_EC_P521; i++) 1438160817Ssimon { 1439160817Ssimon ecdh_c[i][0]=ecdh_c[i-1][0]/2; 1440160817Ssimon ecdh_c[i][1]=ecdh_c[i-1][1]/2; 1441160817Ssimon if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0)) 1442160817Ssimon ecdh_doit[i]=0; 1443160817Ssimon else 1444160817Ssimon { 1445160817Ssimon if (ecdh_c[i] == 0) 1446160817Ssimon { 1447160817Ssimon ecdh_c[i][0]=1; 1448160817Ssimon ecdh_c[i][1]=1; 1449160817Ssimon } 1450160817Ssimon } 1451160817Ssimon } 1452160817Ssimon ecdh_c[R_EC_K163][0]=count/1000; 1453160817Ssimon ecdh_c[R_EC_K163][1]=count/1000; 1454160817Ssimon for (i=R_EC_K233; i<=R_EC_K571; i++) 1455160817Ssimon { 1456160817Ssimon ecdh_c[i][0]=ecdh_c[i-1][0]/2; 1457160817Ssimon ecdh_c[i][1]=ecdh_c[i-1][1]/2; 1458160817Ssimon if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0)) 1459160817Ssimon ecdh_doit[i]=0; 1460160817Ssimon else 1461160817Ssimon { 1462160817Ssimon if (ecdh_c[i] == 0) 1463160817Ssimon { 1464160817Ssimon ecdh_c[i][0]=1; 1465160817Ssimon ecdh_c[i][1]=1; 1466160817Ssimon } 1467160817Ssimon } 1468160817Ssimon } 1469160817Ssimon ecdh_c[R_EC_B163][0]=count/1000; 1470160817Ssimon ecdh_c[R_EC_B163][1]=count/1000; 1471160817Ssimon for (i=R_EC_B233; i<=R_EC_B571; i++) 1472160817Ssimon { 1473160817Ssimon ecdh_c[i][0]=ecdh_c[i-1][0]/2; 1474160817Ssimon ecdh_c[i][1]=ecdh_c[i-1][1]/2; 1475160817Ssimon if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0)) 1476160817Ssimon ecdh_doit[i]=0; 1477160817Ssimon else 1478160817Ssimon { 1479160817Ssimon if (ecdh_c[i] == 0) 1480160817Ssimon { 1481160817Ssimon ecdh_c[i][0]=1; 1482160817Ssimon ecdh_c[i][1]=1; 1483160817Ssimon } 1484160817Ssimon } 1485160817Ssimon } 1486160817Ssimon#endif 1487160817Ssimon 148855714Skris#define COND(d) (count < (d)) 148955714Skris#define COUNT(d) (d) 149055714Skris#else 149159194Skris/* not worth fixing */ 149259194Skris# error "You cannot disable DES on systems without SIGALRM." 1493110007Smarkm#endif /* OPENSSL_NO_DES */ 149459194Skris#else 1495238405Sjkim#define COND(c) (run && count<0x7fffffff) 149655714Skris#define COUNT(d) (count) 1497238405Sjkim#ifndef _WIN32 149855714Skris signal(SIGALRM,sig_done); 1499238405Sjkim#endif 150059194Skris#endif /* SIGALRM */ 150155714Skris 1502110007Smarkm#ifndef OPENSSL_NO_MD2 150355714Skris if (doit[D_MD2]) 150455714Skris { 150555714Skris for (j=0; j<SIZE_NUM; j++) 150655714Skris { 150755714Skris print_message(names[D_MD2],c[D_MD2][j],lengths[j]); 1508110007Smarkm Time_F(START); 150955714Skris for (count=0,run=1; COND(c[D_MD2][j]); count++) 1510110007Smarkm EVP_Digest(buf,(unsigned long)lengths[j],&(md2[0]),NULL,EVP_md2(),NULL); 1511110007Smarkm d=Time_F(STOP); 1512110007Smarkm print_result(D_MD2,j,count,d); 151355714Skris } 151455714Skris } 151555714Skris#endif 1516110007Smarkm#ifndef OPENSSL_NO_MDC2 151755714Skris if (doit[D_MDC2]) 151855714Skris { 151955714Skris for (j=0; j<SIZE_NUM; j++) 152055714Skris { 152155714Skris print_message(names[D_MDC2],c[D_MDC2][j],lengths[j]); 1522110007Smarkm Time_F(START); 152355714Skris for (count=0,run=1; COND(c[D_MDC2][j]); count++) 1524110007Smarkm EVP_Digest(buf,(unsigned long)lengths[j],&(mdc2[0]),NULL,EVP_mdc2(),NULL); 1525110007Smarkm d=Time_F(STOP); 1526110007Smarkm print_result(D_MDC2,j,count,d); 152755714Skris } 152855714Skris } 152955714Skris#endif 153055714Skris 1531110007Smarkm#ifndef OPENSSL_NO_MD4 153268654Skris if (doit[D_MD4]) 153368654Skris { 153468654Skris for (j=0; j<SIZE_NUM; j++) 153568654Skris { 153668654Skris print_message(names[D_MD4],c[D_MD4][j],lengths[j]); 1537110007Smarkm Time_F(START); 153868654Skris for (count=0,run=1; COND(c[D_MD4][j]); count++) 1539110007Smarkm EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md4[0]),NULL,EVP_md4(),NULL); 1540110007Smarkm d=Time_F(STOP); 1541110007Smarkm print_result(D_MD4,j,count,d); 154268654Skris } 154368654Skris } 154468654Skris#endif 154568654Skris 1546110007Smarkm#ifndef OPENSSL_NO_MD5 154755714Skris if (doit[D_MD5]) 154855714Skris { 154955714Skris for (j=0; j<SIZE_NUM; j++) 155055714Skris { 155155714Skris print_message(names[D_MD5],c[D_MD5][j],lengths[j]); 1552110007Smarkm Time_F(START); 155355714Skris for (count=0,run=1; COND(c[D_MD5][j]); count++) 1554110007Smarkm EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md5[0]),NULL,EVP_get_digestbyname("md5"),NULL); 1555110007Smarkm d=Time_F(STOP); 1556110007Smarkm print_result(D_MD5,j,count,d); 155755714Skris } 155855714Skris } 155955714Skris#endif 156055714Skris 1561110007Smarkm#if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_HMAC) 156255714Skris if (doit[D_HMAC]) 156355714Skris { 156455714Skris HMAC_CTX hctx; 156555714Skris 1566110007Smarkm HMAC_CTX_init(&hctx); 1567110007Smarkm HMAC_Init_ex(&hctx,(unsigned char *)"This is a key...", 1568110007Smarkm 16,EVP_md5(), NULL); 1569110007Smarkm 157055714Skris for (j=0; j<SIZE_NUM; j++) 157155714Skris { 157255714Skris print_message(names[D_HMAC],c[D_HMAC][j],lengths[j]); 1573110007Smarkm Time_F(START); 157455714Skris for (count=0,run=1; COND(c[D_HMAC][j]); count++) 157555714Skris { 1576110007Smarkm HMAC_Init_ex(&hctx,NULL,0,NULL,NULL); 1577110007Smarkm HMAC_Update(&hctx,buf,lengths[j]); 1578110007Smarkm HMAC_Final(&hctx,&(hmac[0]),NULL); 157955714Skris } 1580110007Smarkm d=Time_F(STOP); 1581110007Smarkm print_result(D_HMAC,j,count,d); 158255714Skris } 1583110007Smarkm HMAC_CTX_cleanup(&hctx); 158455714Skris } 158555714Skris#endif 1586110007Smarkm#ifndef OPENSSL_NO_SHA 158755714Skris if (doit[D_SHA1]) 158855714Skris { 158955714Skris for (j=0; j<SIZE_NUM; j++) 159055714Skris { 159155714Skris print_message(names[D_SHA1],c[D_SHA1][j],lengths[j]); 1592110007Smarkm Time_F(START); 159355714Skris for (count=0,run=1; COND(c[D_SHA1][j]); count++) 1594110007Smarkm EVP_Digest(buf,(unsigned long)lengths[j],&(sha[0]),NULL,EVP_sha1(),NULL); 1595110007Smarkm d=Time_F(STOP); 1596110007Smarkm print_result(D_SHA1,j,count,d); 159755714Skris } 159855714Skris } 1599160817Ssimon 1600160817Ssimon#ifndef OPENSSL_NO_SHA256 1601160817Ssimon if (doit[D_SHA256]) 1602160817Ssimon { 1603160817Ssimon for (j=0; j<SIZE_NUM; j++) 1604160817Ssimon { 1605160817Ssimon print_message(names[D_SHA256],c[D_SHA256][j],lengths[j]); 1606160817Ssimon Time_F(START); 1607160817Ssimon for (count=0,run=1; COND(c[D_SHA256][j]); count++) 1608160817Ssimon SHA256(buf,lengths[j],sha256); 1609160817Ssimon d=Time_F(STOP); 1610160817Ssimon print_result(D_SHA256,j,count,d); 1611160817Ssimon } 1612160817Ssimon } 161355714Skris#endif 1614160817Ssimon 1615160817Ssimon#ifndef OPENSSL_NO_SHA512 1616160817Ssimon if (doit[D_SHA512]) 1617160817Ssimon { 1618160817Ssimon for (j=0; j<SIZE_NUM; j++) 1619160817Ssimon { 1620160817Ssimon print_message(names[D_SHA512],c[D_SHA512][j],lengths[j]); 1621160817Ssimon Time_F(START); 1622160817Ssimon for (count=0,run=1; COND(c[D_SHA512][j]); count++) 1623160817Ssimon SHA512(buf,lengths[j],sha512); 1624160817Ssimon d=Time_F(STOP); 1625160817Ssimon print_result(D_SHA512,j,count,d); 1626160817Ssimon } 1627160817Ssimon } 1628160817Ssimon#endif 1629238405Sjkim#endif 1630160817Ssimon 1631238405Sjkim#ifndef OPENSSL_NO_WHIRLPOOL 1632238405Sjkim if (doit[D_WHIRLPOOL]) 1633238405Sjkim { 1634238405Sjkim for (j=0; j<SIZE_NUM; j++) 1635238405Sjkim { 1636238405Sjkim print_message(names[D_WHIRLPOOL],c[D_WHIRLPOOL][j],lengths[j]); 1637238405Sjkim Time_F(START); 1638238405Sjkim for (count=0,run=1; COND(c[D_WHIRLPOOL][j]); count++) 1639238405Sjkim WHIRLPOOL(buf,lengths[j],whirlpool); 1640238405Sjkim d=Time_F(STOP); 1641238405Sjkim print_result(D_WHIRLPOOL,j,count,d); 1642238405Sjkim } 1643238405Sjkim } 1644160817Ssimon#endif 1645238405Sjkim 1646110007Smarkm#ifndef OPENSSL_NO_RIPEMD 164755714Skris if (doit[D_RMD160]) 164855714Skris { 164955714Skris for (j=0; j<SIZE_NUM; j++) 165055714Skris { 165155714Skris print_message(names[D_RMD160],c[D_RMD160][j],lengths[j]); 1652110007Smarkm Time_F(START); 165355714Skris for (count=0,run=1; COND(c[D_RMD160][j]); count++) 1654110007Smarkm EVP_Digest(buf,(unsigned long)lengths[j],&(rmd160[0]),NULL,EVP_ripemd160(),NULL); 1655110007Smarkm d=Time_F(STOP); 1656110007Smarkm print_result(D_RMD160,j,count,d); 165755714Skris } 165855714Skris } 165955714Skris#endif 1660110007Smarkm#ifndef OPENSSL_NO_RC4 166155714Skris if (doit[D_RC4]) 166255714Skris { 166355714Skris for (j=0; j<SIZE_NUM; j++) 166455714Skris { 166555714Skris print_message(names[D_RC4],c[D_RC4][j],lengths[j]); 1666110007Smarkm Time_F(START); 166755714Skris for (count=0,run=1; COND(c[D_RC4][j]); count++) 166855714Skris RC4(&rc4_ks,(unsigned int)lengths[j], 166955714Skris buf,buf); 1670110007Smarkm d=Time_F(STOP); 1671110007Smarkm print_result(D_RC4,j,count,d); 167255714Skris } 167355714Skris } 167455714Skris#endif 1675110007Smarkm#ifndef OPENSSL_NO_DES 167655714Skris if (doit[D_CBC_DES]) 167755714Skris { 167855714Skris for (j=0; j<SIZE_NUM; j++) 167955714Skris { 168055714Skris print_message(names[D_CBC_DES],c[D_CBC_DES][j],lengths[j]); 1681110007Smarkm Time_F(START); 168255714Skris for (count=0,run=1; COND(c[D_CBC_DES][j]); count++) 1683110007Smarkm DES_ncbc_encrypt(buf,buf,lengths[j],&sch, 1684110007Smarkm &DES_iv,DES_ENCRYPT); 1685110007Smarkm d=Time_F(STOP); 1686110007Smarkm print_result(D_CBC_DES,j,count,d); 168755714Skris } 168855714Skris } 168955714Skris 169055714Skris if (doit[D_EDE3_DES]) 169155714Skris { 169255714Skris for (j=0; j<SIZE_NUM; j++) 169355714Skris { 169455714Skris print_message(names[D_EDE3_DES],c[D_EDE3_DES][j],lengths[j]); 1695110007Smarkm Time_F(START); 169655714Skris for (count=0,run=1; COND(c[D_EDE3_DES][j]); count++) 1697110007Smarkm DES_ede3_cbc_encrypt(buf,buf,lengths[j], 1698110007Smarkm &sch,&sch2,&sch3, 1699110007Smarkm &DES_iv,DES_ENCRYPT); 1700110007Smarkm d=Time_F(STOP); 1701110007Smarkm print_result(D_EDE3_DES,j,count,d); 170255714Skris } 170355714Skris } 170455714Skris#endif 1705110007Smarkm#ifndef OPENSSL_NO_AES 1706110007Smarkm if (doit[D_CBC_128_AES]) 1707110007Smarkm { 1708110007Smarkm for (j=0; j<SIZE_NUM; j++) 1709110007Smarkm { 1710110007Smarkm print_message(names[D_CBC_128_AES],c[D_CBC_128_AES][j],lengths[j]); 1711110007Smarkm Time_F(START); 1712110007Smarkm for (count=0,run=1; COND(c[D_CBC_128_AES][j]); count++) 1713110007Smarkm AES_cbc_encrypt(buf,buf, 1714110007Smarkm (unsigned long)lengths[j],&aes_ks1, 1715110007Smarkm iv,AES_ENCRYPT); 1716110007Smarkm d=Time_F(STOP); 1717110007Smarkm print_result(D_CBC_128_AES,j,count,d); 1718110007Smarkm } 1719110007Smarkm } 1720110007Smarkm if (doit[D_CBC_192_AES]) 1721110007Smarkm { 1722110007Smarkm for (j=0; j<SIZE_NUM; j++) 1723110007Smarkm { 1724110007Smarkm print_message(names[D_CBC_192_AES],c[D_CBC_192_AES][j],lengths[j]); 1725110007Smarkm Time_F(START); 1726110007Smarkm for (count=0,run=1; COND(c[D_CBC_192_AES][j]); count++) 1727110007Smarkm AES_cbc_encrypt(buf,buf, 1728110007Smarkm (unsigned long)lengths[j],&aes_ks2, 1729110007Smarkm iv,AES_ENCRYPT); 1730110007Smarkm d=Time_F(STOP); 1731110007Smarkm print_result(D_CBC_192_AES,j,count,d); 1732110007Smarkm } 1733110007Smarkm } 1734110007Smarkm if (doit[D_CBC_256_AES]) 1735110007Smarkm { 1736110007Smarkm for (j=0; j<SIZE_NUM; j++) 1737110007Smarkm { 1738110007Smarkm print_message(names[D_CBC_256_AES],c[D_CBC_256_AES][j],lengths[j]); 1739110007Smarkm Time_F(START); 1740110007Smarkm for (count=0,run=1; COND(c[D_CBC_256_AES][j]); count++) 1741110007Smarkm AES_cbc_encrypt(buf,buf, 1742110007Smarkm (unsigned long)lengths[j],&aes_ks3, 1743110007Smarkm iv,AES_ENCRYPT); 1744110007Smarkm d=Time_F(STOP); 1745110007Smarkm print_result(D_CBC_256_AES,j,count,d); 1746110007Smarkm } 1747110007Smarkm } 1748110007Smarkm 1749194206Ssimon if (doit[D_IGE_128_AES]) 1750194206Ssimon { 1751194206Ssimon for (j=0; j<SIZE_NUM; j++) 1752194206Ssimon { 1753194206Ssimon print_message(names[D_IGE_128_AES],c[D_IGE_128_AES][j],lengths[j]); 1754194206Ssimon Time_F(START); 1755194206Ssimon for (count=0,run=1; COND(c[D_IGE_128_AES][j]); count++) 1756194206Ssimon AES_ige_encrypt(buf,buf2, 1757194206Ssimon (unsigned long)lengths[j],&aes_ks1, 1758194206Ssimon iv,AES_ENCRYPT); 1759194206Ssimon d=Time_F(STOP); 1760194206Ssimon print_result(D_IGE_128_AES,j,count,d); 1761194206Ssimon } 1762194206Ssimon } 1763194206Ssimon if (doit[D_IGE_192_AES]) 1764194206Ssimon { 1765194206Ssimon for (j=0; j<SIZE_NUM; j++) 1766194206Ssimon { 1767194206Ssimon print_message(names[D_IGE_192_AES],c[D_IGE_192_AES][j],lengths[j]); 1768194206Ssimon Time_F(START); 1769194206Ssimon for (count=0,run=1; COND(c[D_IGE_192_AES][j]); count++) 1770194206Ssimon AES_ige_encrypt(buf,buf2, 1771194206Ssimon (unsigned long)lengths[j],&aes_ks2, 1772194206Ssimon iv,AES_ENCRYPT); 1773194206Ssimon d=Time_F(STOP); 1774194206Ssimon print_result(D_IGE_192_AES,j,count,d); 1775194206Ssimon } 1776194206Ssimon } 1777194206Ssimon if (doit[D_IGE_256_AES]) 1778194206Ssimon { 1779194206Ssimon for (j=0; j<SIZE_NUM; j++) 1780194206Ssimon { 1781194206Ssimon print_message(names[D_IGE_256_AES],c[D_IGE_256_AES][j],lengths[j]); 1782194206Ssimon Time_F(START); 1783194206Ssimon for (count=0,run=1; COND(c[D_IGE_256_AES][j]); count++) 1784194206Ssimon AES_ige_encrypt(buf,buf2, 1785194206Ssimon (unsigned long)lengths[j],&aes_ks3, 1786194206Ssimon iv,AES_ENCRYPT); 1787194206Ssimon d=Time_F(STOP); 1788194206Ssimon print_result(D_IGE_256_AES,j,count,d); 1789194206Ssimon } 1790194206Ssimon } 1791238405Sjkim if (doit[D_GHASH]) 1792238405Sjkim { 1793238405Sjkim GCM128_CONTEXT *ctx = CRYPTO_gcm128_new(&aes_ks1,(block128_f)AES_encrypt); 1794238405Sjkim CRYPTO_gcm128_setiv (ctx,(unsigned char *)"0123456789ab",12); 1795238405Sjkim 1796238405Sjkim for (j=0; j<SIZE_NUM; j++) 1797238405Sjkim { 1798238405Sjkim print_message(names[D_GHASH],c[D_GHASH][j],lengths[j]); 1799238405Sjkim Time_F(START); 1800238405Sjkim for (count=0,run=1; COND(c[D_GHASH][j]); count++) 1801238405Sjkim CRYPTO_gcm128_aad(ctx,buf,lengths[j]); 1802238405Sjkim d=Time_F(STOP); 1803238405Sjkim print_result(D_GHASH,j,count,d); 1804238405Sjkim } 1805238405Sjkim CRYPTO_gcm128_release(ctx); 1806238405Sjkim } 1807238405Sjkim 1808110007Smarkm#endif 1809162914Ssimon#ifndef OPENSSL_NO_CAMELLIA 1810162914Ssimon if (doit[D_CBC_128_CML]) 1811162914Ssimon { 1812162914Ssimon for (j=0; j<SIZE_NUM; j++) 1813162914Ssimon { 1814162914Ssimon print_message(names[D_CBC_128_CML],c[D_CBC_128_CML][j],lengths[j]); 1815162914Ssimon Time_F(START); 1816162914Ssimon for (count=0,run=1; COND(c[D_CBC_128_CML][j]); count++) 1817162914Ssimon Camellia_cbc_encrypt(buf,buf, 1818162914Ssimon (unsigned long)lengths[j],&camellia_ks1, 1819162914Ssimon iv,CAMELLIA_ENCRYPT); 1820162914Ssimon d=Time_F(STOP); 1821162914Ssimon print_result(D_CBC_128_CML,j,count,d); 1822162914Ssimon } 1823162914Ssimon } 1824162914Ssimon if (doit[D_CBC_192_CML]) 1825162914Ssimon { 1826162914Ssimon for (j=0; j<SIZE_NUM; j++) 1827162914Ssimon { 1828162914Ssimon print_message(names[D_CBC_192_CML],c[D_CBC_192_CML][j],lengths[j]); 1829162914Ssimon Time_F(START); 1830162914Ssimon for (count=0,run=1; COND(c[D_CBC_192_CML][j]); count++) 1831162914Ssimon Camellia_cbc_encrypt(buf,buf, 1832162914Ssimon (unsigned long)lengths[j],&camellia_ks2, 1833162914Ssimon iv,CAMELLIA_ENCRYPT); 1834162914Ssimon d=Time_F(STOP); 1835162914Ssimon print_result(D_CBC_192_CML,j,count,d); 1836162914Ssimon } 1837162914Ssimon } 1838162914Ssimon if (doit[D_CBC_256_CML]) 1839162914Ssimon { 1840162914Ssimon for (j=0; j<SIZE_NUM; j++) 1841162914Ssimon { 1842162914Ssimon print_message(names[D_CBC_256_CML],c[D_CBC_256_CML][j],lengths[j]); 1843162914Ssimon Time_F(START); 1844162914Ssimon for (count=0,run=1; COND(c[D_CBC_256_CML][j]); count++) 1845162914Ssimon Camellia_cbc_encrypt(buf,buf, 1846162914Ssimon (unsigned long)lengths[j],&camellia_ks3, 1847162914Ssimon iv,CAMELLIA_ENCRYPT); 1848162914Ssimon d=Time_F(STOP); 1849162914Ssimon print_result(D_CBC_256_CML,j,count,d); 1850162914Ssimon } 1851162914Ssimon } 1852162914Ssimon 1853162914Ssimon#endif 1854110007Smarkm#ifndef OPENSSL_NO_IDEA 185555714Skris if (doit[D_CBC_IDEA]) 185655714Skris { 185755714Skris for (j=0; j<SIZE_NUM; j++) 185855714Skris { 185955714Skris print_message(names[D_CBC_IDEA],c[D_CBC_IDEA][j],lengths[j]); 1860110007Smarkm Time_F(START); 186155714Skris for (count=0,run=1; COND(c[D_CBC_IDEA][j]); count++) 186255714Skris idea_cbc_encrypt(buf,buf, 186355714Skris (unsigned long)lengths[j],&idea_ks, 186455714Skris iv,IDEA_ENCRYPT); 1865110007Smarkm d=Time_F(STOP); 1866110007Smarkm print_result(D_CBC_IDEA,j,count,d); 186755714Skris } 186855714Skris } 186955714Skris#endif 1870194206Ssimon#ifndef OPENSSL_NO_SEED 1871194206Ssimon if (doit[D_CBC_SEED]) 1872194206Ssimon { 1873194206Ssimon for (j=0; j<SIZE_NUM; j++) 1874194206Ssimon { 1875194206Ssimon print_message(names[D_CBC_SEED],c[D_CBC_SEED][j],lengths[j]); 1876194206Ssimon Time_F(START); 1877194206Ssimon for (count=0,run=1; COND(c[D_CBC_SEED][j]); count++) 1878194206Ssimon SEED_cbc_encrypt(buf,buf, 1879194206Ssimon (unsigned long)lengths[j],&seed_ks,iv,1); 1880194206Ssimon d=Time_F(STOP); 1881194206Ssimon print_result(D_CBC_SEED,j,count,d); 1882194206Ssimon } 1883194206Ssimon } 1884194206Ssimon#endif 1885110007Smarkm#ifndef OPENSSL_NO_RC2 188655714Skris if (doit[D_CBC_RC2]) 188755714Skris { 188855714Skris for (j=0; j<SIZE_NUM; j++) 188955714Skris { 189055714Skris print_message(names[D_CBC_RC2],c[D_CBC_RC2][j],lengths[j]); 1891110007Smarkm Time_F(START); 189255714Skris for (count=0,run=1; COND(c[D_CBC_RC2][j]); count++) 189355714Skris RC2_cbc_encrypt(buf,buf, 189455714Skris (unsigned long)lengths[j],&rc2_ks, 189555714Skris iv,RC2_ENCRYPT); 1896110007Smarkm d=Time_F(STOP); 1897110007Smarkm print_result(D_CBC_RC2,j,count,d); 189855714Skris } 189955714Skris } 190055714Skris#endif 1901110007Smarkm#ifndef OPENSSL_NO_RC5 190255714Skris if (doit[D_CBC_RC5]) 190355714Skris { 190455714Skris for (j=0; j<SIZE_NUM; j++) 190555714Skris { 190655714Skris print_message(names[D_CBC_RC5],c[D_CBC_RC5][j],lengths[j]); 1907110007Smarkm Time_F(START); 190855714Skris for (count=0,run=1; COND(c[D_CBC_RC5][j]); count++) 190955714Skris RC5_32_cbc_encrypt(buf,buf, 191055714Skris (unsigned long)lengths[j],&rc5_ks, 191155714Skris iv,RC5_ENCRYPT); 1912110007Smarkm d=Time_F(STOP); 1913110007Smarkm print_result(D_CBC_RC5,j,count,d); 191455714Skris } 191555714Skris } 191655714Skris#endif 1917110007Smarkm#ifndef OPENSSL_NO_BF 191855714Skris if (doit[D_CBC_BF]) 191955714Skris { 192055714Skris for (j=0; j<SIZE_NUM; j++) 192155714Skris { 192255714Skris print_message(names[D_CBC_BF],c[D_CBC_BF][j],lengths[j]); 1923110007Smarkm Time_F(START); 192455714Skris for (count=0,run=1; COND(c[D_CBC_BF][j]); count++) 192555714Skris BF_cbc_encrypt(buf,buf, 192655714Skris (unsigned long)lengths[j],&bf_ks, 192755714Skris iv,BF_ENCRYPT); 1928110007Smarkm d=Time_F(STOP); 1929110007Smarkm print_result(D_CBC_BF,j,count,d); 193055714Skris } 193155714Skris } 193255714Skris#endif 1933110007Smarkm#ifndef OPENSSL_NO_CAST 193455714Skris if (doit[D_CBC_CAST]) 193555714Skris { 193655714Skris for (j=0; j<SIZE_NUM; j++) 193755714Skris { 193855714Skris print_message(names[D_CBC_CAST],c[D_CBC_CAST][j],lengths[j]); 1939110007Smarkm Time_F(START); 194055714Skris for (count=0,run=1; COND(c[D_CBC_CAST][j]); count++) 194155714Skris CAST_cbc_encrypt(buf,buf, 194255714Skris (unsigned long)lengths[j],&cast_ks, 194355714Skris iv,CAST_ENCRYPT); 1944110007Smarkm d=Time_F(STOP); 1945110007Smarkm print_result(D_CBC_CAST,j,count,d); 194655714Skris } 194755714Skris } 194855714Skris#endif 194955714Skris 1950110007Smarkm if (doit[D_EVP]) 1951110007Smarkm { 1952110007Smarkm for (j=0; j<SIZE_NUM; j++) 1953110007Smarkm { 1954110007Smarkm if (evp_cipher) 1955110007Smarkm { 1956110007Smarkm EVP_CIPHER_CTX ctx; 1957110007Smarkm int outl; 1958110007Smarkm 1959110007Smarkm names[D_EVP]=OBJ_nid2ln(evp_cipher->nid); 1960110007Smarkm /* -O3 -fschedule-insns messes up an 1961110007Smarkm * optimization here! names[D_EVP] 1962110007Smarkm * somehow becomes NULL */ 1963110007Smarkm print_message(names[D_EVP],save_count, 1964110007Smarkm lengths[j]); 1965110007Smarkm 1966110007Smarkm EVP_CIPHER_CTX_init(&ctx); 1967110007Smarkm if(decrypt) 1968110007Smarkm EVP_DecryptInit_ex(&ctx,evp_cipher,NULL,key16,iv); 1969110007Smarkm else 1970110007Smarkm EVP_EncryptInit_ex(&ctx,evp_cipher,NULL,key16,iv); 1971142428Snectar EVP_CIPHER_CTX_set_padding(&ctx, 0); 1972110007Smarkm 1973110007Smarkm Time_F(START); 1974110007Smarkm if(decrypt) 1975110007Smarkm for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++) 1976110007Smarkm EVP_DecryptUpdate(&ctx,buf,&outl,buf,lengths[j]); 1977110007Smarkm else 1978110007Smarkm for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++) 1979110007Smarkm EVP_EncryptUpdate(&ctx,buf,&outl,buf,lengths[j]); 1980110007Smarkm if(decrypt) 1981110007Smarkm EVP_DecryptFinal_ex(&ctx,buf,&outl); 1982110007Smarkm else 1983110007Smarkm EVP_EncryptFinal_ex(&ctx,buf,&outl); 1984110007Smarkm d=Time_F(STOP); 1985111150Snectar EVP_CIPHER_CTX_cleanup(&ctx); 1986110007Smarkm } 1987110007Smarkm if (evp_md) 1988110007Smarkm { 1989110007Smarkm names[D_EVP]=OBJ_nid2ln(evp_md->type); 1990110007Smarkm print_message(names[D_EVP],save_count, 1991110007Smarkm lengths[j]); 1992110007Smarkm 1993110007Smarkm Time_F(START); 1994110007Smarkm for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++) 1995110007Smarkm EVP_Digest(buf,lengths[j],&(md[0]),NULL,evp_md,NULL); 1996110007Smarkm 1997110007Smarkm d=Time_F(STOP); 1998110007Smarkm } 1999110007Smarkm print_result(D_EVP,j,count,d); 2000110007Smarkm } 2001110007Smarkm } 2002110007Smarkm 200359194Skris RAND_pseudo_bytes(buf,36); 2004110007Smarkm#ifndef OPENSSL_NO_RSA 200555714Skris for (j=0; j<RSA_NUM; j++) 200655714Skris { 200759194Skris int ret; 200855714Skris if (!rsa_doit[j]) continue; 200959194Skris ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num, rsa_key[j]); 201068654Skris if (ret == 0) 201155714Skris { 201268654Skris BIO_printf(bio_err,"RSA sign failure. No RSA sign will be done.\n"); 201368654Skris ERR_print_errors(bio_err); 201468654Skris rsa_count=1; 201568654Skris } 201668654Skris else 201768654Skris { 201868654Skris pkey_print_message("private","rsa", 201968654Skris rsa_c[j][0],rsa_bits[j], 202068654Skris RSA_SECONDS); 202168654Skris/* RSA_blinding_on(rsa_key[j],NULL); */ 2022110007Smarkm Time_F(START); 202368654Skris for (count=0,run=1; COND(rsa_c[j][0]); count++) 202455714Skris { 202568654Skris ret=RSA_sign(NID_md5_sha1, buf,36, buf2, 202668654Skris &rsa_num, rsa_key[j]); 202768654Skris if (ret == 0) 202868654Skris { 202968654Skris BIO_printf(bio_err, 203068654Skris "RSA sign failure\n"); 203168654Skris ERR_print_errors(bio_err); 203268654Skris count=1; 203368654Skris break; 203468654Skris } 203555714Skris } 2036110007Smarkm d=Time_F(STOP); 2037110007Smarkm BIO_printf(bio_err,mr ? "+R1:%ld:%d:%.2f\n" 2038110007Smarkm : "%ld %d bit private RSA's in %.2fs\n", 2039110007Smarkm count,rsa_bits[j],d); 204068654Skris rsa_results[j][0]=d/(double)count; 204168654Skris rsa_count=count; 204255714Skris } 204355714Skris 204455714Skris#if 1 204559194Skris ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num, rsa_key[j]); 204668654Skris if (ret <= 0) 204755714Skris { 204868654Skris BIO_printf(bio_err,"RSA verify failure. No RSA verify will be done.\n"); 204968654Skris ERR_print_errors(bio_err); 205076870Skris rsa_doit[j] = 0; 205168654Skris } 205268654Skris else 205368654Skris { 205468654Skris pkey_print_message("public","rsa", 205568654Skris rsa_c[j][1],rsa_bits[j], 205668654Skris RSA_SECONDS); 2057110007Smarkm Time_F(START); 205868654Skris for (count=0,run=1; COND(rsa_c[j][1]); count++) 205955714Skris { 206068654Skris ret=RSA_verify(NID_md5_sha1, buf,36, buf2, 206168654Skris rsa_num, rsa_key[j]); 2062186872Ssimon if (ret <= 0) 206368654Skris { 206468654Skris BIO_printf(bio_err, 206568654Skris "RSA verify failure\n"); 206668654Skris ERR_print_errors(bio_err); 206768654Skris count=1; 206868654Skris break; 206968654Skris } 207055714Skris } 2071110007Smarkm d=Time_F(STOP); 2072110007Smarkm BIO_printf(bio_err,mr ? "+R2:%ld:%d:%.2f\n" 2073110007Smarkm : "%ld %d bit public RSA's in %.2fs\n", 2074110007Smarkm count,rsa_bits[j],d); 207568654Skris rsa_results[j][1]=d/(double)count; 207655714Skris } 207755714Skris#endif 207855714Skris 207955714Skris if (rsa_count <= 1) 208055714Skris { 208155714Skris /* if longer than 10s, don't do any more */ 208255714Skris for (j++; j<RSA_NUM; j++) 208355714Skris rsa_doit[j]=0; 208455714Skris } 208555714Skris } 208655714Skris#endif 208755714Skris 208859194Skris RAND_pseudo_bytes(buf,20); 2089110007Smarkm#ifndef OPENSSL_NO_DSA 209059194Skris if (RAND_status() != 1) 209159194Skris { 209259194Skris RAND_seed(rnd_seed, sizeof rnd_seed); 209359194Skris rnd_fake = 1; 209459194Skris } 209555714Skris for (j=0; j<DSA_NUM; j++) 209655714Skris { 209755714Skris unsigned int kk; 209868654Skris int ret; 209955714Skris 210055714Skris if (!dsa_doit[j]) continue; 2101110007Smarkm/* DSA_generate_key(dsa_key[j]); */ 210255714Skris/* DSA_sign_setup(dsa_key[j],NULL); */ 210368654Skris ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2, 210455714Skris &kk,dsa_key[j]); 210568654Skris if (ret == 0) 210655714Skris { 210768654Skris BIO_printf(bio_err,"DSA sign failure. No DSA sign will be done.\n"); 210868654Skris ERR_print_errors(bio_err); 210968654Skris rsa_count=1; 211068654Skris } 211168654Skris else 211268654Skris { 211368654Skris pkey_print_message("sign","dsa", 211468654Skris dsa_c[j][0],dsa_bits[j], 211568654Skris DSA_SECONDS); 2116110007Smarkm Time_F(START); 211768654Skris for (count=0,run=1; COND(dsa_c[j][0]); count++) 211855714Skris { 211968654Skris ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2, 212068654Skris &kk,dsa_key[j]); 212168654Skris if (ret == 0) 212268654Skris { 212368654Skris BIO_printf(bio_err, 212468654Skris "DSA sign failure\n"); 212568654Skris ERR_print_errors(bio_err); 212668654Skris count=1; 212768654Skris break; 212868654Skris } 212955714Skris } 2130110007Smarkm d=Time_F(STOP); 2131110007Smarkm BIO_printf(bio_err,mr ? "+R3:%ld:%d:%.2f\n" 2132110007Smarkm : "%ld %d bit DSA signs in %.2fs\n", 2133110007Smarkm count,dsa_bits[j],d); 213468654Skris dsa_results[j][0]=d/(double)count; 213568654Skris rsa_count=count; 213655714Skris } 213755714Skris 213868654Skris ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2, 213955714Skris kk,dsa_key[j]); 214068654Skris if (ret <= 0) 214155714Skris { 214268654Skris BIO_printf(bio_err,"DSA verify failure. No DSA verify will be done.\n"); 214368654Skris ERR_print_errors(bio_err); 214468654Skris dsa_doit[j] = 0; 214568654Skris } 214668654Skris else 214768654Skris { 214868654Skris pkey_print_message("verify","dsa", 214968654Skris dsa_c[j][1],dsa_bits[j], 215068654Skris DSA_SECONDS); 2151110007Smarkm Time_F(START); 215268654Skris for (count=0,run=1; COND(dsa_c[j][1]); count++) 215355714Skris { 215468654Skris ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2, 215568654Skris kk,dsa_key[j]); 215668654Skris if (ret <= 0) 215768654Skris { 215868654Skris BIO_printf(bio_err, 215968654Skris "DSA verify failure\n"); 216068654Skris ERR_print_errors(bio_err); 216168654Skris count=1; 216268654Skris break; 216368654Skris } 216455714Skris } 2165110007Smarkm d=Time_F(STOP); 2166110007Smarkm BIO_printf(bio_err,mr ? "+R4:%ld:%d:%.2f\n" 2167110007Smarkm : "%ld %d bit DSA verify in %.2fs\n", 2168110007Smarkm count,dsa_bits[j],d); 216968654Skris dsa_results[j][1]=d/(double)count; 217055714Skris } 217155714Skris 217255714Skris if (rsa_count <= 1) 217355714Skris { 217455714Skris /* if longer than 10s, don't do any more */ 217555714Skris for (j++; j<DSA_NUM; j++) 217655714Skris dsa_doit[j]=0; 217755714Skris } 217855714Skris } 217959194Skris if (rnd_fake) RAND_cleanup(); 218055714Skris#endif 2181160817Ssimon 2182160817Ssimon#ifndef OPENSSL_NO_ECDSA 2183160817Ssimon if (RAND_status() != 1) 2184160817Ssimon { 2185160817Ssimon RAND_seed(rnd_seed, sizeof rnd_seed); 2186160817Ssimon rnd_fake = 1; 2187160817Ssimon } 2188160817Ssimon for (j=0; j<EC_NUM; j++) 2189160817Ssimon { 2190160817Ssimon int ret; 2191160817Ssimon 2192160817Ssimon if (!ecdsa_doit[j]) continue; /* Ignore Curve */ 2193160817Ssimon ecdsa[j] = EC_KEY_new_by_curve_name(test_curves[j]); 2194160817Ssimon if (ecdsa[j] == NULL) 2195160817Ssimon { 2196160817Ssimon BIO_printf(bio_err,"ECDSA failure.\n"); 2197160817Ssimon ERR_print_errors(bio_err); 2198160817Ssimon rsa_count=1; 2199160817Ssimon } 2200160817Ssimon else 2201160817Ssimon { 2202160817Ssimon#if 1 2203160817Ssimon EC_KEY_precompute_mult(ecdsa[j], NULL); 2204160817Ssimon#endif 2205160817Ssimon /* Perform ECDSA signature test */ 2206160817Ssimon EC_KEY_generate_key(ecdsa[j]); 2207160817Ssimon ret = ECDSA_sign(0, buf, 20, ecdsasig, 2208160817Ssimon &ecdsasiglen, ecdsa[j]); 2209160817Ssimon if (ret == 0) 2210160817Ssimon { 2211160817Ssimon BIO_printf(bio_err,"ECDSA sign failure. No ECDSA sign will be done.\n"); 2212160817Ssimon ERR_print_errors(bio_err); 2213160817Ssimon rsa_count=1; 2214160817Ssimon } 2215160817Ssimon else 2216160817Ssimon { 2217160817Ssimon pkey_print_message("sign","ecdsa", 2218160817Ssimon ecdsa_c[j][0], 2219160817Ssimon test_curves_bits[j], 2220160817Ssimon ECDSA_SECONDS); 2221160817Ssimon 2222160817Ssimon Time_F(START); 2223160817Ssimon for (count=0,run=1; COND(ecdsa_c[j][0]); 2224160817Ssimon count++) 2225160817Ssimon { 2226160817Ssimon ret=ECDSA_sign(0, buf, 20, 2227160817Ssimon ecdsasig, &ecdsasiglen, 2228160817Ssimon ecdsa[j]); 2229160817Ssimon if (ret == 0) 2230160817Ssimon { 2231160817Ssimon BIO_printf(bio_err, "ECDSA sign failure\n"); 2232160817Ssimon ERR_print_errors(bio_err); 2233160817Ssimon count=1; 2234160817Ssimon break; 2235160817Ssimon } 2236160817Ssimon } 2237160817Ssimon d=Time_F(STOP); 2238160817Ssimon 2239160817Ssimon BIO_printf(bio_err, mr ? "+R5:%ld:%d:%.2f\n" : 2240160817Ssimon "%ld %d bit ECDSA signs in %.2fs \n", 2241160817Ssimon count, test_curves_bits[j], d); 2242160817Ssimon ecdsa_results[j][0]=d/(double)count; 2243160817Ssimon rsa_count=count; 2244160817Ssimon } 2245160817Ssimon 2246160817Ssimon /* Perform ECDSA verification test */ 2247160817Ssimon ret=ECDSA_verify(0, buf, 20, ecdsasig, 2248160817Ssimon ecdsasiglen, ecdsa[j]); 2249160817Ssimon if (ret != 1) 2250160817Ssimon { 2251160817Ssimon BIO_printf(bio_err,"ECDSA verify failure. No ECDSA verify will be done.\n"); 2252160817Ssimon ERR_print_errors(bio_err); 2253160817Ssimon ecdsa_doit[j] = 0; 2254160817Ssimon } 2255160817Ssimon else 2256160817Ssimon { 2257160817Ssimon pkey_print_message("verify","ecdsa", 2258160817Ssimon ecdsa_c[j][1], 2259160817Ssimon test_curves_bits[j], 2260160817Ssimon ECDSA_SECONDS); 2261160817Ssimon Time_F(START); 2262160817Ssimon for (count=0,run=1; COND(ecdsa_c[j][1]); count++) 2263160817Ssimon { 2264160817Ssimon ret=ECDSA_verify(0, buf, 20, ecdsasig, ecdsasiglen, ecdsa[j]); 2265160817Ssimon if (ret != 1) 2266160817Ssimon { 2267160817Ssimon BIO_printf(bio_err, "ECDSA verify failure\n"); 2268160817Ssimon ERR_print_errors(bio_err); 2269160817Ssimon count=1; 2270160817Ssimon break; 2271160817Ssimon } 2272160817Ssimon } 2273160817Ssimon d=Time_F(STOP); 2274160817Ssimon BIO_printf(bio_err, mr? "+R6:%ld:%d:%.2f\n" 2275160817Ssimon : "%ld %d bit ECDSA verify in %.2fs\n", 2276160817Ssimon count, test_curves_bits[j], d); 2277160817Ssimon ecdsa_results[j][1]=d/(double)count; 2278160817Ssimon } 2279160817Ssimon 2280160817Ssimon if (rsa_count <= 1) 2281160817Ssimon { 2282160817Ssimon /* if longer than 10s, don't do any more */ 2283160817Ssimon for (j++; j<EC_NUM; j++) 2284160817Ssimon ecdsa_doit[j]=0; 2285160817Ssimon } 2286160817Ssimon } 2287160817Ssimon } 2288160817Ssimon if (rnd_fake) RAND_cleanup(); 2289160817Ssimon#endif 2290160817Ssimon 2291160817Ssimon#ifndef OPENSSL_NO_ECDH 2292160817Ssimon if (RAND_status() != 1) 2293160817Ssimon { 2294160817Ssimon RAND_seed(rnd_seed, sizeof rnd_seed); 2295160817Ssimon rnd_fake = 1; 2296160817Ssimon } 2297160817Ssimon for (j=0; j<EC_NUM; j++) 2298160817Ssimon { 2299160817Ssimon if (!ecdh_doit[j]) continue; 2300160817Ssimon ecdh_a[j] = EC_KEY_new_by_curve_name(test_curves[j]); 2301160817Ssimon ecdh_b[j] = EC_KEY_new_by_curve_name(test_curves[j]); 2302160817Ssimon if ((ecdh_a[j] == NULL) || (ecdh_b[j] == NULL)) 2303160817Ssimon { 2304160817Ssimon BIO_printf(bio_err,"ECDH failure.\n"); 2305160817Ssimon ERR_print_errors(bio_err); 2306160817Ssimon rsa_count=1; 2307160817Ssimon } 2308160817Ssimon else 2309160817Ssimon { 2310160817Ssimon /* generate two ECDH key pairs */ 2311160817Ssimon if (!EC_KEY_generate_key(ecdh_a[j]) || 2312160817Ssimon !EC_KEY_generate_key(ecdh_b[j])) 2313160817Ssimon { 2314160817Ssimon BIO_printf(bio_err,"ECDH key generation failure.\n"); 2315160817Ssimon ERR_print_errors(bio_err); 2316160817Ssimon rsa_count=1; 2317160817Ssimon } 2318160817Ssimon else 2319160817Ssimon { 2320160817Ssimon /* If field size is not more than 24 octets, then use SHA-1 hash of result; 2321160817Ssimon * otherwise, use result (see section 4.8 of draft-ietf-tls-ecc-03.txt). 2322160817Ssimon */ 2323160817Ssimon int field_size, outlen; 2324160817Ssimon void *(*kdf)(const void *in, size_t inlen, void *out, size_t *xoutlen); 2325160817Ssimon field_size = EC_GROUP_get_degree(EC_KEY_get0_group(ecdh_a[j])); 2326160817Ssimon if (field_size <= 24 * 8) 2327160817Ssimon { 2328160817Ssimon outlen = KDF1_SHA1_len; 2329160817Ssimon kdf = KDF1_SHA1; 2330160817Ssimon } 2331160817Ssimon else 2332160817Ssimon { 2333160817Ssimon outlen = (field_size+7)/8; 2334160817Ssimon kdf = NULL; 2335160817Ssimon } 2336160817Ssimon secret_size_a = ECDH_compute_key(secret_a, outlen, 2337160817Ssimon EC_KEY_get0_public_key(ecdh_b[j]), 2338160817Ssimon ecdh_a[j], kdf); 2339160817Ssimon secret_size_b = ECDH_compute_key(secret_b, outlen, 2340160817Ssimon EC_KEY_get0_public_key(ecdh_a[j]), 2341160817Ssimon ecdh_b[j], kdf); 2342160817Ssimon if (secret_size_a != secret_size_b) 2343160817Ssimon ecdh_checks = 0; 2344160817Ssimon else 2345160817Ssimon ecdh_checks = 1; 2346160817Ssimon 2347160817Ssimon for (secret_idx = 0; 2348160817Ssimon (secret_idx < secret_size_a) 2349160817Ssimon && (ecdh_checks == 1); 2350160817Ssimon secret_idx++) 2351160817Ssimon { 2352160817Ssimon if (secret_a[secret_idx] != secret_b[secret_idx]) 2353160817Ssimon ecdh_checks = 0; 2354160817Ssimon } 2355160817Ssimon 2356160817Ssimon if (ecdh_checks == 0) 2357160817Ssimon { 2358160817Ssimon BIO_printf(bio_err,"ECDH computations don't match.\n"); 2359160817Ssimon ERR_print_errors(bio_err); 2360160817Ssimon rsa_count=1; 2361160817Ssimon } 2362160817Ssimon 2363160817Ssimon pkey_print_message("","ecdh", 2364160817Ssimon ecdh_c[j][0], 2365160817Ssimon test_curves_bits[j], 2366160817Ssimon ECDH_SECONDS); 2367160817Ssimon Time_F(START); 2368160817Ssimon for (count=0,run=1; COND(ecdh_c[j][0]); count++) 2369160817Ssimon { 2370160817Ssimon ECDH_compute_key(secret_a, outlen, 2371160817Ssimon EC_KEY_get0_public_key(ecdh_b[j]), 2372160817Ssimon ecdh_a[j], kdf); 2373160817Ssimon } 2374160817Ssimon d=Time_F(STOP); 2375160817Ssimon BIO_printf(bio_err, mr ? "+R7:%ld:%d:%.2f\n" :"%ld %d-bit ECDH ops in %.2fs\n", 2376160817Ssimon count, test_curves_bits[j], d); 2377160817Ssimon ecdh_results[j][0]=d/(double)count; 2378160817Ssimon rsa_count=count; 2379160817Ssimon } 2380160817Ssimon } 2381160817Ssimon 2382160817Ssimon 2383160817Ssimon if (rsa_count <= 1) 2384160817Ssimon { 2385160817Ssimon /* if longer than 10s, don't do any more */ 2386160817Ssimon for (j++; j<EC_NUM; j++) 2387160817Ssimon ecdh_doit[j]=0; 2388160817Ssimon } 2389160817Ssimon } 2390160817Ssimon if (rnd_fake) RAND_cleanup(); 2391160817Ssimon#endif 2392205128Ssimon#ifndef NO_FORK 2393110007Smarkmshow_res: 2394110007Smarkm#endif 2395110007Smarkm if(!mr) 2396110007Smarkm { 2397110007Smarkm fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_VERSION)); 239855714Skris fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_BUILT_ON)); 2399110007Smarkm printf("options:"); 2400110007Smarkm printf("%s ",BN_options()); 2401110007Smarkm#ifndef OPENSSL_NO_MD2 2402110007Smarkm printf("%s ",MD2_options()); 240355714Skris#endif 2404110007Smarkm#ifndef OPENSSL_NO_RC4 2405110007Smarkm printf("%s ",RC4_options()); 240655714Skris#endif 2407110007Smarkm#ifndef OPENSSL_NO_DES 2408110007Smarkm printf("%s ",DES_options()); 240955714Skris#endif 2410110007Smarkm#ifndef OPENSSL_NO_AES 2411110007Smarkm printf("%s ",AES_options()); 241255714Skris#endif 2413110007Smarkm#ifndef OPENSSL_NO_IDEA 2414110007Smarkm printf("%s ",idea_options()); 241555714Skris#endif 2416110007Smarkm#ifndef OPENSSL_NO_BF 2417110007Smarkm printf("%s ",BF_options()); 2418110007Smarkm#endif 2419110007Smarkm fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS)); 2420160817Ssimon } 242155714Skris 242255714Skris if (pr_header) 242355714Skris { 2424110007Smarkm if(mr) 2425110007Smarkm fprintf(stdout,"+H"); 2426110007Smarkm else 2427110007Smarkm { 2428110007Smarkm fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n"); 2429110007Smarkm fprintf(stdout,"type "); 2430110007Smarkm } 243155714Skris for (j=0; j<SIZE_NUM; j++) 2432110007Smarkm fprintf(stdout,mr ? ":%d" : "%7d bytes",lengths[j]); 243355714Skris fprintf(stdout,"\n"); 243455714Skris } 243555714Skris 243655714Skris for (k=0; k<ALGOR_NUM; k++) 243755714Skris { 243855714Skris if (!doit[k]) continue; 2439110007Smarkm if(mr) 2440110007Smarkm fprintf(stdout,"+F:%d:%s",k,names[k]); 2441110007Smarkm else 2442110007Smarkm fprintf(stdout,"%-13s",names[k]); 244355714Skris for (j=0; j<SIZE_NUM; j++) 244455714Skris { 2445110007Smarkm if (results[k][j] > 10000 && !mr) 244655714Skris fprintf(stdout," %11.2fk",results[k][j]/1e3); 244755714Skris else 2448110007Smarkm fprintf(stdout,mr ? ":%.2f" : " %11.2f ",results[k][j]); 244955714Skris } 245055714Skris fprintf(stdout,"\n"); 245155714Skris } 2452110007Smarkm#ifndef OPENSSL_NO_RSA 245355714Skris j=1; 245455714Skris for (k=0; k<RSA_NUM; k++) 245555714Skris { 245655714Skris if (!rsa_doit[k]) continue; 2457110007Smarkm if (j && !mr) 245855714Skris { 245955714Skris printf("%18ssign verify sign/s verify/s\n"," "); 246055714Skris j=0; 246155714Skris } 2462110007Smarkm if(mr) 2463110007Smarkm fprintf(stdout,"+F2:%u:%u:%f:%f\n", 2464110007Smarkm k,rsa_bits[k],rsa_results[k][0], 2465110007Smarkm rsa_results[k][1]); 2466110007Smarkm else 2467160817Ssimon fprintf(stdout,"rsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n", 2468110007Smarkm rsa_bits[k],rsa_results[k][0],rsa_results[k][1], 2469110007Smarkm 1.0/rsa_results[k][0],1.0/rsa_results[k][1]); 247055714Skris } 247155714Skris#endif 2472110007Smarkm#ifndef OPENSSL_NO_DSA 247355714Skris j=1; 247455714Skris for (k=0; k<DSA_NUM; k++) 247555714Skris { 247655714Skris if (!dsa_doit[k]) continue; 2477110007Smarkm if (j && !mr) 2478110007Smarkm { 247955714Skris printf("%18ssign verify sign/s verify/s\n"," "); 248055714Skris j=0; 248155714Skris } 2482110007Smarkm if(mr) 2483110007Smarkm fprintf(stdout,"+F3:%u:%u:%f:%f\n", 2484110007Smarkm k,dsa_bits[k],dsa_results[k][0],dsa_results[k][1]); 2485110007Smarkm else 2486160817Ssimon fprintf(stdout,"dsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n", 2487110007Smarkm dsa_bits[k],dsa_results[k][0],dsa_results[k][1], 2488110007Smarkm 1.0/dsa_results[k][0],1.0/dsa_results[k][1]); 248955714Skris } 249055714Skris#endif 2491160817Ssimon#ifndef OPENSSL_NO_ECDSA 2492160817Ssimon j=1; 2493160817Ssimon for (k=0; k<EC_NUM; k++) 2494160817Ssimon { 2495160817Ssimon if (!ecdsa_doit[k]) continue; 2496160817Ssimon if (j && !mr) 2497160817Ssimon { 2498160817Ssimon printf("%30ssign verify sign/s verify/s\n"," "); 2499160817Ssimon j=0; 2500160817Ssimon } 2501160817Ssimon 2502160817Ssimon if (mr) 2503160817Ssimon fprintf(stdout,"+F4:%u:%u:%f:%f\n", 2504160817Ssimon k, test_curves_bits[k], 2505160817Ssimon ecdsa_results[k][0],ecdsa_results[k][1]); 2506160817Ssimon else 2507160817Ssimon fprintf(stdout, 2508160817Ssimon "%4u bit ecdsa (%s) %8.4fs %8.4fs %8.1f %8.1f\n", 2509160817Ssimon test_curves_bits[k], 2510160817Ssimon test_curves_names[k], 2511160817Ssimon ecdsa_results[k][0],ecdsa_results[k][1], 2512160817Ssimon 1.0/ecdsa_results[k][0],1.0/ecdsa_results[k][1]); 2513160817Ssimon } 2514160817Ssimon#endif 2515160817Ssimon 2516160817Ssimon 2517160817Ssimon#ifndef OPENSSL_NO_ECDH 2518160817Ssimon j=1; 2519160817Ssimon for (k=0; k<EC_NUM; k++) 2520160817Ssimon { 2521160817Ssimon if (!ecdh_doit[k]) continue; 2522160817Ssimon if (j && !mr) 2523160817Ssimon { 2524160817Ssimon printf("%30sop op/s\n"," "); 2525160817Ssimon j=0; 2526160817Ssimon } 2527160817Ssimon if (mr) 2528160817Ssimon fprintf(stdout,"+F5:%u:%u:%f:%f\n", 2529160817Ssimon k, test_curves_bits[k], 2530160817Ssimon ecdh_results[k][0], 1.0/ecdh_results[k][0]); 2531160817Ssimon 2532160817Ssimon else 2533160817Ssimon fprintf(stdout,"%4u bit ecdh (%s) %8.4fs %8.1f\n", 2534160817Ssimon test_curves_bits[k], 2535160817Ssimon test_curves_names[k], 2536160817Ssimon ecdh_results[k][0], 1.0/ecdh_results[k][0]); 2537160817Ssimon } 2538160817Ssimon#endif 2539160817Ssimon 254059194Skris mret=0; 2541160817Ssimon 254255714Skrisend: 2543110007Smarkm ERR_print_errors(bio_err); 254468654Skris if (buf != NULL) OPENSSL_free(buf); 254568654Skris if (buf2 != NULL) OPENSSL_free(buf2); 2546110007Smarkm#ifndef OPENSSL_NO_RSA 254755714Skris for (i=0; i<RSA_NUM; i++) 254855714Skris if (rsa_key[i] != NULL) 254955714Skris RSA_free(rsa_key[i]); 255055714Skris#endif 2551110007Smarkm#ifndef OPENSSL_NO_DSA 255255714Skris for (i=0; i<DSA_NUM; i++) 255355714Skris if (dsa_key[i] != NULL) 255455714Skris DSA_free(dsa_key[i]); 255555714Skris#endif 2556160817Ssimon 2557160817Ssimon#ifndef OPENSSL_NO_ECDSA 2558160817Ssimon for (i=0; i<EC_NUM; i++) 2559160817Ssimon if (ecdsa[i] != NULL) 2560160817Ssimon EC_KEY_free(ecdsa[i]); 2561160817Ssimon#endif 2562160817Ssimon#ifndef OPENSSL_NO_ECDH 2563160817Ssimon for (i=0; i<EC_NUM; i++) 2564160817Ssimon { 2565160817Ssimon if (ecdh_a[i] != NULL) 2566160817Ssimon EC_KEY_free(ecdh_a[i]); 2567160817Ssimon if (ecdh_b[i] != NULL) 2568160817Ssimon EC_KEY_free(ecdh_b[i]); 2569160817Ssimon } 2570160817Ssimon#endif 2571160817Ssimon 2572110007Smarkm apps_shutdown(); 2573110007Smarkm OPENSSL_EXIT(mret); 257455714Skris } 257555714Skris 2576110007Smarkmstatic void print_message(const char *s, long num, int length) 257755714Skris { 257855714Skris#ifdef SIGALRM 2579110007Smarkm BIO_printf(bio_err,mr ? "+DT:%s:%d:%d\n" 2580110007Smarkm : "Doing %s for %ds on %d size blocks: ",s,SECONDS,length); 258155714Skris (void)BIO_flush(bio_err); 258255714Skris alarm(SECONDS); 258355714Skris#else 2584110007Smarkm BIO_printf(bio_err,mr ? "+DN:%s:%ld:%d\n" 2585110007Smarkm : "Doing %s %ld times on %d size blocks: ",s,num,length); 258655714Skris (void)BIO_flush(bio_err); 258755714Skris#endif 258855714Skris#ifdef LINT 258955714Skris num=num; 259055714Skris#endif 259155714Skris } 259255714Skris 2593160817Ssimonstatic void pkey_print_message(const char *str, const char *str2, long num, 2594160817Ssimon int bits, int tm) 259555714Skris { 259655714Skris#ifdef SIGALRM 2597110007Smarkm BIO_printf(bio_err,mr ? "+DTP:%d:%s:%s:%d\n" 2598110007Smarkm : "Doing %d bit %s %s's for %ds: ",bits,str,str2,tm); 259955714Skris (void)BIO_flush(bio_err); 2600238405Sjkim alarm(tm); 260155714Skris#else 2602110007Smarkm BIO_printf(bio_err,mr ? "+DNP:%ld:%d:%s:%s\n" 2603110007Smarkm : "Doing %ld %d bit %s %s's: ",num,bits,str,str2); 260455714Skris (void)BIO_flush(bio_err); 260555714Skris#endif 260655714Skris#ifdef LINT 260755714Skris num=num; 260855714Skris#endif 260955714Skris } 261055714Skris 2611110007Smarkmstatic void print_result(int alg,int run_no,int count,double time_used) 2612110007Smarkm { 2613160817Ssimon BIO_printf(bio_err,mr ? "+R:%d:%s:%f\n" 2614160817Ssimon : "%d %s's in %.2fs\n",count,names[alg],time_used); 2615110007Smarkm results[alg][run_no]=((double)count)/time_used*lengths[run_no]; 2616110007Smarkm } 2617110007Smarkm 2618205128Ssimon#ifndef NO_FORK 2619110007Smarkmstatic char *sstrsep(char **string, const char *delim) 2620110007Smarkm { 2621110007Smarkm char isdelim[256]; 2622110007Smarkm char *token = *string; 2623110007Smarkm 2624110007Smarkm if (**string == 0) 2625110007Smarkm return NULL; 2626110007Smarkm 2627110007Smarkm memset(isdelim, 0, sizeof isdelim); 2628110007Smarkm isdelim[0] = 1; 2629110007Smarkm 2630110007Smarkm while (*delim) 2631110007Smarkm { 2632110007Smarkm isdelim[(unsigned char)(*delim)] = 1; 2633110007Smarkm delim++; 2634110007Smarkm } 2635110007Smarkm 2636110007Smarkm while (!isdelim[(unsigned char)(**string)]) 2637110007Smarkm { 2638110007Smarkm (*string)++; 2639110007Smarkm } 2640110007Smarkm 2641110007Smarkm if (**string) 2642110007Smarkm { 2643110007Smarkm **string = 0; 2644110007Smarkm (*string)++; 2645110007Smarkm } 2646110007Smarkm 2647110007Smarkm return token; 2648110007Smarkm } 2649110007Smarkm 2650110007Smarkmstatic int do_multi(int multi) 2651110007Smarkm { 2652110007Smarkm int n; 2653110007Smarkm int fd[2]; 2654110007Smarkm int *fds; 2655110007Smarkm static char sep[]=":"; 2656110007Smarkm 2657110007Smarkm fds=malloc(multi*sizeof *fds); 2658110007Smarkm for(n=0 ; n < multi ; ++n) 2659110007Smarkm { 2660238405Sjkim if (pipe(fd) == -1) 2661238405Sjkim { 2662238405Sjkim fprintf(stderr, "pipe failure\n"); 2663238405Sjkim exit(1); 2664238405Sjkim } 2665194206Ssimon fflush(stdout); 2666194206Ssimon fflush(stderr); 2667110007Smarkm if(fork()) 2668110007Smarkm { 2669110007Smarkm close(fd[1]); 2670110007Smarkm fds[n]=fd[0]; 2671110007Smarkm } 2672110007Smarkm else 2673110007Smarkm { 2674110007Smarkm close(fd[0]); 2675110007Smarkm close(1); 2676238405Sjkim if (dup(fd[1]) == -1) 2677238405Sjkim { 2678238405Sjkim fprintf(stderr, "dup failed\n"); 2679238405Sjkim exit(1); 2680238405Sjkim } 2681110007Smarkm close(fd[1]); 2682110007Smarkm mr=1; 2683110007Smarkm usertime=0; 2684238405Sjkim free(fds); 2685110007Smarkm return 0; 2686110007Smarkm } 2687110007Smarkm printf("Forked child %d\n",n); 2688110007Smarkm } 2689110007Smarkm 2690110007Smarkm /* for now, assume the pipe is long enough to take all the output */ 2691110007Smarkm for(n=0 ; n < multi ; ++n) 2692110007Smarkm { 2693110007Smarkm FILE *f; 2694110007Smarkm char buf[1024]; 2695110007Smarkm char *p; 2696110007Smarkm 2697110007Smarkm f=fdopen(fds[n],"r"); 2698110007Smarkm while(fgets(buf,sizeof buf,f)) 2699110007Smarkm { 2700110007Smarkm p=strchr(buf,'\n'); 2701110007Smarkm if(p) 2702110007Smarkm *p='\0'; 2703110007Smarkm if(buf[0] != '+') 2704110007Smarkm { 2705110007Smarkm fprintf(stderr,"Don't understand line '%s' from child %d\n", 2706110007Smarkm buf,n); 2707110007Smarkm continue; 2708110007Smarkm } 2709110007Smarkm printf("Got: %s from %d\n",buf,n); 2710110007Smarkm if(!strncmp(buf,"+F:",3)) 2711110007Smarkm { 2712110007Smarkm int alg; 2713110007Smarkm int j; 2714110007Smarkm 2715110007Smarkm p=buf+3; 2716110007Smarkm alg=atoi(sstrsep(&p,sep)); 2717110007Smarkm sstrsep(&p,sep); 2718110007Smarkm for(j=0 ; j < SIZE_NUM ; ++j) 2719110007Smarkm results[alg][j]+=atof(sstrsep(&p,sep)); 2720110007Smarkm } 2721110007Smarkm else if(!strncmp(buf,"+F2:",4)) 2722110007Smarkm { 2723110007Smarkm int k; 2724110007Smarkm double d; 2725110007Smarkm 2726110007Smarkm p=buf+4; 2727110007Smarkm k=atoi(sstrsep(&p,sep)); 2728110007Smarkm sstrsep(&p,sep); 2729110007Smarkm 2730110007Smarkm d=atof(sstrsep(&p,sep)); 2731110007Smarkm if(n) 2732110007Smarkm rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d); 2733110007Smarkm else 2734110007Smarkm rsa_results[k][0]=d; 2735110007Smarkm 2736110007Smarkm d=atof(sstrsep(&p,sep)); 2737110007Smarkm if(n) 2738110007Smarkm rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d); 2739110007Smarkm else 2740110007Smarkm rsa_results[k][1]=d; 2741110007Smarkm } 2742238405Sjkim#ifndef OPENSSL_NO_DSA 2743110007Smarkm else if(!strncmp(buf,"+F3:",4)) 2744110007Smarkm { 2745110007Smarkm int k; 2746110007Smarkm double d; 2747110007Smarkm 2748110007Smarkm p=buf+4; 2749110007Smarkm k=atoi(sstrsep(&p,sep)); 2750110007Smarkm sstrsep(&p,sep); 2751110007Smarkm 2752110007Smarkm d=atof(sstrsep(&p,sep)); 2753110007Smarkm if(n) 2754110007Smarkm dsa_results[k][0]=1/(1/dsa_results[k][0]+1/d); 2755110007Smarkm else 2756110007Smarkm dsa_results[k][0]=d; 2757110007Smarkm 2758110007Smarkm d=atof(sstrsep(&p,sep)); 2759110007Smarkm if(n) 2760110007Smarkm dsa_results[k][1]=1/(1/dsa_results[k][1]+1/d); 2761110007Smarkm else 2762110007Smarkm dsa_results[k][1]=d; 2763110007Smarkm } 2764238405Sjkim#endif 2765160817Ssimon#ifndef OPENSSL_NO_ECDSA 2766160817Ssimon else if(!strncmp(buf,"+F4:",4)) 2767160817Ssimon { 2768160817Ssimon int k; 2769160817Ssimon double d; 2770160817Ssimon 2771160817Ssimon p=buf+4; 2772160817Ssimon k=atoi(sstrsep(&p,sep)); 2773160817Ssimon sstrsep(&p,sep); 2774160817Ssimon 2775160817Ssimon d=atof(sstrsep(&p,sep)); 2776160817Ssimon if(n) 2777160817Ssimon ecdsa_results[k][0]=1/(1/ecdsa_results[k][0]+1/d); 2778160817Ssimon else 2779160817Ssimon ecdsa_results[k][0]=d; 2780160817Ssimon 2781160817Ssimon d=atof(sstrsep(&p,sep)); 2782160817Ssimon if(n) 2783160817Ssimon ecdsa_results[k][1]=1/(1/ecdsa_results[k][1]+1/d); 2784160817Ssimon else 2785160817Ssimon ecdsa_results[k][1]=d; 2786160817Ssimon } 2787160817Ssimon#endif 2788160817Ssimon 2789160817Ssimon#ifndef OPENSSL_NO_ECDH 2790160817Ssimon else if(!strncmp(buf,"+F5:",4)) 2791160817Ssimon { 2792160817Ssimon int k; 2793160817Ssimon double d; 2794160817Ssimon 2795160817Ssimon p=buf+4; 2796160817Ssimon k=atoi(sstrsep(&p,sep)); 2797160817Ssimon sstrsep(&p,sep); 2798160817Ssimon 2799160817Ssimon d=atof(sstrsep(&p,sep)); 2800160817Ssimon if(n) 2801160817Ssimon ecdh_results[k][0]=1/(1/ecdh_results[k][0]+1/d); 2802160817Ssimon else 2803160817Ssimon ecdh_results[k][0]=d; 2804160817Ssimon 2805160817Ssimon } 2806160817Ssimon#endif 2807160817Ssimon 2808110007Smarkm else if(!strncmp(buf,"+H:",3)) 2809110007Smarkm { 2810110007Smarkm } 2811110007Smarkm else 2812110007Smarkm fprintf(stderr,"Unknown type '%s' from child %d\n",buf,n); 2813110007Smarkm } 2814238405Sjkim 2815238405Sjkim fclose(f); 2816110007Smarkm } 2817238405Sjkim free(fds); 2818110007Smarkm return 1; 2819110007Smarkm } 2820110007Smarkm#endif 2821111150Snectar#endif 2822