home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 February / CHIP_2_98.iso / misc / src / rpm / lib / md5sum.c < prev    next >
C/C++ Source or Header  |  1997-09-17  |  2KB  |  73 lines

  1. /*
  2.  * md5sum.c    - Generate/check MD5 Message Digests
  3.  *
  4.  * Compile and link with md5.c.  If you don't have getopt() in your library
  5.  * also include getopt.c.  For MSDOS you can also link with the wildcard
  6.  * initialization function (wildargs.obj for Turbo C and setargv.obj for MSC)
  7.  * so that you can use wildcards on the commandline.
  8.  *
  9.  * Written March 1993 by Branko Lankester
  10.  * Modified June 1993 by Colin Plumb for altered md5.c.
  11.  * Modified October 1995 by Erik Troan for RPM
  12.  */
  13. #include <errno.h>
  14. #include <stdio.h>
  15. #include <string.h>
  16.  
  17. #include "md5.h"
  18. #include "messages.h"
  19.  
  20. static int domd5(char * fn, unsigned char * digest, int asAscii,
  21.          int brokenEndian) {
  22.     unsigned char buf[1024];
  23.     unsigned char bindigest[16];
  24.     FILE * fp;
  25.     MD5_CTX ctx;
  26.     int n;
  27.  
  28.     fp = fopen(fn, "r");
  29.     if (!fp) {
  30.     return 1;
  31.     }
  32.  
  33.     MD5Init(&ctx, brokenEndian);
  34.     while ((n = fread(buf, 1, sizeof(buf), fp)) > 0)
  35.         MD5Update(&ctx, buf, n);
  36.     MD5Final(bindigest, &ctx);
  37.     if (ferror(fp)) {
  38.     fclose(fp);
  39.     return 1;
  40.     }
  41.  
  42.     if (!asAscii) {
  43.     memcpy(digest, bindigest, 16);
  44.     } else {
  45.     sprintf(digest, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
  46.             "%02x%02x%02x%02x%02x",
  47.         bindigest[0],  bindigest[1],  bindigest[2],  bindigest[3],
  48.         bindigest[4],  bindigest[5],  bindigest[6],  bindigest[7],
  49.         bindigest[8],  bindigest[9],  bindigest[10], bindigest[11],
  50.         bindigest[12], bindigest[13], bindigest[14], bindigest[15]);
  51.  
  52.     }
  53.     fclose(fp);
  54.  
  55.     return 0;
  56. }
  57.  
  58. int mdbinfile(char *fn, unsigned char *bindigest) {
  59.     return domd5(fn, bindigest, 0, 0);
  60. }
  61.  
  62. int mdbinfileBroken(char *fn, unsigned char *bindigest) {
  63.     return domd5(fn, bindigest, 0, 1);
  64. }
  65.  
  66. int mdfile(char *fn, unsigned char *digest) {
  67.     return domd5(fn, digest, 1, 0);
  68. }
  69.  
  70. int mdfileBroken(char *fn, unsigned char *digest) {
  71.     return domd5(fn, digest, 1, 1);
  72. }
  73.