class Eco::Data::Crypto::EncryptedData

Attributes

content[R]
iv[R]
key[R]

Public Class Methods

new(init = {}) click to toggle source
# File lib/eco/data/crypto/encryption.rb, line 214
def initialize(init = {})
  @key = init[:key]
  @iv = init[:iv]
  @content = init[:content]
  @sha = sha256(@content)
  load() if !@key || !@iv
end

Public Instance Methods

load(file = nil) click to toggle source
# File lib/eco/data/crypto/encryption.rb, line 221
def load (file = nil)
  parser = get_parser(file)
  sha64 = Base64.encode64(@sha) if @sha
  if parser.key?(sha64)
    #puts "found key!"
    meta = parser[sha64]
    key64, iv64 = meta.values_at("key", "iv")
    @key = Base64.decode64(key64) if key64
    @iv = Base64.decode64(iv64) if iv64
  else
    #puts "key not found! #{sha64}"
  end
end
save(file = nil) click to toggle source
# File lib/eco/data/crypto/encryption.rb, line 234
def save (file = nil)
  parser = get_parser(file)
  sha64 = Base64.encode64(@sha) if @sha
  #puts "save key: #{sha64}"
  if parser.key?(sha64)
    meta = parser[sha64]
  else
    meta = {key: nil, iv: nil}
    parser[sha64] = meta
  end
  meta[:key] = Base64.encode64(@key) if @key
  meta[:iv] = Base64.encode64(@iv) if @iv
  set_parser(file, parser)
end

Private Instance Methods

get_parser(file = nil) click to toggle source
# File lib/eco/data/crypto/encryption.rb, line 250
def get_parser (file = nil)
  file = PARSER_FILE if !file
  # create the directory unless it exists
  Dir.mkdir(WORKING_DIR) unless Dir.exist?(WORKING_DIR)
  parser = {}
  if File.file?(file)
    fd = File.open(file,"r")
    parser = JSON.load(fd)
    fd.close
  end
  return parser
end
set_parser(file = nil, parser = {}) click to toggle source
# File lib/eco/data/crypto/encryption.rb, line 262
def set_parser (file = nil, parser = {})
  file = PARSER_FILE if !file
  # create the directory unless it exists
  Dir.mkdir(WORKING_DIR) unless Dir.exist?(WORKING_DIR)
  fd = File.open(file,"w")
  fd << parser.to_json
  fd.close
end
sha256(str = nil) click to toggle source
# File lib/eco/data/crypto/encryption.rb, line 270
def sha256 (str = nil)
  sha = OpenSSL::Digest::SHA256.new
  digest = sha.digest(str) unless !str
  sha.reset
  digest
end