Blame crypt/speeds.c

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