Hamigaki.Checksum
LHAの実装も落ち着いてきたので、再利用可能なコンポーネントを切り出しつつコードの整理中です。
今日切り出したのは(広義の)チェックサムです。
ついでにMD5も実装してみました。
バイト順の仕様を勘違いしていたせいでMD5ごときの実装に半日も費やしてしまいました。
他の実装と違って1ビット単位の処理ができるようになっているので遅いです。
sum8とxor8の名前は、
http://en.wikipedia.org/wiki/List_of_checksum_algorithms
を参考にしました。
インタフェースはBoost.CRCを踏襲しています。なので、
class md5 { public: typedef boost::array<boost::uint8_t,16> value_type; // チェックサムを返す value_type checksum(); };
checksum()は16バイトの配列を値で返します。
これくらいのサイズならいいんではないかと思います。
SHA512(64バイト)辺りになると、ちょっと考えてしまいますが、、、。