Annotation of pgp/src/mdfile.c, revision 1.1.1.8

1.1.1.8 ! root        1: /*      mdfile.c  - Message Digest routines for PGP.
        !             2:    PGP: Pretty Good(tm) Privacy - public key cryptography for the masses.
        !             3: 
        !             4:    (c) Copyright 1990-1996 by Philip Zimmermann.  All rights reserved.
        !             5:    The author assumes no liability for damages resulting from the use
        !             6:    of this software, even if the damage results from defects in this
        !             7:    software.  No warranty is expressed or implied.
        !             8: 
        !             9:    Note that while most PGP source modules bear Philip Zimmermann's
        !            10:    copyright notice, many of them have been revised or entirely written
        !            11:    by contributors who frequently failed to put their names in their
        !            12:    code.  Code that has been incorporated into PGP from other authors
        !            13:    was either originally published in the public domain or is used with
        !            14:    permission from the various authors.
        !            15: 
        !            16:    PGP is available for free to the public under certain restrictions.
        !            17:    See the PGP User's Guide (included in the release package) for
        !            18:    important information about licensing, patent restrictions on
        !            19:    certain algorithms, trademarks, copyrights, and export controls.
        !            20:  */
        !            21: 
        !            22: #include <stdio.h>
        !            23: #include "mpilib.h"
        !            24: #include "mdfile.h"
        !            25: #include "fileio.h"
        !            26: #include "language.h"
        !            27: #include "pgp.h"
        !            28: #ifdef MACTC5
        !            29: #include "Macutil3.h"
        !            30: #endif
        !            31: 
        !            32: /* Begin MD5 routines */
        !            33: 
        !            34: /* Note - the routines in this module, except for MD_addbuffer,
        !            35:  * do not "finish" the MD5 calculation.  MD_addbuffer finishes the
        !            36:  * calculation in each case, usually to append the timestamp and class info.
        !            37:  */
        !            38: 
        !            39: /* Computes the message digest for a file from current position for
        !            40:    longcount bytes.
        !            41:    Uses the RSA Data Security Inc. MD5 Message Digest Algorithm */
        !            42: int MDfile0_len(struct MD5Context *mdContext, FILE * f, word32 longcount)
        !            43: {
        !            44:     int bytecount;
        !            45:     unsigned char buffer[1024];
        !            46: 
        !            47:     MD5Init(mdContext);
        !            48:     /* Process 1024 bytes at a time... */
        !            49:     do {
        !            50:        if (longcount < (word32) 1024)
        !            51:            bytecount = (int) longcount;
        !            52:        else
        !            53:            bytecount = 1024;
        !            54:        bytecount = fread(buffer, 1, bytecount, f);
        !            55:        if (bytecount > 0) {
        !            56:            MD5Update(mdContext, buffer, bytecount);
        !            57:            longcount -= bytecount;
        !            58: #ifdef MACTC5
        !            59:                mac_poll_for_break();
        !            60: #endif
        !            61:        }
        !            62:        /* if text block was short, exit loop */
        !            63:     } while (bytecount == 1024);
        !            64:     return 0;
        !            65: }                              /* MDfile0_len */
        !            66: 
        !            67: 
        !            68: /* Computes the message digest for a file from current position to EOF.
        !            69:    Uses the RSA Data Security Inc. MD5 Message Digest Algorithm */
        !            70: 
        !            71: static int MDfile0(struct MD5Context *mdContext, FILE * inFile)
        !            72: {
        !            73:     int bytes;
        !            74:     unsigned char buffer[1024];
        !            75: 
        !            76:     MD5Init(mdContext);
        !            77:     while ((bytes = fread(buffer, 1, 1024, inFile)) != 0)
        !            78: #ifdef MACTC5
        !            79:                {
        !            80:                mac_poll_for_break();
        !            81:                MD5Update(mdContext,buffer,bytes);
        !            82:                }
        !            83: #else
        !            84:        MD5Update(mdContext, buffer, bytes);
        !            85: #endif
        !            86:     return 0;
        !            87: }
        !            88: 
        !            89: /* Computes the message digest for a specified file */
        !            90: 
        !            91: int MDfile(struct MD5Context *mdContext, char *filename)
        !            92: {
        !            93:     FILE *inFile;
        !            94:     inFile = fopen(filename, FOPRBIN);
        !            95: 
        !            96:     if (inFile == NULL) {
        !            97:        fprintf(pgpout, LANG("\n\007Can't open file '%s'\n"), filename);
        !            98:        return -1;
        !            99:     }
        !           100:     MDfile0(mdContext, inFile);
        !           101:     fclose(inFile);
        !           102:     return 0;
        !           103: }
        !           104: 
        !           105: /* Add a buffer's worth of data to the MD5 computation.  If a digest
        !           106:  * pointer is supplied, complete the computation and write the digest.
        !           107:  */
        !           108: void MD_addbuffer(struct MD5Context *mdContext, byte * buf, int buflen,
        !           109:                  byte digest[16])
        !           110: {
        !           111:     MD5Update(mdContext, buf, buflen);
        !           112:     if (digest) {
        !           113:        MD5Final(digest, mdContext);
        !           114:        burn(*mdContext);       /* Paranoia */
        !           115:     }
        !           116: }
        !           117: 
        !           118: /* End MD5 routines */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.