gpgme 1.0.8 → 2.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 (49) hide show
  1. data/examples/genkey.rb +1 -1
  2. data/examples/keylist.rb +2 -1
  3. data/examples/roundtrip.rb +7 -4
  4. data/examples/sign.rb +5 -3
  5. data/examples/verify.rb +4 -2
  6. data/ext/gpgme/extconf.rb +58 -0
  7. data/ext/gpgme/gpgme-1.3.1.tar.bz2 +0 -0
  8. data/{gpgme_n.c → ext/gpgme/gpgme_n.c} +8 -8
  9. data/ext/gpgme/libassuan-2.0.2.tar.bz2 +0 -0
  10. data/ext/gpgme/libgpg-error-1.10.tar.bz2 +0 -0
  11. data/lib/gpgme.rb +88 -1541
  12. data/lib/gpgme/compat.rb +2 -0
  13. data/lib/gpgme/constants.rb +23 -0
  14. data/lib/gpgme/crypto.rb +357 -0
  15. data/lib/gpgme/ctx.rb +462 -0
  16. data/lib/gpgme/data.rb +177 -0
  17. data/lib/gpgme/engine.rb +76 -0
  18. data/lib/gpgme/error.rb +66 -0
  19. data/lib/gpgme/io_callbacks.rb +21 -0
  20. data/lib/gpgme/key.rb +242 -0
  21. data/lib/gpgme/key_common.rb +43 -0
  22. data/lib/gpgme/key_sig.rb +35 -0
  23. data/lib/gpgme/misc.rb +66 -0
  24. data/lib/gpgme/signature.rb +85 -0
  25. data/lib/gpgme/sub_key.rb +58 -0
  26. data/lib/gpgme/user_id.rb +20 -0
  27. data/lib/gpgme/version.rb +3 -0
  28. data/test/crypto_test.rb +242 -0
  29. data/test/ctx_test.rb +426 -0
  30. data/test/data_test.rb +116 -0
  31. data/test/files/testkey_pub.gpg +52 -0
  32. data/test/files/testkey_sec.gpg +54 -0
  33. data/test/gpgme_test.rb +12 -0
  34. data/test/key_test.rb +201 -0
  35. data/test/signature_test.rb +48 -0
  36. data/test/sub_key_test.rb +45 -0
  37. data/test/support/resources.rb +516 -0
  38. data/test/test_helper.rb +83 -0
  39. metadata +144 -65
  40. data.tar.gz.sig +0 -3
  41. data/COPYING +0 -340
  42. data/COPYING.LESSER +0 -510
  43. data/Makefile +0 -172
  44. data/Manifest.txt +0 -18
  45. data/README +0 -86
  46. data/Rakefile +0 -17
  47. data/THANKS +0 -15
  48. data/extconf.rb +0 -26
  49. metadata.gz.sig +0 -0
