Home    | Products    | Downloads    | Purchase    | Support   

 Products

 Paint Express

 HashCalc

 FSUM

 QuickHash Library

    Download

    Purchase

    Samples

    License Agreement

    Related Links

    F.A.Q.

    Overview

 FastCRC Library

 Company

 About Us

 Contact Us

 Miscellaneous

 Affiliate Program

 Site Map

SlavaSoft QuickHash Library Samples
Sample #8 (QuickHash API - C)  

All

Previous Next


The following sample demonstrates how to use the MD5 API to calculate the MD5 message digest for a file.

#include <stdio.h>
#include <QuickHash.h>

#define BUFF_SIZE  1024

int CalculateFileDigest( const char* filename, char* digesthex )
{
    FILE* file;
    unsigned char buff[ BUFF_SIZE ];
    unsigned char context[ SLC_MD5_CONTEXTSIZE ];

    file = fopen( filename, "rb" );

    if( file == NULL )
    {
        printf( "\nCould not open file: %s", filename );
        return 0;
    }

    /*****Initialize the context before calling Update, Final, or FinalHex****/

    SL_MD5_Init( context );

    /*****Calculate the digest by calling Update for each block of the file***/

    while( !feof( file ) )
    {
        unsigned int nCount = fread( buff, sizeof( char ), BUFF_SIZE, file );
        if( ferror( file ) )
        {
            printf( "\nAn error occurred when accessing the file: %s", filename );
            fclose( file );
            return 0;
        }
        SL_MD5_Update( context, buff, nCount );
    }

    /*****Do final changes and get the digest in hex format*******************/

    SL_MD5_FinalHex( context, digesthex, 0 ); /* SL_MD5_FinalHex reinitializes the context */

    fclose( file );

    return 1;
}

int main()
{
    char buff[ 256 ];
    char digesthex[ SLC_MD5_HEXDIGESTSIZE ]; /*0 terminated*/

    do
    {
        /*****Get the file name from the user*************************************/

        printf( "\nEnter a file name:\n" );
        gets( buff );

        /*****Calculate the digest************************************************/

        if( CalculateFileDigest( buff, digesthex ) != 0 )
            printf( "\nDigest: %s", digesthex );

        /*****Continue?***********************************************************/

        printf( "\nContinue (Y/N)?" );
        gets( buff );

    } while ( *buff == 'y' || *buff == 'Y' );

    return 0;
}
 
  Copyright SlavaSoft Inc. All rights reserved.