Class: GPG::Engine

Inherits:
Object
  • Object
show all
Includes:
PGP::LogCapable
Defined in:
lib/pgp/gpg/engine.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from PGP::LogCapable

#log

Constructor Details

#initialize(runner = nil) ⇒ Engine

Returns a new instance of Engine.



7
8
9
# File 'lib/pgp/gpg/engine.rb', line 7

def initialize(runner = nil)
  self.runner = runner || GPG::Runner.new
end

Instance Attribute Details

#runnerObject

Returns the value of attribute runner.



5
6
7
# File 'lib/pgp/gpg/engine.rb', line 5

def runner
  @runner
end

Instance Method Details

#decrypt(encrypted_data, passphrase = nil) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# 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_keysObject



108
109
110
111
# File 'lib/pgp/gpg/engine.rb', line 108

def delete_all_keys
  delete_all_private_keys
  delete_all_public_keys
end

#delete_all_private_keysObject



113
114
115
116
117
118
119
# 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_keysObject



121
122
123
124
125
126
127
# 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) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# 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) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 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_recipientsObject



129
130
131
132
133
134
# 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) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# 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) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 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