155714Skris/* crypto/des/des_opts.c */ 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. 8280304Sjkim * 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). 15280304Sjkim * 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. 22280304Sjkim * 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 :-). 37280304Sjkim * 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)" 40280304Sjkim * 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. 52280304Sjkim * 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 */ 5855714Skris 59280304Sjkim/* 60280304Sjkim * define PART1, PART2, PART3 or PART4 to build only with a few of the 61280304Sjkim * options. This is for machines with 64k code segment size restrictions. 62280304Sjkim */ 6355714Skris 64109998Smarkm#if !defined(OPENSSL_SYS_MSDOS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC)) && !defined(OPENSSL_SYS_MACOSX) 65280304Sjkim# define TIMES 6655714Skris#endif 6755714Skris 6855714Skris#include <stdio.h> 69109998Smarkm#ifndef OPENSSL_SYS_MSDOS 70280304Sjkim# include <openssl/e_os2.h> 71280304Sjkim# include OPENSSL_UNISTD 7255714Skris#else 73280304Sjkim# include <io.h> 7455714Skrisextern void exit(); 7555714Skris#endif 76160814Ssimon 77160814Ssimon#ifndef OPENSSL_SYS_NETWARE 78280304Sjkim# include <signal.h> 79160814Ssimon#endif 80160814Ssimon 8155714Skris#ifndef _IRIX 82280304Sjkim# include <time.h> 8355714Skris#endif 8455714Skris#ifdef TIMES 85280304Sjkim# include <sys/types.h> 86280304Sjkim# include <sys/times.h> 8755714Skris#endif 8855714Skris 89280304Sjkim/* 90280304Sjkim * Depending on the VMS version, the tms structure is perhaps defined. The 91280304Sjkim * __TMS macro will show if it was. If it wasn't defined, we should undefine 92280304Sjkim * TIMES, since that tells the rest of the program how things should be 93280304Sjkim * handled. -- Richard Levitte 94280304Sjkim */ 95109998Smarkm#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__TMS) 96280304Sjkim# undef TIMES 9755714Skris#endif 9855714Skris 9955714Skris#ifndef TIMES 100280304Sjkim# include <sys/timeb.h> 10155714Skris#endif 10255714Skris 10355714Skris#if defined(sun) || defined(__ultrix) 104280304Sjkim# define _POSIX_SOURCE 105280304Sjkim# include <limits.h> 106280304Sjkim# include <sys/param.h> 10755714Skris#endif 10855714Skris 10955714Skris#include <openssl/des.h> 11055714Skris#include "spr.h" 11155714Skris 11255714Skris#define DES_DEFAULT_OPTIONS 11355714Skris 11455714Skris#if !defined(PART1) && !defined(PART2) && !defined(PART3) && !defined(PART4) 115280304Sjkim# define PART1 116280304Sjkim# define PART2 117280304Sjkim# define PART3 118280304Sjkim# define PART4 11955714Skris#endif 12055714Skris 12155714Skris#ifdef PART1 12255714Skris 123280304Sjkim# undef DES_UNROLL 124280304Sjkim# undef DES_RISC1 125280304Sjkim# undef DES_RISC2 126280304Sjkim# undef DES_PTR 127280304Sjkim# undef D_ENCRYPT 128280304Sjkim# define DES_encrypt1 des_encrypt_u4_cisc_idx 129280304Sjkim# define DES_encrypt2 des_encrypt2_u4_cisc_idx 130280304Sjkim# define DES_encrypt3 des_encrypt3_u4_cisc_idx 131280304Sjkim# define DES_decrypt3 des_decrypt3_u4_cisc_idx 132280304Sjkim# undef HEADER_DES_LOCL_H 133280304Sjkim# include "des_enc.c" 13455714Skris 135280304Sjkim# define DES_UNROLL 136280304Sjkim# undef DES_RISC1 137280304Sjkim# undef DES_RISC2 138280304Sjkim# undef DES_PTR 139280304Sjkim# undef D_ENCRYPT 140280304Sjkim# undef DES_encrypt1 141280304Sjkim# undef DES_encrypt2 142280304Sjkim# undef DES_encrypt3 143280304Sjkim# undef DES_decrypt3 144280304Sjkim# define DES_encrypt1 des_encrypt_u16_cisc_idx 145280304Sjkim# define DES_encrypt2 des_encrypt2_u16_cisc_idx 146280304Sjkim# define DES_encrypt3 des_encrypt3_u16_cisc_idx 147280304Sjkim# define DES_decrypt3 des_decrypt3_u16_cisc_idx 148280304Sjkim# undef HEADER_DES_LOCL_H 149280304Sjkim# include "des_enc.c" 15055714Skris 151280304Sjkim# undef DES_UNROLL 152280304Sjkim# define DES_RISC1 153280304Sjkim# undef DES_RISC2 154280304Sjkim# undef DES_PTR 155280304Sjkim# undef D_ENCRYPT 156280304Sjkim# undef DES_encrypt1 157280304Sjkim# undef DES_encrypt2 158280304Sjkim# undef DES_encrypt3 159280304Sjkim# undef DES_decrypt3 160280304Sjkim# define DES_encrypt1 des_encrypt_u4_risc1_idx 161280304Sjkim# define DES_encrypt2 des_encrypt2_u4_risc1_idx 162280304Sjkim# define DES_encrypt3 des_encrypt3_u4_risc1_idx 163280304Sjkim# define DES_decrypt3 des_decrypt3_u4_risc1_idx 164280304Sjkim# undef HEADER_DES_LOCL_H 165280304Sjkim# include "des_enc.c" 16655714Skris 16755714Skris#endif 16855714Skris 16955714Skris#ifdef PART2 17055714Skris 171280304Sjkim# undef DES_UNROLL 172280304Sjkim# undef DES_RISC1 173280304Sjkim# define DES_RISC2 174280304Sjkim# undef DES_PTR 175280304Sjkim# undef D_ENCRYPT 176280304Sjkim# undef DES_encrypt1 177280304Sjkim# undef DES_encrypt2 178280304Sjkim# undef DES_encrypt3 179280304Sjkim# undef DES_decrypt3 180280304Sjkim# define DES_encrypt1 des_encrypt_u4_risc2_idx 181280304Sjkim# define DES_encrypt2 des_encrypt2_u4_risc2_idx 182280304Sjkim# define DES_encrypt3 des_encrypt3_u4_risc2_idx 183280304Sjkim# define DES_decrypt3 des_decrypt3_u4_risc2_idx 184280304Sjkim# undef HEADER_DES_LOCL_H 185280304Sjkim# include "des_enc.c" 18655714Skris 187280304Sjkim# define DES_UNROLL 188280304Sjkim# define DES_RISC1 189280304Sjkim# undef DES_RISC2 190280304Sjkim# undef DES_PTR 191280304Sjkim# undef D_ENCRYPT 192280304Sjkim# undef DES_encrypt1 193280304Sjkim# undef DES_encrypt2 194280304Sjkim# undef DES_encrypt3 195280304Sjkim# undef DES_decrypt3 196280304Sjkim# define DES_encrypt1 des_encrypt_u16_risc1_idx 197280304Sjkim# define DES_encrypt2 des_encrypt2_u16_risc1_idx 198280304Sjkim# define DES_encrypt3 des_encrypt3_u16_risc1_idx 199280304Sjkim# define DES_decrypt3 des_decrypt3_u16_risc1_idx 200280304Sjkim# undef HEADER_DES_LOCL_H 201280304Sjkim# include "des_enc.c" 20255714Skris 203280304Sjkim# define DES_UNROLL 204280304Sjkim# undef DES_RISC1 205280304Sjkim# define DES_RISC2 206280304Sjkim# undef DES_PTR 207280304Sjkim# undef D_ENCRYPT 208280304Sjkim# undef DES_encrypt1 209280304Sjkim# undef DES_encrypt2 210280304Sjkim# undef DES_encrypt3 211280304Sjkim# undef DES_decrypt3 212280304Sjkim# define DES_encrypt1 des_encrypt_u16_risc2_idx 213280304Sjkim# define DES_encrypt2 des_encrypt2_u16_risc2_idx 214280304Sjkim# define DES_encrypt3 des_encrypt3_u16_risc2_idx 215280304Sjkim# define DES_decrypt3 des_decrypt3_u16_risc2_idx 216280304Sjkim# undef HEADER_DES_LOCL_H 217280304Sjkim# include "des_enc.c" 21855714Skris 21955714Skris#endif 22055714Skris 22155714Skris#ifdef PART3 22255714Skris 223280304Sjkim# undef DES_UNROLL 224280304Sjkim# undef DES_RISC1 225280304Sjkim# undef DES_RISC2 226280304Sjkim# define DES_PTR 227280304Sjkim# undef D_ENCRYPT 228280304Sjkim# undef DES_encrypt1 229280304Sjkim# undef DES_encrypt2 230280304Sjkim# undef DES_encrypt3 231280304Sjkim# undef DES_decrypt3 232280304Sjkim# define DES_encrypt1 des_encrypt_u4_cisc_ptr 233280304Sjkim# define DES_encrypt2 des_encrypt2_u4_cisc_ptr 234280304Sjkim# define DES_encrypt3 des_encrypt3_u4_cisc_ptr 235280304Sjkim# define DES_decrypt3 des_decrypt3_u4_cisc_ptr 236280304Sjkim# undef HEADER_DES_LOCL_H 237280304Sjkim# include "des_enc.c" 23855714Skris 239280304Sjkim# define DES_UNROLL 240280304Sjkim# undef DES_RISC1 241280304Sjkim# undef DES_RISC2 242280304Sjkim# define DES_PTR 243280304Sjkim# undef D_ENCRYPT 244280304Sjkim# undef DES_encrypt1 245280304Sjkim# undef DES_encrypt2 246280304Sjkim# undef DES_encrypt3 247280304Sjkim# undef DES_decrypt3 248280304Sjkim# define DES_encrypt1 des_encrypt_u16_cisc_ptr 249280304Sjkim# define DES_encrypt2 des_encrypt2_u16_cisc_ptr 250280304Sjkim# define DES_encrypt3 des_encrypt3_u16_cisc_ptr 251280304Sjkim# define DES_decrypt3 des_decrypt3_u16_cisc_ptr 252280304Sjkim# undef HEADER_DES_LOCL_H 253280304Sjkim# include "des_enc.c" 25455714Skris 255280304Sjkim# undef DES_UNROLL 256280304Sjkim# define DES_RISC1 257280304Sjkim# undef DES_RISC2 258280304Sjkim# define DES_PTR 259280304Sjkim# undef D_ENCRYPT 260280304Sjkim# undef DES_encrypt1 261280304Sjkim# undef DES_encrypt2 262280304Sjkim# undef DES_encrypt3 263280304Sjkim# undef DES_decrypt3 264280304Sjkim# define DES_encrypt1 des_encrypt_u4_risc1_ptr 265280304Sjkim# define DES_encrypt2 des_encrypt2_u4_risc1_ptr 266280304Sjkim# define DES_encrypt3 des_encrypt3_u4_risc1_ptr 267280304Sjkim# define DES_decrypt3 des_decrypt3_u4_risc1_ptr 268280304Sjkim# undef HEADER_DES_LOCL_H 269280304Sjkim# include "des_enc.c" 27055714Skris 27155714Skris#endif 27255714Skris 27355714Skris#ifdef PART4 27455714Skris 275280304Sjkim# undef DES_UNROLL 276280304Sjkim# undef DES_RISC1 277280304Sjkim# define DES_RISC2 278280304Sjkim# define DES_PTR 279280304Sjkim# undef D_ENCRYPT 280280304Sjkim# undef DES_encrypt1 281280304Sjkim# undef DES_encrypt2 282280304Sjkim# undef DES_encrypt3 283280304Sjkim# undef DES_decrypt3 284280304Sjkim# define DES_encrypt1 des_encrypt_u4_risc2_ptr 285280304Sjkim# define DES_encrypt2 des_encrypt2_u4_risc2_ptr 286280304Sjkim# define DES_encrypt3 des_encrypt3_u4_risc2_ptr 287280304Sjkim# define DES_decrypt3 des_decrypt3_u4_risc2_ptr 288280304Sjkim# undef HEADER_DES_LOCL_H 289280304Sjkim# include "des_enc.c" 29055714Skris 291280304Sjkim# define DES_UNROLL 292280304Sjkim# define DES_RISC1 293280304Sjkim# undef DES_RISC2 294280304Sjkim# define DES_PTR 295280304Sjkim# undef D_ENCRYPT 296280304Sjkim# undef DES_encrypt1 297280304Sjkim# undef DES_encrypt2 298280304Sjkim# undef DES_encrypt3 299280304Sjkim# undef DES_decrypt3 300280304Sjkim# define DES_encrypt1 des_encrypt_u16_risc1_ptr 301280304Sjkim# define DES_encrypt2 des_encrypt2_u16_risc1_ptr 302280304Sjkim# define DES_encrypt3 des_encrypt3_u16_risc1_ptr 303280304Sjkim# define DES_decrypt3 des_decrypt3_u16_risc1_ptr 304280304Sjkim# undef HEADER_DES_LOCL_H 305280304Sjkim# include "des_enc.c" 30655714Skris 307280304Sjkim# define DES_UNROLL 308280304Sjkim# undef DES_RISC1 309280304Sjkim# define DES_RISC2 310280304Sjkim# define DES_PTR 311280304Sjkim# undef D_ENCRYPT 312280304Sjkim# undef DES_encrypt1 313280304Sjkim# undef DES_encrypt2 314280304Sjkim# undef DES_encrypt3 315280304Sjkim# undef DES_decrypt3 316280304Sjkim# define DES_encrypt1 des_encrypt_u16_risc2_ptr 317280304Sjkim# define DES_encrypt2 des_encrypt2_u16_risc2_ptr 318280304Sjkim# define DES_encrypt3 des_encrypt3_u16_risc2_ptr 319280304Sjkim# define DES_decrypt3 des_decrypt3_u16_risc2_ptr 320280304Sjkim# undef HEADER_DES_LOCL_H 321280304Sjkim# include "des_enc.c" 32255714Skris 32355714Skris#endif 32455714Skris 32555714Skris/* The following if from times(3) man page. It may need to be changed */ 32655714Skris#ifndef HZ 32755714Skris# ifndef CLK_TCK 328280304Sjkim# ifndef _BSD_CLK_TCK_ /* FreeBSD fix */ 329280304Sjkim# define HZ 100.0 330280304Sjkim# else /* _BSD_CLK_TCK_ */ 33155714Skris# define HZ ((double)_BSD_CLK_TCK_) 33255714Skris# endif 333280304Sjkim# else /* CLK_TCK */ 33455714Skris# define HZ ((double)CLK_TCK) 33555714Skris# endif 33655714Skris#endif 33755714Skris 338280304Sjkim#define BUFSIZE ((long)1024) 339280304Sjkimlong run = 0; 34055714Skris 34155714Skrisdouble Time_F(int s); 34255714Skris#ifdef SIGALRM 343280304Sjkim# if defined(__STDC__) || defined(sgi) 344280304Sjkim# define SIGRETTYPE void 345280304Sjkim# else 346280304Sjkim# define SIGRETTYPE int 347280304Sjkim# endif 34855714Skris 34955714SkrisSIGRETTYPE sig_done(int sig); 35055714SkrisSIGRETTYPE sig_done(int sig) 351280304Sjkim{ 352280304Sjkim signal(SIGALRM, sig_done); 353280304Sjkim run = 0; 354280304Sjkim# ifdef LINT 355280304Sjkim sig = sig; 356280304Sjkim# endif 357280304Sjkim} 35855714Skris#endif 35955714Skris 360280304Sjkim#define START 0 361280304Sjkim#define STOP 1 36255714Skris 36355714Skrisdouble Time_F(int s) 364280304Sjkim{ 365280304Sjkim double ret; 36655714Skris#ifdef TIMES 367280304Sjkim static struct tms tstart, tend; 36855714Skris 369280304Sjkim if (s == START) { 370280304Sjkim times(&tstart); 371280304Sjkim return (0); 372280304Sjkim } else { 373280304Sjkim times(&tend); 374280304Sjkim ret = ((double)(tend.tms_utime - tstart.tms_utime)) / HZ; 375280304Sjkim return ((ret == 0.0) ? 1e-6 : ret); 376280304Sjkim } 377280304Sjkim#else /* !times() */ 378280304Sjkim static struct timeb tstart, tend; 379280304Sjkim long i; 38055714Skris 381280304Sjkim if (s == START) { 382280304Sjkim ftime(&tstart); 383280304Sjkim return (0); 384280304Sjkim } else { 385280304Sjkim ftime(&tend); 386280304Sjkim i = (long)tend.millitm - (long)tstart.millitm; 387280304Sjkim ret = ((double)(tend.time - tstart.time)) + ((double)i) / 1000.0; 388280304Sjkim return ((ret == 0.0) ? 1e-6 : ret); 389280304Sjkim } 39055714Skris#endif 391280304Sjkim} 39255714Skris 39355714Skris#ifdef SIGALRM 394280304Sjkim# define print_name(name) fprintf(stderr,"Doing %s's for 10 seconds\n",name); alarm(10); 39555714Skris#else 396280304Sjkim# define print_name(name) fprintf(stderr,"Doing %s %ld times\n",name,cb); 39755714Skris#endif 398280304Sjkim 39955714Skris#define time_it(func,name,index) \ 400280304Sjkim print_name(name); \ 401280304Sjkim Time_F(START); \ 402280304Sjkim for (count=0,run=1; COND(cb); count++) \ 403280304Sjkim { \ 404280304Sjkim unsigned long d[2]; \ 405280304Sjkim func(d,&sch,DES_ENCRYPT); \ 406280304Sjkim } \ 407280304Sjkim tm[index]=Time_F(STOP); \ 408280304Sjkim fprintf(stderr,"%ld %s's in %.2f second\n",count,name,tm[index]); \ 409280304Sjkim tm[index]=((double)COUNT(cb))/tm[index]; 41055714Skris 41155714Skris#define print_it(name,index) \ 412280304Sjkim fprintf(stderr,"%s bytes per sec = %12.2f (%5.1fuS)\n",name, \ 413280304Sjkim tm[index]*8,1.0e6/tm[index]); 41455714Skris 41555714Skrisint main(int argc, char **argv) 416280304Sjkim{ 417280304Sjkim long count; 418280304Sjkim static unsigned char buf[BUFSIZE]; 419280304Sjkim static DES_cblock key = 420280304Sjkim { 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0 }; 421280304Sjkim static DES_cblock key2 = 422280304Sjkim { 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12 }; 423280304Sjkim static DES_cblock key3 = 424280304Sjkim { 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34 }; 425280304Sjkim DES_key_schedule sch, sch2, sch3; 426280304Sjkim double d, tm[16], max = 0; 427280304Sjkim int rank[16]; 428280304Sjkim char *str[16]; 429280304Sjkim int max_idx = 0, i, num = 0, j; 43055714Skris#ifndef SIGALARM 431280304Sjkim long ca, cb, cc, cd, ce; 43255714Skris#endif 43355714Skris 434280304Sjkim for (i = 0; i < 12; i++) { 435280304Sjkim tm[i] = 0.0; 436280304Sjkim rank[i] = 0; 437280304Sjkim } 43855714Skris 43955714Skris#ifndef TIMES 440280304Sjkim fprintf(stderr, "To get the most accurate results, try to run this\n"); 441280304Sjkim fprintf(stderr, "program when this computer is idle.\n"); 44255714Skris#endif 44355714Skris 444280304Sjkim DES_set_key_unchecked(&key, &sch); 445280304Sjkim DES_set_key_unchecked(&key2, &sch2); 446280304Sjkim DES_set_key_unchecked(&key3, &sch3); 44755714Skris 44855714Skris#ifndef SIGALRM 449280304Sjkim fprintf(stderr, "First we calculate the approximate speed ...\n"); 450280304Sjkim DES_set_key_unchecked(&key, sch); 451280304Sjkim count = 10; 452280304Sjkim do { 453280304Sjkim long i; 454280304Sjkim unsigned long data[2]; 45555714Skris 456280304Sjkim count *= 2; 457280304Sjkim Time_F(START); 458280304Sjkim for (i = count; i; i--) 459280304Sjkim DES_encrypt1(data, &(sch[0]), DES_ENCRYPT); 460280304Sjkim d = Time_F(STOP); 461280304Sjkim } while (d < 3.0); 462280304Sjkim ca = count; 463280304Sjkim cb = count * 3; 464280304Sjkim cc = count * 3 * 8 / BUFSIZE + 1; 465280304Sjkim cd = count * 8 / BUFSIZE + 1; 46655714Skris 467280304Sjkim ce = count / 20 + 1; 468280304Sjkim# define COND(d) (count != (d)) 469280304Sjkim# define COUNT(d) (d) 47055714Skris#else 471280304Sjkim# define COND(c) (run) 472280304Sjkim# define COUNT(d) (count) 473280304Sjkim signal(SIGALRM, sig_done); 474280304Sjkim alarm(10); 47555714Skris#endif 47655714Skris 47755714Skris#ifdef PART1 478280304Sjkim time_it(des_encrypt_u4_cisc_idx, "des_encrypt_u4_cisc_idx ", 0); 479280304Sjkim time_it(des_encrypt_u16_cisc_idx, "des_encrypt_u16_cisc_idx ", 1); 480280304Sjkim time_it(des_encrypt_u4_risc1_idx, "des_encrypt_u4_risc1_idx ", 2); 481280304Sjkim num += 3; 48255714Skris#endif 48355714Skris#ifdef PART2 484280304Sjkim time_it(des_encrypt_u16_risc1_idx, "des_encrypt_u16_risc1_idx", 3); 485280304Sjkim time_it(des_encrypt_u4_risc2_idx, "des_encrypt_u4_risc2_idx ", 4); 486280304Sjkim time_it(des_encrypt_u16_risc2_idx, "des_encrypt_u16_risc2_idx", 5); 487280304Sjkim num += 3; 48855714Skris#endif 48955714Skris#ifdef PART3 490280304Sjkim time_it(des_encrypt_u4_cisc_ptr, "des_encrypt_u4_cisc_ptr ", 6); 491280304Sjkim time_it(des_encrypt_u16_cisc_ptr, "des_encrypt_u16_cisc_ptr ", 7); 492280304Sjkim time_it(des_encrypt_u4_risc1_ptr, "des_encrypt_u4_risc1_ptr ", 8); 493280304Sjkim num += 3; 49455714Skris#endif 49555714Skris#ifdef PART4 496280304Sjkim time_it(des_encrypt_u16_risc1_ptr, "des_encrypt_u16_risc1_ptr", 9); 497280304Sjkim time_it(des_encrypt_u4_risc2_ptr, "des_encrypt_u4_risc2_ptr ", 10); 498280304Sjkim time_it(des_encrypt_u16_risc2_ptr, "des_encrypt_u16_risc2_ptr", 11); 499280304Sjkim num += 3; 50055714Skris#endif 50155714Skris 50255714Skris#ifdef PART1 503280304Sjkim str[0] = " 4 c i"; 504280304Sjkim print_it("des_encrypt_u4_cisc_idx ", 0); 505280304Sjkim max = tm[0]; 506280304Sjkim max_idx = 0; 507280304Sjkim str[1] = "16 c i"; 508280304Sjkim print_it("des_encrypt_u16_cisc_idx ", 1); 509280304Sjkim if (max < tm[1]) { 510280304Sjkim max = tm[1]; 511280304Sjkim max_idx = 1; 512280304Sjkim } 513280304Sjkim str[2] = " 4 r1 i"; 514280304Sjkim print_it("des_encrypt_u4_risc1_idx ", 2); 515280304Sjkim if (max < tm[2]) { 516280304Sjkim max = tm[2]; 517280304Sjkim max_idx = 2; 518280304Sjkim } 51955714Skris#endif 52055714Skris#ifdef PART2 521280304Sjkim str[3] = "16 r1 i"; 522280304Sjkim print_it("des_encrypt_u16_risc1_idx", 3); 523280304Sjkim if (max < tm[3]) { 524280304Sjkim max = tm[3]; 525280304Sjkim max_idx = 3; 526280304Sjkim } 527280304Sjkim str[4] = " 4 r2 i"; 528280304Sjkim print_it("des_encrypt_u4_risc2_idx ", 4); 529280304Sjkim if (max < tm[4]) { 530280304Sjkim max = tm[4]; 531280304Sjkim max_idx = 4; 532280304Sjkim } 533280304Sjkim str[5] = "16 r2 i"; 534280304Sjkim print_it("des_encrypt_u16_risc2_idx", 5); 535280304Sjkim if (max < tm[5]) { 536280304Sjkim max = tm[5]; 537280304Sjkim max_idx = 5; 538280304Sjkim } 53955714Skris#endif 54055714Skris#ifdef PART3 541280304Sjkim str[6] = " 4 c p"; 542280304Sjkim print_it("des_encrypt_u4_cisc_ptr ", 6); 543280304Sjkim if (max < tm[6]) { 544280304Sjkim max = tm[6]; 545280304Sjkim max_idx = 6; 546280304Sjkim } 547280304Sjkim str[7] = "16 c p"; 548280304Sjkim print_it("des_encrypt_u16_cisc_ptr ", 7); 549280304Sjkim if (max < tm[7]) { 550280304Sjkim max = tm[7]; 551280304Sjkim max_idx = 7; 552280304Sjkim } 553280304Sjkim str[8] = " 4 r1 p"; 554280304Sjkim print_it("des_encrypt_u4_risc1_ptr ", 8); 555280304Sjkim if (max < tm[8]) { 556280304Sjkim max = tm[8]; 557280304Sjkim max_idx = 8; 558280304Sjkim } 55955714Skris#endif 56055714Skris#ifdef PART4 561280304Sjkim str[9] = "16 r1 p"; 562280304Sjkim print_it("des_encrypt_u16_risc1_ptr", 9); 563280304Sjkim if (max < tm[9]) { 564280304Sjkim max = tm[9]; 565280304Sjkim max_idx = 9; 566280304Sjkim } 567280304Sjkim str[10] = " 4 r2 p"; 568280304Sjkim print_it("des_encrypt_u4_risc2_ptr ", 10); 569280304Sjkim if (max < tm[10]) { 570280304Sjkim max = tm[10]; 571280304Sjkim max_idx = 10; 572280304Sjkim } 573280304Sjkim str[11] = "16 r2 p"; 574280304Sjkim print_it("des_encrypt_u16_risc2_ptr", 11); 575280304Sjkim if (max < tm[11]) { 576280304Sjkim max = tm[11]; 577280304Sjkim max_idx = 11; 578280304Sjkim } 57955714Skris#endif 580280304Sjkim printf("options des ecb/s\n"); 581280304Sjkim printf("%s %12.2f 100.0%%\n", str[max_idx], tm[max_idx]); 582280304Sjkim d = tm[max_idx]; 583280304Sjkim tm[max_idx] = -2.0; 584280304Sjkim max = -1.0; 585280304Sjkim for (;;) { 586280304Sjkim for (i = 0; i < 12; i++) { 587280304Sjkim if (max < tm[i]) { 588280304Sjkim max = tm[i]; 589280304Sjkim j = i; 590280304Sjkim } 591280304Sjkim } 592280304Sjkim if (max < 0.0) 593280304Sjkim break; 594280304Sjkim printf("%s %12.2f %4.1f%%\n", str[j], tm[j], tm[j] / d * 100.0); 595280304Sjkim tm[j] = -2.0; 596280304Sjkim max = -1.0; 597280304Sjkim } 59855714Skris 599280304Sjkim switch (max_idx) { 600280304Sjkim case 0: 601280304Sjkim printf("-DDES_DEFAULT_OPTIONS\n"); 602280304Sjkim break; 603280304Sjkim case 1: 604280304Sjkim printf("-DDES_UNROLL\n"); 605280304Sjkim break; 606280304Sjkim case 2: 607280304Sjkim printf("-DDES_RISC1\n"); 608280304Sjkim break; 609280304Sjkim case 3: 610280304Sjkim printf("-DDES_UNROLL -DDES_RISC1\n"); 611280304Sjkim break; 612280304Sjkim case 4: 613280304Sjkim printf("-DDES_RISC2\n"); 614280304Sjkim break; 615280304Sjkim case 5: 616280304Sjkim printf("-DDES_UNROLL -DDES_RISC2\n"); 617280304Sjkim break; 618280304Sjkim case 6: 619280304Sjkim printf("-DDES_PTR\n"); 620280304Sjkim break; 621280304Sjkim case 7: 622280304Sjkim printf("-DDES_UNROLL -DDES_PTR\n"); 623280304Sjkim break; 624280304Sjkim case 8: 625280304Sjkim printf("-DDES_RISC1 -DDES_PTR\n"); 626280304Sjkim break; 627280304Sjkim case 9: 628280304Sjkim printf("-DDES_UNROLL -DDES_RISC1 -DDES_PTR\n"); 629280304Sjkim break; 630280304Sjkim case 10: 631280304Sjkim printf("-DDES_RISC2 -DDES_PTR\n"); 632280304Sjkim break; 633280304Sjkim case 11: 634280304Sjkim printf("-DDES_UNROLL -DDES_RISC2 -DDES_PTR\n"); 635280304Sjkim break; 636280304Sjkim } 637280304Sjkim exit(0); 638109998Smarkm#if defined(LINT) || defined(OPENSSL_SYS_MSDOS) 639280304Sjkim return (0); 64055714Skris#endif 641280304Sjkim} 642