ruby/ext/digest/sha2/lib/sha2.rb
yugui 226a7a81d6 merges r24415,r24426,r24427,r24428,r24433,r24434 and r24435 from trunk into ruby_1_9_1.
--
* ext/digest/sha2/sha2.[ch]: Update to 1.0 RELEASE which fixes an
  off-by-one bug in SHA-256 hashing.  Reduce differences from
  the original while at it. [Bug #1799]
--
* ext/digest/sha2/sha2.h (BYTE_ORDER): Define BYTE_ORDER as
  necessary. [ruby-dev:39029]
--
	* ext/digest/sha2/sha2.c (*_Final): typos.
--
	* ext/digest/sha2/lib/sha2.eb: should require sha2.so.
--
* ext/digest/*/extconf.rb: inttypes.h and unistd.h need not be
  checked here. [ruby-dev:39032]
--
* ext/digest/sha2/sha2.c: The ULL suffix is not supported by
  pre-C99 compilers, so resurrect the ULL() macro to regain
  portability. [ruby-dev:39032]
--
Fix a typo.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@24475 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-08-08 15:35:43 +00:00

74 lines
1.4 KiB
Ruby

#--
# sha2.rb - defines Digest::SHA2 class which wraps up the SHA256,
# SHA384, and SHA512 classes.
#++
# Copyright (c) 2006 Akinori MUSHA <knu@iDaemons.org>
#
# All rights reserved. You can redistribute and/or modify it under the same
# terms as Ruby.
#
# $Id$
require 'digest'
require 'digest/sha2.so'
module Digest
#
# A meta digest provider class for SHA256, SHA384 and SHA512.
#
class SHA2 < Digest::Class
# call-seq:
# Digest::SHA2.new(bitlen = 256) -> digest_obj
#
# Creates a new SHA2 hash object with a given bit length.
def initialize(bitlen = 256)
case bitlen
when 256
@sha2 = Digest::SHA256.new
when 384
@sha2 = Digest::SHA384.new
when 512
@sha2 = Digest::SHA512.new
else
raise ArgumentError, "unsupported bit length: %s" % bitlen.inspect
end
@bitlen = bitlen
end
# :nodoc:
def reset
@sha2.reset
self
end
# :nodoc:
def update(str)
@sha2.update(str)
self
end
alias << update
def finish
@sha2.digest!
end
private :finish
def block_length
@sha2.block_length
end
def digest_length
@sha2.digest_length
end
# :nodoc:
def initialize_copy(other)
@sha2 = other.instance_eval { @sha2.clone }
end
# :nodoc:
def inspect
"#<%s:%d %s>" % [self.class.name, @bitlen, hexdigest]
end
end
end