(linenum→info "unix/slp.c:2238")

glibc/2.7/crypt/speeds.c

    1: /*
    2:  * This fcrypt/crypt speed testing program
    3:  * is derived from one floating around in
    4:  * the net. It's distributed along with
    5:  * UFC-crypt but is not covered by any
    6:  * licence.
    7:  *
    8:  * @(#)speeds.c 1.11 20 Aug 1996
    9:  */
   10: 
   11: #include <signal.h>
   12: #include <stdio.h>
   13: 
   14: #ifndef SIGVTALRM
   15: /* 
   16:  * patch from chip@chinacat.unicom.com (Chip Rosenthal):
   17:  * you may enable it if your system does not include
   18:  * a setitimer() function. You'll have to ensure the
   19:  * existence a environment variable: HZ giving how many
   20:  * ticks goes per second.
   21:  * If not existing in your default environment 50, 60 
   22:  * or even 100 may be the right value. Perhaps you should
   23:  * then use 'time ./ufc 10000' instead of guessing.
   24:  */
   25: #define NO_ITIMER
   26: #endif
   27: 
   28: #ifdef NO_ITIMER
   29: #include <sys/types.h>
   30: #include <sys/times.h>
   31: #else
   32: #include <sys/time.h>
   33: #endif
   34: 
   35: static int cnt;
   36: #ifdef NO_ITIMER
   37: char *hz;
   38: struct tms tstart, tfinish;
   39: #endif
   40: #define ITIME   10                /* Number of seconds to run test. */
   41: 
   42: char *crypt(), *fcrypt();
   43: 
   44: void
   45: Stop ()
   46: {
   47:     double elapsed;
   48: #ifdef NO_ITIMER
   49:     (void) times(&tfinish);
   50:     elapsed = ((tfinish.tms_utime + tfinish.tms_stime) -
   51:         (tstart.tms_utime + tstart.tms_stime)) / atoi(hz);
   52:     printf("elapsed time = %d sec,  CPU time = %f sec\n", ITIME, elapsed);
   53: #else
   54:     elapsed = ITIME;
   55: #endif
   56:     printf ("Did %f %s()s per second.\n", ((float) cnt) / elapsed,
   57: #if defined(FCRYPT)
   58:             "fcrypt"
   59: #else
   60:             "crypt"
   61: #endif
   62:     );
   63:     exit (0);
   64: }
   65: 
   66: /*
   67:  * Silly rewrite of 'bzero'. I do so
   68:  * because some machines don't have
   69:  * bzero and some don't have memset.
   70:  */
   71: 
   72: static void clearmem(start, cnt)
   73:   char *start;
   74:   int cnt;
   75:   { while(cnt--)
   76:       *start++ = '\0';
   77:   }
   78: 
   79: main ()
   80: {
   81:    char *s;
   82: #ifdef NO_ITIMER
   83:     extern char *getenv();
   84: #else
   85:     struct itimerval itv;
   86: #endif
   87: 
   88: #ifdef NO_ITIMER
   89:     if ((hz = getenv("HZ")) == NULL) {
   90:         fprintf(stderr, "HZ environment parameter undefined\n");
   91:         exit(1);
   92:     }
   93: #endif
   94: 
   95: #ifdef FCRYPT
   96:     printf("\n");
   97:     printf("Warning: this version of the speed program may run slower when\n");
   98:     printf("benchmarking UFC-crypt than previous versions. This is because it\n");
   99:     printf("stresses the CPU hardware cache in order to get benchmark figures\n");
  100:     printf("that corresponds closer to the performance that can be expected in\n");
  101:     printf("a password cracker.\n\n");
  102: #endif
  103: 
  104:     printf ("Running %s for %d seconds of virtual time ...\n",
  105: #ifdef FCRYPT
  106:     "UFC-crypt",
  107: #else
  108:     "crypt(libc)",
  109: #endif
  110:             ITIME);
  111: 
  112: #ifdef FCRYPT
  113:     init_des ();
  114: #endif
  115: 
  116: #ifdef NO_ITIMER
  117:     signal(SIGALRM, Stop);
  118:     switch (fork()) {
  119:     case -1:
  120:         perror("fork failed");
  121:         exit(1);
  122:     case 0:
  123:         sleep(10);
  124:         kill(getppid(), SIGALRM);
  125:         exit(0);
  126:     default:
  127:         (void) times(&tstart);
  128:     }
  129: #else
  130:     clearmem ((char*)&itv, (int)sizeof (itv));
  131:     signal (SIGVTALRM, Stop);
  132:     itv.it_value.tv_sec = ITIME;
  133:     itv.it_value.tv_usec = 0;
  134:     setitimer (ITIMER_VIRTUAL, &itv, NULL);
  135: #endif
  136: 
  137: 
  138:     s = "fredred";
  139:     for (cnt = 0;; cnt++)
  140:     {
  141: #ifdef FCRYPT
  142:         s = fcrypt (s, "eek");
  143: #else
  144:         s = crypt (s, "eek");
  145: #endif
  146:     }
  147: }
  148: 
  149: 
  150: 
  151: 
  152: 
  153: 
Syntax (Markdown)