summaryrefslogtreecommitdiffstats
path: root/ext/digest
diff options
context:
space:
mode:
authorknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-12-03 07:36:06 +0000
committerknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-12-03 07:36:06 +0000
commite3519b061a4926ded90227548a4b721c489ebb9b (patch)
treeca399d58d4fe7c1951ab72b4b50a5cda4d627aeb /ext/digest
parentc536c0a87df3171aecc9ab0cd10379f963a0f409 (diff)
downloadruby-e3519b061a4926ded90227548a4b721c489ebb9b.tar.gz
ruby-e3519b061a4926ded90227548a4b721c489ebb9b.tar.xz
ruby-e3519b061a4926ded90227548a4b721c489ebb9b.zip
* ext/digest/lib/digest/hmac.rb: Fix problems with update
timing. [Reported by: oss-ruby@technorama.net] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@11322 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/digest')
-rw-r--r--ext/digest/lib/digest/hmac.rb8
1 files changed, 6 insertions, 2 deletions
diff --git a/ext/digest/lib/digest/hmac.rb b/ext/digest/lib/digest/hmac.rb
index 0aeb6a8b4..a0cc948a6 100644
--- a/ext/digest/lib/digest/hmac.rb
+++ b/ext/digest/lib/digest/hmac.rb
@@ -60,6 +60,7 @@ module Digest
@key = key.freeze
@ipad = ipad.inject('') { |s, c| s << c.chr }.freeze
@opad = opad.inject('') { |s, c| s << c.chr }.freeze
+ @md.update(@ipad)
end
def initialize_copy(other)
@@ -67,17 +68,20 @@ module Digest
end
def update(text)
- # @md is reset when digest() returns
- @md.update(@opad + @md.digest(@ipad + text))
+ @md.update(text)
self
end
def reset
@md.reset
+ @md.update(@ipad)
self
end
def finish
+ d = @md.digest!
+ @md.update(@opad)
+ @md.update(d)
@md.digest!
end
private :finish