gpgme-ffi 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. data/examples/edit.rb +77 -0
  2. data/examples/genkey.rb +55 -0
  3. data/examples/keylist.rb +7 -0
  4. data/examples/roundtrip.rb +42 -0
  5. data/examples/sign.rb +31 -0
  6. data/examples/verify.rb +8 -0
  7. data/ext/gpgme/Makefile.in +55 -0
  8. data/ext/gpgme/extconf.rb +8 -0
  9. data/ext/gpgme/extract_enums.rb +88 -0
  10. data/ext/gpgme/gpgme-1.3.1.tar.bz2 +0 -0
  11. data/ext/gpgme/libassuan-2.0.2.tar.bz2 +0 -0
  12. data/ext/gpgme/libgpg-error-1.10.tar.bz2 +0 -0
  13. data/ext/gpgme/libgpgme_gem.so +0 -0
  14. data/lib/gpgme/compat.rb +48 -0
  15. data/lib/gpgme/constants.rb +187 -0
  16. data/lib/gpgme/crypto.rb +357 -0
  17. data/lib/gpgme/ctx.rb +462 -0
  18. data/lib/gpgme/data.rb +189 -0
  19. data/lib/gpgme/engine.rb +76 -0
  20. data/lib/gpgme/error.rb +66 -0
  21. data/lib/gpgme/ffi/ctx.rb +36 -0
  22. data/lib/gpgme/ffi/data.rb +24 -0
  23. data/lib/gpgme/ffi/decrypt_result.rb +14 -0
  24. data/lib/gpgme/ffi/encrypt_result.rb +22 -0
  25. data/lib/gpgme/ffi/engine_info.rb +17 -0
  26. data/lib/gpgme/ffi/enums.rb +687 -0
  27. data/lib/gpgme/ffi/functions.rb +364 -0
  28. data/lib/gpgme/ffi/import_result.rb +35 -0
  29. data/lib/gpgme/ffi/import_status.rb +15 -0
  30. data/lib/gpgme/ffi/invalid_key.rb +14 -0
  31. data/lib/gpgme/ffi/key.rb +60 -0
  32. data/lib/gpgme/ffi/key_sig.rb +20 -0
  33. data/lib/gpgme/ffi/library.rb +279 -0
  34. data/lib/gpgme/ffi/meta.rb +57 -0
  35. data/lib/gpgme/ffi/new_signature.rb +18 -0
  36. data/lib/gpgme/ffi/sig_notation.rb +12 -0
  37. data/lib/gpgme/ffi/sign_result.rb +33 -0
  38. data/lib/gpgme/ffi/signature.rb +35 -0
  39. data/lib/gpgme/ffi/sub_key.rb +27 -0
  40. data/lib/gpgme/ffi/trust_item.rb +31 -0
  41. data/lib/gpgme/ffi/user_id.rb +30 -0
  42. data/lib/gpgme/ffi/verify_result.rb +22 -0
  43. data/lib/gpgme/ffi.rb +22 -0
  44. data/lib/gpgme/io_callbacks.rb +21 -0
  45. data/lib/gpgme/key.rb +242 -0
  46. data/lib/gpgme/key_common.rb +43 -0
  47. data/lib/gpgme/key_sig.rb +35 -0
  48. data/lib/gpgme/misc.rb +66 -0
  49. data/lib/gpgme/signature.rb +85 -0
  50. data/lib/gpgme/sub_key.rb +58 -0
  51. data/lib/gpgme/user_id.rb +20 -0
  52. data/lib/gpgme/version.rb +3 -0
  53. data/lib/gpgme.rb +106 -0
  54. data/test/crypto_test.rb +246 -0
  55. data/test/ctx_test.rb +432 -0
  56. data/test/data_test.rb +129 -0
  57. data/test/files/testkey_pub.gpg +52 -0
  58. data/test/files/testkey_sec.gpg +54 -0
  59. data/test/gpgme_test.rb +12 -0
  60. data/test/key_test.rb +209 -0
  61. data/test/signature_test.rb +52 -0
  62. data/test/sub_key_test.rb +48 -0
  63. data/test/support/resources.rb +516 -0
  64. data/test/test_helper.rb +84 -0
  65. metadata +203 -0
