mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/digest/digest.c (rb_digest_instance_digest)
(rb_digest_instance_hexdigest): Save a method call of reset()
for a disposable clone.
* 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/branches/ruby_1_8@26341 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
f9ce73f6a6
commit
fbc0b59bd6
5 changed files with 61 additions and 14 deletions
12
ChangeLog
12
ChangeLog
|
|
@ -1,3 +1,15 @@
|
|||
Mon Jan 18 04:15:58 2010 Akinori MUSHA <knu@iDaemons.org>
|
||||
|
||||
* ext/digest/digest.c (rb_digest_instance_digest)
|
||||
(rb_digest_instance_hexdigest): Save a method call of reset()
|
||||
for a disposable clone.
|
||||
|
||||
* ext/digest/digest.c (rb_digest_instance_hexdigest_bang): Fix
|
||||
rdoc.
|
||||
|
||||
* ext/digest/lib/digest.rb (Digest::Class.base64digest)
|
||||
(Digest::Instance#base64digest{,!}): New methods.
|
||||
|
||||
Mon Jan 18 03:39:05 2010 Akinori MUSHA <knu@iDaemons.org>
|
||||
|
||||
* lib/base64.rb (Base64#{strict_encode64,strict_decode64,urlsafe_encode64,
|
||||
|
|
|
|||
6
NEWS
6
NEWS
|
|
@ -194,6 +194,12 @@ with all sufficient information, see the ChangeLog file.
|
|||
|
||||
Added as an alias to #ungetc.
|
||||
|
||||
* digest
|
||||
* new methods:
|
||||
* Digest::Class.base64digest
|
||||
* Digest::Instance#base64digest
|
||||
* Digest::Instance#base64digest!
|
||||
|
||||
* rss
|
||||
|
||||
* 0.2.4 -> 0.2.7.
|
||||
|
|
|
|||
|
|
@ -179,10 +179,7 @@ rb_digest_instance_digest(int argc, VALUE *argv, VALUE self)
|
|||
value = rb_funcall(self, id_finish, 0);
|
||||
rb_funcall(self, id_reset, 0);
|
||||
} else {
|
||||
VALUE clone = rb_obj_clone(self);
|
||||
|
||||
value = rb_funcall(clone, id_finish, 0);
|
||||
rb_funcall(clone, id_reset, 0);
|
||||
value = rb_funcall(rb_obj_clone(self), id_finish, 0);
|
||||
}
|
||||
|
||||
return value;
|
||||
|
|
@ -227,10 +224,7 @@ rb_digest_instance_hexdigest(int argc, VALUE *argv, VALUE self)
|
|||
value = rb_funcall(self, id_finish, 0);
|
||||
rb_funcall(self, id_reset, 0);
|
||||
} else {
|
||||
VALUE clone = rb_obj_clone(self);
|
||||
|
||||
value = rb_funcall(clone, id_finish, 0);
|
||||
rb_funcall(clone, id_reset, 0);
|
||||
value = rb_funcall(rb_obj_clone(self), id_finish, 0);
|
||||
}
|
||||
|
||||
return hexencode_str_new(value);
|
||||
|
|
@ -240,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)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
require 'digest.so'
|
||||
autoload :Base64, 'base64'
|
||||
|
||||
module Digest
|
||||
def self.const_missing(name)
|
||||
|
|
@ -28,6 +29,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)
|
||||
Base64.strict_encode64(digest(str, *args))
|
||||
end
|
||||
end
|
||||
|
||||
module Instance
|
||||
|
|
@ -42,6 +50,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)
|
||||
Base64.strict_encode64(str ? digest(str) : digest)
|
||||
end
|
||||
|
||||
# Returns the resulting hash value and resets the digest to the
|
||||
# initial state.
|
||||
def base64digest!
|
||||
Base64.strict_encode64(digest!)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -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").delete("\n"), 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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue