gpgme 2.0.16 → 2.0.22

Sign up to get free protection for your applications and to get access to all the features.
data/lib/gpgme/crypto.rb CHANGED
@@ -129,7 +129,7 @@ module GPGME
129
129
  # * +:output+ if specified, it will write the output into it. It will
130
130
  # me converted to a {GPGME::Data} object, so it can also be a file,
131
131
  # for example.
132
- # * If the file was encrypted with symmentric encryption, must provide
132
+ # * If the file was encrypted with symmetric encryption, must provide
133
133
  # a :password option.
134
134
  # * Any other option accepted by {GPGME::Ctx.new}
135
135
  #
data/lib/gpgme/ctx.rb CHANGED
@@ -370,8 +370,8 @@ module GPGME
370
370
  #
371
371
  # If passed, the key will be exported to +keydata+, which must be
372
372
  # a {GPGME::Data} object.
373
- def export_keys(recipients, keydata = Data.new)
374
- err = GPGME::gpgme_op_export(self, recipients, 0, keydata)
373
+ def export_keys(recipients, keydata = Data.new, mode=0)
374
+ err = GPGME::gpgme_op_export(self, recipients, mode, keydata)
375
375
  exc = GPGME::error_to_exception(err)
376
376
  raise exc if exc
377
377
  keydata
@@ -517,6 +517,7 @@ keylist_mode=#{KEYLIST_MODE_NAMES[keylist_mode]}>"
517
517
 
518
518
  def self.pass_function(pass, uid_hint, passphrase_info, prev_was_bad, fd)
519
519
  io = IO.for_fd(fd, 'w')
520
+ io.autoclose = false
520
521
  io.puts pass
521
522
  io.flush
522
523
  end
data/lib/gpgme/data.rb CHANGED
@@ -165,8 +165,16 @@ module GPGME
165
165
  end
166
166
 
167
167
  ##
168
- # Sets the encoding for this buffer. Accepts only values in one of the
169
- # DATA_ENCODING_* constants.
168
+ # Sets the encoding for this buffer. Accepts only integer values 0 to 7:
169
+ #
170
+ # 0 = GPGME_DATA_ENCODING_NONE (Not specified)
171
+ # 1 = GPGME_DATA_ENCODING_BINARY
172
+ # 2 = GPGME_DATA_ENCODING_BASE64
173
+ # 3 = GPGME_DATA_ENCODING_ARMOR (Either PEM or OpenPGP Armor)
174
+ # 4 = GPGME_DATA_ENCODING_URL (LF delimited URL list)
175
+ # 5 = GPGME_DATA_ENCODING_URLESC (Ditto, but percent escaped)
176
+ # 6 = GPGME_DATA_ENCODING_URL0 (Nul delimited URL list)
177
+ # 7 = GPGME_DATA_ENCODING_MIME (Data is a MIME part)
170
178
  #
171
179
  # @raise [GPGME::Error::InvalidValue] if the value isn't accepted.
172
180
  def encoding=(encoding)
data/lib/gpgme/engine.rb CHANGED
@@ -52,7 +52,7 @@ module GPGME
52
52
  # The directory name of the configuration directory.
53
53
  #
54
54
  # @example
55
- # GPGME::Engine.set
55
+ # GPGME::Engine.set_info(GPGME::PROTOCOL_OpenPGP, '/usr/local/bin/gpg', home_dir)
56
56
  #
57
57
  def set_info(proto, file_name, home_dir)
58
58
  err = GPGME::gpgme_set_engine_info(proto, file_name, home_dir)
data/lib/gpgme/key.rb CHANGED
@@ -81,6 +81,7 @@ module GPGME
81
81
  # @param [Hash] options
82
82
  # * +:output+ specify where to write the key to. It will be converted to
83
83
  # a {GPGME::Data}, so it could be a file, for example.
84
+ # * +:minimal+ set to true to let the export mode be 'minimal'.
84
85
  # * Any other option accepted by {GPGME::Ctx.new}
85
86
  #
86
87
  # @return [GPGME::Data] the exported key.
@@ -94,9 +95,14 @@ module GPGME
94
95
  #
