QuickHash Library API

SL_HMAC_Final

int SL_HASHCALL SL_HMAC_Final( void* pContext, void* pDest );

Return value

Nonzero if the function succeeds, otherwise 0. In particular, this function returns 0 when the context was improperly initialized.

Parameters

 pContext

    [in/out] Pointer to the context.

 pDest

    [out] Pointer to the memory buffer that will receive the HMAC.

Remarks

Call this function to retrieve the HMAC from the context pointed by pContext. The HMAC is retrieved in the memory buffer pointed by pDest. The size of the memory buffer pointed by pDest must be at least DIGESTSIZE bytes. DIGESTSIZE is a predefined constant that specifies the size of the HMAC for a specific hash algorithm. For example, you have to allocate at least SLC_RIPEMD160_DIGESTSIZE bytes for the memory buffer pointed by pDest if you need to calculate the HMAC using RIPEMD160 hash algorithm.

All supported hash algorithms with their corresponding DIGESTSIZEs are listed in Table1.

After the SL_HMAC_Final function is performed, the context is initialized for new calculations, as it would be called SL_HMAC_Init again.

Table1. Supported hash algorithms and their DIGESTSIZEs.

Algorithm Name Algorithm DIGESTSIZE
MD4 SLC_MD4_DIGESTSIZE
MD5 SLC_MD5_DIGESTSIZE
SHA-1 SLC_SHA1_DIGESTSIZE
SHA-256 SLC_SHA256_DIGESTSIZE
SHA-512 SLC_SHA512_DIGESTSIZE
SHA-384 SLC_SHA384_DIGESTSIZE
RIPEMD128 SLC_RIPEMD128_DIGESTSIZE
RIPEMD160 SLC_RIPEMD160_DIGESTSIZE
RIPEMD256 SLC_RIPEMD256_DIGESTSIZE
RIPEMD320 SLC_RIPEMD320_DIGESTSIZE
PANAMA SLC_PANAMA_DIGESTSIZE
TIGER SLC_TIGER_DIGESTSIZE

Example

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

#define BUFF_SIZE  1024

int main()
{
    FILE* file;
    
    unsigned char buff[ BUFF_SIZE ];
    char key[] = "File Password";

    unsigned char context[ SLC_HMAC_CONTEXTSIZE( SLC_RIPEMD160_CONTEXTSIZE, SLC_RIPEMD160_BLOCKSIZE ) ];
    unsigned char hmac[ SLC_RIPEMD160_DIGESTSIZE ]; 

    file = fopen( "c:\\test.txt", "rb" );

    if( file == NULL )
        return 1;

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

    SL_HMAC_Init( context, SLC_RIPEMD160_ALGID, key, strlen( key ) );

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

    while( !feof( file ) )
    {
        unsigned int nCount = fread( buff, sizeof( char ), BUFF_SIZE, file );
        SL_HMAC_Update( context, buff, nCount );
    }

    /*****Do final changes and get the RIPEMD160 HMAC*************************/

    SL_HMAC_Final( context, hmac );

    /*****Use the HMAC********************************************************/
    /*...*/

    fclose( file );

    return 0;
}

 

 

HMAC API Overview   |   HMAC Functions   |   Useful Links   |   HashCalc

 

See Also    SL_HMAC_FinalHex, SL_HMAC_Update, SL_HMAC_UpdateStr, SL_HMAC_Init, SL_HMAC_InitKeyStr


 

 

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