[#29736] [提案] Kernel#p をもっと便利に — "Yusuke ENDOH" <mame@...>
遠藤侑介と申します。
19 messages
2006/11/01
[#29740] Re: [提案] Kernel#p をもっと便利に
— Yukihiro Matsumoto <matz@...>
2006/11/01
まつもと ゆきひろです
[#29915] Re: [提案] Kernel#p をもっと便利に
— "Yusuke ENDOH" <mame@...>
2006/11/12
遠藤です。
[#30873] Re: [提案] Kernel#p をもっと便利に
— "Yusuke ENDOH" <mame@...>
2007/06/02
遠藤と申します。
[#29765] merge with YARV — SASADA Koichi <ko1@...>
ささだです。
16 messages
2006/11/03
[#29787] Re: merge with YARV
— "きむらこういち" <hogemuta@...>
2006/11/04
木村です。
[#29767] 1.8 proposal of RUBY_PATCHLEVEL — URABE Shyouhei <root@...>
-----BEGIN PGP SIGNED MESSAGE-----
52 messages
2006/11/04
[#29769] Re: 1.8 proposal of RUBY_PATCHLEVEL
— akira yamada / やまだあきら <akira@...>
2006/11/04
URABE Shyouhei wrote:
[#29770] Re: 1.8 proposal of RUBY_PATCHLEVEL
— Yukihiro Matsumoto <matz@...>
2006/11/04
まつもと ゆきひろです
[#29802] Re: 1.8 proposal of RUBY_PATCHLEVEL
— URABE Shyouhei <root@...>
2006/11/04
卜部です。
[#29771] Re: 1.8 proposal of RUBY_PATCHLEVEL
— Shugo Maeda <shugo@...>
2006/11/04
前田です。
[#29789] Re: 1.8 proposal of RUBY_PATCHLEVEL
— "Akinori MUSHA" <knu@...>
2006/11/04
At Sat, 4 Nov 2006 11:20:31 +0900,
[#29803] Re: 1.8 proposal of RUBY_PATCHLEVEL
— URABE Shyouhei <root@...>
2006/11/04
卜部です。
[#29889] Re: 1.8 proposal of RUBY_PATCHLEVEL
— Shugo Maeda <shugo@...>
2006/11/07
前田です。
[#29890] Re: 1.8 proposal of RUBY_PATCHLEVEL
— URABE Shyouhei <root@...>
2006/11/07
卜部です。
[#29895] Re: 1.8 proposal of RUBY_PATCHLEVEL
— Shugo Maeda <shugo@...>
2006/11/07
前田です。
[#29814] Re: 1.8 proposal of RUBY_PATCHLEVEL
— MoonWolf <moonwolf@...>
2006/11/05
MoonWolfです。
[#29820] Re: 1.8 proposal of RUBY_PATCHLEVEL
— "Akinori MUSHA" <knu@...>
2006/11/05
At Sun, 5 Nov 2006 16:02:44 +0900,
[#29793] Module duplicate — SASADA Koichi <ko1@...>
ささだです。
8 messages
2006/11/04
[#29849] Re: Module duplicate
— Shugo Maeda <shugo@...>
2006/11/06
前田です。
[#29907] コードネームを決めませんか — Daigo Moriwaki <techml@...>
森脇です。
6 messages
2006/11/08
[#29925] ruby -v — Urabe Shyouhei <shyouhei@...>
卜部です。
28 messages
2006/11/24
[#29926] Re: ruby -v
— Yukihiro Matsumoto <matz@...>
2006/11/24
まつもと ゆきひろです
[#29930] Re: ruby -v
— Urabe Shyouhei <shyouhei@...>
2006/11/24
卜部です。
[#29932] Re: ruby -v
— Yukihiro Matsumoto <matz@...>
2006/11/24
まつもと ゆきひろです
[#29935] Re: ruby -v
— Urabe Shyouhei <shyouhei@...>
2006/11/24
卜部です。
[#29938] Re: ruby -v
— "Akinori MUSHA" <knu@...>
2006/11/24
At Fri, 24 Nov 2006 12:16:33 +0900,
[#29940] Re: ruby -v
— Takahiro Kambe <taca@...>
2006/11/24
In message <86hcwpzg08.knu@iDaemons.org>
[#29944] Re: ruby -v
— Urabe Shyouhei <shyouhei@...>
2006/11/24
卜部です。
[#29948] Re: ruby -v
— Urabe Shyouhei <shyouhei@...>
2006/11/25
卜部です。
[#29954] Re: ruby -v
— "Akinori MUSHA" <knu@...>
2006/11/26
At Sat, 25 Nov 2006 18:06:22 +0900,
[#29927] Re: ruby -v
— Kazuhiko <kazuhiko@...>
2006/11/24
かずひこです。
[#29931] webrick and String#each — "NARUSE, Yui" <naruse@...>
成瀬です。
6 messages
2006/11/24
[#29964] 1.8, 1.9, svn化, などなどのまとめ — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
15 messages
2006/11/28
[#29965] Re: 1.8, 1.9, svn化, などなどのまとめ
— Urabe Shyouhei <shyouhei@...>
2006/11/28
卜部です。担当部分のみ反応しますが、
[#29981] Re: 1.8, 1.9, svn化, などなどのまとめ
— SASADA Koichi <ko1@...>
2006/12/01
ささだです.
[#29982] Re: 1.8, 1.9, svn化, などなどのまとめ
— "U.Nakamura" <usa@...>
2006/12/01
こんにちは、なかむら(う)です。
[#29970] BUG: Incorrect handling of Ignorecase matching (regex.c of 1.8.5) — "きむらこういち" <hogemuta@...>
木村です。
15 messages
2006/11/28
[#29985] Re: BUG: Incorrect handling of Ignorecase matching (regex.c of 1.8.5)
— Urabe Shyouhei <shyouhei@...>
2006/12/04
卜部です。
[#29971] Re: BUG: Incorrect handling of Ignorecase matching (regex.c of 1.8.5)
— "Nobuyoshi Nakada" <nobu@...>
2006/11/29
なかだです。
[#29972] Re: BUG: Incorrect handling of Ignorecase matching (regex.c of 1.8.5)
— KIMURA Koichi <kimura.koichi@...>
2006/11/29
木村です。
[#29974] Re: BUG: Incorrect handling of Ignorecase matching (regex.c of 1.8.5)
— KIMURA Koichi <kimura.koichi@...>
2006/11/29
木村です。
[#29975] Re: BUG: Incorrect handling of Ignorecase matching (regex.c of 1.8.5)
— Yukihiro Matsumoto <matz@...>
2006/11/29
まつもと ゆきひろです
[ruby-dev:29727] Re: Digest'ifying OpenSSL::Digest
From:
"Akinori MUSHA" <knu@...>
Date:
2006-11-01 05:32:40 UTC
List:
ruby-dev #29727
(主に)ゆぞさん
OpenSSL::Digest::Digest クラスに、新設の Digest::Class を継承
させてみました。基本的にインターフェースの非互換はなく、純粋に
実装の共有を行うものです。
唯一、 == で文字列を与えられた際は常に to_s (hexdigest) の値と
比較され、長さを見て digest() または hexdigest() の値と比較する
機能はなくなっています。Digest オブジェクトが与えられた場合は
digest() の結果同士を比較します。
そのほかはすべて機能追加です。改めて検討をお願いします。
--
/
/__ __ Akinori.org / MUSHA.org
/ ) ) ) ) / FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp
"Different eyes see different things,
Different hearts beat on different strings --
But there are times for you and me when all such things agree"
M ext/openssl/ossl_digest.c
M ext/openssl/lib/openssl/digest.rb
Index: ext/openssl/ossl_digest.c
===================================================================
RCS file: /src/ruby/ext/openssl/ossl_digest.c,v
retrieving revision 1.7
diff -u -r1.7 ossl_digest.c
--- ext/openssl/ossl_digest.c 31 Aug 2006 10:27:46 -0000 1.7
+++ ext/openssl/ossl_digest.c 1 Nov 2006 05:02:34 -0000
@@ -141,24 +141,8 @@
return self;
}
-static void
-digest_final(EVP_MD_CTX *ctx, char **buf, int *buf_len)
-{
- EVP_MD_CTX final;
-
- if (!EVP_MD_CTX_copy(&final, ctx)) {
- ossl_raise(eDigestError, NULL);
- }
- if (!(*buf = OPENSSL_malloc(EVP_MD_CTX_size(&final)))) {
- EVP_MD_CTX_cleanup(&final);
- ossl_raise(eDigestError, "Cannot allocate mem for digest");
- }
- EVP_DigestFinal_ex(&final, *buf, buf_len);
- EVP_MD_CTX_cleanup(&final);
-}
-
static VALUE
-ossl_digest_digest(VALUE self)
+ossl_digest_finish(VALUE self)
{
EVP_MD_CTX *ctx;
char *buf;
@@ -166,96 +150,47 @@
VALUE digest;
GetDigest(self, ctx);
- digest_final(ctx, &buf, &buf_len);
- digest = ossl_buf2str(buf, buf_len);
-
- return digest;
-}
-
-static VALUE
-ossl_digest_hexdigest(VALUE self)
-{
- EVP_MD_CTX *ctx;
- char *buf, *hexbuf;
- int buf_len;
- VALUE hexdigest;
- GetDigest(self, ctx);
- digest_final(ctx, &buf, &buf_len);
- if (string2hex(buf, buf_len, &hexbuf, NULL) != 2 * buf_len) {
- OPENSSL_free(buf);
- ossl_raise(eDigestError, "Memory alloc error");
+ if (!(buf = OPENSSL_malloc(EVP_MD_CTX_size(ctx)))) {
+ ossl_raise(eDigestError, "Cannot allocate mem for digest");
}
- OPENSSL_free(buf);
- hexdigest = ossl_buf2str(hexbuf, 2 * buf_len);
-
- return hexdigest;
-}
-
-static VALUE
-ossl_digest_s_digest(VALUE klass, VALUE str, VALUE data)
-{
- VALUE obj = rb_class_new_instance(1, &str, klass);
-
- ossl_digest_update(obj, data);
- return ossl_digest_digest(obj);
-}
-
-static VALUE
-ossl_digest_s_hexdigest(VALUE klass, VALUE str, VALUE data)
-{
- VALUE obj = rb_class_new_instance(1, &str, klass);
-
- ossl_digest_update(obj, data);
+ EVP_DigestFinal_ex(ctx, buf, &buf_len);
+ EVP_MD_CTX_cleanup(ctx);
- return ossl_digest_hexdigest(obj);
+ digest = ossl_buf2str(buf, buf_len);
+
+ return digest;
}
static VALUE
-ossl_digest_equal(VALUE self, VALUE other)
+ossl_digest_name(VALUE self)
{
EVP_MD_CTX *ctx;
- VALUE str1, str2;
- if (rb_obj_is_kind_of(other, cDigest) == Qtrue) {
- str2 = ossl_digest_digest(other);
- } else {
- StringValue(other);
- str2 = other;
- }
GetDigest(self, ctx);
- if (RSTRING_LEN(str2) == EVP_MD_CTX_size(ctx)) {
- str1 = ossl_digest_digest(self);
- } else {
- str1 = ossl_digest_hexdigest(self);
- }
- if (RSTRING_LEN(str1) == RSTRING_LEN(str2)
- && rb_str_cmp(str1, str2) == 0) {
- return Qtrue;
- }
- return Qfalse;
+ return rb_str_new2(EVP_MD_name(EVP_MD_CTX_md(ctx)));
}
static VALUE
-ossl_digest_name(VALUE self)
+ossl_digest_size(VALUE self)
{
EVP_MD_CTX *ctx;
GetDigest(self, ctx);
- return rb_str_new2(EVP_MD_name(EVP_MD_CTX_md(ctx)));
+ return INT2NUM(EVP_MD_CTX_size(ctx));
}
static VALUE
-ossl_digest_size(VALUE self)
+ossl_digest_block_length(VALUE self)
{
EVP_MD_CTX *ctx;
GetDigest(self, ctx);
- return INT2NUM(EVP_MD_CTX_size(ctx));
+ return INT2NUM(EVP_MD_CTX_block_size(ctx));
}
/*
@@ -264,31 +199,24 @@
void
Init_ossl_digest()
{
+ rb_require("digest");
+
mDigest = rb_define_module_under(mOSSL, "Digest");
eDigestError = rb_define_class_under(mDigest, "DigestError", eOSSLError);
-
- cDigest = rb_define_class_under(mDigest, "Digest", rb_cObject);
+
+ cDigest = rb_define_class_under(mDigest, "Digest", rb_path2class("Digest::Class"));
rb_define_alloc_func(cDigest, ossl_digest_alloc);
- rb_define_singleton_method(cDigest, "digest", ossl_digest_s_digest, 2);
- rb_define_singleton_method(cDigest, "hexdigest", ossl_digest_s_hexdigest, 2);
rb_define_method(cDigest, "initialize", ossl_digest_initialize, -1);
- rb_define_method(cDigest, "reset", ossl_digest_reset, 0);
-
rb_define_copy_func(cDigest, ossl_digest_copy);
-
- rb_define_method(cDigest, "digest", ossl_digest_digest, 0);
- rb_define_method(cDigest, "hexdigest", ossl_digest_hexdigest, 0);
- rb_define_alias(cDigest, "inspect", "hexdigest");
- rb_define_alias(cDigest, "to_s", "hexdigest");
-
+ rb_define_method(cDigest, "reset", ossl_digest_reset, 0);
rb_define_method(cDigest, "update", ossl_digest_update, 1);
rb_define_alias(cDigest, "<<", "update");
-
- rb_define_method(cDigest, "==", ossl_digest_equal, 1);
-
+ rb_define_private_method(cDigest, "finish", ossl_digest_finish, 0);
+ rb_define_method(cDigest, "digest_length", ossl_digest_size, 0);
+ rb_define_method(cDigest, "block_length", ossl_digest_block_length, 0);
+
rb_define_method(cDigest, "name", ossl_digest_name, 0);
- rb_define_method(cDigest, "size", ossl_digest_size, 0);
}
Index: ext/openssl/lib/openssl/digest.rb
===================================================================
RCS file: /src/ruby/ext/openssl/lib/openssl/digest.rb,v
retrieving revision 1.3
diff -u -r1.3 digest.rb
--- ext/openssl/lib/openssl/digest.rb 8 May 2006 00:11:59 -0000 1.3
+++ ext/openssl/lib/openssl/digest.rb 1 Nov 2006 05:02:34 -0000
@@ -36,11 +36,6 @@
super(name, data.first)
}
}
- singleton = (class <<klass; self; end)
- singleton.class_eval{
- define_method(:digest){|data| Digest.digest(name, data) }
- define_method(:hexdigest){|data| Digest.hexdigest(name, data) }
- }
const_set(name, klass)
}