95
96
  def export(pattern, options = {})
96
97
  output = Data.new(options[:output])
98
+ if options.delete(:minimal) == true
99
+ export_mode = 4
100
+ else
101
+ export_mode = 0
102
+ end
97
103
 
98
104
  GPGME::Ctx.new(options) do |ctx|
99
- ctx.export_keys(pattern, output)
105
+ ctx.export_keys(pattern, output, export_mode)
100
106
  end
101
107
 
102
108
  output.seek(0)
@@ -122,6 +128,12 @@ module GPGME
122
128
  ctx.import_result
123
129
  end
124
130
  end
131
+
132
+ # Checks if a key is valid
133
+ def valid?(key)
134
+ GPGME::Key.import(key).considered == 1
135
+ end
136
+
125
137
  end
126
138
 
127
139
  ##
data/lib/gpgme/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module GPGME
2
2
  # The version of GPGME ruby binding you are using
3
- VERSION = "2.0.16"
3
+ VERSION = "2.0.22"
4
4
  end
Binary file
data/test/crypto_test.rb CHANGED
@@ -63,7 +63,7 @@ describe GPGME::Crypto do
63
63
 
64
64
  remove_key key
65
65
  encrypted.seek 0
66
- assert_raises GPGME::Error::DecryptFailed do
66
+ assert_raises GPGME::Error::NoSecretKey do
67
67
  crypto.decrypt(encrypted)
68
68
  end
69
69
  import_key key
@@ -79,7 +79,7 @@ describe GPGME::Crypto do
79
79
 
80
80
  remove_key key
81
81
  encrypted.seek 0
82
- assert_raises GPGME::Error::DecryptFailed do
82
+ assert_raises GPGME::Error::NoSecretKey do
83
83
  crypto.decrypt(encrypted)
84
84
  end
85
85
  import_key key
@@ -128,10 +128,13 @@ describe GPGME::Crypto do
128
128
  end
129
129
 
130
130
  describe "symmetric encryption/decryption" do
131
+ before do
132
+ info = GPGME::Engine.info.first
133
+ skip if /\A2\.[01]|\A1\./ === info.version
134
+ end
135
+
131
136
  it "requires a password to encrypt" do
132
- assert_raises GPGME::Error::BadPassphrase do
133
- GPGME::Crypto.new.encrypt TEXT[:plain], :symmetric => true
134
- end
137
+ GPGME::Crypto.new.encrypt TEXT[:plain], :symmetric => true
135
138
  end
136
139
 
137
140
  it "requires a password to decrypt" do
@@ -139,9 +142,7 @@ describe GPGME::Crypto do
139
142
  encrypted_data = crypto.encrypt TEXT[:plain],
140
143
  :symmetric => true, :password => "gpgme"
141
144
 
142
- assert_raises GPGME::Error::BadPassphrase do
143
- crypto.decrypt encrypted_data
144
- end
145
+ crypto.decrypt encrypted_data
145
146
  end
146
147
 
147
148
  it "can encrypt and decrypt with the same password" do
@@ -151,16 +152,6 @@ describe GPGME::Crypto do
151
152
 
152
153
  assert_equal "Hi there", plain.read
153
154
  end
154
-
155
- it "but breaks with different ones" do
156
- crypto = GPGME::Crypto.new
157
- encrypted_data = crypto.encrypt TEXT[:plain],
158
- :symmetric => true, :password => "gpgme"
159
-
160
- assert_raises GPGME::Error::DecryptFailed do
161
- crypto.decrypt encrypted_data, :password => "wrong one"
162
- end
163
- end
164
155
  end
165
156
 
166
157
  describe :decrypt do
@@ -195,7 +186,7 @@ describe GPGME::Crypto do
195
186
  # it "raises WrongKeyUsage"
196
187
 
197
188
  it "raises DecryptFailed when the decrypting key isn't available" do
198
- assert_raises GPGME::Error::DecryptFailed do
189
+ assert_raises GPGME::Error::NoSecretKey do
199
190
  GPGME::Crypto.new.decrypt(TEXT[:unavailable])
200
191
  end
201
192
  end
