class GPG::Engine

Attributes

runner[RW]

Public Class Methods

new(runner = nil) click to toggle source
# File lib/pgp/gpg/engine.rb, line 7
def initialize(runner = nil)
  self.runner = runner || GPG::Runner.new
end

Public Instance Methods

decrypt(encrypted_data, passphrase=nil) click to toggle source
# File lib/pgp/gpg/engine.rb, line 46
def decrypt(encrypted_data, passphrase=nil)
  log("Decrypt")

  validate_gpg_version

  data = ''
  result = false

  GPG::TempPathHelper.create do |path1|
    GPG::TempPathHelper.create do |path2|
      File.write(path1, encrypted_data)
      result = runner.decrypt_file(path1, path2, passphrase)

      data = File.read(path2) if result
    end
  end

  [result, data]
end
delete_all_keys() click to toggle source
# File lib/pgp/gpg/engine.rb, line 108
def delete_all_keys
  delete_all_private_keys
  delete_all_public_keys
end
delete_all_private_keys() click to toggle source
# File lib/pgp/gpg/engine.rb, line 113
def delete_all_private_keys
  log('Delete all private keys')
  validate_gpg_version
  runner.read_private_key_fingerprints.each do |k|
    runner.delete_private_key k
  end
end
delete_all_public_keys() click to toggle source
# File lib/pgp/gpg/engine.rb, line 121
def delete_all_public_keys
  log('Delete all public keys')
  validate_gpg_version
  runner.read_public_key_fingerprints.each do |k|
    runner.delete_public_key k
  end
end
encrypt(plaintext_data, recipients) click to toggle source
# File lib/pgp/gpg/engine.rb, line 66
def encrypt(plaintext_data, recipients)
  log("Encrypt")

  raise 'Recipients cannot be empty' if recipients.empty?

  validate_gpg_version

  data = ''
  result = false

  GPG::TempPathHelper.create do |path1|
    GPG::TempPathHelper.create do |path2|
      File.write(path1, plaintext_data)
      result = runner.encrypt_file(path1, path2, recipients)

      data = File.read(path2) if result
    end
  end

  [result, data]
end
import_key(key_contents) click to toggle source
# File lib/pgp/gpg/engine.rb, line 11
def import_key(key_contents)
  log("Import Key")

  validate_gpg_version

  result = []

  GPG::TempPathHelper.create do |path1|
    File.write(path1, key_contents)
    result = runner.import_key_from_file(path1)
  end

  result
end
read_recipients() click to toggle source
# File lib/pgp/gpg/engine.rb, line 129
def read_recipients
  validate_gpg_version
  public_recipients = runner.read_public_key_recipients
  private_recipients = runner.read_private_key_recipients
  (public_recipients + private_recipients).uniq
end
sign(plaintext_data, passphrase=nil) click to toggle source
# File lib/pgp/gpg/engine.rb, line 88
def sign(plaintext_data, passphrase=nil)
  log("Sign")

  validate_gpg_version

  data = ''
  result = false

  GPG::TempPathHelper.create do |path1|
    GPG::TempPathHelper.create do |path2|
      File.write(path1, plaintext_data)
      result = runner.sign_file(path1, path2, passphrase)

      data = File.read(path2) if result
    end
  end

  [result, data]
end
verify_signature(signature_data) click to toggle source
# File lib/pgp/gpg/engine.rb, line 26
def verify_signature(signature_data)
  log("Verify Signature")

  validate_gpg_version

  data = ''
  result = false

  GPG::TempPathHelper.create do |path1|
    GPG::TempPathHelper.create do |path2|
      File.write(path1, signature_data)
      result = runner.verify_signature_file(path1, path2)

      data = File.read(path2) if result
    end
  end

  [result, data]
end

Protected Instance Methods

validate_gpg_version() click to toggle source
# File lib/pgp/gpg/engine.rb, line 138
def validate_gpg_version
  raise 'GPG Version is incorrect' unless runner.version_default.start_with?('2.')
end