いくつか試してみました。Python の pyskein; どこかでオンラインで見つけたjavascriptのスケイン電卓。そして、xkcd のエイプリル フールのコミックに使用されているかせ電卓はすべて、特定の入力に対して同じ出力を返します。
しかし、ここでリファレンス C ソースのバージョン 1.3 をダウンロードすると、異なる結果が得られます。最悪なことに、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;
}
結果の 16 進数: 2638B1711F1346D08BF02B5D1A575CD924140A608512AF5B8E4475632599A896
同じデータに対する同じハッシュの Python コード:
import skein
print( skein.skein256(bytes([0xC1, 0xEC, 0xFD, 0xFC])).hexdigest() )
結果の 16 進数: 07e785ce898fa5cfa22e15294481717935923985ea90f67fc65cb5b3cb718190
C の回答はKAT_MCT/ShortMsgKAT_256.txt
、コードに付属のファイルによると予想される回答であることに注意してください。しかし、pyskein は、他の誰もが正しいことに同意しているように見える結果を示します。私は何が欠けていますか?