diff options
author | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-01-17 19:12:10 +0000 |
---|---|---|
committer | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-01-17 19:12:10 +0000 |
commit | d8f265b332506dcb7b9738247f0d895e51477ea6 (patch) | |
tree | f6d7b1b56021a7e518be15d2da9b3a84ad1b2999 | |
parent | 7bfdad3b62eb19c216baed90d4da5c6a6545fe8c (diff) |
* ext/digest/digest.c (rb_digest_instance_hexdigest_bang): Fix
rdoc.
* ext/digest/lib/digest.rb (Digest::Class.base64digest)
(Digest::Instance#base64digest{,!}): New methods.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26339 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | NEWS | 6 | ||||
-rw-r--r-- | ext/digest/digest.c | 4 | ||||
-rw-r--r-- | ext/digest/lib/digest.rb | 26 | ||||
-rw-r--r-- | test/digest/test_digest.rb | 16 |
5 files changed, 54 insertions, 6 deletions
@@ -1,3 +1,11 @@ +Mon Jan 18 03:59:57 2010 Akinori MUSHA <[email protected]> + + * ext/digest/digest.c (rb_digest_instance_hexdigest_bang): Fix + rdoc. + + * ext/digest/lib/digest.rb (Digest::Class.base64digest) + (Digest::Instance#base64digest{,!}): New methods. + Sun Jan 17 22:48:44 2010 Akinori MUSHA <[email protected]> * ext/digest/digest.c (rb_digest_instance_digest) @@ -114,6 +114,12 @@ with all sufficient information, see the ChangeLog file. * respond_to? can be used to detect methods not implemented. For example, Process.respond_to?(:fork) returns false on Windows. +* digest + * new methods: + * Digest::Class.base64digest + * Digest::Instance#base64digest + * Digest::Instance#base64digest! + * rss * 0.2.4 -> 0.2.7. diff --git a/ext/digest/digest.c b/ext/digest/digest.c index 4f3b462240..29ac36fc99 100644 --- a/ext/digest/digest.c +++ b/ext/digest/digest.c @@ -234,8 +234,8 @@ rb_digest_instance_hexdigest(int argc, VALUE *argv, VALUE self) * call-seq: * digest_obj.hexdigest! -> string * - * Returns the resulting hash value and resets the digest to the - * initial state. + * Returns the resulting hash value in a hex-encoded form and resets + * the digest to the initial state. */ static VALUE rb_digest_instance_hexdigest_bang(VALUE self) diff --git a/ext/digest/lib/digest.rb b/ext/digest/lib/digest.rb index e42f984f95..857501722e 100644 --- a/ext/digest/lib/digest.rb +++ b/ext/digest/lib/digest.rb @@ -28,6 +28,13 @@ module Digest def self.file(name) new.file(name) end + + # Returns the base64 encoded hash value of a given _string_. The + # return value is properly padded with '=' and contains no line + # feeds. + def self.base64digest(str, *args) + [digest(str, *args)].pack('m0') + end end module Instance @@ -42,6 +49,25 @@ module Digest } self end + + # If none is given, returns the resulting hash value of the digest + # in a base64 encoded form, keeping the digest's state. + # + # If a _string_ is given, returns the hash value for the given + # _string_ in a base64 encoded form, resetting the digest to the + # initial state before and after the process. + # + # In either case, the return value is properly padded with '=' and + # contains no line feeds. + def base64digest(str = nil) + [str ? digest(str) : digest].pack('m0') + end + + # Returns the resulting hash value and resets the digest to the + # initial state. + def base64digest! + [digest!].pack('m0') + end end end diff --git a/test/digest/test_digest.rb b/test/digest/test_digest.rb index fa12086300..1d1efa15eb 100644 --- a/test/digest/test_digest.rb +++ b/test/digest/test_digest.rb @@ -18,14 +18,22 @@ module TestDigest Data2 = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" def test_s_hexdigest - self.class::DATA.each do |str, digest| - assert_equal(digest, self.class::ALGO.hexdigest(str)) + self.class::DATA.each do |str, hexdigest| + assert_equal(hexdigest, self.class::ALGO.hexdigest(str)) + end + end + + def test_s_base64digest + self.class::DATA.each do |str, hexdigest| + digest = [hexdigest].pack("H*") + assert_equal([digest].pack("m0"), self.class::ALGO.base64digest(str)) end end def test_s_digest - self.class::DATA.each do |str, digest| - assert_equal([digest].pack("H*"), self.class::ALGO.digest(str)) + self.class::DATA.each do |str, hexdigest| + digest = [hexdigest].pack("H*") + assert_equal(digest, self.class::ALGO.digest(str)) end end |