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バイト)辺りになると、ちょっと考えてしまいますが、、、。