Class: Keyring::Base

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

Instance Method Summary collapse

Constructor Details

#initialize(keyring, encryptor) ⇒ Base

Returns a new instance of Base.



17
18
19
20
21
22
# File 'lib/keyring.rb', line 17

def initialize(keyring, encryptor)
  @encryptor = encryptor
  @keyring = keyring.map do |id, value|
    Key.new(id, value, @encryptor.key_size)
  end
end

Instance Method Details

#[](id) ⇒ Object

Raises:



28
29
30
31
32
33
34
35
# File 'lib/keyring.rb', line 28

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



37
38
39
# File 'lib/keyring.rb', line 37

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

#clearObject



41
42
43
# File 'lib/keyring.rb', line 41

def clear
  @keyring.clear
end

#current_keyObject



24
25
26
# File 'lib/keyring.rb', line 24

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

#decrypt(message, keyring_id) ⇒ Object



57
58
59
60
# File 'lib/keyring.rb', line 57

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

#encrypt(message, keyring_id = nil) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/keyring.rb', line 45

def encrypt(message, keyring_id = nil)
  keyring_id ||= current_key&.id
  digest = Digest::SHA1.hexdigest(message)
  key = self[keyring_id]

  [
    @encryptor.encrypt(key, message),
    keyring_id,
    digest
  ]
end