#include <stdlib.h>
#include <stdio.h>
#include <include/ecctk-prototype.h>
#include <include/ecctk-hash.h>
void hash_stream()
{
s2byte ret = -1;
#ifndef ECCTK_EVALUATION
s2byte algo = ECCTK_HASH_ALGO_SHA256;
#else
s2byte algo = ECCTK_HASH_ALGO_SHA160;
#endif
u1byte in[] = "Elliptic Curve Cryptographic ToolKit";
#ifndef ECCTK_EVALUATION
u1byte hash[ECCTK_HASH_SIZE_SHA512];
#else
u1byte hash[ECCTK_HASH_SIZE_SHA160];
#endif
u2byte hashsize;
switch (algo)
{
case ECCTK_HASH_ALGO_MD5:
hashsize = ECCTK_HASH_SIZE_MD5;
ret = MD5_StreamHash(in, sizeof(in), hash, hashsize);
break;
case ECCTK_HASH_ALGO_SHA160:
hashsize = ECCTK_HASH_SIZE_SHA160;
ret = SHA160_StreamHash(in, sizeof(in), hash, hashsize);
break;
#ifndef ECCTK_EVALUATION
case ECCTK_HASH_ALGO_SHA256:
hashsize = ECCTK_HASH_SIZE_SHA256;
ret = SHA256_StreamHash(in, sizeof(in), hash, hashsize);
break;
case ECCTK_HASH_ALGO_SHA384:
hashsize = ECCTK_HASH_SIZE_SHA384;
ret = SHA384_StreamHash(in, sizeof(in), hash, hashsize);
break;
case ECCTK_HASH_ALGO_SHA512:
hashsize = ECCTK_HASH_SIZE_SHA512;
ret = SHA512_StreamHash(in, sizeof(in), hash, hashsize);
break;
#endif
case ECCTK_HASH_ALGO_RMD128:
hashsize = ECCTK_HASH_SIZE_RMD128;
ret = RIPEMD128_StreamHash(in, sizeof(in), hash, hashsize);
break;
#ifndef ECCTK_EVALUATION
case ECCTK_HASH_ALGO_RMD160:
hashsize = ECCTK_HASH_SIZE_RMD160;
ret = RIPEMD160_StreamHash(in, sizeof(in), hash, hashsize);
break;
case ECCTK_HASH_ALGO_RMD256:
hashsize = ECCTK_HASH_SIZE_RMD256;
ret = RIPEMD256_StreamHash(in, sizeof(in), hash, hashsize);
break;
case ECCTK_HASH_ALGO_RMD320:
hashsize = ECCTK_HASH_SIZE_RMD320;
ret = RIPEMD320_StreamHash(in, sizeof(in), hash, hashsize);
break;
#endif
default:
break;
}
if (ret != ECCTK_HASH_NO_ERROR)
printf("Hash stream failed (Error : %d)\n", ret);
else
{
u4byte i;
printf("Hash of stream = ");
for (i = 0; i < hashsize; i++)
printf("%02x", hash[i]);
printf("\n");
}
}