Class: HMAC::Base
Instance Method Summary
collapse
Constructor Details
#initialize(algorithm, block_size, output_length, key) ⇒ Base
Returns a new instance of Base.
23
24
25
26
27
28
29
30
31
|
# File 'lib/extensions/hmac/hmac.rb', line 23
def initialize(algorithm, block_size, output_length, key)
@algorithm = algorithm
@block_size = block_size
@output_length = output_length
@initialized = false
@key_xor_ipad = ''
@key_xor_opad = ''
set_key(key) unless key.nil?
end
|
Instance Method Details
82
83
84
85
|
# File 'lib/extensions/hmac/hmac.rb', line 82
def digest
check_status
@md.digest
end
|
#hexdigest ⇒ Object
87
88
89
90
|
# File 'lib/extensions/hmac/hmac.rb', line 87
def hexdigest
check_status
@md.hexdigest
end
|
#reset_key ⇒ Object
59
60
61
62
63
64
65
|
# File 'lib/extensions/hmac/hmac.rb', line 59
def reset_key
@key_xor_ipad.gsub!(/./, '?')
@key_xor_opad.gsub!(/./, '?')
@key_xor_ipad[0..-1] = ''
@key_xor_opad[0..-1] = ''
@initialized = false
end
|
#set_key(key) ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/extensions/hmac/hmac.rb', line 42
def set_key(key)
key = @algorithm.digest(key) if key.size > @block_size
akey = key.unpack("C*")
key_xor_ipad = ("\x36" * @block_size).unpack("C*")
key_xor_opad = ("\x5C" * @block_size).unpack("C*")
for i in 0 .. akey.size - 1
key_xor_ipad[i] ^= akey[i]
key_xor_opad[i] ^= akey[i]
end
@key_xor_ipad = key_xor_ipad.pack("C*")
@key_xor_opad = key_xor_opad.pack("C*")
@md = @algorithm.new
@initialized = true
end
|
91
92
93
94
|
# File 'lib/extensions/hmac/hmac.rb', line 91
def hexdigest
check_status
@md.hexdigest
end
|
#update(text) ⇒ Object
Also known as:
<<
67
68
69
70
71
72
73
74
75
76
77
78
79
|
# File 'lib/extensions/hmac/hmac.rb', line 67
def update(text)
check_status
md = @algorithm.new
md.update(@key_xor_ipad)
md.update(text)
str = md.digest
md = @algorithm.new
md.update(@key_xor_opad)
md.update(str)
@md = md
end
|