class Ncipher::Ncipher

Public Class Methods

decrypt(cyphertext_b64) click to toggle source
# File lib/ncipher.rb, line 38
def self.decrypt(cyphertext_b64)
  Ncipher.new.decrypt cyphertext_b64
end
encrypt(plaintext) click to toggle source
# File lib/ncipher.rb, line 42
def self.encrypt(plaintext)
  Ncipher.new.encrypt plaintext
end
generate_key() click to toggle source
# File lib/ncipher.rb, line 46
def self.generate_key
  Ncipher.new.generate_key
end
key() click to toggle source
# File lib/ncipher.rb, line 50
def self.key
  Ncipher.new.key
end
key_b64() click to toggle source
# File lib/ncipher.rb, line 54
def self.key_b64
  Ncipher.new.key_b64
end
new(key_filename: '.ncipher_key') click to toggle source
# File lib/ncipher.rb, line 11
def initialize(key_filename: '.ncipher_key')
  @key_filename = key_filename
end

Public Instance Methods

decrypt(ciphertext_b64) click to toggle source
# File lib/ncipher.rb, line 15
def decrypt(ciphertext_b64)
  box.decrypt(Base64.strict_decode64(ciphertext_b64.strip))
end
encrypt(plaintext) click to toggle source
# File lib/ncipher.rb, line 19
def encrypt(plaintext)
  Base64.strict_encode64(box.encrypt(plaintext))
end
generate_key() click to toggle source
# File lib/ncipher.rb, line 23
def generate_key
  generated_key = RbNaCl::Random.random_bytes(RbNaCl::SecretBox.key_bytes)
  Base64.strict_encode64(generated_key)
end
key() click to toggle source
# File lib/ncipher.rb, line 28
def key
  saved_key = ENV['NCIPHER_KEY'] || find_keyfile
  abort "Can't find .ncipher_key file or NCIPHER_KEY env variable" if saved_key.nil?
  Base64.strict_decode64(saved_key.strip)
end
key_b64() click to toggle source
# File lib/ncipher.rb, line 34
def key_b64
  Base64.strict_encode64 key
end

Private Instance Methods

box() click to toggle source
# File lib/ncipher.rb, line 59
def box
  RbNaCl::SimpleBox.from_secret_key(key)
end
find_keyfile(folder: '.') click to toggle source
# File lib/ncipher.rb, line 63
def find_keyfile(folder: '.')
  path = "#{folder}/#{@key_filename}"
  return File.read(path) if File.exist?(path)
  return nil if folder == '/'
  folder = File.expand_path("#{folder}/../")
  find_keyfile(folder: folder)
end