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