exe/ncypher
#!/usr/bin/env ruby
require "ncypher"
begin
Object.const_get("Ncypher")
rescue NameError
require "bundler/setup"
end
if ARGV.empty?
STDERR.puts "Ncypher a credential encryption tool"
STDERR.puts "usage: ncypher generate_key"
STDERR.puts "usage: ncypher derive_key <password> [salt]"
STDERR.puts "usage: ncypher key"
STDERR.puts "usage: ncypher encrypt <text>"
STDERR.puts "usage: ncypher decrypt <text>"
abort
end
cmd = ARGV.shift
case cmd
when "generate_key"
puts Ncypher::Ncypher.new.generate_key
when "derive_key"
password = (ARGV.shift || STDIN.read)
unless password
abort "ncypher derive_key <password> [salt]"
end
salt = File.exist?(".ncypher_salt") ? File.read(".ncypher_salt")&.strip : ARGV.shift
key, used_salt = Ncypher::Ncypher.new.derive_key(password.strip, salt)
STDOUT.puts key
STDERR.puts "SALT: #{used_salt}" # Put salt on stderr so we can do ncypher deriver_key password > .ncypher_key
# and keep salt out of .ncypher_key
when "key"
puts Ncypher::Ncypher.new.key_b64
when "encrypt"
text = (ARGV.shift || STDIN.read)
puts Ncypher::Ncypher.new.encrypt(text.strip)
when "decrypt"
text = (ARGV.shift || STDIN.read)
puts Ncypher::Ncypher.new.decrypt(text.strip)
end