Class: HPKE::HKDF
Instance Attribute Summary collapse
-
#kdf_id ⇒ Object
readonly
Returns the value of attribute kdf_id.
Instance Method Summary collapse
- #expand(prk, info, len) ⇒ Object
- #extract(salt, ikm) ⇒ Object
- #hmac(key, data) ⇒ Object
-
#initialize(kdf_id) ⇒ HKDF
constructor
A new instance of HKDF.
- #labeled_expand(prk, label, info, l, suite_id) ⇒ Object
- #labeled_extract(salt, label, ikm, suite_id) ⇒ Object
- #n_h ⇒ Object
Methods included from Util
Constructor Details
#initialize(kdf_id) ⇒ HKDF
Returns a new instance of HKDF.
13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/hpke/hkdf.rb', line 13 def initialize(kdf_id) case kdf_id when HPKE::HKDF_SHA256 @digest = OpenSSL::Digest.new('SHA256') when HPKE::HKDF_SHA384 @digest = OpenSSL::Digest.new('SHA384') when HPKE::HKDF_SHA512 @digest = OpenSSL::Digest.new('SHA512') else raise Exception.new('Unknown hash algorithm') end @kdf_id = kdf_id end |
Instance Attribute Details
#kdf_id ⇒ Object (readonly)
Returns the value of attribute kdf_id.
7 8 9 |
# File 'lib/hpke/hkdf.rb', line 7 def kdf_id @kdf_id end |
Instance Method Details
#expand(prk, info, len) ⇒ Object
35 36 37 38 39 40 41 42 43 |
# File 'lib/hpke/hkdf.rb', line 35 def (prk, info, len) n = (len.to_f / @digest.digest_length).ceil t = [''] for i in 0..n do t << hmac(prk, t[i] + info + (i + 1).chr) end t_concat = t.join t_concat[0..(len - 1)] end |
#extract(salt, ikm) ⇒ Object
31 32 33 |
# File 'lib/hpke/hkdf.rb', line 31 def extract(salt, ikm) hmac(salt, ikm) end |
#hmac(key, data) ⇒ Object
27 28 29 |
# File 'lib/hpke/hkdf.rb', line 27 def hmac(key, data) OpenSSL::HMAC.digest(@digest, key, data) end |
#labeled_expand(prk, label, info, l, suite_id) ⇒ Object
50 51 52 53 |
# File 'lib/hpke/hkdf.rb', line 50 def (prk, label, info, l, suite_id) labeled_info = i2osp(l, 2) + 'HPKE-v1' + suite_id + label + info (prk, labeled_info, l) end |
#labeled_extract(salt, label, ikm, suite_id) ⇒ Object
45 46 47 48 |
# File 'lib/hpke/hkdf.rb', line 45 def labeled_extract(salt, label, ikm, suite_id) labeled_ikm = 'HPKE-v1' + suite_id + label + ikm extract(salt, labeled_ikm) end |
#n_h ⇒ Object
9 10 11 |
# File 'lib/hpke/hkdf.rb', line 9 def n_h @digest.digest_length end |