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.



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

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:



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

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



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

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

#clearObject



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

def clear
  @keyring.clear
end

#current_keyObject



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

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

#decrypt(message, keyring_id) ⇒ Object



55
56
57
58
# File 'lib/keyring.rb', line 55

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

#encrypt(message, keyring_id = nil) ⇒ Object



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

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