Module: DRBG::HMAC
- Defined in:
- lib/drbg-rb/hmac.rb
Instance Method Summary collapse
- #generate(num_bytes, sec_level = 256) ⇒ Object
- #initialize(entropy, sec_level = 256, personalization_string = "") ⇒ Object
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 |