Class: Keyring::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/keyring.rb

Instance Method Summary collapse

Constructor Details

#initialize(keyring, options) ⇒ Base

Returns a new instance of Base.



25
26
27
28
29
30
31
# 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

Instance Method Details

#[](id) ⇒ Object

Raises:



37
38
39
40
41
42
43
44
# 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) ⇒ Object



46
47
48
# File 'lib/keyring.rb', line 46

def []=(id, key)
  @keyring << Key.new(id, key, @encryptor.key_size)
end

#clearObject



50
51
52
# File 'lib/keyring.rb', line 50

def clear
  @keyring.clear
end

#current_keyObject



33
34
35
# File 'lib/keyring.rb', line 33

def current_key
  @keyring.max_by(&:id)
end

#decrypt(message, keyring_id) ⇒ Object



65
66
67
68
# File 'lib/keyring.rb', line 65

def decrypt(message, keyring_id)
  key = self[keyring_id]
  @encryptor.decrypt(key, message)
end

#digest(message) ⇒ Object



70
71
72
# File 'lib/keyring.rb', line 70

def digest(message)
  Digest::SHA1.hexdigest("#{message}#{@digest_salt}")
end

#encrypt(message, keyring_id = nil) ⇒ Object



54
55
56
57
58
59
60
61
62
63
# 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