|
Packit Service |
82fcde |
/*
|
|
Packit Service |
82fcde |
* This fcrypt/crypt speed testing program
|
|
Packit Service |
82fcde |
* is derived from one floating around in
|
|
Packit Service |
82fcde |
* the net. It's distributed along with
|
|
Packit Service |
82fcde |
* UFC-crypt but is not covered by any
|
|
Packit Service |
82fcde |
* licence.
|
|
Packit Service |
82fcde |
*
|
|
Packit Service |
82fcde |
* @(#)speeds.c 1.11 20 Aug 1996
|
|
Packit Service |
82fcde |
*/
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
#include <signal.h>
|
|
Packit Service |
82fcde |
#include <stdio.h>
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
#ifndef SIGVTALRM
|
|
Packit Service |
82fcde |
/*
|
|
Packit Service |
82fcde |
* patch from chip@chinacat.unicom.com (Chip Rosenthal):
|
|
Packit Service |
82fcde |
* you may enable it if your system does not include
|
|
Packit Service |
82fcde |
* a setitimer() function. You'll have to ensure the
|
|
Packit Service |
82fcde |
* existence an environment variable: HZ giving how many
|
|
Packit Service |
82fcde |
* ticks goes per second.
|
|
Packit Service |
82fcde |
* If not existing in your default environment 50, 60
|
|
Packit Service |
82fcde |
* or even 100 may be the right value. Perhaps you should
|
|
Packit Service |
82fcde |
* then use 'time ./ufc 10000' instead of guessing.
|
|
Packit Service |
82fcde |
*/
|
|
Packit Service |
82fcde |
#define NO_ITIMER
|
|
Packit Service |
82fcde |
#endif
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
#ifdef NO_ITIMER
|
|
Packit Service |
82fcde |
#include <sys/types.h>
|
|
Packit Service |
82fcde |
#include <sys/times.h>
|
|
Packit Service |
82fcde |
#else
|
|
Packit Service |
82fcde |
#include <sys/time.h>
|
|
Packit Service |
82fcde |
#endif
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
static int cnt;
|
|
Packit Service |
82fcde |
#ifdef NO_ITIMER
|
|
Packit Service |
82fcde |
char *hz;
|
|
Packit Service |
82fcde |
struct tms tstart, tfinish;
|
|
Packit Service |
82fcde |
#endif
|
|
Packit Service |
82fcde |
#define ITIME 10 /* Number of seconds to run test. */
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
char *crypt(), *fcrypt();
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
void
|
|
Packit Service |
82fcde |
Stop (void)
|
|
Packit Service |
82fcde |
{
|
|
Packit Service |
82fcde |
double elapsed;
|
|
Packit Service |
82fcde |
#ifdef NO_ITIMER
|
|
Packit Service |
82fcde |
(void) times(&tfinish);
|
|
Packit Service |
82fcde |
elapsed = ((tfinish.tms_utime + tfinish.tms_stime) -
|
|
Packit Service |
82fcde |
(tstart.tms_utime + tstart.tms_stime)) / atoi(hz);
|
|
Packit Service |
82fcde |
printf("elapsed time = %d sec, CPU time = %f sec\n", ITIME, elapsed);
|
|
Packit Service |
82fcde |
#else
|
|
Packit Service |
82fcde |
elapsed = ITIME;
|
|
Packit Service |
82fcde |
#endif
|
|
Packit Service |
82fcde |
printf ("Did %f %s()s per second.\n", ((float) cnt) / elapsed,
|
|
Packit Service |
82fcde |
#if defined(FCRYPT)
|
|
Packit Service |
82fcde |
"fcrypt"
|
|
Packit Service |
82fcde |
#else
|
|
Packit Service |
82fcde |
"crypt"
|
|
Packit Service |
82fcde |
#endif
|
|
Packit Service |
82fcde |
);
|
|
Packit Service |
82fcde |
exit (0);
|
|
Packit Service |
82fcde |
}
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
/*
|
|
Packit Service |
82fcde |
* Silly rewrite of 'bzero'. I do so
|
|
Packit Service |
82fcde |
* because some machines don't have
|
|
Packit Service |
82fcde |
* bzero and some don't have memset.
|
|
Packit Service |
82fcde |
*/
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
static void clearmem(start, cnt)
|
|
Packit Service |
82fcde |
char *start;
|
|
Packit Service |
82fcde |
int cnt;
|
|
Packit Service |
82fcde |
{ while(cnt--)
|
|
Packit Service |
82fcde |
*start++ = '\0';
|
|
Packit Service |
82fcde |
}
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
main (void)
|
|
Packit Service |
82fcde |
{
|
|
Packit Service |
82fcde |
char *s;
|
|
Packit Service |
82fcde |
#ifdef NO_ITIMER
|
|
Packit Service |
82fcde |
extern char *getenv();
|
|
Packit Service |
82fcde |
#else
|
|
Packit Service |
82fcde |
struct itimerval itv;
|
|
Packit Service |
82fcde |
#endif
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
#ifdef NO_ITIMER
|
|
Packit Service |
82fcde |
if ((hz = getenv("HZ")) == NULL) {
|
|
Packit Service |
82fcde |
fprintf(stderr, "HZ environment parameter undefined\n");
|
|
Packit Service |
82fcde |
exit(1);
|
|
Packit Service |
82fcde |
}
|
|
Packit Service |
82fcde |
#endif
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
#ifdef FCRYPT
|
|
Packit Service |
82fcde |
printf("\n");
|
|
Packit Service |
82fcde |
printf("Warning: this version of the speed program may run slower when\n");
|
|
Packit Service |
82fcde |
printf("benchmarking UFC-crypt than previous versions. This is because it\n");
|
|
Packit Service |
82fcde |
printf("stresses the CPU hardware cache in order to get benchmark figures\n");
|
|
Packit Service |
82fcde |
printf("that corresponds closer to the performance that can be expected in\n");
|
|
Packit Service |
82fcde |
printf("a password cracker.\n\n");
|
|
Packit Service |
82fcde |
#endif
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
printf ("Running %s for %d seconds of virtual time ...\n",
|
|
Packit Service |
82fcde |
#ifdef FCRYPT
|
|
Packit Service |
82fcde |
"UFC-crypt",
|
|
Packit Service |
82fcde |
#else
|
|
Packit Service |
82fcde |
"crypt(libc)",
|
|
Packit Service |
82fcde |
#endif
|
|
Packit Service |
82fcde |
ITIME);
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
#ifdef FCRYPT
|
|
Packit Service |
82fcde |
init_des ();
|
|
Packit Service |
82fcde |
#endif
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
#ifdef NO_ITIMER
|
|
Packit Service |
82fcde |
signal(SIGALRM, Stop);
|
|
Packit Service |
82fcde |
switch (fork()) {
|
|
Packit Service |
82fcde |
case -1:
|
|
Packit Service |
82fcde |
perror("fork failed");
|
|
Packit Service |
82fcde |
exit(1);
|
|
Packit Service |
82fcde |
case 0:
|
|
Packit Service |
82fcde |
sleep(10);
|
|
Packit Service |
82fcde |
kill(getppid(), SIGALRM);
|
|
Packit Service |
82fcde |
exit(0);
|
|
Packit Service |
82fcde |
default:
|
|
Packit Service |
82fcde |
(void) times(&tstart);
|
|
Packit Service |
82fcde |
}
|
|
Packit Service |
82fcde |
#else
|
|
Packit Service |
82fcde |
clearmem ((char*)&itv, (int)sizeof (itv));
|
|
Packit Service |
82fcde |
signal (SIGVTALRM, Stop);
|
|
Packit Service |
82fcde |
itv.it_value.tv_sec = ITIME;
|
|
Packit Service |
82fcde |
itv.it_value.tv_usec = 0;
|
|
Packit Service |
82fcde |
setitimer (ITIMER_VIRTUAL, &itv, NULL);
|
|
Packit Service |
82fcde |
#endif
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
s = "fredred";
|
|
Packit Service |
82fcde |
for (cnt = 0;; cnt++)
|
|
Packit Service |
82fcde |
{
|
|
Packit Service |
82fcde |
#ifdef FCRYPT
|
|
Packit Service |
82fcde |
s = fcrypt (s, "eek");
|
|
Packit Service |
82fcde |
#else
|
|
Packit Service |
82fcde |
s = crypt (s, "eek");
|
|
Packit Service |
82fcde |
#endif
|
|
Packit Service |
82fcde |
}
|
|
Packit Service |
82fcde |
}
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
|
|
Packit Service |
82fcde |
|