コンテンツにスキップ

SHA-256

SHA-256 は、TLS 1.3 の鍵スケジュール(ハンドシェイク中に通信用の鍵を順に導き出す手順)の土台にあるハッシュ関数です。 このページでは abc をハッシュします。 得られるダイジェスト(ハッシュ値)は、FIPS 180 と RFC 6234 に載っている “abc” のテストベクタ(検証用の既知の値)そのものです。

コード

main.c
#define WIRED_MAIN
#include "wired.h"
int wired_main(int argc, char** argv) {
(void)argc;
(void)argv;
u8 digest[SHA256_DIGEST];
wired_sha256((const u8*)"abc", 3, digest);
wired_dprintf(2, "sha256(\"abc\") = ");
for (usz i = 0; i < sizeof digest; i++) wired_dprintf(2, "%02x", digest[i]);
wired_dprintf(2, "\n");
return 0;
}

実行結果

Terminal window
$ ./tls-sha256
sha256("abc") = ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
  • wired_sha256(data, len, out) は len バイトを 1 回の呼び出しでハッシュし、SHA256_DIGEST(32)バイトのバッファに書きます。
  • wired_dprintf(2, "%02x", byte) で各バイトを 2 桁の 16 進数として書き出します。 wired.h には libc 不要の printf (wired_snprintf, wired_dprintf) があります。