data/test/ctx_test.rb CHANGED
@@ -27,6 +27,11 @@ describe GPGME::Ctx do
27
27
  end
28
28
 
29
29
  describe :new do
30
+ before do
31
+ info = GPGME::Engine.info.first
32
+ skip if /\A2\.[01]|\A1\./ === info.version
33
+ end
34
+
30
35
  # We consider :armor, :protocol, :textmode and :keylist_mode as tested
31
36
  # with the other tests of this file. Here we test the rest
32
37
 
@@ -51,80 +56,6 @@ describe GPGME::Ctx do
51
56
  end
52
57
  end
53
58
  end
54
-
55
- it ":passphrase_callback sets the callback for the password" do
56
- def test_pass_func(obj,par2,par3,prev_was_bad,fd)
57
- # prev_was_bad is 0 the first time, 1 the rest
58
- if @var == 0
59
- assert_equal 0, prev_was_bad
60
- else
61
- assert_equal 1, prev_was_bad
62
- end
63
-
64
- @var += 1
65
-
66
- io = IO.for_fd(fd, 'w')
67
- io.puts "wrong pasword"
68
- io.flush
69
- end
70
-
71
- def with_correct_pass_func(obj,par2,par3,prev_was_bad,fd)
72
- io = IO.for_fd(fd, 'w')
73
- io.puts "gpgme"
74
- io.flush
75
- end
76
-
77
- with_key PASSWORD_KEY do
78
- input = GPGME::Data.new(TEXT[:passwored])
79
- output = GPGME::Data.new
80
- @var = 0
81
-
82
- assert_raises GPGME::Error::BadPassphrase do
83
- GPGME::Ctx.new(:passphrase_callback => method(:test_pass_func)) do |ctx|
84
- ctx.decrypt_verify input, output
85
- end
86
- end
87
-
88
- # Since we request the key 3 times, we should've gone through the
89
- # callback 3 times.
90
- assert_equal 3, @var
91
-
92
- input.seek 0
93
- output.seek 0
94
-
95
- # Shouldn't crash
96
- GPGME::Ctx.new(:passphrase_callback => method(:with_correct_pass_func)) do |ctx|
97
- ctx.decrypt_verify input, output
98
- end
99
- end
100
- end
101
-
102
- it ":passphrase_callback_value passes a value to the callback function" do
103
- def checking_value(value,par2,par3,par4,fd)
104
- assert_equal "superman", value
105
- io = IO.for_fd(fd, 'w')
106
- io.puts "gpgme"
107
- io.flush
108
- end
109
-
110
- with_key PASSWORD_KEY do
111
- input = GPGME::Data.new(TEXT[:passwored])
112
- output = GPGME::Data.new
113
-
114
- options = {
115
- :passphrase_callback => method(:checking_value),
116
- :passphrase_callback_value => "superman"
117
- }
118
-
119
- GPGME::Ctx.new(options) do |ctx|
120
- ctx.decrypt_verify input, output
121
- end
122
- end
123
- end
124
-
125
- # TODO Don't know how to use them yet
126
- # it ":progress_callback"
127
- # it ":progress_callback_value"
128
59
  end
129
60
 
130
61
  describe :decrypt_result do
@@ -399,6 +330,26 @@ RUBY
399
330
  import_keys # If the test fails for some reason, it won't break others.
400
331
  end
401
332
 
333
+ it "exports a minimal key if given the mode" do
334
+ remove_all_keys
335
+ GPGME::Key.import(KEY_WITH_SIGNATURE[:public])
336
+ key = GPGME::Key.find(KEY_WITH_SIGNATURE[:sha]).first
337
+ output_normal = GPGME::Data.new
338
+ output_minimal = GPGME::Data.new
339
+ ctx = GPGME::Ctx.new
340
+
341
+ ctx.export_keys(key.sha, output_normal)
342
+ ctx.export_keys(key.sha, output_minimal, 4)
343
+
344
+ output_normal.seek(0)
345
+ output_minimal.seek(0)
346
+
347
+ assert_equal output_normal.read.size, 849
348
+ assert_equal output_minimal.read.size, 668
349
+
350
+ import_keys # If the test fails for some reason, it won't break others.
351
+ end
352
+
402
353
  it "exports only one key" do
