新しく設けた rough モジュールに ext/digest を置きました。
これは単に MD5, SHA1, RMD160 クラスを一つに入れたもので、
extconf.rb などを少し工夫してシステムに存在するライブラリを
極力利用するようにしています。

 具体的には FreeBSD だと libmd, NetBSD/OpenBSD などでは libc,
その他のシステムでは libssl (OpenSSL) に含まれる各ハッシュ
関数を探して見つかればそれを用います。extconf.rb に
--force-builtin を与えると、常に添付のソースを使います。

 とりあえず MD5 と同じインターフェースの SHA1, RMD160 が
入れてあるだけです。今後、

	- 違いは構造体のサイズと各関数名だけなので、テーブルを
	  作ってマクロなども駆使しながらコードを圧縮する

	- 一つで三種類を要求に応じて計算できるクラスを(もし
	  便利であれば)作る

といった感じの改良を行うと思います。

 なお、 rmd160*.[ch] のライセンスについては確認のメールを
出したので作者からの返事待ちですが、 NetBSD で採用されている
ことや作者(アルゴリズムの考案者)がアルゴリズムについて特許等は
取得・行使しないと明言していることから、出所を明示すればいいと
いう類のものだと思います。

 将来 md5/sha1 の置き換えとして標準に持ってきたいので、実装や
インターフェースについて気づいたこと、思い付いたことがあれば
みなさん遠慮なく仰ってください。よろしくお願います。

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"Freeze this moment a little bit longer, make each impression
  a little bit stronger..  Experience slips away -- Time stand still"