data/test/data_test.rb ADDED
@@ -0,0 +1,129 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'test_helper'
3
+
4
+ describe GPGME::Data do
5
+ describe :new do
6
+ it "smartly creates an empty buffer if nothing passed" do
7
+ data = GPGME::Data.new
8
+ assert_instance_of GPGME::Data, data
9
+ assert_respond_to data, :read
10
+ assert_respond_to data, :write
11
+ end
12
+
13
+ it "doesn't create a new object if the object passed is a Data already" do
14
+ data = GPGME::Data.new
15
+ new_data = GPGME::Data.new(data)
16
+
17
+ assert_equal data, new_data
18
+ end
19
+
20
+ it "creates a data from strings" do
21
+ data = GPGME::Data.new("wadus")
22
+ assert_equal "wadus", data.read
23
+ end
24
+
25
+ it "creates a data from a file" do
26
+ # magic fromfile
27
+ data = GPGME::Data.new(File.open(__FILE__))
28
+ assert_match /magic fromfile/, data.read
29
+ end
30
+
31
+ it "creates a data from file descriptor" do
32
+ skip "cannot be implemented on JRuby" if RUBY_PLATFORM == "java"
33
+
34
+ # magic filedescriptor
35
+ File.open(__FILE__) do |f|
36
+ data = GPGME::Data.new(f.fileno)
37
+ assert_match /magic filedescriptor/, data.read
38
+ end
39
+ end
40
+ end
41
+
42
+ describe :read do
43
+ it "allows to read only a length of the object" do
44
+ data = GPGME::Data.new("wadus")
45
+ assert_equal "wad", data.read(3)
46
+ end
47
+
48
+ it "returns nil if reading 0 length" do
49
+ data = GPGME::Data.new("wadus")
50
+ assert_nil data.read(0)
51
+ end
52
+
53
+ it "returns the full thing if reading without parameter" do
54
+ data = GPGME::Data.new("wadus")
55
+ assert_equal "wadus", data.read
56
+ end
57
+ end
58
+
59
+ ##
60
+ # We consider seek tested by these ones, since we have to seek(0) before
61
+ # reading.
62
+ describe :write do
63
+ it "writes data to it" do
64
+ data = GPGME::Data.new
65
+ data.write("wadus")
66
+ data.seek(0)
67
+ assert_equal "wadus", data.read
68
+ end
69
+
70
+ it "writes data to it, specifying the length of the things to write" do
71
+ data = GPGME::Data.new
72
+ data.write("wadus", 5)
73
+ data.seek(0)
74
+ assert_equal "wadus", data.read
75
+ end
76
+
77
+ it "writes only a limited part if specified a small number" do
78
+ data = GPGME::Data.new
79
+ data.write("wadus", 3)
80
+ data.seek(0)
81
+ assert_equal "wad", data.read
82
+ end
83
+
84
+ # TODO: test doesn't pass, I believe there might be a security issue here,
85
+ # random crap is written to the buffer if a longer size is passed.
86
+ #
87
+ # it "writes only the full data passed even if the length is bigger" do
88
+ # data = GPGME::Data.new
89
+ # data.write("wadus", 100)
90
+ # data.seek(0)
91
+ # assert_equal "wadus", data.read
92
+ # end
93
+ end
94
+
95
+ describe :encoding do
96
+ it "has encoding 0 by default (DATA_ENCODING_NONE)" do
97
+ data = GPGME::Data.new("wadus")
98
+ assert_equal GPGME::DATA_ENCODING_NONE, data.encoding
99
+ end
100
+
101
+ it "can set encodings" do
102
+ data = GPGME::Data.new("wadus")
103
+ [ GPGME::DATA_ENCODING_ARMOR, GPGME::DATA_ENCODING_BASE64,
104
+ GPGME::DATA_ENCODING_BINARY,GPGME::DATA_ENCODING_NONE ].each do |encoding|
105
+ data.encoding = encoding
106
+ assert_equal encoding, data.encoding
107
+ end
108
+ end
109
+
110
+ it "breaks if not set a proper encoding value" do
111
+ data = GPGME::Data.new("wadus")
112
+ assert_raises GPGME::Error::InvalidValue do
113
+ data.encoding = 64
114
+ end
115
+ end
116
+ end
117
+
118
+ describe :to_s do
119
+ it "returns the entire content of data" do
120
+ data = GPGME::Data.new("wadus")
121
+ data.read
122
+ old_pos = data.seek(0, IO::SEEK_CUR)
123
+ assert_equal "wadus", data.to_s
124
+ new_pos = data.seek(0, IO::SEEK_CUR)
125
+ assert_equal old_pos, new_pos
126
+ end
127
+ end
128
+ end
129
+
@@ -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-----
@@ -0,0 +1,54 @@
1
+ -----BEGIN PGP PRIVATE KEY BLOCK-----
2
+ Version: GnuPG v1.4.11 (Darwin)
3
+
4
+ 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
52
+ u+DMAdQjSwNi0/7uqGbnAyZuRpBaKWJu9s4YRdU=
53
+ =kQA4
54
+ -----END PGP PRIVATE KEY BLOCK-----
@@ -0,0 +1,12 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'test_helper'
3
+
4
+ describe GPGME do
5
+ it "should pass" do
6
+ assert true
7
+ end
8
+
9
+ it "should also pass" do
10
+ assert true
11
+ end
12
+ end
data/test/key_test.rb ADDED
@@ -0,0 +1,209 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'test_helper'
3
+
4
+ describe GPGME::Key do
5
+ before do
6
+ skip unless GPGME::Engine.check_version GPGME::PROTOCOL_OpenPGP
7
+ end
8
+
9
+ it "has certain attributes" do
10
+ key = GPGME::Key.find(:secret).first
11
+ [:keylist_mode, :protocol, :owner_trust, :issuer_serial,
12
+ :issuer_name, :chain_id, :subkeys, :uids].each do |attrib|
13
+ assert key.respond_to?(attrib), "Key doesn't respond to #{attrib}"
14
+ end
15
+ end
16
+
17
+ it "won't allow the creation of GPGME::Key's without the C API" do
18
+ assert_raises NoMethodError do
19
+ GPGME::Key.new
20
+ end
21
+ end
22
+
23
+ it "can compare one with another even though if they're not the same object" do
24
+ key1 = GPGME::Key.find(:secret).first
25
+ key2 = GPGME::Key.find(:secret).first
26
+ refute_equal key1.object_id, key2.object_id
27
+ assert_equal key1, key2
28
+ end
29
+
30
+ it "can compare a key with any other object" do
31
+ key1 = GPGME::Key.find(:secret).first
32
+ refute_equal key1, nil
33
+ end
34
+
35
+ describe :find do
36
+ it "should return all by default" do
37
+ keys = GPGME::Key.find :secret
38
+ assert_instance_of GPGME::Key, keys.first
39
+ assert 0 < keys.size
40
+ end
41
+
42
+ it "returns an array even if you pass only one descriptor" do
43
+ keys_one = GPGME::Key.find(:secret, KEYS.first[:sha]).map{|key| key.subkeys.map(&:keyid)}
44
+ keys_array = GPGME::Key.find(:secret, [KEYS.first[:sha]]).map{|key| key.subkeys.map(&:keyid)}
45
+ assert_equal keys_one, keys_array
46
+ end
47
+
48
+ it "returns only secret keys if told to do so" do
49
+ keys = GPGME::Key.find :secret
50
+ assert keys.all?(&:secret?)
51
+ end
52
+
53
+ it "returns only public keys if told to do so" do
54
+ keys = GPGME::Key.find :public
55
+ assert keys.none?(&:secret?)
56
+ end
57
+
58
+ it "filters by capabilities" do
59
+ GPGME::Key.any_instance.stubs(:usable_for?).returns(false)
60
+ keys = GPGME::Key.find :public, "", :wadusing
61
+ assert keys.empty?
62
+ end
63
+ end
64
+
65
+ describe :export do
66
+ # Testing the lazy way with expectations. I think tests in
67
+ # the Ctx class are enough.
68
+ it "exports any key that matches the pattern" do
69
+ GPGME::Ctx.any_instance.expects(:export_keys).with("", anything)
70
+ GPGME::Key.export("")
71
+ end
72
+
73
+ it "exports any key that matches the pattern, can specify output" do
74
+ data = GPGME::Data.new
75
+ GPGME::Ctx.any_instance.expects(:export_keys).with("wadus", data)
76
+ ret = GPGME::Key.export("wadus", :output => data)
77
+ assert_equal data, ret
78
+ end
79
+
80
+ it "can specify options for Ctx" do
81
+ GPGME::Ctx.expects(:new).with(:armor => true).yields(mock(:export_keys => true))
82
+ GPGME::Key.export("wadus", :armor => true)
83
+ end
84
+ end
85
+
86
+ describe "#export" do
87
+ it "can export from the key instance" do
88
+ key = GPGME::Key.find(:public).first
89
+ GPGME::Key.expects(:export).with(key.sha, {})
90
+
91
+ key.export
92
+ end
93
+
94
+ it "can export from the key instance passing variables" do
95
+ key = GPGME::Key.find(:public).first
96
+ GPGME::Key.expects(:export).with(key.sha, {:armor => true})
97
+
98
+ key.export :armor => true
99
+ end
100
+ end
101
+
102
+ describe :import do
103
+ it "can import keys" do
104
+ data = GPGME::Data.new
105
+ GPGME::Ctx.any_instance.expects(:import_keys).with(data)
106
+ GPGME::Ctx.any_instance.expects(:import_result).returns("wadus")
107
+
108
+ assert_equal "wadus", GPGME::Key.import(data)
109
+ end
110
+
111
+ it "can specify options for Ctx" do
112
+ GPGME::Ctx.expects(:new).with(:armor => true).yields(mock(:import_keys => true, :import_result => true))
113
+ GPGME::Key.import("wadus", :armor => true)
114
+ end
115
+ end
116
+
117
+ # describe :trust do
118
+ # it "returns :revoked if it is so"
119
+ # it "returns :expired if it is expired"
120
+ # it "returns :disabled if it is so"
121
+ # it "returns :invalid if it is so"
122
+ # it "returns nil otherwise"
123
+ # end
124
+
125
+ # describe :capability do
126
+ # it "returns an array of possible capabilities"
127
+ # end
128
+
129
+ # describe :secret? do
130
+ # "returns true/false depending on the instance variable"
131
+ # end
132
+
133
+ describe :usable_for? do
134
+ it "checks for the capabilities of the key and returns true if it matches all" do
135
+ key = GPGME::Key.find(:secret).first
136
+
137
+ key.stubs(:capability).returns([:encrypt, :sign])
138
+ assert key.usable_for?([])
139
+
140
+ key.stubs(:capability).returns([:encrypt, :sign])
141
+ assert key.usable_for?([:encrypt])
142
+
143
+ key.stubs(:capability).returns([:encrypt, :sign])
144
+ refute key.usable_for?([:certify])
145
+ end
146
+
147
+ it "returns false if the key is expired or revoked or disabled or disabled" do
148
+ key = GPGME::Key.find(:secret).first
149
+ key.stubs(:trust).returns(:revoked)
150
+ key.stubs(:capability).returns([:encrypt, :sign])
151
+ refute key.usable_for?([:encrypt])
152
+ end
153
+ end
154
+
155
+ describe :delete! do
156
+ it "deletes the key itself and its secret one if called with true" do
157
+ begin
158
+ key = KEYS.first
159
+ GPGME::Key.find(:public, key[:sha]).first.delete!(true)
160
+
161
+ assert_empty GPGME::Key.find(:public, key[:sha])
162
+ assert_empty GPGME::Key.find(:secret, key[:sha])
163
+ ensure
164
+ import_key key
165
+ end
166
+ end
167
+
168
+ it "raises GPGME::Error::Conflict if we're deleting a key that is secret" do
169
+ key = KEYS.first
170
+ assert_raises GPGME::Error::Conflict do
171
+ GPGME::Key.find(:secret, key[:sha]).first.delete!
172
+ end
173
+ refute_empty GPGME::Key.find(:secret, key[:sha])
174
+ end
175
+ end
176
+
177
+ it "knows if the key is expired" do
178
+ key = GPGME::Key.find(:secret).first
179
+ refute key.expired
180
+
181
+ with_key EXPIRED_KEY do
182
+ key = GPGME::Key.find(:secret, EXPIRED_KEY[:sha]).first
183
+ assert key.expired
184
+ end
185
+ end
186
+
187
+ it "returns the expiry date of the first subkey" do
188
+ key = GPGME::Key.find(:secret).first
189
+ subkey = key.primary_subkey
190
+ subkey.expects(:expired).returns(true)
191
+
192
+ assert key.expired
193
+ end
194
+
195
+ describe :inspect do
196
+ it "can be inspected" do
197
+ key = GPGME::Key.find(:secret).first
198
+ key.inspect
199
+ end
200
+ end
201
+
202
+ describe :to_s do
203
+ it "can be coerced into a String" do
204
+ key = GPGME::Key.find(:secret).first
205
+ key.to_s
206
+ end
207
+ end
208
+ end
209
+
@@ -0,0 +1,52 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'test_helper'
3
+
4
+ describe GPGME::Signature do
5
+ before do
6
+ skip unless GPGME::Engine.check_version GPGME::PROTOCOL_OpenPGP
7
+ end
8
+
9
+ it "#valid? is true when the signature is valid" do
10
+ crypto = GPGME::Crypto.new
11
+ signatures = 0
12
+ sign = crypto.sign "Hi there"
13
+
14
+ crypto.verify(sign) do |signature|
15
+ assert_instance_of GPGME::Signature, signature
16
+ assert signature.valid?
17
+ refute signature.expired_signature?
18
+ refute signature.expired_key?
19
+ refute signature.revoked_key?
20
+ refute signature.bad?
21
+ refute signature.no_key?
22
+ signatures += 1
23
+ end
24
+
25
+ assert_equal 1, signatures
26
+ end
27
+
28
+ it "#expired_key? is true when the key has expired" do
29
+ with_key EXPIRED_KEY do
30
+ crypto = GPGME::Crypto.new
31
+ signatures = 0
32
+ crypto.verify(TEXT[:expired_key_sign]) do |signature|
33
+ assert_instance_of GPGME::Signature, signature
34
+ refute signature.valid?
35
+ refute signature.expired_signature?
36
+ assert signature.expired_key?
37
+ refute signature.revoked_key?
38
+ refute signature.bad?
39
+ refute signature.no_key?
40
+ signatures += 1
41
+ end
42
+
43
+ assert_equal 1, signatures
44
+ end
45
+ end
46
+
47
+ # TODO Find how to test these
48
+ # it "#expired_signature? is true when the signature has expired"
49
+ # it "#revoked_key? is true when the key has been revoked"
50
+ # it "#bad? is true when the signature is bad"
51
+ # it "#no_key? is true when we don't have the key to verify the signature"
52
+ end
@@ -0,0 +1,48 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'test_helper'
3
+
4
+ describe GPGME::SubKey do
5
+ before do
6
+ skip unless GPGME::Engine.check_version GPGME::PROTOCOL_OpenPGP
7
+ end
8
+
9
+ # We trust Key for common methods that come from KeyCommon
10
+
11
+ it "has certain attributes" do
12
+ subkey = GPGME::Key.find(:secret).first.primary_subkey
13
+ [:pubkey_algo, :length, :keyid, :fpr, :fingerprint].each do |attrib|
14
+ assert subkey.respond_to?(attrib), "Key doesn't respond to #{attrib}"
15
+ end
16
+ end
17
+
18
+ it "won't allow the creation of GPGME::SubKey's without the C API" do
19
+ assert_raises NoMethodError do
20
+ GPGME::SubKey.new
21
+ end
22
+ end
23
+
24
+ it "knows if the key is expired" do
25
+ subkey = GPGME::Key.find(:secret).first.primary_subkey
26
+ refute subkey.expired
27
+
28
+ with_key EXPIRED_KEY do
29
+ subkey = GPGME::Key.find(:secret, EXPIRED_KEY[:sha]).first.primary_subkey
30
+ assert subkey.expired
31
+ end
32
+ end
33
+
34
+ describe :inspect do
35
+ it "can be inspected" do
36
+ subkey = GPGME::Key.find(:secret).first.primary_subkey
37
+ subkey.inspect
38
+ end
39
+ end
40
+
41
+ describe :to_s do
42
+ it "can be coerced into a String" do
43
+ subkey = GPGME::Key.find(:secret).first.primary_subkey
44
+ subkey.to_s
45
+ end
46
+ end
47
+
48
+ end