Module: DRBG::HMAC

Defined in:
lib/drbg-rb/hmac.rb

Instance Method Summary collapse

Instance Method Details

#generate(num_bytes, sec_level = 256) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/drbg-rb/hmac.rb', line 36

def generate(num_bytes, sec_level=256)
  
  if num_bytes * 8 > 7500
    raise 'generate cannot generate more than 7500 bits in a single call'
  end
  
  if sec_level > @sec_level
    raise 'sec_level exceeds this instance\'s security_strength'
  end
  
  return if @reseed_counter >= 10000

  temp = ''

  while temp.size < num_bytes
    @V = hmac(@K, @V)
    temp += @V
  end

  self._update(nil)
  @reseed_counter += 1

  temp

end

#initialize(entropy, sec_level = 256, personalization_string = "") ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/drbg-rb/hmac.rb', line 3

def initialize(entropy, sec_level=256, personalization_string="")

  if sec_level > 256
    raise 'sec_level cannot exceed 256 bits'
  end

  if personalization_string.size * 8 > 256
    raise 'personalization_string cannot exceed 256 bits'
  end
  
  if sec_level <= 112
    @security_strength = 112
  elsif sec_level <= 128
    @sec_level = 128
  elsif sec_level <= 192
    @sec_level = 192
  else
    @sec_level = 256
  end

  if (entropy.size * 8 * 2) < (3 * @sec_level)
    raise 'entropy must be at least ' + (1.5 * @sec_level).to_s + ' bits'
  end

  if entropy.size * 8 > 1000
    raise 'entropy cannot exceed 1000 bits'
  end

  _instantiate(entropy, personalization_string)

end