#include <stdlib.h>
#include <stdio.h>
#include <include/ecctk-prototype.h>
#include <include/ecctk-hash.h>
void hmac_stream()
{
s2byte ret = -1;
s2byte algo = ECCTK_HASH_HMAC_ALGO_MD5;
u1byte in[] = "Elliptic Curve Cryptographic ToolKit";
#ifndef ECCTK_EVALUATION
u1byte hash[ECCTK_HASH_SIZE_SHA512];
#else
u1byte hash[ECCTK_HASH_SIZE_SHA160];
#endif
u1byte key[] = "This is an example of text key";
u2byte hashsize;
switch (algo)
{
case ECCTK_HASH_HMAC_ALGO_MD5:
hashsize = ECCTK_HASH_SIZE_MD5;
ret = MD5_StreamHashMAC(in, sizeof(in), key, sizeof(key), hash, hashsize);
break;
case ECCTK_HASH_HMAC_ALGO_SHA160:
hashsize = ECCTK_HASH_SIZE_SHA160;
ret = SHA160_StreamHashMAC(in, sizeof(in), key, sizeof(key), hash, hashsize);
break;
#ifndef ECCTK_EVALUATION
case ECCTK_HASH_HMAC_ALGO_SHA256:
hashsize = ECCTK_HASH_SIZE_SHA256;
ret = SHA256_StreamHashMAC(in, sizeof(in), key, sizeof(key), hash, hashsize);
break;
case ECCTK_HASH_HMAC_ALGO_SHA384:
hashsize = ECCTK_HASH_SIZE_SHA384;
ret = SHA384_StreamHashMAC(in, sizeof(in), key, sizeof(key), hash, hashsize);
break;
case ECCTK_HASH_HMAC_ALGO_SHA512:
hashsize = ECCTK_HASH_SIZE_SHA512;
ret = SHA512_StreamHashMAC(in, sizeof(in), key, sizeof(key), hash, hashsize);
break;
#endif
case ECCTK_HASH_HMAC_ALGO_RMD128:
hashsize = ECCTK_HASH_SIZE_RMD128;
ret = RIPEMD128_StreamHashMAC(in, sizeof(in), key, sizeof(key), hash, hashsize);
break;
#ifndef ECCTK_EVALUATION
case ECCTK_HASH_HMAC_ALGO_RMD160:
hashsize = ECCTK_HASH_SIZE_RMD160;
ret = RIPEMD160_StreamHashMAC(in, sizeof(in), key, sizeof(key), hash, hashsize);
break;
case ECCTK_HASH_HMAC_ALGO_RMD256:
hashsize = ECCTK_HASH_SIZE_RMD256;
ret = RIPEMD256_StreamHashMAC(in, sizeof(in), key, sizeof(key), hash, hashsize);
break;
case ECCTK_HASH_HMAC_ALGO_RMD320:
hashsize = ECCTK_HASH_SIZE_RMD320;
ret = RIPEMD320_StreamHashMAC(in, sizeof(in), key, sizeof(key), hash, hashsize);
break;
#endif
default:
break;
}
if (ret != ECCTK_HASH_NO_ERROR)
printf("HashMAC stream failed (Error : %d)\n", ret);
else
{
u4byte i;
printf("HashMAC of stream = ");
for (i = 0; i < hashsize; i++)
printf("%02x", hash[i]);
printf("\n");
}
}