Class: SymmetricEncryption::Keystore::Memory

Inherits:
Object
  • Object
show all
Defined in:
lib/symmetric_encryption/keystore/memory.rb

Overview

In Memory Keystore usually used for testing purposes

Direct Known Subclasses

Environment

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key_encrypting_key:, encrypted_key: nil) ⇒ Memory

Stores the Encryption key in a string. Secures the Encryption key by encrypting it with a key encryption key.



38
39
40
41
# File 'lib/symmetric_encryption/keystore/memory.rb', line 38

def initialize(key_encrypting_key:, encrypted_key: nil)
  @encrypted_key      = encrypted_key
  @key_encrypting_key = key_encrypting_key
end

Instance Attribute Details

#encrypted_keyObject (readonly)

Returns the value of attribute encrypted_key.



6
7
8
# File 'lib/symmetric_encryption/keystore/memory.rb', line 6

def encrypted_key
  @encrypted_key
end

#key_encrypting_keyObject

Returns the value of attribute key_encrypting_key.



5
6
7
# File 'lib/symmetric_encryption/keystore/memory.rb', line 5

def key_encrypting_key
  @key_encrypting_key
end

Class Method Details

.generate_data_key(cipher_name:, app_name:, environment:, version: 0, dek: nil, **_args) ⇒ Object

Returns [Hash] a new keystore configuration after generating the data key.

Increments the supplied version number by 1.

Notes:

  • For development and testing purposes only!!

  • Never store the encrypted encryption key in the source code / config file.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/symmetric_encryption/keystore/memory.rb', line 15

def self.generate_data_key(cipher_name:, app_name:, environment:, version: 0, dek: nil, **_args)
  version >= 255 ? (version = 1) : (version += 1)

  kek = SymmetricEncryption::Key.new(cipher_name: cipher_name)
  dek ||= SymmetricEncryption::Key.new(cipher_name: cipher_name)

  encrypted_key = new(key_encrypting_key: kek).write(dek.key)

  {
    keystore:           :memory,
    cipher_name:        cipher_name,
    version:            version,
    encrypted_key:      encrypted_key,
    iv:                 iv,
    key_encrypting_key: {
      key: kek.key,
      iv:  kek.iv
    }
  }
end

Instance Method Details

#readObject

Returns the Encryption key in the clear.



44
45
46
# File 'lib/symmetric_encryption/keystore/memory.rb', line 44

def read
  key_encrypting_key.decrypt(encrypted_key)
end

#write(key) ⇒ Object

Write the encrypted Encryption key to ‘encrypted_key` attribute.



49
50
51
# File 'lib/symmetric_encryption/keystore/memory.rb', line 49

def write(key)
  self.encrypted_key = key_encrypting_key.encrypt(key)
end