home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 1 / 1468 / snuffle.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-28  |  1.3 KB  |  65 lines

  1. #include <stdio.h>
  2. #include "snefru.h"
  3.  
  4. #define NMAX 10000
  5.  
  6. main(argc,argv)
  7. int argc;
  8. char *argv[];
  9. {
  10.  register int ch;
  11.  static unsigned char x[NMAX];
  12.  register unsigned char y = 0;
  13.  static unsigned char h[NMAX];
  14.  static unsigned char m[32];
  15.  static unsigned char l[64];
  16.  static unsigned char k[64];
  17.  register int n = 64;
  18.  register int i;
  19.  register WORD32 *wm = &m[0];
  20.  register WORD32 *wl = &l[0];
  21.  register int level = 3;
  22.  
  23.  SetupHash512();
  24.  
  25.  for (i = 0;i < 64;i++)
  26.    x[i] = k[i] = h[i] = 0;
  27.    /* What matters is x[9...63], y, k[0...63], h[0...63]. */
  28.  
  29.  i = 0;
  30.  while (((ch = getchar()) != EOF) && (ch != '\n'))
  31.    if (i < 64)
  32.      k[i++] = (unsigned char) ch;
  33.    else if (i < 119)
  34.      x[i++ - 55] = (unsigned char) ch;
  35.  if (argv[1])
  36.    for (i = 0;argv[1][i] && (i < 64);i++)
  37.      h[i] = argv[1][i];
  38.  
  39.  while ((ch = getchar()) != EOF)
  40.   {
  41.    if (!(n & 31))
  42.     {
  43.      for (i = 0;i < 64;i++)
  44.        l[i] = k[i] ^ h[n - 64 + i];
  45.      Hash512(wm,wl,level,8);
  46.     }
  47.  
  48.    x[n] = x[n - 24] + x[n - 55] + ((unsigned char) ch);
  49.    h[n] = x[n] + m[n & 31];
  50.    y += h[n];
  51.    (void) putchar((char) y);
  52.  
  53.    n++;
  54.    if (n == NMAX)
  55.     {
  56.      for (i = 0;i < 64;i++)
  57.       {
  58.        x[(n & 31) + i] = x[n - 64 + i];
  59.        h[(n & 31) + i] = h[n - 64 + i];
  60.       }
  61.      n = (NMAX & 31) + 64;
  62.     }
  63.   }
  64. }
  65.