Method: ECIES::Crypt#kdf
- Defined in:
- lib/ecies/crypt.rb
#kdf(shared_secret, length, shared_info_suffix) ⇒ String
Key-derivation function, compatible with ANSI-X9.63-KDF
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/ecies/crypt.rb', line 125 def kdf(shared_secret, length, shared_info_suffix) length >=0 or raise "length cannot be negative" return "" if length == 0 if length / @kdf_digest.digest_length >= 0xFF_FF_FF_FF raise "length too large" end io = StringIO.new(String.new) counter = 0 loop do counter += 1 counter_bytes = [counter].pack('N') io << @kdf_digest.digest(shared_secret + counter_bytes + @kdf_shared_info + shared_info_suffix) if io.pos >= length return io.string.byteslice(0, length) end end end |