我想在英特爾新加坡交易所飛地內用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