QuickHash Library API

The following sample demonstrates how to use the SHA512 API to calculate the SHA512 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_SHA512_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_SHA512_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_SHA512_Update( context, buff, nCount );
    }

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

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

    fclose( file );

    return 1;
}

int main()
{
    char buff[ 256 ];
    char digesthex[ SLC_SHA512_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;
}

        

 


 

 

Send Feedback to SlavaSoft Inc. Tell a friend about QuickHash Library