403
354
  original_keys = GPGME::Key.find(:public)
404
355
  key = original_keys.first
@@ -0,0 +1,52 @@
1
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
2
+ Version: GnuPG v1.4.11 (Darwin)
3
+
4
+ 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
51
+ =T/Ce
52
+ -----END PGP PUBLIC KEY BLOCK-----
data/test/key_test.rb CHANGED
@@ -66,13 +66,13 @@ describe GPGME::Key do
66
66
  # Testing the lazy way with expectations. I think tests in
67
67
  # the Ctx class are enough.
68
68
  it "exports any key that matches the pattern" do
69
- GPGME::Ctx.any_instance.expects(:export_keys).with("", anything)
69
+ GPGME::Ctx.any_instance.expects(:export_keys).with("", anything, 0)
70
70
  GPGME::Key.export("")
71
71
  end
72
72
 
73
73
  it "exports any key that matches the pattern, can specify output" do
74
74
  data = GPGME::Data.new
75
- GPGME::Ctx.any_instance.expects(:export_keys).with("wadus", data)
75
+ GPGME::Ctx.any_instance.expects(:export_keys).with("wadus", data, 0)
76
76
  ret = GPGME::Key.export("wadus", :output => data)
77
77
  assert_equal data, ret
78
78
  end
@@ -81,6 +81,11 @@ describe GPGME::Key do
81
81
  GPGME::Ctx.expects(:new).with(:armor => true).yields(mock(:export_keys => true))
82
82
  GPGME::Key.export("wadus", :armor => true)
83
83
  end
84
+
85
+ it "can export a minimal key" do
86
+ GPGME::Ctx.any_instance.expects(:export_keys).with("wadus", anything, 4)
87
+ GPGME::Key.export("wadus", :minimal => true)
88
+ end
84
89
  end
85
90
 
86
91
  describe "#export" do
@@ -180,7 +185,7 @@ describe GPGME::Key do
180
185
 
181
186
  with_key EXPIRED_KEY do
182
187
  key = GPGME::Key.find(:secret, EXPIRED_KEY[:sha]).first
183
- assert key.expired
188
+ assert key.expired if key
184
189
  end
185
190
  end
186
191
 
@@ -199,6 +204,18 @@ describe GPGME::Key do
199
204
  end
200
205
  end
201
206
 
207
+ describe :valid? do
208
+ it "returns true on a valid key" do
209
+ valid_key = File.read("test/files/testkey_pub.gpg")
210
+ assert GPGME::Key.valid?(valid_key)
211
+ end
212
+
213
+ it "returns false on an invalid key" do
214
+ invalid_key = File.read("test/files/testkey_pub_invalid.gpg")
215
+ assert !GPGME::Key.valid?(invalid_key)
216
+ end
217
+ end
218
+
202
219
  describe :to_s do
203
220
  it "can be coerced into a String" do
204
221
  key = GPGME::Key.find(:secret).first
@@ -206,4 +223,3 @@ describe GPGME::Key do
206
223
  end
207
224
  end
208
225
  end
209
-
data/test/pinentry ADDED
@@ -0,0 +1,22 @@
1
+ #! /bin/bash
2
+ # Dummy pinentry
3
+ #
4
+ # Copyright 2008 g10 Code GmbH
5
+ #
6
+ # This file is free software; as a special exception the author gives
7
+ # unlimited permission to copy and/or distribute it, with or without
8
+ # modifications, as long as this notice is preserved.
9
+ #
10
+ # This file is distributed in the hope that it will be useful, but
11
+ # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
12
+ # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
13
+ # PURPOSE.
14
+
15
+ echo OK Your orders please
16
+
17
+ while read cmd; do
18
+ case $cmd in
19
+ GETPIN) echo D gpgme; echo OK;;
20
+ *) echo OK;;
21
+ esac
22
+ done
data/test/sub_key_test.rb CHANGED
@@ -26,8 +26,11 @@ describe GPGME::SubKey do
26
26
  refute subkey.expired
27
27
 
28
28
  with_key EXPIRED_KEY do
