OpenSSLには、SHA256のブロックハッシュの低レベルな生の部分だけを行うインターフェースは無い。SHA256は、データを特定のフォーマットのバッファーで包むところから始まる。我々のように1~2ブロックしかハッシュしない場合、バッファーの準備は実際のハッシュ処理よりも一桁長い時間がかかる。数KBから数MBのデータをハッシュするなら、その時間は全体にならされる、という想定なのだ。BitcoinMinerでは、バッファーを一度フォーマットして使い回している。
もし我々のものより速いSHA256コード(MinGW/GCC環境)が見つかったら、本当にありがたい! (ただしライセンスには気をつけてほしい)我々が使っているのは試してみた唯一のものなので、改善の余地は十分にある。
これを書いた2年以上前は、SHA1の実装は猛烈に速いものが多数あったが、SHA256はあまり注目されていなかった。それから時間も経っているので、より良いものが出ている可能性は高い。当時、SHA256は最速のSHA1と比べて、私があるべきだと思っていたよりもずっと遅かった。SHA256がSHA1より一定程度遅いのは当然だが、私が見たほどではないはずだ。
(スレッドの名前を変えてしまったが許してほしい。SHA-256の最適化は私がいつも忘れがちな重要事項なので)
