|
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
|