Module: CcipherFactory::SymKeyGenerator

Includes:
TR::CondUtils
Defined in:
lib/ccipher_factory/symkey/symkey_generator.rb

Defined Under Namespace

Classes: SymKeyGeneratorError

Class Method Summary collapse

Class Method Details

.derive(keytype, keysize, *args, &block) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/ccipher_factory/symkey/symkey_generator.rb', line 45

def self.derive(keytype, keysize, *args, &block)
  raise SymKeyGeneratorError, "Unsupported symmetric key algo '#{keytype}'. Supported symmetric keys are: #{supported_symkey.keys.join(", ")}" if not supported_symkey.keys.include?(keytype)

  raise SymKeyGeneratorError, "Block is required" if not block

  kdf = block.call(:kdf)
  kdf = :scrypt if is_empty?(kdf)

  pass = block.call(:password)
  raise SymKeyGeneratorError, "Password is not given to derive the symkey" if is_empty?(pass)

  dsk = DerivedSymKey.new(keytype, keysize) 
  dsk.derive(pass, kdf, &block)
  dsk
end

.generate(keytype, keysize, *args, &block) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/ccipher_factory/symkey/symkey_generator.rb', line 32

def self.generate(keytype, keysize, *args, &block)
  raise SymKeyGeneratorError, "Unsupported symmetric key algo '#{keytype}'. Supported symmetric keys are: #{supported_symkey.keys.join(", ")}" if not supported_symkey.keys.include?(keytype)

  kc = Ccrypto::KeyConfig.new
  kc.algo = keytype
  kc.keysize = keysize
  ke = Ccrypto::AlgoFactory.engine(Ccrypto::KeyConfig)
  sk = ke.generate(kc)

  #SoftSymKey.new(keytype, keysize, SecureRandom.random_bytes(keysize/8))
  SoftSymKey.new(keytype, keysize, sk)
end

.loggerObject



61
62
63
64
65
66
67
# File 'lib/ccipher_factory/symkey/symkey_generator.rb', line 61

def self.logger
  if @logger.nil?
    @logger = Tlogger.new
    @logger.tag = :symkey_gen
  end
  @logger
end

.supported_symkeyObject



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/ccipher_factory/symkey/symkey_generator.rb', line 14

def self.supported_symkey
  #{ 
  #  aes: [[128, 256], [:cbc, :cfb, :ctr, :ofb, :gcm]], 
  #  chacha20: [[256],[:poly1305]], 
  #  blowfish: [[128],[:ecb, :cbc, :cfb, :ofb]],
  #  camellia: [[128,192,256],[:ecb, :cbc, :cfb, :ofb, :ctr]],
  #  aria: [[128,192,256],[:ecb, :cbc, :cfb, :ofb, :ctr, :gcm]]
  #}
  { 
    aes: { keysize: [128, 192, 256], mode: [:cbc, :cfb, :ctr, :ofb, :gcm] }, 
    chacha20: { keysize: [256], mode: [:poly1305] }, 
    blowfish: { keysize: [128], mode: [:ecb, :cbc, :cfb, :ofb] },
    camellia: { keysize: [128, 192, 256], mode: [:ecb, :cbc, :cfb, :ofb, :ctr] },
    aria: { keysize: [128, 192, 256], mode: [:ecb, :cbc, :cfb, :ofb, :ctr, :gcm] }
  }.freeze

end