class PasswordVault::Vault

Public Class Methods

new(key) click to toggle source
# File lib/password_vault/vault.rb, line 6
def initialize(key)
  @key = Digest::SHA512.digest(key)
end

Public Instance Methods

delete_password(name) click to toggle source
# File lib/password_vault/vault.rb, line 19
def delete_password(name)
  if p = get_password(name)
    @passwords -= [p]
  end
end
dump() click to toggle source
# File lib/password_vault/vault.rb, line 42
def dump
  Marshal.dump(passwords)
end
get_password(name) click to toggle source
# File lib/password_vault/vault.rb, line 14
def get_password(name)
  found = @passwords.select {|p| p.name == name }
  found.first
end
lock() click to toggle source
# File lib/password_vault/vault.rb, line 33
def lock
  crypt(:encrypt, dump)
end
passwords() click to toggle source
# File lib/password_vault/vault.rb, line 10
def passwords
  @passwords ||= []
end
read() click to toggle source
# File lib/password_vault/vault.rb, line 29
def read
  unlock File.read(PasswordVault::VaultFile)
end
unlock(data) click to toggle source
# File lib/password_vault/vault.rb, line 37
def unlock(data)
  dump = crypt(:decrypt, data)
  @passwords = Marshal.load(dump)
end
write() click to toggle source
# File lib/password_vault/vault.rb, line 25
def write
  File.open(PasswordVault::VaultFile, 'w') {|f| f.write(lock) }
end

Private Instance Methods

crypt(mode, data) click to toggle source
# File lib/password_vault/vault.rb, line 47
def crypt(mode, data)
  cipher = OpenSSL::Cipher.new 'AES256'
  cipher.send mode
  cipher.key = @key
  cipher.update(data) << cipher.final
end