@@ -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
@@ -0,0 +1,201 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'test_helper'
3
+
4
+ describe GPGME::Key do
5
+
6
+ it "has certain attributes" do
7
+ key = GPGME::Key.find(:secret).first
8
+ [:keylist_mode, :protocol, :owner_trust, :issuer_serial,
9
+ :issuer_name, :chain_id, :subkeys, :uids].each do |attrib|
10
+ assert key.respond_to?(attrib), "Key doesn't respond to #{attrib}"
11
+ end
12
+ end
13
+
14
+ it "won't allow the creation of GPGME::Key's without the C API" do
15
+ assert_raises NoMethodError do
16
+ GPGME::Key.new
17
+ end
18
+ end
19
+
20
+ it "can compare one with another even though if they're not the same object" do
21
+ key1 = GPGME::Key.find(:secret).first
22
+ key2 = GPGME::Key.find(:secret).first
23
+ refute_equal key1.object_id, key2.object_id
24
+ assert_equal key1, key2
25
+ end
26
+
27
+ describe :find do
28
+ it "should return all by default" do
29
+ keys = GPGME::Key.find :secret
30
+ assert_instance_of GPGME::Key, keys.first
31
+ assert 0 < keys.size
32
+ end
33
+
34
+ it "returns an array even if you pass only one descriptor" do
35
+ keys_one = GPGME::Key.find(:secret, KEYS.first[:sha]).map{|key| key.subkeys.map(&:keyid)}
36
+ keys_array = GPGME::Key.find(:secret, [KEYS.first[:sha]]).map{|key| key.subkeys.map(&:keyid)}
37
+ assert_equal keys_one, keys_array
38
+ end
39
+
40
+ it "returns only secret keys if told to do so" do
41
+ keys = GPGME::Key.find :secret
42
+ assert keys.all?(&:secret?)
43
+ end
44
+
45
+ it "returns only public keys if told to do so" do
46
+ keys = GPGME::Key.find :public
47
+ assert keys.none?(&:secret?)
48
+ end
49
+
50
+ it "filters by capabilities" do
51
+ GPGME::Key.any_instance.stubs(:usable_for?).returns(false)
52
+ keys = GPGME::Key.find :public, "", :wadusing
53
+ assert keys.empty?
54
+ end
55
+ end
56
+
57
+ describe :export do
58
+ # Testing the lazy way with expectations. I think tests in
59
+ # the Ctx class are enough.
60
+ it "exports any key that matches the pattern" do
61
+ GPGME::Ctx.any_instance.expects(:export_keys).with("", anything)
62
+ GPGME::Key.export("")
63
+ end
64
+
65
+ it "exports any key that matches the pattern, can specify output" do
66
+ data = GPGME::Data.new
67
+ GPGME::Ctx.any_instance.expects(:export_keys).with("wadus", data)
68
+ ret = GPGME::Key.export("wadus", :output => data)
69
+ assert_equal data, ret
70
+ end
71
+
72
+ it "can specify options for Ctx" do
73
+ GPGME::Ctx.expects(:new).with(:armor => true).yields(mock(:export_keys => true))
74
+ GPGME::Key.export("wadus", :armor => true)
75
+ end
76
+ end
77
+
78
+ describe "#export" do
79
+ it "can export from the key instance" do
80
+ key = GPGME::Key.find(:public).first
81
+ GPGME::Key.expects(:export).with(key.sha, {})
82
+
83
+ key.export
84
+ end
85
+
86
+ it "can export from the key instance passing variables" do
87
+ key = GPGME::Key.find(:public).first
88
+ GPGME::Key.expects(:export).with(key.sha, {:armor => true})
89
+
90
+ key.export :armor => true
91
+ end
92
+ end
93
+
94
+ describe :import do
95
+ it "can import keys" do
96
+ data = GPGME::Data.new
97
+ GPGME::Ctx.any_instance.expects(:import_keys).with(data)
98
+ GPGME::Ctx.any_instance.expects(:import_result).returns("wadus")
99
+
100
+ assert_equal "wadus", GPGME::Key.import(data)
101
+ end
102
+
103
+ it "can specify options for Ctx" do
104
+ GPGME::Ctx.expects(:new).with(:armor => true).yields(mock(:import_keys => true, :import_result => true))
105
+ GPGME::Key.import("wadus", :armor => true)
106
+ end
107
+ end
108
+
109
+ # describe :trust do
110
+ # it "returns :revoked if it is so"
111
+ # it "returns :expired if it is expired"
112
+ # it "returns :disabled if it is so"
113
+ # it "returns :invalid if it is so"
114
+ # it "returns nil otherwise"
115
+ # end
116
+
117
+ # describe :capability do
118
+ # it "returns an array of possible capabilities"
119
+ # end
120
+
121
+ # describe :secret? do
122
+ # "returns true/false depending on the instance variable"
123
+ # end
124
+
125
+ describe :usable_for? do
126
+ it "checks for the capabilities of the key and returns true if it matches all" do
127
+ key = GPGME::Key.find(:secret).first
128
+
129
+ key.stubs(:capability).returns([:encrypt, :sign])
130
+ assert key.usable_for?([])
131
+
132
+ key.stubs(:capability).returns([:encrypt, :sign])
133
+ assert key.usable_for?([:encrypt])
134
+
135
+ key.stubs(:capability).returns([:encrypt, :sign])
136
+ refute key.usable_for?([:certify])
137
+ end
138
+
139
+ it "returns false if the key is expired or revoked or disabled or disabled" do
140
+ key = GPGME::Key.find(:secret).first
141
+ key.stubs(:trust).returns(:revoked)
142
+ key.stubs(:capability).returns([:encrypt, :sign])
143
+ refute key.usable_for?([:encrypt])
144
+ end
145
+ end
146
+
147
+ describe :delete! do
148
+ it "deletes the key itself and its secret one if called with true" do
149
+ begin
150
+ key = KEYS.first
151
+ GPGME::Key.find(:public, key[:sha]).first.delete!(true)
152
+
153
+ assert_empty GPGME::Key.find(:public, key[:sha])
154
+ assert_empty GPGME::Key.find(:secret, key[:sha])
155
+ ensure
156
+ import_key key
157
+ end
158
+ end
159
+
160
+ it "raises GPGME::Error::Conflict if we're deleting a key that is secret" do
161
+ key = KEYS.first
162
+ assert_raises GPGME::Error::Conflict do
163
+ GPGME::Key.find(:secret, key[:sha]).first.delete!
164
+ end
165
+ refute_empty GPGME::Key.find(:secret, key[:sha])
166
+ end
167
+ end
168
+
169
+ it "knows if the key is expired" do
170
+ key = GPGME::Key.find(:secret).first
171
+ refute key.expired
172
+
173
+ with_key EXPIRED_KEY do
174
+ key = GPGME::Key.find(:secret, EXPIRED_KEY[:sha]).first
175
+ assert key.expired
176
+ end
177
+ end
178
+
179
+ it "returns the expiry date of the first subkey" do
180
+ key = GPGME::Key.find(:secret).first
181
+ subkey = key.primary_subkey
182
+ subkey.expects(:expired).returns(true)
183
+
184
+ assert key.expired
185
+ end
186
+
187
+ describe :inspect do
188
+ it "can be inspected" do
189
+ key = GPGME::Key.find(:secret).first
190
+ key.inspect
191
+ end
192
+ end
193
+
194
+ describe :to_s do
195
+ it "can be coerced into a String" do
196
+ key = GPGME::Key.find(:secret).first
197
+ key.to_s
198
+ end
199
+ end
200
+ end
201
+
@@ -0,0 +1,48 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'test_helper'
3
+
4
+ describe GPGME::Signature do
5
+ it "#valid? is true when the signature is valid" do
6
+ crypto = GPGME::Crypto.new
7
+ signatures = 0
8
+ sign = crypto.sign "Hi there"
9
+
10
+ crypto.verify(sign) do |signature|
11
+ assert_instance_of GPGME::Signature, signature
12
+ assert signature.valid?
13
+ refute signature.expired_signature?
14
+ refute signature.expired_key?
15
+ refute signature.revoked_key?
16
+ refute signature.bad?
17
+ refute signature.no_key?
18
+ signatures += 1
19
+ end
20
+
21
+ assert_equal 1, signatures
22
+ end
23
+
24
+ it "#expired_key? is true when the key has expired" do
25
+ with_key EXPIRED_KEY do
26
+ crypto = GPGME::Crypto.new
27
+ signatures = 0
28
+ crypto.verify(TEXT[:expired_key_sign]) do |signature|
29
+ assert_instance_of GPGME::Signature, signature
30
+ refute signature.valid?
31
+ refute signature.expired_signature?
32
+ assert signature.expired_key?
33
+ refute signature.revoked_key?
34
+ refute signature.bad?
35
+ refute signature.no_key?
36
+ signatures += 1
37
+ end
38
+
39
+ assert_equal 1, signatures
40
+ end
41
+ end
42
+
43
+ # TODO Find how to test these
44
+ # it "#expired_signature? is true when the signature has expired"
45
+ # it "#revoked_key? is true when the key has been revoked"
46
+ # it "#bad? is true when the signature is bad"
47
+ # it "#no_key? is true when we don't have the key to verify the signature"
48
+ end
@@ -0,0 +1,45 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'test_helper'
3
+
4
+ describe GPGME::SubKey do
5
+
6
+ # We trust Key for common methods that come from KeyCommon
7
+
8
+ it "has certain attributes" do
9
+ subkey = GPGME::Key.find(:secret).first.primary_subkey
10
+ [:pubkey_algo, :length, :keyid, :fpr, :fingerprint].each do |attrib|
11
+ assert subkey.respond_to?(attrib), "Key doesn't respond to #{attrib}"
12
+ end
13
+ end
14
+
15
+ it "won't allow the creation of GPGME::SubKey's without the C API" do
16
+ assert_raises NoMethodError do
17
+ GPGME::SubKey.new
18
+ end
19
+ end
20
+
21
+ it "knows if the key is expired" do
22
+ subkey = GPGME::Key.find(:secret).first.primary_subkey
23
+ refute subkey.expired
24
+
25
+ with_key EXPIRED_KEY do
26
+ subkey = GPGME::Key.find(:secret, EXPIRED_KEY[:sha]).first.primary_subkey
27
+ assert subkey.expired
28
+ end
29
+ end
30
+
31
+ describe :inspect do
32
+ it "can be inspected" do
33
+ subkey = GPGME::Key.find(:secret).first.primary_subkey
34
+ subkey.inspect
35
+ end
36
+ end
37
+
38
+ describe :to_s do
39
+ it "can be coerced into a String" do
40
+ subkey = GPGME::Key.find(:secret).first.primary_subkey
41
+ subkey.to_s
42
+ end
43
+ end
44
+
45
+ end
@@ -0,0 +1,516 @@
1
+ key1_public = <<-RUBY
2
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
3
+ Version: GnuPG v1.4.11 (Darwin)
4
+
5
+ mI0ETbL4sAEEANBs/WsOxRCLdsW1h8LKGT6eJpAs6omGV/G7TJnMsk92BUIub3oZ
6
+ 9oRC1L0l4EKB6o8/vULziT815dbbVxwQIOyDXEqP4sokRxjSNNkpPb+RuIjdmP6e
7
+ SJ2NxCxV/GxLhjZZTHG5SPH4Gei3TtdiHMHoar0rwEcVdS693K/6Ww8ZABEBAAG0
8
+ IVRlc3QgbnVtYmVyIDEgPHRlc3QxQGV4YW1wbGUuY29tPoi4BBMBAgAiBQJNsviw
9
+ AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRD7yLd2W11cdyxOA/4gPEK1
10
+ qF8bp0YJfc91Ob/J70N5gNuO06AeBa8o6MHTUheCp5CMFD8RISDegsiYey3O+Wvk
11
+ rg+BmIQWqGTglDIDOM8B1Bmc+T+C0sRwIwmHqDo5a9mR2QnlcFqZ3SNV5MdxDUa4
12
+ GJk4LbUj/JwU2nR8Z4eA7OC1LjOexFKAfLX657iNBE2y+LABBAC9UqqJKhUDqhDy
13
+ dPfMsQYOA14QPcx8cx5hsUyLsZOm9RGxNdw8fRItfMZWfwB69pr4KicVYxC5YyxM
14
+ +KpVBHr+QoTxEn/KcMdude44Y104F33oZ2wiCpMzCu1ZW/OFIoWuEMHXLyIXJD1C
15
+ VVMkbiOjwRxo3otPSGijrhcmS0PkJQARAQABiJ8EGAECAAkFAk2y+LACGwwACgkQ
16
+ +8i3dltdXHdf/wQAiIKzJaUg5S+EU3lr9XZPIDZeNcQpKf2JaLu4uFVPtKGtZIYa
17
+ F00HCKom4OHkrFfdVdr1948xet9sAt2PV9GoIAV8pkBwqs02Wz6mxJpgsnAuEJTM
18
+ Pwe30z4usZ5kM/PDMCpN+A9vkzYieyxquvkul2W7VfzLftx81UexyoFnJ9I=
19
+ =u++L
20
+ -----END PGP PUBLIC KEY BLOCK-----
21
+ RUBY
22
+
23
+ key1_secret = <<-RUBY
24
+ -----BEGIN PGP PRIVATE KEY BLOCK-----
25
+ Version: GnuPG v1.4.11 (Darwin)
26
+
27
+ lQHYBE2y+LABBADQbP1rDsUQi3bFtYfCyhk+niaQLOqJhlfxu0yZzLJPdgVCLm96
28
+ GfaEQtS9JeBCgeqPP71C84k/NeXW21ccECDsg1xKj+LKJEcY0jTZKT2/kbiI3Zj+
29
+ nkidjcQsVfxsS4Y2WUxxuUjx+Bnot07XYhzB6Gq9K8BHFXUuvdyv+lsPGQARAQAB
30
+ AAP7B/aQucP7HP5LF9OEn+6t8hHDn5YLvEc3pHV3atfihyfXRxee7DoXjFGWWbIG
31
+ WbF8104Zing4tJjNUtJssgE0FMDq1EmcDjYjMPwNUrmaPhlbsnCpqtiIdjsJbdsh
32
+ 39Kl8MG1EDSInwq2ToVyQGfFywClUYYQmqCbVEmaeoocZMUCAORfTj82VyelybRV
33
+ p6JYvg9oIBuUZh6RUFsWtXVxs5pqNKN70/5SnFzIaukY3NBVqDQ1iOcLQmbYBCPn
34
+ /gDTDa0CAOmj8HhXeNq7Aof9qqvzh2YZhuyoc4BtAYGs9KJj/oLEkTkIVlcIM5yp
35
+ tYRzdQZT8RQRRD8sUAC1W2BtX+033J0CAIKIvFJnRqwhwQn+eBG7f20lPqNA8ceU
36
+ yz1vMOPZ/puOulsxuH/g0vGJ6i364Aph7UdnTjl3lCXosqmxHHgJbp+eorQhVGVz
37
+ dCBudW1iZXIgMSA8dGVzdDFAZXhhbXBsZS5jb20+iLgEEwECACIFAk2y+LACGwMG
38
+ CwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEPvIt3ZbXVx3LE4D/iA8QrWoXxun
39
+ Rgl9z3U5v8nvQ3mA247ToB4FryjowdNSF4KnkIwUPxEhIN6CyJh7Lc75a+SuD4GY
40
+ hBaoZOCUMgM4zwHUGZz5P4LSxHAjCYeoOjlr2ZHZCeVwWpndI1Xkx3ENRrgYmTgt
41
+ tSP8nBTadHxnh4Ds4LUuM57EUoB8tfrnnQHYBE2y+LABBAC9UqqJKhUDqhDydPfM
42
+ sQYOA14QPcx8cx5hsUyLsZOm9RGxNdw8fRItfMZWfwB69pr4KicVYxC5YyxM+KpV
43
+ BHr+QoTxEn/KcMdude44Y104F33oZ2wiCpMzCu1ZW/OFIoWuEMHXLyIXJD1CVVMk
44
+ biOjwRxo3otPSGijrhcmS0PkJQARAQABAAP9FheQ5duewyQzwQ8sIVsg4T68WbnU
45
+ ZEtMpsq5K23n1Goxi9PEpNxVZDB0toAwbqjbMY09rU23lGKBt2OnAK+6qEBRkdoh
46
+ 9HjgVckVy/efqp2FGSFs79yv4m3EvK/lRnMhFE9/LktayhZsiKZaRmR5evqyCoRh
47
+ vWAccOngO4ww+WECAMtq4M9tTeab6SI5nH0W/RfGicH701cacRkM4KDXxs8STmTy
48
+ qugEERpuK2fTA4DjBRjv1oF+Ld5mAhExtH7gktUCAO5DFNdfdW6TifdHPpLqyRgP
49
+ 7DpZlcOqVIbVwtcPrk+3nVASQ4qvCggMJT36Fif9EZqqkIIZeWQxGADZAtkblBEC
50
+ AKb9RHZNxaCY+Ax2AkI5fhwMpA/PEcyBSVes+mmlA4Zneq8YJciUFPwKdOaHU6yc
51
+ 8LiuaTDNjuHLJpUZrWa2N5mdK4ifBBgBAgAJBQJNsviwAhsMAAoJEPvIt3ZbXVx3
52
+ X/8EAIiCsyWlIOUvhFN5a/V2TyA2XjXEKSn9iWi7uLhVT7ShrWSGGhdNBwiqJuDh
53
+ 5KxX3VXa9fePMXrfbALdj1fRqCAFfKZAcKrNNls+psSaYLJwLhCUzD8Ht9M+LrGe
54
+ ZDPzwzAqTfgPb5M2Inssarr5Lpdlu1X8y37cfNVHscqBZyfS
55
+ =1FOM
56
+ -----END PGP PRIVATE KEY BLOCK-----
57
+ RUBY
58
+
59
+ key2_public = <<-RUBY
60
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
61
+ Version: GnuPG v1.4.11 (Darwin)
62
+
63
+ mI0ETbLs3gEEAK+Y1z0MgmwP3M5d+tGTVHKBcoi5KRJKYSbWX2Kus+vVCLvohbuf
64
+ b41pNcQh3QWY9DtnvEyFHoVnrb6fktFjbiU0y89qv7vsbleR8O5Mt82urjlsVCqp
65
+ kI3a4l4+T6a1iLR2QSF04v2e0PKECIFpSLmnjAiZUyYPaseT/h+r84uZABEBAAG0
66
+ IVRlc3QgbnVtYmVyIDIgPHRlc3QyQGV4YW1wbGUuY29tPoi4BBMBAgAiBQJNsuze
67
+ AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRA5K+LKd9ZlZu/8A/9Ql6Qf
68
+ m2LS49QZUcV4sqvUrYRqhHrXxH4NpfvcErE2aOolEtLYpIf1wFun6Cmjc9TLacW6
69
+ vJGaKfafFqQ5I4bGDAwkVik6keU58HM7vxBmWafNh2KhwzNQXIJ9yORYSfUoWGWS
70
+ yT/JDJk7mSFcSCyRKXc10PcnLUkoWwSnUtdN0biNBE2y7N4BBAC8lQFu/ru0hNvn
71
+ NpeMkkxZhgNVSaIfR7My5zznCwaVQzud6ZH2zcQUmfina12vRNqA7TBaQyc/Ebsd
72
+ z/PkMCCXPDyaUgp1EJKdVd5nUnO/6yEinf1zkI5kpYd/dKSMcbMIOdEUeBsOUR7Y
73
+ g6uPoNK40Dwmg3vH5rsSEcrupzWeHwARAQABiJ8EGAECAAkFAk2y7N4CGwwACgkQ
74
+ OSviynfWZWZJ4gP+KI9e9fjpCVLXVA3mH459+kWwNOMWrTImk0CXFGIS/sm7cODu
75
+ zLJNS32muxaHisbIDVcK/vac3wksa0DjgiIQa08yI40F7V9y6FsS/PxvPO8Hi9AX
76
+ AjUk9I7RWu3E2loIHgYeTBwXyKLmWr5ZVfpX6KvIa4Y3MTRnE0x6+woeT90=
77
+ =DclA
78
+ -----END PGP PUBLIC KEY BLOCK-----
79
+ RUBY
80
+
81
+ key2_secret = <<-RUBY
82
+ -----BEGIN PGP PRIVATE KEY BLOCK-----
83
+ Version: GnuPG v1.4.11 (Darwin)
84
+
85
+ lQHYBE2y7N4BBACvmNc9DIJsD9zOXfrRk1RygXKIuSkSSmEm1l9irrPr1Qi76IW7
86
+ n2+NaTXEId0FmPQ7Z7xMhR6FZ62+n5LRY24lNMvPar+77G5XkfDuTLfNrq45bFQq
87
+ qZCN2uJePk+mtYi0dkEhdOL9ntDyhAiBaUi5p4wImVMmD2rHk/4fq/OLmQARAQAB
88
+ AAP8D1bzoZeGyrQhis0asMV1NHoStHcxa3HANi12wHcIzG6sMEcmLJ9nVjQFUISR
89
+ S3CC0HA12rzrz0VhABSuVZihKd2dEVFQiY2BfpZ0j6XVoUF/w+wB1KJ73et6AsyY
90
+ f3iLtu/OTQeOC68EKi08yogRu/EFo25vVOhyIhQF5rDMkxECANKDcGkmJsZZr7+V
91
+ GqJS5mHLHy7aI7aN8f4uEQx/QXK3MW5PA12KgNc91kT8MbTYueI8/yNZe/DtBpji
92
+ yUelpZECANWJ/9L2gEgXDggcYe5+f7kYzxhkEjypX3Ewkza7CRWUqS2Bz8GzmFls
93
+ 8s+UhiyWJAMZ/uNUy6YPawUoTnZyYYkCANCoKZfKw0zHypZ7HhH1znmdQkte+sJc
94
+ G9604Os1RGVO6Tu30fCd7AaStPc4qfAPwJDDaSCLzMN9U6VGROaW9Iyff7QhVGVz
95
+ dCBudW1iZXIgMiA8dGVzdDJAZXhhbXBsZS5jb20+iLgEEwECACIFAk2y7N4CGwMG
96
+ CwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEDkr4sp31mVm7/wD/1CXpB+bYtLj
97
+ 1BlRxXiyq9SthGqEetfEfg2l+9wSsTZo6iUS0tikh/XAW6foKaNz1Mtpxbq8kZop
98
+ 9p8WpDkjhsYMDCRWKTqR5Tnwczu/EGZZp82HYqHDM1Bcgn3I5FhJ9ShYZZLJP8kM
99
+ mTuZIVxILJEpdzXQ9yctSShbBKdS103RnQHYBE2y7N4BBAC8lQFu/ru0hNvnNpeM
100
+ kkxZhgNVSaIfR7My5zznCwaVQzud6ZH2zcQUmfina12vRNqA7TBaQyc/Ebsdz/Pk
101
+ MCCXPDyaUgp1EJKdVd5nUnO/6yEinf1zkI5kpYd/dKSMcbMIOdEUeBsOUR7Yg6uP
102
+ oNK40Dwmg3vH5rsSEcrupzWeHwARAQABAAP6Aptku64V1jcH+zhL/AuBtrMdlK5B
103
+ 6YDKP2fm9aK3YpTdXB+AfxL1JPvD7jyTvPqMsr+UrYrEHiEWnyDi1EK+EJMSnaUb
104
+ hHRFBtqapnzhJ2qXLcM8PHV5aby7dMhpMXSvF+gJEtsdSPuX2Gcuc/iNXwdymacJ
105
+ M1SY89MUbmNqvQECAMsmTUb9CvHed7xPoHAHZuAIhnvNaVosLsfnO+v78zh+8P8X
106
+ mjsT11u1ayW3wbfsY8EGOx82RnZ7hEWcCPvBk98CAO2kgj4mZ1rA08LzoAYgibdK
107
+ PaQqeZ+IS91J7+7zzB580xiKUg/HVBjHzbZvPYUPI6mX8JShhFI3heB0jq8XPcEC
108
+ AM3HHAlOqxtrjk3Cpvrcg/LPP2CSJ/rSY9Sj9izUfuZLGjJGRVogjpp5YFPJWieE
109
+ CA5Lkzv2+Hb2KQRjpmmLEqigdYifBBgBAgAJBQJNsuzeAhsMAAoJEDkr4sp31mVm
110
+ SeID/iiPXvX46QlS11QN5h+OffpFsDTjFq0yJpNAlxRiEv7Ju3Dg7syyTUt9prsW
111
+ h4rGyA1XCv72nN8JLGtA44IiEGtPMiONBe1fcuhbEvz8bzzvB4vQFwI1JPSO0Vrt
112
+ xNpaCB4GHkwcF8ii5lq+WVX6V+iryGuGNzE0ZxNMevsKHk/d
113
+ =KmYO
114
+ -----END PGP PRIVATE KEY BLOCK-----
115
+ RUBY
116
+
117
+ key3_public = <<-RUBY
118
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
119
+ Version: GnuPG v1.4.11 (Darwin)
120
+
121
+ mI0ETbLs+QEEALBpfCzDVNDWw2jWBpmNAScCmdX92voNSp+Jd0GFhabDbmfasAwO
122
+ rEKAn/PgQCOdHNT8m7EHUCTDOB2vBe360IE8+q9OylF10I6PSMvyoXHnwL/UQ4BO
123
+ dcgYYE54AmensPWlYxLlLu34gnKgSEnNULee9x4KnVfeidNj1gpQTenlABEBAAG0
124
+ IVRlc3QgbnVtYmVyIDMgPHRlc3QzQGV4YW1wbGUuY29tPoi4BBMBAgAiBQJNsuz5
125
+ AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRA0d6XcPemRge3TA/9jNcgZ
126
+ ad7j6R7yUL2lYw5jeSuyiIiRzwxb8PzEOzEAUBaLBWGsLunwDjU6ZTSckNUxjmf9
127
+ sHkeAb1WmYSidsHpLaljLp/dtsYgUQg6wUNjv3VEyeT9oViEVxr6RIYyd6kTQAUK
128
+ kHjiaRXftqcgDfhgI/+Nzd8gYZxGeMudnsavcLiNBE2y7PkBBACwoV1uFEtxoufH
129
+ KMqBWMdCY8B/0D4ytgjjXBqwRN1k6QFEqUe/A+Nf8ZVE8lNyb8BHwMVoS4auOKLs
130
+ g4JeIlwvEeFAlsdABlUtkEKJEcxns3nxmCw8koiWkk9KDY9rk3ZU0UweLDFshYq/
131
+ 1z/+QueKdx6uJZAHKM3DoBqpEqomhwARAQABiJ8EGAECAAkFAk2y7PkCGwwACgkQ
132
+ NHel3D3pkYFGagP/YvAIsOb5ve9441FXwlkjiGCiUugfC/8Mw7U+ufGjbDkjSgOH
133
+ +WE+Rx+iUMT55JoQX8G/bephtYq0YSa1kyKOebOc08ZBPWH/4sK/UFjnVBdCuglj
134
+ tsU3JEa9ma0EN5Iwj8cHpvzATsxS5zCIEfDYHIHNhGhnpFp4GKgN6cXD2QY=
135
+ =T5Nu
136
+ -----END PGP PUBLIC KEY BLOCK-----
137
+ RUBY
138
+
139
+ key3_secret = <<-RUBY
140
+ -----BEGIN PGP PRIVATE KEY BLOCK-----
141
+ Version: GnuPG v1.4.11 (Darwin)
142
+
143
+ lQHXBE2y7PkBBACwaXwsw1TQ1sNo1gaZjQEnApnV/dr6DUqfiXdBhYWmw25n2rAM
144
+ DqxCgJ/z4EAjnRzU/JuxB1AkwzgdrwXt+tCBPPqvTspRddCOj0jL8qFx58C/1EOA
145
+ TnXIGGBOeAJnp7D1pWMS5S7t+IJyoEhJzVC3nvceCp1X3onTY9YKUE3p5QARAQAB
146
+ AAP4+Ayv6LVxlrhj8HtdyG+Ja2YX/GYaxR161dxPyZ0h4cVLDec1QhwCe/Q9Mrad
147
+ DG7I0+DhX4CCIpPZD+PwmzjIuIrw+CeCVFyYwnKzbjSQMCHbQaiZhCmiqItoe/P/
148
+ mf3rTX7hh6H02VtRhMcSPfFv7ckWiHz3Zc5PEUvS5E+B4QIA0b6ddoIyeEdvlrmj
149
+ IZs2gMvpj5p7ksuRX+Wo04Dw2v5qoYFamgq+junLwjo2hKP2WzE6ocAYiFycE8/i
150
+ NzG5xQIA11EKhP8nuAbLzkbz45m3o858MgugBB062rg1dcjXEd9b8CqhdLI8btPG
151
+ Nxav7bRD1HG5wEaZrHidyIohjwoRoQIAnuFG4PG878SbY+Gj3Qu9qme7k6D046Yc
152
+ quNSOeSfdqpYq5OEc3EtPkYonEgA9yBWzDHlLCz4+QOsGl0vBaltCawItCFUZXN0
153
+ IG51bWJlciAzIDx0ZXN0M0BleGFtcGxlLmNvbT6IuAQTAQIAIgUCTbLs+QIbAwYL
154
+ CQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQNHel3D3pkYHt0wP/YzXIGWne4+ke
155
+ 8lC9pWMOY3krsoiIkc8MW/D8xDsxAFAWiwVhrC7p8A41OmU0nJDVMY5n/bB5HgG9
156
+ VpmEonbB6S2pYy6f3bbGIFEIOsFDY791RMnk/aFYhFca+kSGMnepE0AFCpB44mkV
157
+ 37anIA34YCP/jc3fIGGcRnjLnZ7Gr3CdAdgETbLs+QEEALChXW4US3Gi58coyoFY
158
+ x0JjwH/QPjK2CONcGrBE3WTpAUSpR78D41/xlUTyU3JvwEfAxWhLhq44ouyDgl4i
159
+ XC8R4UCWx0AGVS2QQokRzGezefGYLDySiJaST0oNj2uTdlTRTB4sMWyFir/XP/5C
160
+ 54p3Hq4lkAcozcOgGqkSqiaHABEBAAEAA/wLlyMm4I0M0WhNMNeNAlLc/+e3W2Zh
161
+ dIGDzdzweSxf/Uw4gbU0CyDGAHfPlOk15rBi5PrvO5mEYDIMvBp3a+DJmAUSZJFl
162
+ aFIOIemhYYildvoIDisBtkdR35+/5WBCYRRgawo1jPo8v3icK++FWjJe6R5Y4GTD
163
+ 1WEltWM8S0x/aQIA0VzMSeSt4gRpjafjnyUATMGa8eYAgydOHiwkqIsMnm0m1Zua
164
+ P/VBvkFxUKs/62GWr0USrn6TShdTChDu4Q1aXwIA1/n3utDkfGOrKL7w3CplMP8O
165
+ SAmzqh79VSzoT7oBW+oqapy/JFpN+hJ5FeIVPWCP8/HlHdtq32X7hbNuQ4r02QIA
166
+ ytqWvM//YeZcoUfckrxumMpEW613YYMCbIDW51EauKFrAxK1hqHl1I8VwXs8H+6v
167
+ JvDNxSddjC/bMZ/QivwJyaDfiJ8EGAECAAkFAk2y7PkCGwwACgkQNHel3D3pkYFG
168
+ agP/YvAIsOb5ve9441FXwlkjiGCiUugfC/8Mw7U+ufGjbDkjSgOH+WE+Rx+iUMT5
169
+ 5JoQX8G/bephtYq0YSa1kyKOebOc08ZBPWH/4sK/UFjnVBdCugljtsU3JEa9ma0E
170
+ N5Iwj8cHpvzATsxS5zCIEfDYHIHNhGhnpFp4GKgN6cXD2QY=
171
+ =QWZy
172
+ -----END PGP PRIVATE KEY BLOCK-----
173
+ RUBY
174
+
175
+ key4_public = <<-RUBY
176
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
177
+ Version: GnuPG v1.4.11 (Darwin)
178
+
179
+ mI0ETbLtDQEEAKBGC+ZlPZitUGQ76XxF8xm3qCAwm30xitHq4jAItbQ6GfsVZb1r
180
+ jKjOcupf2LPDrnhCZ5eTXvFCc4mqvv3fJAeoAD6nEIQmG7DYeYoGwVztFTRajLFG
181
+ krgchcYpopi5Xq5IUe57UaFMt6SEqzajAJWSD6303rHIJJ/2SaQA0wEZABEBAAG0
182
+ IVRlc3QgbnVtYmVyIDQgPHRlc3Q0QGV4YW1wbGUuY29tPoi4BBMBAgAiBQJNsu0N
183
+ AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAKfJF4Vk6CPfZcA/0b7FZE
184
+ zvsNdxESao+UO0ReXIVKT3vl+7NdauiSsQQsg0/zxxXxctmAq6oalHg1pbQLWxgI
185
+ uKPH1sxgSOZ1LGWEPENRwi9oVv6ENJVKcX87OUdCPu3gryr6os0oSSpXzYTEFBgJ
186
+ RNJdqL7+Y73P9glMhzDb1eZM0TFHI2nr2fzfe7iNBE2y7Q0BBADY38LZ3YAIgq3r
187
+ k54Y6x3mN5TyMTex994jC91UCYqHFwhIM2v0UlsA/QkqbS8nbqOH2zDzEFs29Wcv
188
+ cUeHWBQaAtiHr/izNy4Qo9pXW3eI5vDfeXEB0MGk21JqabPLWTd5zcNlXXfr6TxK
189
+ 0+h9Ivbk0mPSP/E3XcUrJtJyml6ilQARAQABiJ8EGAECAAkFAk2y7Q0CGwwACgkQ
190
+ CnyReFZOgj1NWwP9FKrmuEN+RfsPsVHEv0liGFyKbcyteB+12Zp+aNzMddCOLYXA
191
+ jvoMv2F+WfrAvzdwUeYWq93An6w44TV7GfsVky8IDHXZ4wAnUrE2tuCvCPqUToVV
192
+ OBjCYD0To97vULkS/+bU1+jAE3IYtedYNFdGhd0cm4kLzFVlAzc9xDLTp08=
193
+ =Emj0
194
+ -----END PGP PUBLIC KEY BLOCK-----
195
+ RUBY
196
+
197
+ key4_secret = <<-RUBY
198
+ -----BEGIN PGP PRIVATE KEY BLOCK-----
199
+ Version: GnuPG v1.4.11 (Darwin)
200
+
201
+ lQHYBE2y7Q0BBACgRgvmZT2YrVBkO+l8RfMZt6ggMJt9MYrR6uIwCLW0Ohn7FWW9
202
+ a4yoznLqX9izw654QmeXk17xQnOJqr793yQHqAA+pxCEJhuw2HmKBsFc7RU0Woyx
203
+ RpK4HIXGKaKYuV6uSFHue1GhTLekhKs2owCVkg+t9N6xyCSf9kmkANMBGQARAQAB
204
+ AAP9EKVFvh98prs1UruwM7J2HZEn+nPh6j43ezbIWBHHgVjZcuzVfLdLTAro/3OF
205
+ 56GmoKHQ7XqmTStIIZ+kp2xB6wmQnQ8bxjOwWZ40/hH/r57Ednz5nflJQeknXvlV
206
+ j6sxJKJppyfu5bk9ouwV/ImOOicOwjBWT6ZxiA8BNhWN0JMCAMdLskpD1OYaNHcg
207
+ Vlt1IXNEG4yUpdPjtlCoCNd4fy+BCvBkXQ44dtsV6XH0E3Z2DX/gantvioui315f
208
+ 2Iez9CcCAM3gD0dGAZ6m9pOcjYqMNFAL6TqV+cY/LonBCZar+IZ4E2dWdn5Nqj3A
209
+ pBWYl7ENziYL7/4uvqYrHXQw/UKgaL8B/0weNCbxJEelVihv6ULpAfisLE7a/qlI
210
+ 5hu3jnTwoVzZFPLUO7/UYuZFlF6R2mzrVzxzCvsax7phAoV18CEPiuKg27QhVGVz
211
+ dCBudW1iZXIgNCA8dGVzdDRAZXhhbXBsZS5jb20+iLgEEwECACIFAk2y7Q0CGwMG
212
+ CwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEAp8kXhWToI99lwD/RvsVkTO+w13
213
+ ERJqj5Q7RF5chUpPe+X7s11q6JKxBCyDT/PHFfFy2YCrqhqUeDWltAtbGAi4o8fW
214
+ zGBI5nUsZYQ8Q1HCL2hW/oQ0lUpxfzs5R0I+7eCvKvqizShJKlfNhMQUGAlE0l2o
215
+ vv5jvc/2CUyHMNvV5kzRMUcjaevZ/N97nQHYBE2y7Q0BBADY38LZ3YAIgq3rk54Y
216
+ 6x3mN5TyMTex994jC91UCYqHFwhIM2v0UlsA/QkqbS8nbqOH2zDzEFs29WcvcUeH
217
+ WBQaAtiHr/izNy4Qo9pXW3eI5vDfeXEB0MGk21JqabPLWTd5zcNlXXfr6TxK0+h9
218
+ Ivbk0mPSP/E3XcUrJtJyml6ilQARAQABAAP6Amin1s4k7iiaFcKtD/H1QiRDZquW
219
+ cVxYrrMiyUcVhLnELohzA5gc6SZRAVQ29h0+j+jRbXMKJFKLoRqvv0iCk/XOtEFO
220
+ keuBQwE3depOiy7lHl6LYd4q3tbu23dKEGnpa8bvQujEJa/uzt9WX90IS80pUGkf
221
+ EUjquOZrCLTc0skCAN87u9Ezy9x9z55KtiCjoMCCod98elSX9mG+tbfOAmRsmBkV
222
+ RU0Bzvz/465EQPcv3EthgBaH1ri3dnP1KUorOl0CAPi1Efg1+tE7SOm7MVt9maC9
223
+ zh4LAnD4tNhYr93CmnQw85NQmggtRW0/qnk6MF0TM/nS9tVWIFINcqYrDb0JtZkC
224
+ AOWgGo5NFrrYnSpE2afTkuQZjKzxED98MmgjCKdEV4eRE8j8IWGsgD+l4kp/+fL+
225
+ wPMzfTjcV/XVdhEMPTPPFE6hmIifBBgBAgAJBQJNsu0NAhsMAAoJEAp8kXhWToI9
226
+ TVsD/RSq5rhDfkX7D7FRxL9JYhhcim3MrXgftdmafmjczHXQji2FwI76DL9hfln6
227
+ wL83cFHmFqvdwJ+sOOE1exn7FZMvCAx12eMAJ1KxNrbgrwj6lE6FVTgYwmA9E6Pe
228
+ 71C5Ev/m1NfowBNyGLXnWDRXRoXdHJuJC8xVZQM3PcQy06dP
229
+ =SMnt
230
+ -----END PGP PRIVATE KEY BLOCK-----
231
+ RUBY
232
+
233
+ password_key_public = <<-RUBY
234
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
235
+ Version: GnuPG v1.4.11 (Darwin)
236
+
237
+ mQENBE20i3MBCACuRmguvjHCkZaJGu9mD/vMa4ytavXYLqQ0HBQe6RAqVarAidFf
238
+ bKfIAuaqg9xRpnNpDL+hPqbOiYcxy6USw0hvEhLUem83KHIwU8t6+Fu5vRYOxgch
239
+ R/t66N9+B5TfxXg5fAKl7dKesXXw1VwS6jnmjWB1NaWwfmhRkbSQbCRKW38JNQ6t
240
+ xysZnFDtqmp1Y/vb4LZ8Q87ITfHkxLAfPKEFh25qMfXB/iXgP4NnFOFH1bZ9sz4E
241
+ cX0sXEAXKtrpHFOg78qTQaucKu7fBJo+r/crAK7SWutGCv5R5kE+sLNWsOdgFz4k
242
+ CdwgxQeK0URwMF9kNHb/HHwfiWUZZrkAu0sxABEBAAG0M1Rlc3Qgd2l0aCBwYXNz
243
+ d29yZCA8dGVzdF93aXRoX3Bhc3N3b3JkQGV4YW1wbGUuY29tPokBOAQTAQIAIgUC
244
+ TbSLcwIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ8QmEM7hLckmStQf+
245
+ JYFRx82ufCAZ4PjcXJJJsb1M4jhUo9/mOdWaQy19E5n6OM1heG5dWgoPTBL8t96G
246
+ XQmum9zD2bI6hOIT/0z85Sm/+tbQwZUUba9Rw8/NHnjOuvVxr6DHQOtC86LezIY0
247
+ zrVk6sfCDw0Ll/i3q8zjY5oZw7VOOhCwPd6vhWtdPfW5QQ8/gC/gAGZiHm6Cf1nf
248
+ JV+WRtyUKNnlDVa9iPe4CdTGQfqqgpMWEoHV6NKfQ69A2dNA1SRX2XEecoEXwcnq
249
+ HVO9NqZDdr3NFfMmDEo7vAD77d7hXEFE4MBR5E2C91P+sOuOTVDjVQ3tucJ7qesw
250
+ puyJCPsWWsd9omxTze+RYrkBDQRNtItzAQgAlHfZpWMwcmi1YpGDFdALSk4pozBV
251
+ jjc9QsrWGozmJUpI1SAXOto3k3apR4lPzBsUOuf3bAt2A2e0CWPpCUWPByzm/Hpg
252
+ nIOPAK6Ab9hGpSGSObegz6mNUbhDopmh0XojejWm3CExtBadIY8ukSKOZSqnWsO0
253
+ MQ08eW5xMApqeajtTY8U2U4tVT3BGw0XM5Tqrtg05e0GmYa3wGssjI6f7A1i0InB
254
+ oAxy3AYL2jVPkODsPiUwK6DIfpsc+FQk4ouWfZcp3sgOJXhcoOaL6/Xpb/Rzpy+G
255
+ HaO9+xU/btkcx6IQV0icygFNxcQUDbBBESjDVoRvDbAtWg0rXkeK9N5bAQARAQAB
256
+ iQEfBBgBAgAJBQJNtItzAhsMAAoJEPEJhDO4S3JJS7EH/Rl8NOMaLFs7wpghmoqo
257
+ PHQhzkcV8zXJ8gwT+2qAz1Et9oyU1pHBT/1E+8XqrMlXQhcCevhmwlQdIIQpfzXZ
258
+ eserXabPKrwPDkwPoajVFLVc1WPHzBbmuBP/7XSgEXxfKXE8qA3nAkiidnfdA7ww
259
+ WB+4iMYnsimKAQxTLQvwZE3twnt+5hPbtg89BSaYSv2WuBkh/qAb8DxoffjenTko
260
+ RPX4fQDveZa4UswstJNM1s1hq/idQtCzgrRw0/ZD2g/hupBbXlM7dm+Iiuy+hMFM
261
+ G4bNiySxInxh/nfvsvlz9xgePjqxptjVggEVVkKHvkb8Z+MX+/N632WOVkIw2HFB
262
+ tck=
263
+ =hRl0
264
+ -----END PGP PUBLIC KEY BLOCK-----
265
+ RUBY
266
+
267
+ password_key_secret = <<-RUBY
268
+ -----BEGIN PGP PRIVATE KEY BLOCK-----
269
+ Version: GnuPG v1.4.11 (Darwin)
270
+
271
+ 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
325
+ =9u2Q
326
+ -----END PGP PRIVATE KEY BLOCK-----
327
+ RUBY
328
+
329
+ expired_key_public = <<-RUBY
330
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
331
+ Version: GnuPG v1.4.11 (Darwin)
332
+
333
+ mI0ETb8S8gEEAK2m1FMu8mAWS+WwnQIXLikRegUC5faHFpNNwqp9SgH4GuWxq2iQ
334
+ PfnSHRhE6qtcK6DVqJv4R6h1AfCCd1Vdgp8FtWyCA6dgxflH206VY+GgfwbK6nDs
335
+ eiCX9wFNKZjXrmesOete1oxIrqDKpNQbJ1zwGSQ+GW3KQFq4gImTiA17ABEBAAG0
336
+ JkV4cGlyZWQgS2V5IDx0ZXN0X2V4cGlyZWRAZXhhbXBsZS5jb20+iL4EEwECACgF
337
+ Ak2/EvICGwMFCQABUYAGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEDY/0HHE
338
+ tnipp88D/RSAytabxU9uGCba4mEla/6PJavnqA1y+Pfuvqq6mlAOPTsL/Y5TXyp7
339
+ USEgqmigdga+FHVJfZu3C+uxkIkzGjhi4iuL7nI3gGwGNd82HJL0j1WnM47brPjo
340
+ F85SxAyn0LXk77piMVlK96TfQFX0Zk+Zz8QEaW3B59O705US6Q8puI0ETb8S8gEE
341
+ ANBET93bCi3SalKuNtT5D7L7+zNgiP9xEpCIhoUbW0OVJ3Nz1iSWRLYeQsPyKnhZ
342
+ Ws1Gv9Bp7MC5iOP1jtPd81elrwN71o+4xT7nv3Hvz1JzuhrYFC/wKcz1DG/Diset
343
+ jKPJu/W8ip0K5jYvDIUrDO8g9jCc8m80wMhxMzpsVNhnABEBAAGIpQQYAQIADwUC
344
+ Tb8S8gIbDAUJAAFRgAAKCRA2P9BxxLZ4qbMOA/9XY586CtP1QCVvIdlJVVuLc/mu
345
+ I7IVAp03q4hqA6ykooLFu3FzYFTCENcyvemEB4TJhfG6XYmrq5N0jOrl6BB/ONLc
346
+ 37OBnsxWQBKVbn7yzDb6WzsMtAlQ8Q8S5oYbIWSt+nUoE5slZ+tx9ngzLG20IpUH
347
+ sunYPhvnuBAfIRuA0A==
348
+ =tKG5
349
+ -----END PGP PUBLIC KEY BLOCK-----
350
+ RUBY
351
+
352
+ expired_key_secret = <<-RUBY
353
+ -----BEGIN PGP PRIVATE KEY BLOCK-----
354
+ Version: GnuPG v1.4.11 (Darwin)
355
+
356
+ lQHYBE2/EvIBBACtptRTLvJgFkvlsJ0CFy4pEXoFAuX2hxaTTcKqfUoB+Brlsato
357
+ kD350h0YROqrXCug1aib+EeodQHwgndVXYKfBbVsggOnYMX5R9tOlWPhoH8Gyupw
358
+ 7Hogl/cBTSmY165nrDnrXtaMSK6gyqTUGydc8BkkPhltykBauICJk4gNewARAQAB
359
+ AAP8DWaEl6kiZRqmkrwO8bYn05CyS0HoMx6rnFE+ed+fRW86/1ZQzvBKoaux0q/T
360
+ mC1NsWSriHwfzR0loCsnprvHmsaX7O7W4PHZRN+xB9clpRGfEnHiyljWuaP8bxWg
361
+ r57fmnJ+bFoWanyxZsHoYZrVOlMa6JpQiQ+y0QUsbykTCPECAMt6Z3qc54JtU3Rt
362
+ lNzHNE7zRYt1z2fRGnOmrh0ch5TF9x+uRqQ/Am4VYe6Xzjhj6HBO7tB/n4xK4ypz
363
+ JLviw8MCANp5hw99W1AOTXpIkIS7xC9Pbx2j8AwAW5nlzyFILX+mQR/SmUX1H722
364
+ A8gj98hb6UUuf+CRzx7/FB6gk6Yzi+kCAMhcDPRgDUPggcOSdCdZDbZ78xwHwwOS
365
+ +9MT+VkIYDmOJOSer9xUdtGPcr8t/kGeICFSqZC2My38Sj1TJTs4rn2gtrQmRXhw
366
+ aXJlZCBLZXkgPHRlc3RfZXhwaXJlZEBleGFtcGxlLmNvbT6IvgQTAQIAKAUCTb8S
367
+ 8gIbAwUJAAFRgAYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQNj/QccS2eKmn
368
+ zwP9FIDK1pvFT24YJtriYSVr/o8lq+eoDXL49+6+qrqaUA49Owv9jlNfKntRISCq
369
+ aKB2Br4UdUl9m7cL67GQiTMaOGLiK4vucjeAbAY13zYckvSPVaczjtus+OgXzlLE
370
+ DKfQteTvumIxWUr3pN9AVfRmT5nPxARpbcHn07vTlRLpDymdAdgETb8S8gEEANBE
371
+ T93bCi3SalKuNtT5D7L7+zNgiP9xEpCIhoUbW0OVJ3Nz1iSWRLYeQsPyKnhZWs1G
372
+ v9Bp7MC5iOP1jtPd81elrwN71o+4xT7nv3Hvz1JzuhrYFC/wKcz1DG/DisetjKPJ
373
+ u/W8ip0K5jYvDIUrDO8g9jCc8m80wMhxMzpsVNhnABEBAAEAA/0VV0Kl1amb22lY
374
+ spBcz26r5QUvFQ/EuRXxaIP8RLrb2H9T5cVGN32v+bbWtExky6cxzLOgDBKeBwT/
375
+ cuyhSieCntuxgjHoRRO8CKDSAWsjRTC/R9UpnTk+UiCrxK/2Bk7BorFbBR+lcmi9
376
+ bddoOe6p/LAFvJhK7y6OCCUqrh08LQIA4pPdh/8HdDgaHLaBkFMq3L5HVD1WfyVf
377
+ emCNIfGmE5i9JU0VRU7xPJXlEWxKmFPKdlGOAT8V4QSgLVvp7H+3OwIA60+9rWrB
378
+ i3mQgjETNM2mT0wDrXNCyuR2MdeOfCyEYY+4xBLdPs7aSsVakQrx/1B8WZkWZUNU
379
+ d7iuHlKaickIxQIA50UW9VuaMxyImLIdt2RzcLacOC98oMvZ8R/5ShkWunGOkUka
380
+ 0YHOGCUAqhjwh5SFKjp3VYfy22P3YR1Usj8ETpmRiKUEGAECAA8FAk2/EvICGwwF
381
+ CQABUYAACgkQNj/QccS2eKmzDgP/V2OfOgrT9UAlbyHZSVVbi3P5riOyFQKdN6uI
382
+ agOspKKCxbtxc2BUwhDXMr3phAeEyYXxul2Jq6uTdIzq5egQfzjS3N+zgZ7MVkAS
383
+ lW5+8sw2+ls7DLQJUPEPEuaGGyFkrfp1KBObJWfrcfZ4MyxttCKVB7Lp2D4b57gQ
384
+ HyEbgNA=
385
+ =NliS
386
+ -----END PGP PRIVATE KEY BLOCK-----
387
+ RUBY
388
+
389
+ encrypted_text = <<-RUBY
390
+ -----BEGIN PGP MESSAGE-----
391
+ Version: GnuPG v1.4.11 (Darwin)
392
+
393
+ hIwDbJ4P+uQnvtQBA/9OXytdl9XAnzDZau1nTDkqpYKUp4ZoBvwASwxexj4VWX8i
394
+ jo1AuJi7pzSrBssjDsMAXcnfzHsEKh6g3xu15Gttn1oR7oB8/Q8AlC8nX8Wwsg+n
395
+ EpS/TNE/oPae8EbPCNAYuWHaGOzkH1LNQ4fpYy1q2t6+Er3uyzq0LhXTJZTM3oSM
396
+ A2c0CKWdjRgiAQQAkRQ0VPk7emnx/1FeUIlOaGgQa4KnNUw/FIZYdQNh/FJm2oTp
397
+ wunScJXvxVTZjk4eE6QAcuBH/lV1mrRF37o+7XMDuzafhT+qxqoUF8SUkCw79jrm
398
+ NBaDYWiFPkECUMcAQOL9Uk3DvJ2vxpGMJ2g0wEcrcEEikY6juSAaZX+1TwCEjAOk
399
+ LkSJkASuIQED/jza/ZOZvk6GNpDeAJbsFWc0QGlkQ0wKiPer9PUQAuNMXFnaAbvx
400
+ t9dB9AtLnnFPM8Cpg8DqLdGuWkaa5gvdjW7weLSYRo7LCYQ3ZOHUUeavAN1RLKel
401
+ IiaofRm6Bm2JDgIv1Hz0Yfj5hGylGKDT7PqA7+jXYnymjugBLVoXfP4ahIwDwk/m
402
+ ZyOifKABBACEbNa0tv5XHyzyvm/kB6AU+Lz3Ixwcp7KC6k1KE5ZYwoVg51VIOu+S
403
+ EQxQzMJrL7QfL5H1Aq4aFWHgr6I+k9sqeFr4TIAx6/H53//VIAP4+zOeGMldRwNY
404
+ AG4qd+AxLNBEr/8HoGS8h+46Vudj4ykqmOQCX4sKRaiWcUkwzdUMtNJGAeAhDfVQ
405
+ n/W/yDGzkeGlzC7Wr5Fi83c5FD+J/eSsZo+dKTlKK/zEtvKhZKvoY5gHiS20KlI0
406
+ TWl5uBcWluXyqRqnCV5uLA==
407
+ =Tsce
408
+ -----END PGP MESSAGE-----
409
+ RUBY
410
+
411
+ signed_text = <<-RUBY
412
+ -----BEGIN PGP MESSAGE-----
413
+ Version: GnuPG v1.4.11 (Darwin)
414
+
415
+ hIwDbJ4P+uQnvtQBA/sEXKjykfQvuvJdvdtc105JrjyXYmbRRbvRxI+1axeqttSd
416
+ 6osDKwjBYYtYR9S3gdR0VjugFzHKP3XnbkPkeASbY4J7C3Tr0UlyZd0+0ZdIRFLa
417
+ mO9HxOjDZz3h3Sn1cl/D8JtH7KVYhbKYAEXTybUInu6jcWiXDgIQVZYpLgS0wISM
418
+ A2c0CKWdjRgiAQP+IZ93Yj+6Jqggr7NYOV+hBWAWj6NAIxx0zh1QSyPWPqBAQbQj
419
+ KlRljCX85rXHWXU2JW/BdQxBoF1ANuE3+HwZoDbwtOKFhRTuBKUN/YpphluUMmJ/
420
+ W0Wq6QL8v4+awwQX7eLE0T3FxQko57kLw//XqYsuv2RVCOYVbfQUmKHo0z2EjAOk
421
+ LkSJkASuIQED/iz3m6dONzuxuMesy6AY7gxa+Okgb7H2Is2ARGy1riNaLNhf5WZN
422
+ tsDd6QBod1i/tSwsMrbBjePPSyCyjD17QjdpieXtAqWfqwhxq0/KJtLmCwctHPnJ
423
+ 1fhPp8oy+n/et0UyQgiH/yI3bxVT/39ZURIf1QstD/HGPnI5upnIn4S2hIwDwk/m
424
+ ZyOifKABA/4qTB94c2bVir7Pg1uvO6cvQwb2Pj8UUAFysZt7WHVTcvpm33lj5wkP
425
+ QyY7o2rMKSS8qAmmBWOsfAPF5gCvgp4D2Kr5FB5kYWzmFOFxuIN8ayz25BJ+4YGQ
426
+ GdWwjSPU69/eet6q7p+XydGY8jv4e6u/2tAi3b2O5Kt0th1rftOJENLAMgFgGMNE
427
+ M2S5q+RE1apf28qfqbMzSQ2Nccx+kaIkGDjieYIBhG2f3Yuh8GBdQHpyaNH0x/eY
428
+ XnHuRow0gy1jagiIDGK96N4tBOOhacR+Nf15gYMyvfZUszgwudiZP8uwUluA1w/v
429
+ +yjqnb2CVGx0iW7Yv71dxdojx7vpJ+WePHe+zJMHb260tAOmBDhjDjJ4eDqcP6Yk
430
+ d8NEvpzk2zUiB6Hb6SXPBYp+0cUQG5sYCEZQLunQJ1CeXzAfRxoyv5k7gYG/wZ5L
431
+ jVRh9AFdOceUv5zZJpiSYXYXyntWqSy4Q5zguQmzhE5Wu3mY9HYPcpAUHxbn
432
+ =rt/Y
433
+ -----END PGP MESSAGE-----
434
+ RUBY
435
+
436
+ signed_with_expired_key_text = <<-RUBY
437
+ -----BEGIN PGP MESSAGE-----
438
+ Version: GnuPG v1.4.11 (Darwin)
439
+
440
+ owGbwMvMwMRoZn+h8Mi2ipWMpwWTmHXVzH33C7d6ZCqUZKQWpXbMYWFgZGJgY2UC
441
+ iTJwcQrAVDsoMv9mvx954X+W9uzfGSVVvlE5n3yFrdn2CB/q0jr4Um5C/Notby0t
442
+ YxibhPfqpC4Sy3UMfHd/76qvBp8cZv3749/xJ2LZGT9O39nsM7yvfXsjttm1Kyv1
443
+ unDJJQnpxHlOubtKPuTkLU+aZOQtf1/zsRKTz5zv37XLTY6qWdy18fr0t1fbf8o9
444
+ jxAA
445
+ =Vta9
446
+ -----END PGP MESSAGE-----
447
+ RUBY
448
+
449
+ unavailable = <<-RUBY
450
+ -----BEGIN PGP MESSAGE-----
451
+ Version: GnuPG v1.4.11 (Darwin)
452
+
453
+ hIwDlCBoTwSpYjABA/9pn3d5xYasfQYquQzLwI0ASVuvuofjJZrYyKEYLEPHPaFn
454
+ SJOMJRFJh4lC6UfGs7xktX0bONwsdGo0EaIP6H5W+WFW0W2VCxyqLLorCWa/XFi8
455
+ Nr/2iVyj5s3QSfXGXDmnlRCf9PiAiBPPy2DzYgD3KLXMZH2hAxUtJmouuIgVWdJG
456
+ AYKArJ8pJFbrtrIiPuNIjj0yhiNGx65GIfnF32fulpgzLbyWymlpkrzRRO6sz2wl
457
+ EEdpZ6VKsLuoOb9Ou+hD6CLC3Izzmw==
458
+ =bsMi
459
+ -----END PGP MESSAGE-----
460
+ RUBY
461
+
462
+ sign = <<-RUBY
463
+ -----BEGIN PGP MESSAGE-----
464
+ Version: GnuPG v1.4.11 (Darwin)
465
+
466
+ owGbwMvMwCQo65qZfvagZjzjacEkZl01c98VK/96ZCqUZKQWpXa4sTAIMjGwsTKB
467
+ RBm4OAVgqt3PMSxYZXVcSzq4uZvry7RCp9vN31o+LTnBML+wgKFg6aJPKysdX2fc
468
+ +rtEd/85jh4A
469
+ =aECe
470
+ -----END PGP MESSAGE-----
471
+ RUBY
472
+
473
+ passwored = <<-RUBY
474
+ -----BEGIN PGP MESSAGE-----
475
+ Version: GnuPG v1.4.11 (Darwin)
476
+
477
+ hQEMAykL9/bExDNQAQf/ZXL4iUQEzoE0XfBLakpLTV5euOvdGFVPxrFS481i/Ldi
478
+ Yfpoo/gbB0yEwKnm0faCRSz2AiOQ4f3iIWRwdwoEYTbCW/o1/iXKH8fp6GXd4hQG
479
+ JdRIwr7GoGQFuOb96kZL3TbO4VapC6ubx5evxyhCIRLZPL415YXdGAcqnVvYew92
480
+ pzZn0RWe2dXDlE1HTENVvHoABnBgOOLSE/37kJJYWgsk1QJCSbaxsS6sZdJXcINQ
481
+ uqeKQKagF15DVYRA27viX0IZ9J2x9ytPQWLdf0wc8dE0h4NJiEwL6myU2WPR27xx
482
+ Lrrp3kD2wewwUSljOW/SbXS6TNLSEiLILUZkTr5+F9JIAWF1YLZTxjN9HxABuboy
483
+ wYhnVMaM+gQKDMgbIXdxim0ssq2ICHROYkbC/JTEIVXqnJbKLivfNP6J0ROHcczO
484
+ w/3/C0MallvG
485
+ =hrCw
486
+ -----END PGP MESSAGE-----
487
+ RUBY
488
+
489
+ KEYS = []
490
+ KEYS << { :sha => 'test1@example.com', :public => key1_public, :secret => key1_secret}
491
+ KEYS << { :sha => 'test2@example.com', :public => key2_public, :secret => key2_secret}
492
+ KEYS << { :sha => 'test3@example.com', :public => key3_public, :secret => key3_secret}
493
+ KEYS << { :sha => 'test4@example.com', :public => key4_public, :secret => key4_secret}
494
+
495
+ PASSWORD_KEY = {
496
+ :sha => 'test_with_password@example.com',
497
+ :public => password_key_public,
498
+ :secret => password_key_secret
499
+ }
500
+
501
+ EXPIRED_KEY = {
502
+ :sha => "test_expired@example.com",
503
+ :public => expired_key_public,
504
+ :secret => expired_key_secret
505
+ }
506
+
507
+ TEXT = {
508
+ :plain => "Hi there",
509
+ :encrypted => encrypted_text.chomp,
510
+ # Created with a temporary key that's been removed.
511
+ :unavailable => unavailable.chomp,
512
+ :signed => signed_text.chomp,
513
+ :sign => sign.chomp,
514
+ :passwored => passwored.chomp,
515
+ :expired_key_sign => signed_with_expired_key_text.chomp
516
+ }