home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume27 / fingerprint / part01 / fprintfile.c < prev    next >
C/C++ Source or Header  |  1993-11-01  |  2KB  |  65 lines

  1. /* fprintfile.c, fprintfmt.c, fprintfile.h: fingerprint library
  2. Daniel J. Bernstein, brnstnd@nyu.edu.
  3. Depends on snefrufile.h, md5file.h, crc32file.h.
  4. No environment requirements.
  5. 930708: fprintfile 0.95. Public domain.
  6. 930708: Added fingerprintfile_addn.
  7. 930622: Split off fprintfmt.c.
  8. 930601: Baseline, fprintfile 0.8. Public domain.
  9. No known patent problems.
  10.  
  11. Documentation in fprintfile.3.
  12. */
  13.  
  14. #include "fprintfile.h"
  15.  
  16. void fingerprintfile_clear(f)
  17. fingerprintfile *f;
  18. {
  19.  snefrufile_clear(&f->s);
  20.  md5file_clear(&f->m);
  21.  crc32file_clear(&f->c);
  22.  f->len[0] = f->len[1] = f->len[2] = f->len[3] = f->len[4] = 0;
  23. }
  24.  
  25. void fingerprintfile_addn(f,s,n)
  26. fingerprintfile *f;
  27. unsigned char *s;
  28. int n;
  29. {
  30.  unsigned char newlen;
  31.  
  32.  snefrufile_addn(&f->s,s,n);
  33.  md5file_addn(&f->m,s,n);
  34.  crc32file_addn(&f->c,s,n);
  35.  while (n >= 256)
  36.   {
  37.    if(!++f->len[1])if(!++f->len[2])if(!++f->len[3])++f->len[4];
  38.    n -= 256;
  39.   }
  40.  newlen = n;
  41.  if ((f->len[0] += newlen) < newlen)
  42.    if(!++f->len[1])if(!++f->len[2])if(!++f->len[3])++f->len[4];
  43. }
  44.  
  45. void fingerprintfile_add(f,c)
  46. fingerprintfile *f;
  47. unsigned char c;
  48. {
  49.  snefrufile_add(&f->s,c);
  50.  md5file_add(&f->m,c);
  51.  crc32file_add(&f->c,c);
  52.  if(!++f->len[0])if(!++f->len[1])if(!++f->len[2])if(!++f->len[3])++f->len[4];
  53. }
  54.  
  55. void fingerprintfile_hash(f,h)
  56. fingerprintfile *f;
  57. unsigned char h[57];
  58. {
  59.  snefrufile_hash(&f->s,h);
  60.  md5file_hash(&f->m,h + 32);
  61.  crc32file_hash(&f->c,h + 48);
  62.  h[52] = f->len[0]; h[53] = f->len[1]; h[54] = f->len[2];
  63.  h[55] = f->len[3]; h[56] = f->len[4];
  64. }
  65.