In Files

Parent

Class Index [+]

Quicksearch

HMAC::Base

Private Class Methods

digest(key, text) click to toggle source

These two class methods below are safer than using above instance methods combinatorially because an instance will have held a key even if it’s no longer in use.

     # File lib/hmac.rb, line 96
 96:     def Base.digest(key, text)
 97:       hmac = self.new(key)
 98:       begin
 99:         hmac.update(text)
100:         hmac.digest
101:       ensure
102:         hmac.reset_key
103:       end
104:     end
hexdigest(key, text) click to toggle source
     # File lib/hmac.rb, line 106
106:     def Base.hexdigest(key, text)
107:       hmac = self.new(key)
108:       begin
109:         hmac.update(text)
110:         hmac.hexdigest
111:       ensure
112:         hmac.reset_key
113:       end
114:     end
new(algorithm, block_size, output_length, key) click to toggle source
    # File lib/hmac.rb, line 23
23:     def initialize(algorithm, block_size, output_length, key)
24:       @algorithm = algorithm
25:       @block_size = block_size
26:       @output_length = output_length
27:       @initialized = false
28:       @key_xor_ipad = ''
29:       @key_xor_opad = ''
30:       set_key(key) unless key.nil?
31:     end

Public Instance Methods

<<(text) click to toggle source
Alias for: update
digest() click to toggle source
    # File lib/hmac.rb, line 82
82:     def digest
83:       check_status
84:       @md.digest
85:     end
hexdigest() click to toggle source
    # File lib/hmac.rb, line 87
87:     def hexdigest
88:       check_status
89:       @md.hexdigest
90:     end
Also aliased as: to_s
reset_key() click to toggle source
    # File lib/hmac.rb, line 59
59:     def reset_key
60:       @key_xor_ipad.gsub!(/./, '?')
61:       @key_xor_opad.gsub!(/./, '?')
62:       @key_xor_ipad[0..1] = ''
63:       @key_xor_opad[0..1] = ''
64:       @initialized = false
65:     end
set_key(key) click to toggle source
    # File lib/hmac.rb, line 42
42:     def set_key(key)
43:       # If key is longer than the block size, apply hash function
44:       # to key and use the result as a real key.
45:       key = @algorithm.digest(key) if key.size > @block_size
46:       akey = key.unpack("C*")
47:       key_xor_ipad = ("\x36" * @block_size).unpack("C*")
48:       key_xor_opad = ("\x5C" * @block_size).unpack("C*")
49:       for i in 0 .. akey.size - 1
50:         key_xor_ipad[i] ^= akey[i]
51:         key_xor_opad[i] ^= akey[i]
52:       end
53:       @key_xor_ipad = key_xor_ipad.pack("C*")
54:       @key_xor_opad = key_xor_opad.pack("C*")
55:       @md = @algorithm.new
56:       @initialized = true
57:     end
to_s() click to toggle source
Alias for: hexdigest
update(text) click to toggle source
    # File lib/hmac.rb, line 67
67:     def update(text)
68:       check_status
69:       # perform inner H
70:       md = @algorithm.new
71:       md.update(@key_xor_ipad)
72:       md.update(text)
73:       str = md.digest
74:       # perform outer H
75:       md = @algorithm.new
76:       md.update(@key_xor_opad)
77:       md.update(str)
78:       @md = md
79:     end
Also aliased as: <<

Private Instance Methods

check_status() click to toggle source
    # File lib/hmac.rb, line 34
34:     def check_status
35:       unless @initialized
36:         raise RuntimeError,
37:         "The underlying hash algorithm has not yet been initialized."
38:       end
39:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.