class Keyring::Base
Public Class Methods
new(keyring, options)
click to toggle source
# File lib/keyring.rb, line 25 def initialize(keyring, options) @encryptor = options[:encryptor] @digest_salt = options[:digest_salt] @keyring = keyring.map do |id, value| Key.new(id, value, @encryptor.key_size) end end
Public Instance Methods
[](id)
click to toggle source
# File lib/keyring.rb, line 37 def [](id) raise EmptyKeyring, "keyring doesn't have any keys" if @keyring.empty? key = @keyring.find {|k| k.id == id.to_i } return key if key raise UnknownKey, "key=#{id} is not available on keyring" end
[]=(id, key)
click to toggle source
# File lib/keyring.rb, line 46 def []=(id, key) @keyring << Key.new(id, key, @encryptor.key_size) end
clear()
click to toggle source
# File lib/keyring.rb, line 50 def clear @keyring.clear end
current_key()
click to toggle source
# File lib/keyring.rb, line 33 def current_key @keyring.max_by(&:id) end
decrypt(message, keyring_id)
click to toggle source
# File lib/keyring.rb, line 65 def decrypt(message, keyring_id) key = self[keyring_id] @encryptor.decrypt(key, message) end
digest(message)
click to toggle source
# File lib/keyring.rb, line 70 def digest(message) Digest::SHA1.hexdigest("#{message}#{@digest_salt}") end
encrypt(message, keyring_id = nil)
click to toggle source
# File lib/keyring.rb, line 54 def encrypt(message, keyring_id = nil) keyring_id ||= current_key&.id key = self[keyring_id] [ @encryptor.encrypt(key, message), keyring_id, digest(message) ] end