Почему я получаю разные результаты от разных API хеш-кодов?
Я попробовал несколько. Пискейн из питона; калькулятор на скрипке javascript, который я где-то нашел в Интернете; и калькулятор пасмажа, используемый для комиксов дурака xkcd, выдает одинаковый результат для данного ввода.
Но когда я загружаю версию 1.3 справочного источника C здесь, я получаю другие результаты. Хуже всего то, что результаты, которые я получаю от C API, полностью соответствуют примерам "теста известных ответов", которые поставляются с исходным кодом, поэтому я предполагаю, что я правильно его использую.
Мой код C:
#include <stdio.h>
#include <stdlib.h>
#include "SHA3api_ref.h"
int main(int argc, const char * argv[])
{
const int BITS = 256; // length of hash in bits
const int LENGTH = 32; // length of data in bits
BitSequence *hashval = calloc(BITS/8, 1);
const BitSequence content[] = {0xC1, 0xEC, 0xFD, 0xFC};
Hash(BITS, content, LENGTH, hashval);
for (int i = 0; i < BITS/8; i++) {
printf("%02X", hashval[i]);
}
return 0;
}
шестнадцатеричный результат: 2638B1711F1346D08BF02B5D1A575CD924140A608512AF5B8E4475632599A896
Код Python для того же хеша на тех же данных:
import skein
print( skein.skein256(bytes([0xC1, 0xEC, 0xFD, 0xFC])).hexdigest() )
результат hex: 07e785ce898fa5cfa22e15294481717935923985ea90f67fc65cb5b3cb718190
Обратите внимание, что ответ C является ожидаемым ответом в соответствии с KAT_MCT/ShortMsgKAT_256.txt
файл, который поставляется с кодом. Но pyskein дает результаты, которые, похоже, все остальные согласны с тем, что они верны. Что мне не хватает?