29
- subkey = GPGME::Key.find(:secret, EXPIRED_KEY[:sha]).first.primary_subkey
30
- assert subkey.expired
29
+ key = GPGME::Key.find(:secret, EXPIRED_KEY[:sha]).first
30
+ if key
31
+ subkey = key.primary_subkey
32
+ assert subkey.expired
33
+ end
31
34
  end
32
35
  end
33
36
 
@@ -386,6 +386,31 @@ HyEbgNA=
386
386
  -----END PGP PRIVATE KEY BLOCK-----
387
387
  RUBY
388
388
 
389
+ key_with_signature = <<-RUBY
390
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
391
+
392
+ mI0ETbL4sAEEANBs/WsOxRCLdsW1h8LKGT6eJpAs6omGV/G7TJnMsk92BUIub3oZ
393
+ 9oRC1L0l4EKB6o8/vULziT815dbbVxwQIOyDXEqP4sokRxjSNNkpPb+RuIjdmP6e
394
+ SJ2NxCxV/GxLhjZZTHG5SPH4Gei3TtdiHMHoar0rwEcVdS693K/6Ww8ZABEBAAG0
395
+ IVRlc3QgbnVtYmVyIDEgPHRlc3QxQGV4YW1wbGUuY29tPoi4BBMBAgAiBQJNsviw
396
+ AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRD7yLd2W11cdyxOA/4gPEK1
397
+ qF8bp0YJfc91Ob/J70N5gNuO06AeBa8o6MHTUheCp5CMFD8RISDegsiYey3O+Wvk
398
+ rg+BmIQWqGTglDIDOM8B1Bmc+T+C0sRwIwmHqDo5a9mR2QnlcFqZ3SNV5MdxDUa4
399
+ GJk4LbUj/JwU2nR8Z4eA7OC1LjOexFKAfLX654izBBABCAAdFiEEVsoxCW7JMuDZ
400
+ Ydv9OSviynfWZWYFAl1ziQcACgkQOSviynfWZWYScwP/a/shuIWvLCZLllW0YWy8
401
+ NUPgTZ4TnJogOp4zm9+uNla9GJepM1Wj7+m1ZNzXskqESoAB00k2dYOGwek0hPHp
402
+ 1MwpcMJvAu7m+LrfGVcG6IAkjQWvifsP8QIe05yNW3jsK+qQJpy1dejzgaHt7dLL
403
+ /rS6ySBxhIvpo5tsfe+C8PO4jQRNsviwAQQAvVKqiSoVA6oQ8nT3zLEGDgNeED3M
404
+ fHMeYbFMi7GTpvURsTXcPH0SLXzGVn8Aevaa+ConFWMQuWMsTPiqVQR6/kKE8RJ/
405
+ ynDHbnXuOGNdOBd96GdsIgqTMwrtWVvzhSKFrhDB1y8iFyQ9QlVTJG4jo8EcaN6L
406
+ T0hoo64XJktD5CUAEQEAAYifBBgBAgAJBQJNsviwAhsMAAoJEPvIt3ZbXVx3X/8E
407
+ AIiCsyWlIOUvhFN5a/V2TyA2XjXEKSn9iWi7uLhVT7ShrWSGGhdNBwiqJuDh5KxX
408
+ 3VXa9fePMXrfbALdj1fRqCAFfKZAcKrNNls+psSaYLJwLhCUzD8Ht9M+LrGeZDPz
409
+ wzAqTfgPb5M2Inssarr5Lpdlu1X8y37cfNVHscqBZyfS
410
+ =KOQt
411
+ -----END PGP PUBLIC KEY BLOCK-----
412
+ RUBY
413
+
389
414
  encrypted_text = <<-RUBY
390
415
  -----BEGIN PGP MESSAGE-----
391
416
  Version: GnuPG v1.4.11 (Darwin)
@@ -506,6 +531,11 @@ EXPIRED_KEY = {
506
531
  :secret => expired_key_secret
507
532
  }
508
533
 
