uint ShaHmac::GetDigest(void* digest,const void* data,uint len,const void* key,uint klen,SHA_BITS bits){ if(bits==sha_160){ sha1_hmac((byte*)key,klen,(byte*)data,len,(byte*)digest); }else if(bits==sha_224){ sha2_hmac((byte*)key,klen,(byte*)data,len,(byte*)digest,1); }else if(bits==sha_256){ sha2_hmac((byte*)key,klen,(byte*)data,len,(byte*)digest,0); }else if(bits==sha_384){ sha4_hmac((byte*)key,klen,(byte*)data,len,(byte*)digest,1); }else if(bits==sha_512){ sha4_hmac((byte*)key,klen,(byte*)data,len,(byte*)digest,0); }else{ _ASSERT(0); return 0; } return bits; }
// map the sha4_hmac() function with 384 bits as output static int hmac_sha384( lua_State *L ) { size_t zero_text = 0; size_t *text_length = &zero_text; size_t zero_key = 0; size_t *key_length = &zero_key; const unsigned char *text = (const unsigned char*) luaL_checklstring( L, 1, text_length ); const unsigned char *key = (const unsigned char*) luaL_checklstring( L, 2, key_length ); unsigned char output[64]; sha4_hmac( key, *key_length, text, *text_length, output, SHA384 ); lua_pushlstring( L, (const char *)output, 48 ); // Push 384 bit string to lua return 1; }
void SHA512::compute(const unsigned char* key, int keylen, const unsigned char* input, int ilen, unsigned char output[] ) { sha4_hmac(key,keylen,input,ilen,output,0); }
void sha512_hmac_wrap( const unsigned char *key, size_t keylen, const unsigned char *input, size_t ilen, unsigned char *output ) { sha4_hmac( key, keylen, input, ilen, output, 0 ); }