lib/rapid-vaults/decrypt.rb in rapid-vaults-1.0.0 vs lib/rapid-vaults/decrypt.rb in rapid-vaults-1.1.0

- old
+ new

@@ -1,27 +1,46 @@ -require 'openssl' - # decrypts strings using supplied decryption settings class Decrypt - # decrypts a string - def self.main(settings) + # decrypts a string with openssl + def self.openssl(settings) + require 'openssl' + # check tag size raise 'Tag is not 16 bytes.' unless settings[:tag].bytesize == 16 # setup the decryption parameters decipher = OpenSSL::Cipher.new('aes-256-gcm').decrypt decipher.key = settings[:key] decipher.iv = settings[:nonce] decipher.auth_tag = settings[:tag] decipher.auth_data = settings.key?(:pw) ? settings[:pw] : '' - # output the decrypted file + # output the decryption if settings[:ui] == :cli # output to file File.write('decrypted.txt', decipher.update(settings[:file]) + decipher.final) puts 'Your decrypted.txt has been written out to the current directory.' elsif settings[:ui] == :api # output to string decipher.update(settings[:file]) + decipher.final + end + end + + # decrypts a string with gpgme + def self.gpgme(settings) + require 'gpgme' + + # setup the decryption parameters + encrypted = GPGME::Data.new(settings[:file]) + crypto = GPGME::Crypto.new(armor: true, pinentry_mode: GPGME::PINENTRY_MODE_LOOPBACK) + + # output the decryption + if settings[:ui] == :cli + # output to file + File.write('decrypted.txt', crypto.decrypt(encrypted, password: settings[:pw]).read) + puts 'Your decrypted.txt has been written out to the current directory.' + elsif settings[:ui] == :api + # output to string + crypto.decrypt(encrypted, password: settings[:pw]).read end end end