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