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