Class: HMAC::Base
- Inherits:
-
Object
show all
- Defined in:
- lib/hmac/hmac.rb
Instance Method Summary
collapse
Constructor Details
#initialize(algorithm, block_size, output_length, key) ⇒ Base
Returns a new instance of Base.
16
17
18
19
20
21
22
23
24
|
# File 'lib/hmac/hmac.rb', line 16
def initialize(algorithm, block_size, output_length, key)
@algorithm = algorithm
@block_size = block_size
@output_length = output_length
@status = STATUS_UNDEFINED
@key_xor_ipad = ''
@key_xor_opad = ''
set_key(key) unless key.nil?
end
|
Instance Method Details
#digest ⇒ Object
74
75
76
77
|
# File 'lib/hmac/hmac.rb', line 74
def digest
check_status
@md.digest
end
|
#hexdigest ⇒ Object
79
80
81
82
|
# File 'lib/hmac/hmac.rb', line 79
def hexdigest
check_status
@md.hexdigest
end
|
#reset_key ⇒ Object
51
52
53
54
55
56
57
|
# File 'lib/hmac/hmac.rb', line 51
def reset_key
@key_xor_ipad.gsub!(/./, '?')
@key_xor_opad.gsub!(/./, '?')
@key_xor_ipad[0..-1] = ''
@key_xor_opad[0..-1] = ''
@status = STATUS_UNDEFINED
end
|
#set_key(key) ⇒ Object
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/hmac/hmac.rb', line 35
def set_key(key)
key = @algorithm.digest(key) if key.size > @block_size
key_xor_ipad = "\x36" * @block_size
key_xor_opad = "\x5C" * @block_size
for i in 0 .. key.size - 1
key_xor_ipad[i] ^= key[i]
key_xor_opad[i] ^= key[i]
end
@key_xor_ipad = key_xor_ipad
@key_xor_opad = key_xor_opad
@md = @algorithm.new
@status = STATUS_INITIALIZED
end
|
#to_s ⇒ Object
83
84
85
86
|
# File 'lib/hmac/hmac.rb', line 83
def hexdigest
check_status
@md.hexdigest
end
|
#update(text) ⇒ Object
Also known as:
<<
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/hmac/hmac.rb', line 59
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
|