Class: Encrypt

Inherits:
Object
  • Object
show all
Defined in:
lib/rapid-vaults/encrypt.rb

Overview

encrypts strings using supplied encryption settings

Class Method Summary collapse

Class Method Details

.gpgme(settings) ⇒ Object

encrypts a string with gpgme



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/rapid-vaults/encrypt.rb', line 27

def self.gpgme(settings)
  require 'gpgme'

  # check if GPGHOME env was set
  puts "Environment variable 'GNUPGHOME' was not set. Files in #{Dir.home}/.gnupg will be used for authentication." unless ENV.fetch('GNUPGHOME', false)

  # setup the encryption parameters
  crypto = GPGME::Crypto.new(armor: true, pinentry_mode: GPGME::PINENTRY_MODE_LOOPBACK)

  # output the encryption and associated tag
  case settings[:ui]
  when :cli
    # output to file
    File.write("#{settings[:outdir]}encrypted.txt", crypto.encrypt(settings[:file], symmetric: true, password: settings[:pw]).read)
    puts "Your encrypted.txt for this encryption has been generated in #{settings[:outdir]}."
  when :api
    # return as string
    crypto.encrypt(settings[:file], symmetric: true, password: settings[:pw]).read
  end
end

.openssl(settings) ⇒ Object

encrypts a string with openssl



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/rapid-vaults/encrypt.rb', line 4

def self.openssl(settings)
  require 'openssl'

  # setup the encryption parameters
  cipher = OpenSSL::Cipher.new('aes-256-gcm').encrypt
  cipher.key = settings[:key]
  cipher.iv = settings[:nonce]
  cipher.auth_data = settings.key?(:pw) ? settings[:pw] : ''

  # output the encryption and associated tag
  case settings[:ui]
  when :cli
    # output to file
    File.write("#{settings[:outdir]}encrypted.txt", cipher.update(settings[:file]) + cipher.final)
    File.write("#{settings[:outdir]}tag.txt", cipher.auth_tag)
    puts "Your encrypted.txt and associated tag.txt for this encryption have been generated in #{settings[:outdir]}."
  when :api
    # return as array
    [cipher.update(settings[:file]) + cipher.final, cipher.auth_tag]
  end
end