62 #if !defined(OPENSSL_SYS_MSDOS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC)) && !defined(OPENSSL_SYS_MACOSX)
67 #ifndef OPENSSL_SYS_MSDOS
69 #include OPENSSL_UNISTD
75 #ifndef OPENSSL_SYS_NETWARE
83 #include <sys/types.h>
84 #include <sys/times.h>
91 #if defined(OPENSSL_SYS_VMS_DECC) && !defined(__TMS)
96 #include <sys/timeb.h>
100 #if defined(sun) || defined(__ultrix)
101 #define _POSIX_SOURCE
103 #include <sys/param.h>
109 #define DES_DEFAULT_OPTIONS
111 #if !defined(PART1) && !defined(PART2) && !defined(PART3) && !defined(PART4)
125 #define DES_encrypt1 des_encrypt_u4_cisc_idx
126 #define DES_encrypt2 des_encrypt2_u4_cisc_idx
127 #define DES_encrypt3 des_encrypt3_u4_cisc_idx
128 #define DES_decrypt3 des_decrypt3_u4_cisc_idx
129 #undef HEADER_DES_LOCL_H
141 #define DES_encrypt1 des_encrypt_u16_cisc_idx
142 #define DES_encrypt2 des_encrypt2_u16_cisc_idx
143 #define DES_encrypt3 des_encrypt3_u16_cisc_idx
144 #define DES_decrypt3 des_decrypt3_u16_cisc_idx
145 #undef HEADER_DES_LOCL_H
157 #define DES_encrypt1 des_encrypt_u4_risc1_idx
158 #define DES_encrypt2 des_encrypt2_u4_risc1_idx
159 #define DES_encrypt3 des_encrypt3_u4_risc1_idx
160 #define DES_decrypt3 des_decrypt3_u4_risc1_idx
161 #undef HEADER_DES_LOCL_H
177 #define DES_encrypt1 des_encrypt_u4_risc2_idx
178 #define DES_encrypt2 des_encrypt2_u4_risc2_idx
179 #define DES_encrypt3 des_encrypt3_u4_risc2_idx
180 #define DES_decrypt3 des_decrypt3_u4_risc2_idx
181 #undef HEADER_DES_LOCL_H
193 #define DES_encrypt1 des_encrypt_u16_risc1_idx
194 #define DES_encrypt2 des_encrypt2_u16_risc1_idx
195 #define DES_encrypt3 des_encrypt3_u16_risc1_idx
196 #define DES_decrypt3 des_decrypt3_u16_risc1_idx
197 #undef HEADER_DES_LOCL_H
209 #define DES_encrypt1 des_encrypt_u16_risc2_idx
210 #define DES_encrypt2 des_encrypt2_u16_risc2_idx
211 #define DES_encrypt3 des_encrypt3_u16_risc2_idx
212 #define DES_decrypt3 des_decrypt3_u16_risc2_idx
213 #undef HEADER_DES_LOCL_H
229 #define DES_encrypt1 des_encrypt_u4_cisc_ptr
230 #define DES_encrypt2 des_encrypt2_u4_cisc_ptr
231 #define DES_encrypt3 des_encrypt3_u4_cisc_ptr
232 #define DES_decrypt3 des_decrypt3_u4_cisc_ptr
233 #undef HEADER_DES_LOCL_H
245 #define DES_encrypt1 des_encrypt_u16_cisc_ptr
246 #define DES_encrypt2 des_encrypt2_u16_cisc_ptr
247 #define DES_encrypt3 des_encrypt3_u16_cisc_ptr
248 #define DES_decrypt3 des_decrypt3_u16_cisc_ptr
249 #undef HEADER_DES_LOCL_H
261 #define DES_encrypt1 des_encrypt_u4_risc1_ptr
262 #define DES_encrypt2 des_encrypt2_u4_risc1_ptr
263 #define DES_encrypt3 des_encrypt3_u4_risc1_ptr
264 #define DES_decrypt3 des_decrypt3_u4_risc1_ptr
265 #undef HEADER_DES_LOCL_H
281 #define DES_encrypt1 des_encrypt_u4_risc2_ptr
282 #define DES_encrypt2 des_encrypt2_u4_risc2_ptr
283 #define DES_encrypt3 des_encrypt3_u4_risc2_ptr
284 #define DES_decrypt3 des_decrypt3_u4_risc2_ptr
285 #undef HEADER_DES_LOCL_H
297 #define DES_encrypt1 des_encrypt_u16_risc1_ptr
298 #define DES_encrypt2 des_encrypt2_u16_risc1_ptr
299 #define DES_encrypt3 des_encrypt3_u16_risc1_ptr
300 #define DES_decrypt3 des_decrypt3_u16_risc1_ptr
301 #undef HEADER_DES_LOCL_H
313 #define DES_encrypt1 des_encrypt_u16_risc2_ptr
314 #define DES_encrypt2 des_encrypt2_u16_risc2_ptr
315 #define DES_encrypt3 des_encrypt3_u16_risc2_ptr
316 #define DES_decrypt3 des_decrypt3_u16_risc2_ptr
317 #undef HEADER_DES_LOCL_H
325 # ifndef _BSD_CLK_TCK_
328 # define HZ ((double)_BSD_CLK_TCK_)
331 # define HZ ((double)CLK_TCK)
335 #define BUFSIZE ((long)1024)
340 #if defined(__STDC__) || defined(sgi)
341 #define SIGRETTYPE void
343 #define SIGRETTYPE int
346 SIGRETTYPE sig_done(
int sig);
347 SIGRETTYPE sig_done(
int sig)
349 signal(SIGALRM,sig_done);
364 static struct tms tstart,tend;
374 ret=((double)(tend.tms_utime-tstart.tms_utime))/
HZ;
375 return((ret == 0.0)?1
e-6:ret);
378 static struct timeb tstart,tend;
389 i=(long)tend.millitm-(
long)tstart.millitm;
390 ret=((double)(tend.time-tstart.time))+((
double)i)/1000.0;
391 return((ret == 0.0)?1
e-6:ret);
397 #define print_name(name) fprintf(stderr,"Doing %s's for 10 seconds\n",name); alarm(10);
399 #define print_name(name) fprintf(stderr,"Doing %s %ld times\n",name,cb);
402 #define time_it(func,name,index) \
405 for (count=0,run=1; COND(cb); count++) \
407 unsigned long d[2]; \
408 func(d,&sch,DES_ENCRYPT); \
410 tm[index]=Time_F(STOP); \
411 fprintf(stderr,"%ld %s's in %.2f second\n",count,name,tm[index]); \
412 tm[index]=((double)COUNT(cb))/tm[index];
414 #define print_it(name,index) \
415 fprintf(stderr,"%s bytes per sec = %12.2f (%5.1fuS)\n",name, \
416 tm[index]*8,1.0e6/tm[index]);
418 int main(
int argc,
char **argv)
421 static unsigned char buf[
BUFSIZE];
422 static DES_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};
423 static DES_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
424 static DES_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
426 double d,tm[16],
max=0;
429 int max_idx=0,i,
num=0,j;
441 fprintf(stderr,
"To get the most accurate results, try to run this\n");
442 fprintf(stderr,
"program when this computer is idle.\n");
450 fprintf(stderr,
"First we calculate the approximate speed ...\n");
455 unsigned long data[2];
459 for (i=count; i; i--)
469 #define COND(d) (count != (d))
472 #define COND(c) (run)
473 #define COUNT(d) (count)
474 signal(SIGALRM,sig_done);
479 time_it(des_encrypt_u4_cisc_idx,
"des_encrypt_u4_cisc_idx ", 0);
480 time_it(des_encrypt_u16_cisc_idx,
"des_encrypt_u16_cisc_idx ", 1);
481 time_it(des_encrypt_u4_risc1_idx,
"des_encrypt_u4_risc1_idx ", 2);
485 time_it(des_encrypt_u16_risc1_idx,
"des_encrypt_u16_risc1_idx", 3);
486 time_it(des_encrypt_u4_risc2_idx,
"des_encrypt_u4_risc2_idx ", 4);
487 time_it(des_encrypt_u16_risc2_idx,
"des_encrypt_u16_risc2_idx", 5);
491 time_it(des_encrypt_u4_cisc_ptr,
"des_encrypt_u4_cisc_ptr ", 6);
492 time_it(des_encrypt_u16_cisc_ptr,
"des_encrypt_u16_cisc_ptr ", 7);
493 time_it(des_encrypt_u4_risc1_ptr,
"des_encrypt_u4_risc1_ptr ", 8);
497 time_it(des_encrypt_u16_risc1_ptr,
"des_encrypt_u16_risc1_ptr", 9);
498 time_it(des_encrypt_u4_risc2_ptr,
"des_encrypt_u4_risc2_ptr ",10);
499 time_it(des_encrypt_u16_risc2_ptr,
"des_encrypt_u16_risc2_ptr",11);
505 print_it(
"des_encrypt_u4_cisc_idx ",0);
509 print_it(
"des_encrypt_u16_cisc_idx ",1);
510 if (max < tm[1]) { max=tm[1]; max_idx=1; }
512 print_it(
"des_encrypt_u4_risc1_idx ",2);
513 if (max < tm[2]) { max=tm[2]; max_idx=2; }
517 print_it(
"des_encrypt_u16_risc1_idx",3);
518 if (max < tm[3]) { max=tm[3]; max_idx=3; }
520 print_it(
"des_encrypt_u4_risc2_idx ",4);
521 if (max < tm[4]) { max=tm[4]; max_idx=4; }
523 print_it(
"des_encrypt_u16_risc2_idx",5);
524 if (max < tm[5]) { max=tm[5]; max_idx=5; }
528 print_it(
"des_encrypt_u4_cisc_ptr ",6);
529 if (max < tm[6]) { max=tm[6]; max_idx=6; }
531 print_it(
"des_encrypt_u16_cisc_ptr ",7);
532 if (max < tm[7]) { max=tm[7]; max_idx=7; }
534 print_it(
"des_encrypt_u4_risc1_ptr ",8);
535 if (max < tm[8]) { max=tm[8]; max_idx=8; }
539 print_it(
"des_encrypt_u16_risc1_ptr",9);
540 if (max < tm[9]) { max=tm[9]; max_idx=9; }
542 print_it(
"des_encrypt_u4_risc2_ptr ",10);
543 if (max < tm[10]) { max=tm[10]; max_idx=10; }
545 print_it(
"des_encrypt_u16_risc2_ptr",11);
546 if (max < tm[11]) { max=tm[11]; max_idx=11; }
548 printf(
"options des ecb/s\n");
549 printf(
"%s %12.2f 100.0%%\n",str[max_idx],tm[max_idx]);
557 if (max < tm[i]) { max=tm[i]; j=i; }
559 if (max < 0.0)
break;
560 printf(
"%s %12.2f %4.1f%%\n",str[j],tm[j],tm[j]/d*100.0);
568 printf(
"-DDES_DEFAULT_OPTIONS\n");
571 printf(
"-DDES_UNROLL\n");
574 printf(
"-DDES_RISC1\n");
577 printf(
"-DDES_UNROLL -DDES_RISC1\n");
580 printf(
"-DDES_RISC2\n");
583 printf(
"-DDES_UNROLL -DDES_RISC2\n");
586 printf(
"-DDES_PTR\n");
589 printf(
"-DDES_UNROLL -DDES_PTR\n");
592 printf(
"-DDES_RISC1 -DDES_PTR\n");
595 printf(
"-DDES_UNROLL -DDES_RISC1 -DDES_PTR\n");
598 printf(
"-DDES_RISC2 -DDES_PTR\n");
601 printf(
"-DDES_UNROLL -DDES_RISC2 -DDES_PTR\n");
605 #if defined(LINT) || defined(OPENSSL_SYS_MSDOS)