#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_RIPEMD160_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_RIPEMD160_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_RIPEMD160_Update( context, buff, nCount );
}
/*****Do final changes and get the digest in hex format*******************/
SL_RIPEMD160_FinalHex( context, digesthex, 0 ); /* SL_RIPEMD160_FinalHex reinitializes the context */
fclose( file );
return 1;
}
int main()
{
char buff[ 256 ];
char digesthex[ SLC_RIPEMD160_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;
}
|