Bug #4702 ยป digest_docs.diff
ext/digest/lib/digest.rb | ||
---|---|---|
require 'digest.so'
|
||
module Digest
|
||
def self.const_missing(name)
|
||
def self.const_missing(name) # :nodoc:
|
||
case name
|
||
when :SHA256, :SHA384, :SHA512
|
||
lib = 'digest/sha2.so'
|
||
... | ... | |
end
|
||
end
|
||
# call-seq:
|
||
# Digest(name) -> digest_subclass
|
||
#
|
||
# Returns a Digest subclass by +name+.
|
||
#
|
||
# require 'digest'
|
||
#
|
||
# Digest("MD5")
|
||
# # => Digest::MD5
|
||
#
|
||
# Digest("Foo")
|
||
# # LoadError: library not found for class Digest::Foo -- digest/foo
|
||
def Digest(name)
|
||
Digest.const_get(name)
|
||
end
|
ext/digest/lib/digest/hmac.rb | ||
---|---|---|
# = digest/hmac.rb
|
||
#
|
||
# An implementation of HMAC keyed-hashing algorithm
|
||
#
|
||
# == Overview
|
||
#
|
||
# CAUTION: Use of this library is discouraged, because this
|
||
# implementation was meant to be experimental but somehow got into the
|
||
# 1.9 series without being noticed. Please use OpenSSL::HMAC in the
|
||
# "openssl" library instead.
|
||
#
|
||
# This library adds a method named hmac() to Digest classes, which
|
||
# creates a Digest class for calculating HMAC digests.
|
||
#
|
||
# == Examples
|
||
#
|
||
# require 'digest/hmac'
|
||
#
|
||
# # one-liner example
|
||
# puts Digest::HMAC.hexdigest("data", "hash key", Digest::SHA1)
|
||
#
|
||
# # rather longer one
|
||
# hmac = Digest::HMAC.new("foo", Digest::RMD160)
|
||
#
|
||
# buf = ""
|
||
# while stream.read(16384, buf)
|
||
# hmac.update(buf)
|
||
# end
|
||
#
|
||
# puts hmac.bubblebabble
|
||
#
|
||
# == License
|
||
#
|
||
# Copyright (c) 2006 Akinori MUSHA <knu@iDaemons.org>
|
||
... | ... | |
require 'digest'
|
||
module Digest
|
||
# = digest/hmac.rb
|
||
#
|
||
# An implementation of HMAC keyed-hashing algorithm
|
||
#
|
||
# == Overview
|
||
#
|
||
# CAUTION: Use of this library is discouraged, because this
|
||
# implementation was meant to be experimental but somehow got into the
|
||
# 1.9 series without being noticed. Please use OpenSSL::HMAC in the
|
||
# "openssl" library instead.
|
||
#
|
||
# == Examples
|
||
#
|
||
# require 'digest/hmac'
|
||
#
|
||
# # one-liner example
|
||
# puts Digest::HMAC.hexdigest("data", "hash key", Digest::SHA1)
|
||
#
|
||
# # rather longer one
|
||
# hmac = Digest::HMAC.new("foo", Digest::RMD160)
|
||
#
|
||
# buf = ""
|
||
# while stream.read(16384, buf)
|
||
# hmac.update(buf)
|
||
# end
|
||
#
|
||
# puts hmac.bubblebabble
|
||
#
|
||
class HMAC < Digest::Class
|
||
# call-seq:
|
||
# digest_obj.new -> another_digest_obj
|
||
#
|
||
# Returns a new, initialized copy of the digest object. Equivalent
|
||
# to digest_obj.clone().reset().
|
||
def initialize(key, digester)
|
||
@md = digester.new
|
||
... | ... | |
@md.update(@ipad)
|
||
end
|
||
def initialize_copy(other)
|
||
def initialize_copy(other) # :nodoc:
|
||
@md = other.instance_eval { @md.clone }
|
||
end
|
||
# call-seq:
|
||
# digest_obj.update(string) -> digest_obj
|
||
# digest_obj << string -> digest_obj
|
||
#
|
||
# Updates the digest using a given _string_ and returns self.
|
||
def update(text)
|
||
@md.update(text)
|
||
self
|
||
end
|
||
alias << update
|
||
# call-seq:
|
||
# digest_obj.reset -> digest_obj
|
||
#
|
||
# Resets the digest to the initial state and returns self.
|
||
def reset
|
||
@md.reset
|
||
@md.update(@ipad)
|
||
self
|
||
end
|
||
def finish
|
||
def finish # :nodoc:
|
||
d = @md.digest!
|
||
@md.update(@opad)
|
||
@md.update(d)
|
||
... | ... | |
end
|
||
private :finish
|
||
# call-seq:
|
||
# digest_obj.digest_length -> integer
|
||
#
|
||
# Returns the length of the hash value of the digest.
|
||
def digest_length
|
||
@md.digest_length
|
||
end
|
||
# call-seq:
|
||
# digest_obj.block_length -> integer
|
||
#
|
||
# Returns the block length of the digest.
|
||
def block_length
|
||
@md.block_length
|
||
end
|
||
# call-seq:
|
||
# digest_obj.inspect -> string
|
||
#
|
||
# Creates a printable version of the digest object.
|
||
def inspect
|
||
sprintf('#<%s: key=%s, digest=%s>', self.class.name, @key.inspect, @md.inspect.sub(/^\#<(.*)>$/) { $1 });
|
||
end
|
ext/digest/sha2/lib/sha2.rb | ||
---|---|---|
@bitlen = bitlen
|
||
end
|
||
# :nodoc:
|
||
# call-seq:
|
||
# digest_obj.reset -> digest_obj
|
||
#
|
||
# Resets the digest to the initial state and returns self.
|
||
def reset
|
||
@sha2.reset
|
||
self
|
||
end
|
||
# :nodoc:
|
||
# call-seq:
|
||
# digest_obj.update(string) -> digest_obj
|
||
# digest_obj << string -> digest_obj
|
||
#
|
||
# Updates the digest using a given _string_ and returns self.
|
||
def update(str)
|
||
@sha2.update(str)
|
||
self
|
||
end
|
||
alias << update
|
||
def finish
|
||
def finish # :nodoc:
|
||
@sha2.digest!
|
||
end
|
||
private :finish
|
||
# call-seq:
|
||
# digest_obj.block_length -> integer
|
||
#
|
||
# Returns the block length of the digest in bytes.
|
||
#
|
||
# Digest::SHA256.new.digest_length * 8
|
||
# # => 512
|
||
# Digest::SHA384.new.digest_length * 8
|
||
# # => 1024
|
||
# Digest::SHA512.new.digest_length * 8
|
||
# # => 1024
|
||
def block_length
|
||
@sha2.block_length
|
||
end
|
||
# call-seq:
|
||
# digest_obj.digest_length -> integer
|
||
#
|
||
# Returns the length of the hash value of the digest in bytes.
|
||
#
|
||
# Digest::SHA256.new.digest_length * 8
|
||
# # => 256
|
||
# Digest::SHA384.new.digest_length * 8
|
||
# # => 384
|
||
# Digest::SHA512.new.digest_length * 8
|
||
# # => 512
|
||
#
|
||
# This means that, for example, the digests produced by Digest::SHA256 will
|
||
# always be 32 bytes (256 bits) in size.
|
||
def digest_length
|
||
@sha2.digest_length
|
||
end
|
||
# :nodoc:
|
||
def initialize_copy(other)
|
||
def initialize_copy(other) # :nodoc:
|
||
@sha2 = other.instance_eval { @sha2.clone }
|
||
end
|
||
# :nodoc:
|
||
def inspect
|
||
def inspect # :nodoc:
|
||
"#<%s:%d %s>" % [self.class.name, @bitlen, hexdigest]
|
||
end
|
||
end
|