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.



14
15
16
17
18
19
# File 'lib/keyring.rb', line 14

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:



25
26
27
28
29
30
31
32
# File 'lib/keyring.rb', line 25

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, value) ⇒ Object



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

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

#clearObject



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

def clear
  @keyring.clear
end

#current_keyObject



21
22
23
# File 'lib/keyring.rb', line 21

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

#decrypt(message, keyring_id) ⇒ Object



53
54
55
# File 'lib/keyring.rb', line 53

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

#encrypt(message, keyring_id = nil) ⇒ Object



42
43
44
45
46
47
48
49
50
51
# File 'lib/keyring.rb', line 42

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

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