Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
glibc/crypt/speeds.c
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
153 lines (131 sloc)
2.98 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* This fcrypt/crypt speed testing program | |
* is derived from one floating around in | |
* the net. It's distributed along with | |
* UFC-crypt but is not covered by any | |
* licence. | |
* | |
* @(#)speeds.c 1.11 20 Aug 1996 | |
*/ | |
#include <signal.h> | |
#include <stdio.h> | |
#ifndef SIGVTALRM | |
/* | |
* patch from chip@chinacat.unicom.com (Chip Rosenthal): | |
* you may enable it if your system does not include | |
* a setitimer() function. You'll have to ensure the | |
* existence an environment variable: HZ giving how many | |
* ticks goes per second. | |
* If not existing in your default environment 50, 60 | |
* or even 100 may be the right value. Perhaps you should | |
* then use 'time ./ufc 10000' instead of guessing. | |
*/ | |
#define NO_ITIMER | |
#endif | |
#ifdef NO_ITIMER | |
#include <sys/types.h> | |
#include <sys/times.h> | |
#else | |
#include <sys/time.h> | |
#endif | |
static int cnt; | |
#ifdef NO_ITIMER | |
char *hz; | |
struct tms tstart, tfinish; | |
#endif | |
#define ITIME 10 /* Number of seconds to run test. */ | |
char *crypt(), *fcrypt(); | |
void | |
Stop (void) | |
{ | |
double elapsed; | |
#ifdef NO_ITIMER | |
(void) times(&tfinish); | |
elapsed = ((tfinish.tms_utime + tfinish.tms_stime) - | |
(tstart.tms_utime + tstart.tms_stime)) / atoi(hz); | |
printf("elapsed time = %d sec, CPU time = %f sec\n", ITIME, elapsed); | |
#else | |
elapsed = ITIME; | |
#endif | |
printf ("Did %f %s()s per second.\n", ((float) cnt) / elapsed, | |
#if defined(FCRYPT) | |
"fcrypt" | |
#else | |
"crypt" | |
#endif | |
); | |
exit (0); | |
} | |
/* | |
* Silly rewrite of 'bzero'. I do so | |
* because some machines don't have | |
* bzero and some don't have memset. | |
*/ | |
static void clearmem(start, cnt) | |
char *start; | |
int cnt; | |
{ while(cnt--) | |
*start++ = '\0'; | |
} | |
main (void) | |
{ | |
char *s; | |
#ifdef NO_ITIMER | |
extern char *getenv(); | |
#else | |
struct itimerval itv; | |
#endif | |
#ifdef NO_ITIMER | |
if ((hz = getenv("HZ")) == NULL) { | |
fprintf(stderr, "HZ environment parameter undefined\n"); | |
exit(1); | |
} | |
#endif | |
#ifdef FCRYPT | |
printf("\n"); | |
printf("Warning: this version of the speed program may run slower when\n"); | |
printf("benchmarking UFC-crypt than previous versions. This is because it\n"); | |
printf("stresses the CPU hardware cache in order to get benchmark figures\n"); | |
printf("that corresponds closer to the performance that can be expected in\n"); | |
printf("a password cracker.\n\n"); | |
#endif | |
printf ("Running %s for %d seconds of virtual time ...\n", | |
#ifdef FCRYPT | |
"UFC-crypt", | |
#else | |
"crypt(libc)", | |
#endif | |
ITIME); | |
#ifdef FCRYPT | |
init_des (); | |
#endif | |
#ifdef NO_ITIMER | |
signal(SIGALRM, Stop); | |
switch (fork()) { | |
case -1: | |
perror("fork failed"); | |
exit(1); | |
case 0: | |
sleep(10); | |
kill(getppid(), SIGALRM); | |
exit(0); | |
default: | |
(void) times(&tstart); | |
} | |
#else | |
clearmem ((char*)&itv, (int)sizeof (itv)); | |
signal (SIGVTALRM, Stop); | |
itv.it_value.tv_sec = ITIME; | |
itv.it_value.tv_usec = 0; | |
setitimer (ITIMER_VIRTUAL, &itv, NULL); | |
#endif | |
s = "fredred"; | |
for (cnt = 0;; cnt++) | |
{ | |
#ifdef FCRYPT | |
s = fcrypt (s, "eek"); | |
#else | |
s = crypt (s, "eek"); | |
#endif | |
} | |
} | |