sha2.hpp

SHA-1とSHA-256でコードの重複が目立ってきたので、「共通部分を切り出そう」、「ついでにSHA-512とかにも対応しよう」と思って書き始めたらSHA-2(SHA-224/256/384/512)用コードが出来上がりました。
<hamigaki/checksum/sha2.hpp>
当初の目的と違い、SHA-1は別コードのままです。
Boost.CRCに倣い、ビット単位で処理できる厳密だけど低速なsha2_basicクラステンプレートと、バイト単位でしか処理できない代わりに多少高速なsha2_optimalクラステンプレートを用意しています。
sha256はsha2_optimal<256>のtypedefになっています。(ヘッダもsha2.hpp変わっています。)


あと、sha2_optimalは最終的なハッシュ値を求めるchecksum()メンバ関数が非constになっています。
sha2_basicでは一旦SHA-2コンテキストをコピーした上でパディングとビット長をハッシュしているのですが、この無駄なコピーを排除するための措置です。