Class: Ccrypto::Ruby::PBKDF2Engine

Inherits:
Object
  • Object
show all
Includes:
DataConversion, TR::CondUtils
Defined in:
lib/ccrypto/ruby/engines/pbkdf2_engine.rb

Instance Method Summary collapse

Methods included from DataConversion

#from_b64, #from_hex, included, #to_b64, #to_hex, #to_int_array

Constructor Details

#initialize(conf, &block) ⇒ PBKDF2Engine

Returns a new instance of PBKDF2Engine.

Raises:

  • (KDFEngineException)


10
11
12
13
14
15
16
17
18
# File 'lib/ccrypto/ruby/engines/pbkdf2_engine.rb', line 10

def initialize(conf, &block)
  raise KDFEngineException, "PBKDF2 config is expected" if not conf.is_a?(Ccrypto::PBKDF2Config)
  raise KDFEngineException, "Output bit length (outBitLength) value is not given or not a positive value (#{conf.outBitLength})" if is_empty?(conf.outBitLength) or conf.outBitLength <= 0

  @config = conf
  if is_empty?(@config.salt)
    @config.salt = SecureRandom.random_bytes(16)
  end
end

Instance Method Details

#derive(input, output = :binary) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/ccrypto/ruby/engines/pbkdf2_engine.rb', line 20

def derive(input, output = :binary)

  @config.digest = default_digest if is_empty?(@config.digest)
  digest = init_digest(@config.digest)

  logger.debug "Digest : #{@config.digest}"
  logger.debug "Iterations : #{@config.iter}"
  logger.debug "Out byte length : #{@config.outBitLength/8}"

  res = OpenSSL::KDF.pbkdf2_hmac(input, salt: @config.salt, iterations: @config.iter, length: @config.outBitLength/8, hash: digest)  

  case output
  when :hex
    to_hex(res)
  when :b64
    to_b64(res)
  else
    res
  end
end