static inline bool HashFunction_Init(const int hashType, hash_ctx *const ctx) { memset(ctx, 0, sizeof(hash_ctx)); switch(ctx->hashType = hashType) { case STD_HASHTYPE_CRC_32: rhash_crc32_init(&ctx->data.crc32); return true; case STD_HASHTYPE_MD5_128: rhash_md5_init(&ctx->data.md5); return true; case STD_HASHTYPE_SHA1_160: rhash_sha1_init(&ctx->data.sha1); return true; case STD_HASHTYPE_SHA2_224: rhash_sha224_init(&ctx->data.sha256); return true; case STD_HASHTYPE_SHA2_256: rhash_sha256_init(&ctx->data.sha256); return true; case STD_HASHTYPE_SHA2_384: rhash_sha384_init(&ctx->data.sha512); return true; case STD_HASHTYPE_SHA2_512: rhash_sha512_init(&ctx->data.sha512); return true; case STD_HASHTYPE_SHA3_224: rhash_sha3_224_init(&ctx->data.sha3); return true; case STD_HASHTYPE_SHA3_256: rhash_sha3_256_init(&ctx->data.sha3); return true; case STD_HASHTYPE_SHA3_384: rhash_sha3_384_init(&ctx->data.sha3); return true; case STD_HASHTYPE_SHA3_512: rhash_sha3_512_init(&ctx->data.sha3); return true; case STD_HASHTYPE_BLK2_224: case STD_HASHTYPE_BLK2_256: case STD_HASHTYPE_BLK2_384: case STD_HASHTYPE_BLK2_512: if(blake2b_init(&ctx->data.balke2, Blake2_Size(ctx->hashType)) != 0) { MessageBox(NULL, T("Blake2_Init internal error, going to abort!"), T("StdUtils::HashFunction_Init"), MB_ICONSTOP | MB_TOPMOST); abort(); } return true; default: ERROR_MSG(T("The specified hash type is unknown/unsupported!")); return false; } }
void sha512_test (const void *msg, int len, void *out) { sha512_ctx ctx; rhash_sha512_init (&ctx); rhash_sha512_update (&ctx, msg, len); rhash_sha512_final (&ctx, out); }