534
+ KEY_WITH_SIGNATURE = {
535
+ :sha => 'test1@example.com',
536
+ :public => key_with_signature
537
+ }
538
+
509
539
  TEXT = {
510
540
  :plain => "Hi there",
511
541
  :encrypted => encrypted_text.chomp,
data/test/test_helper.rb CHANGED
@@ -99,11 +99,17 @@ def ensure_keys(proto)
99
99
  # We use a different home directory for the keys to not disturb current
100
100
  # installation
101
101
  require 'tmpdir'
102
+ require 'pathname'
102
103
 
103
104
  if DIRS.empty?
104
105
  dir = Dir.mktmpdir
105
106
  GPGME::Engine.home_dir = dir
106
107
  DIRS.push(dir)
108
+ pinentry = Pathname.new(__FILE__).dirname + 'pinentry'
109
+ gpg_agent_conf = Pathname.new(dir) + 'gpg-agent.conf'
110
+ gpg_agent_conf.open('w+') {|io|
111
+ io.write("pinentry-program #{pinentry}\n")
112
+ }
107
113
  remove_all_keys
108
114
  import_keys
109
115
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gpgme
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.16
4
+ version: 2.0.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daiki Ueno
8
8
  - Albert Llop
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-01-03 00:00:00.000000000 Z
12
+ date: 2022-11-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mini_portile2
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '2.3'
20
+ version: '2.7'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '2.3'
27
+ version: '2.7'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: mocha
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -68,7 +68,7 @@ dependencies:
68
68
  - !ruby/object:Gem::Version
69
69
  version: 0.9.11
70
70
  - !ruby/object:Gem::Dependency
71
- name: coveralls
71
+ name: coveralls_reborn
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - ">="
@@ -85,16 +85,16 @@ dependencies:
85
85
  name: byebug
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - "~>"
88
+ - - ">="
89
89
  - !ruby/object:Gem::Version
90
- version: 3.5.1
90
+ version: '0'
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
- - - "~>"
95
+ - - ">="
96
96
  - !ruby/object:Gem::Version
97
- version: 3.5.1
97
+ version: '0'
98
98
  description: |-
99
99
  Ruby-GPGME is a Ruby language binding of GPGME (GnuPG
100
100
  Made Easy). GnuPG Made Easy (GPGME) is a library designed to make access to
@@ -131,16 +131,18 @@ files:
131
131
  - lib/gpgme/sub_key.rb
132
132
  - lib/gpgme/user_id.rb
133
133
  - lib/gpgme/version.rb
134
- - ports/archives/gpgme-1.9.0.tar.bz2
135
- - ports/archives/libassuan-2.4.3.tar.bz2
136
- - ports/archives/libgpg-error-1.27.tar.bz2
134
+ - ports/archives/gpgme-1.18.0.tar.bz2
135
+ - ports/archives/libassuan-2.5.5.tar.bz2
136
+ - ports/archives/libgpg-error-1.46.tar.bz2
137
137
  - test/crypto_test.rb
138
138
  - test/ctx_test.rb
139
139
  - test/data_test.rb
140
140
  - test/files/testkey_pub.gpg
141
+ - test/files/testkey_pub_invalid.gpg
141
142
  - test/files/testkey_sec.gpg
142
143
  - test/gpgme_test.rb
143
144
  - test/key_test.rb
145
+ - test/pinentry
144
146
  - test/signature_test.rb
145
147
  - test/sub_key_test.rb
146
148
  - test/support/resources.rb
@@ -149,7 +151,7 @@ homepage: http://github.com/ueno/ruby-gpgme
149
151
  licenses:
150
152
  - LGPL-2.1+
151
153
  metadata: {}
152
- post_install_message:
154
+ post_install_message:
153
155
  rdoc_options: []
154
156
  require_paths:
155
157
  - lib
@@ -165,9 +167,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
165
167
  - !ruby/object:Gem::Version
166
168
  version: '0'
167
169
  requirements: []
168
- rubyforge_project: ruby-gpgme
169
- rubygems_version: 2.5.2
170
- signing_key:
170
+ rubygems_version: 3.3.7
171
+ signing_key:
171
172
  specification_version: 4
172
173
  summary: Ruby binding of GPGME.
173
174
  test_files: []
Binary file
Binary file