我想在英特尔新加坡交易所飞地内用SHA512计算HMAC。 我得到的代码工作,但收到错误的结果。我有一个使用静态预定义密钥和从中计算HMAC的nonce的例子,但是在验证接收结果时,它与正确的结果不匹配。新加坡交易所计算HMAC内飞地
Apparantely有两种不同的变体来计算HMAC(根据该enter link description here,我都试过
下面是从飞地功能:
int calculateHMAC(uint8_t *key, uint8_t *nonce, uint8_t *res_hmac) {
IppsHMACState *ctx;
IppStatus status;
int psize = 0;
//VARIANT 1
status = ippsHMAC_GetSize(&psize);
if (status == ippStsNullPtrErr)
return 1;
ctx = (IppsHMACState*) malloc(psize);
status = ippsHMAC_Init(key, 16, ctx, ippHashAlg_SHA512);
if (status != ippStsNoErr)
return 1;
status = ippsHMAC_Update(nonce, 16, ctx);
if (status != ippStsNoErr)
return 1;
uint8_t hmac[64];
memset(hmac, '\0', 64);
status = ippsHMAC_Final(hmac, 64, ctx);
if (status != ippStsNoErr)
return 1;
memcpy(res_hmac, hmac, 64);
//VARIANT 2
// uint8_t test_hmac[HMAC_LENGTH];
// status = ippsHMAC_Message(nonce, 16, key, 16, test_hmac, 64, ippHashAlg_SHA512);
// if (status != ippStsNoErr)
// return 1;
// memcpy(res_hmac, test_hmac, 64);
return 0;
}
这里是更新的呼叫:
uint8_t ba_nonce[16] = {
0x7d, 0x93, 0x09, 0x9f, 0x7f, 0xed, 0x16, 0x21,
0x58, 0x36, 0xf7, 0xba, 0xd4, 0xdb, 0x0e, 0x48
};
uint8_t ba_key[16] = {
0xa5, 0xb1, 0x15, 0x53, 0x6d, 0x5b, 0xf3, 0x50,
0xc5, 0xb0, 0xfa, 0x6f, 0x69, 0x24, 0x2f, 0x18
};
uint8_t t_hmac[64];
memset(t_hmac, '\0', 64);
int error = calculateHMAC(ba_key, ba_nonce, t_hmac);
我不知道我做错了什么!?
这将导致 7d2f2e3d57c84a58945b9016fb37e2df03afdde313c9d79c31ec1e6612d6d6b20456a8fcf799ef74d16f60c7f283e621400004422885f33fb3d2bb7ae7a1daa3
按照这个计算器here
我已经用你的建议尝试过了,现在每次迭代都会得到相同的结果,但结果仍然是错误的!? – wasp256
更新后的代码给出的结果是正确的。在线检查器将输入解释为字符串。因此,你会得到不同的散列。我重现了两个输出,正确的更新后的代码给出以及在线检查器生成的一个,用Python:https://gist.github.com/fzgregor/db6b25ff9cb712a3c93face3b10672cd – fzgregor
我现在重新验证它,这是错误,谢谢您的帮助! – wasp256