SHA-256
SHA-256 は、TLS 1.3 の鍵スケジュール(ハンドシェイク中に通信用の鍵を順に導き出す手順)の土台にあるハッシュ関数です。
このページでは abc をハッシュします。
得られるダイジェスト(ハッシュ値)は、FIPS 180 と RFC 6234 に載っている “abc” のテストベクタ(検証用の既知の値)そのものです。
コード
#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;}実行結果
$ ./tls-sha256sha256("abc") = ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adwired_sha256(data, len, out)はlenバイトを 1 回の呼び出しでハッシュし、SHA256_DIGEST(32)バイトのバッファに書きます。wired_dprintf(2, "%02x", byte)で各バイトを 2 桁の 16 進数として書き出します。wired.hには libc 不要の printf (wired_snprintf,wired_dprintf) があります。