In message <86fydsl7x1.knu / iDaemons.org>,
 `"Akinori MUSHA" <knu / iDaemons.org>' wrote:
> (主に)ゆぞさん

おひさしぶりです。

>  メリットとしては、苦もなくAPIが統一される、 #file() などの追加
> メソッドが使える、 bubblebabble や hmac (OpenSSL にもあるが)等の
> アドインの恩恵を受けられる、などです。

目的には賛成します。

最近のext/digestの変更を追っかけていませんでしたが、内部の実
装に関わらない機能であれば、例えば::Digest::Utilitiesみたい
なモジュールを用意して、

  class OpenSSL::Digest::Digest
    class <<self
      include ::Digest::Utilities::SingletonMethods
    end
    include ::Digest::Utilities::InstanceMethods
  end

こんな風にできると楽かなとも思いました。

>  ところで、作業の中で
> 
> 	OpenSSL::Digest::Digest::new(name)
> 
> なるインターフェースを発見しました。Digest のだぶりが見苦しい
> 感じがするので、代わりに OpenSSL::Digest(name) を定義して
> 
> 	OpenSSL::Digest("MD5").new
> 
> と書けるようにしてみましたが、どうでしょうか。

名前が見苦しいのはまったく同感です。現在の
OpenSSL::Digest::DigestクラスをOpenSSL::Digestという名前にし
て、OpenSSL::Digest.new(name)にしようかと考えてはいました。

# ほかにもOpenSSL::PKey::PKeyなんかもあるので、1.9ではまとめ
# て変更することを検討します。

名前はさておき、[ruby-dev:29651]のパッチではアルゴリズム毎に
サブクラスを作成し、サブクラス毎に個別にメソッドを定義してい
るのが受け入れがたいです。

OpenSSL::Digest::DigestはOpenSSLライブラリに定義されている任
意のアルゴリズム名で初期化できるようになっています。例えば、

  OpenSSL::Digest::Digest.new("SHA256")

で指定している名前はEVP_MD構造体を検索するために利用している
に過ぎません。そのおかげでOpenSSL::Digest::SHA256を追加する
以前からOpenSSL 0.9.8を使ってビルドしていれば、このアルゴリ
ズムを使うことができていました。

また、DSS1とSHA1のように、アルゴリズムは同じだけど公開鍵暗号
の署名のフォーマット毎に個別に名前が付けてあるというOpenSSL
特有の事情もあって、これらが今後も増えないとは言い切れないの
で、Rubyレベルでは知らない名前であっても初期化できる余地は残
しておきたいと思います。

-- 
ごとうゆうぞう