lib/attr_keyring/keyring.rb in attr_keyring-0.1.1 vs lib/attr_keyring/keyring.rb in attr_keyring-0.2.0

- old
+ new

@@ -1,12 +1,11 @@ module AttrKeyring class Keyring - CIPHER_NAME = "AES-128-CBC".freeze - - def initialize(keyring) + def initialize(keyring, encryptor = Encryptor::AES128CBC) + @encryptor = encryptor @keyring = keyring.map do |id, value| - Key.new(id, value) + Key.new(id, value, @encryptor.key_size) end end def current_key @keyring.max_by(&:id) @@ -18,34 +17,21 @@ raise UnknownKey, "key=#{id} is not available on keyring" end def []=(id, value) - @keyring << Key.new(id, value) + @keyring << Key.new(id, value, @encryptor.key_size) end def clear @keyring.clear end def encrypt(message, keyring_id = current_key.id) - cipher = OpenSSL::Cipher.new(CIPHER_NAME) - cipher.encrypt - iv = cipher.random_iv - cipher.iv = iv - cipher.key = self[keyring_id].value - iv + cipher.update(message) + cipher.final + @encryptor.encrypt(self[keyring_id].value, message) end - def decrypt(secret, keyring_id) - decipher = OpenSSL::Cipher.new(CIPHER_NAME) - decipher.decrypt - - iv = secret[0...decipher.iv_len] - encrypted = secret[decipher.iv_len..-1] - - decipher.iv = iv - decipher.key = self[keyring_id].value - decipher.update(encrypted) + decipher.final + def decrypt(message, keyring_id) + @encryptor.decrypt(self[keyring_id].value, message) end end end