dotenv-gpg 0.3

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.
@@ -0,0 +1,214 @@
1
+ require "./spec/helper"
2
+
3
+ describe Dotgpg::Dir do
4
+ before do
5
+ @dir = Dotgpg::Dir.new($basic)
6
+ end
7
+
8
+ describe ".closest" do
9
+ it "should find the current directory" do
10
+ Dir.chdir $basic do
11
+ assert_equal @dir, Dotgpg::Dir.closest(".")
12
+ end
13
+ end
14
+
15
+ it "should find a specified directory" do
16
+ assert_equal @dir, Dotgpg::Dir.closest($basic)
17
+ end
18
+
19
+ it "should find the directory containing the given file" do
20
+ assert_equal @dir, Dotgpg::Dir.closest($basic + "a")
21
+ end
22
+
23
+ it "should find the ancestor of the directory containing the given file" do
24
+ assert_equal @dir, Dotgpg::Dir.closest($basic + "b" + "c")
25
+ end
26
+
27
+ it "should not find a directory that does not exist" do
28
+ assert_nil Dotgpg::Dir.closest("/tmp")
29
+ end
30
+
31
+ it "should not find a directory that only some of the files are in" do
32
+ assert_equal nil, Dotgpg::Dir.closest($basic, "/tmp")
33
+ end
34
+
35
+ it "should find a directory that all of the files are in" do
36
+ assert_equal @dir, Dotgpg::Dir.closest($basic, $basic + "a", $basic + "b" + "c")
37
+ end
38
+ end
39
+
40
+ describe "dotgpg?" do
41
+ it 'should be true in a directory managed by dotgpg' do
42
+ assert_equal true, @dir.dotgpg?
43
+ end
44
+
45
+ it 'should not be true in a random directory' do
46
+ assert_equal false, Dotgpg::Dir.new(".").dotgpg?
47
+ end
48
+
49
+ it "should not be true in a directory that doesn't exist" do
50
+ assert_equal false, Dotgpg::Dir.new(rand.to_s).dotgpg?
51
+ end
52
+ end
53
+
54
+ describe "known_keys" do
55
+ before do
56
+ @keys = @dir.known_keys
57
+ end
58
+
59
+ it "should return private keys in the truststore" do
60
+ assert_includes @keys, GPGME::Key.find(:secret, "test@example.com").first
61
+ end
62
+
63
+ it "should return public keys not yet in the truststore" do
64
+ assert_includes @keys.map(&:email), "test2@example.com"
65
+ end
66
+
67
+ it "should return public keys in the truststore" do
68
+ assert_includes @keys.map(&:email), "test2@example.com"
69
+ end
70
+ end
71
+
72
+ describe "all_encrypted_files" do
73
+ before do
74
+ @files = @dir.all_encrypted_files
75
+ end
76
+
77
+ it "should find files in the top-level" do
78
+ assert_includes @files, $basic + "a"
79
+ end
80
+
81
+ it "should find files in sub-directories" do
82
+ assert_includes @files, $basic + "b" + "c"
83
+ end
84
+
85
+ it "should not find unencrypted files" do
86
+ readme = $basic + "README.md"
87
+ assert readme.exist?
88
+ refute_includes @files, $basic + "README.md"
89
+ end
90
+
91
+ it "should not find files through symlinks" do
92
+ duplicate_a = $basic + "c" + "basic" + "a"
93
+ assert duplicate_a.exist?
94
+ refute_includes @files, duplicate_a
95
+ end
96
+ end
97
+
98
+ describe "decrypt" do
99
+ before do
100
+ Dotgpg.passphrase = "test"
101
+ end
102
+
103
+ it "should be able to decrypt files for which the secret is known" do
104
+ s = StringIO.new
105
+ @dir.decrypt $basic + "a", s
106
+ s.rewind
107
+ assert_equal "Test\n", s.read
108
+ end
109
+
110
+ it "should warn if the file cannot be read" do
111
+ assert_warns "#{$basic + "404"}: No such file or directory" do
112
+ @dir.decrypt $basic + "404", StringIO.new
113
+ end
114
+ end
115
+
116
+ it "should warn if the file cannot be decrypted" do
117
+ assert_warns "#{$basic + "README.md"}: No data" do
118
+ @dir.decrypt $basic + "README.md", StringIO.new
119
+ end
120
+ end
121
+
122
+ it "should raise on bad passphrase" do
123
+ Dotgpg.passphrase = 'wrong'
124
+ assert_raises GPGME::Error::BadPassphrase do
125
+ assert_warns nil do
126
+ @dir.decrypt $basic + "a", StringIO.new
127
+ end
128
+ end
129
+ end
130
+ end
131
+
132
+ describe "encrypt" do
133
+ before do
134
+ Dotgpg.passphrase = 'test'
135
+ end
136
+
137
+ after do
138
+ FileUtils.rm_f $basic + "test-armor"
139
+ FileUtils.rm_f $basic + "test-recipients"
140
+ end
141
+
142
+ it "should armor files" do
143
+ @dir.encrypt $basic + "test-armor", 'test'
144
+ assert_match(/-----BEGIN PGP MESSAGE-----/, File.read($basic + "test-armor"))
145
+ end
146
+
147
+ it "should encrypt files to all recipients" do
148
+ @dir.encrypt $basic + "test-recipients", 'test'
149
+
150
+ ["D1B8548C844F4881", "54907534D1B5A86B", "8490321363F14C03"].each do |keyid|
151
+ assert_contains_keyid keyid, File.read($basic + "test-recipients")
152
+ end
153
+ end
154
+ end
155
+
156
+ describe "add_key" do
157
+ before do
158
+ Dotgpg.passphrase = 'test'
159
+ end
160
+
161
+ it "should create the file in the .gpg directory" do
162
+ add1 = Dotgpg::Key.read $fixture + "add1.key"
163
+ refute $basic.join(".gpg", "add1@example.com").exist?
164
+ @dir.add_key add1
165
+ assert $basic.join(".gpg", "add1@example.com").exist?
166
+ end
167
+
168
+ it "should add the key as a recipient on all the files" do
169
+ add2 = Dotgpg::Key.read $fixture + "add2.key"
170
+ refute_contains_keyid add2.subkeys.last.keyid, File.read($basic + "a")
171
+ @dir.add_key add2
172
+ assert_contains_keyid add2.subkeys.last.keyid, File.read($basic + "a")
173
+ end
174
+
175
+ it "should not add the key if re-encryption fails" do
176
+ Dotgpg.passphrase = 'wrong'
177
+ add3 = Dotgpg::Key.read $fixture + "add3.key"
178
+ assert_raises GPGME::Error::BadPassphrase do
179
+ @dir.add_key add3
180
+ end
181
+ refute $basic.join(".gpg", "add3@example.com").exist?
182
+ refute_contains_keyid add3.subkeys.last.keyid, File.read($basic + "a")
183
+ end
184
+ end
185
+
186
+ describe "remove_key" do
187
+ before do
188
+ Dotgpg.passphrase = 'test'
189
+ end
190
+
191
+ it "should remove the file from the .gpg directory" do
192
+ removed1 = Dotgpg::Key.read $basic.join(".gpg", "removed1@example.com")
193
+ assert $basic.join(".gpg", "removed1@example.com").exist?
194
+ @dir.remove_key removed1
195
+ refute $basic.join(".gpg", "removed1@example.com").exist?
196
+ end
197
+
198
+ it "should remove the key as a recipient from all the files" do
199
+ removed2 = Dotgpg::Key.read $basic.join(".gpg", "removed2@example.com")
200
+ assert_contains_keyid removed2.subkeys.last.keyid, File.read($basic + "a")
201
+ @dir.remove_key removed2
202
+ refute_contains_keyid removed2.subkeys.last.keyid, File.read($basic + "a")
203
+ end
204
+
205
+ it "should not remove the key if re-encryption fails" do
206
+ Dotgpg.passphrase = 'wrong'
207
+ removed3 = Dotgpg::Key.read $basic.join(".gpg", "removed3@example.com")
208
+ assert_raises GPGME::Error::BadPassphrase do
209
+ @dir.add_key removed3
210
+ end
211
+ assert $basic.join(".gpg", "removed3@example.com").exist?
212
+ end
213
+ end
214
+ end
@@ -0,0 +1,30 @@
1
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
2
+ Version: GnuPG v1.4.14 (Darwin)
3
+
4
+ mQENBFK0Y90BCACviwZ41UPrwLzFv+g4MhWFGIA94N1wzIn3py1+e4mGE8nWMhr4
5
+ 6P2nyxO3jI4ipEXnRwhB04phMNsQELWevHg5vS6ltjwiBKQa7S6+qRSBuckdt1vx
6
+ oPI4ZTdeHG1rlYlT2dG/64J8hh7UonzZAV97uNOwIRS7INJuF6TQvPMg9DhI4VjH
7
+ mE6GYYPBB9mBUw/g6PL0rBoOIs4A4nlOD4n7Uv9Pcq4IXWQUMV/Wpnhtxu3W9j3W
8
+ p6NSTeP6uCwUiYU6e1bVwYX8zTIjYXMS1SiYzZqEjoVndD+XZAEAb4z+8+6jK3NT
9
+ G6uSAzIdbUQNq+AdIBLZr7oQgwmlnBFdSbj1ABEBAAG0KkFkZCAxIChLZXkgdG8g
10
+ YmUgYWRkZWQpIDxhZGQxQGV4YW1wbGUuY29tPokBOAQTAQIAIgUCUrRj3QIbAwYL
11
+ CQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQMrCM4coW1vDfOggAnRxpSc3fZGet
12
+ ANBSkIcWL/4h4KF0fU9AL7wJfbb1Z/ps3qe3CfVg+L9PL6nk/pi1dIQAaKwrZQQz
13
+ TCPC2cYTdLKeBqr7frsOY8dC0vUFbXgAD9r5ELWeXmcaAXH2qrtITY3ELCAGObnh
14
+ bUlfio0CU3T8PPAI6Pvs0DnuRso7UKx+eW2ZKZG7mVowdYSWvfAWGv3tPDhNNjG/
15
+ UhCOoHpYcAu6HvTJkONtj5r+xtMTb4FM+YmNc1gevrhCi+O4QFym62q3TvMLeDXw
16
+ IC3eHFOGqKQQHxq8+LzYhHY/7xdgosq9znVkrjFVIF/hCducAjqtOzTunlofDQ6o
17
+ BNOsbGCzKbkBDQRStGPdAQgAtMZiHaUypkWMqh9Cj2uP94FhQiHSW4O/VEeLO69x
18
+ GNTK9kBfYgMSj91T05Faa/tQJuAu0IFjWpHDNf9fsyCmxHp6by+VtfFtFUHqIQHC
19
+ aPzac7fHorQxBso/d/KKoSGuaC5mjs0WkSZYNlqlm80B2jDvxCMaCg97Wcg8ZEva
20
+ nTUKTSBVvZFpRvP1N7A9xe6nS2HKwonFTy+MCRme9p6UBLJgWwl/hAfT8Bqp7KL1
21
+ iCaet+Wy/HIPnuKHrC3LOJciLpBH/ienZxkWkPd7u3TKooBuvmF4GSc10Cv2Dqpt
22
+ nCRravobC+NFO7bLbCz5WUrnnW36sboz31reu2ZtKPDTmwARAQABiQEfBBgBAgAJ
23
+ BQJStGPdAhsMAAoJEDKwjOHKFtbwT/gH/ih4TdY5bSu8Nn5Ok9ifOKHlod2QdIHb
24
+ NCkSfeXjg/Y/7/OI1oD8eFcHgWU9XBISkTolg3XrXUcRl/B8N16gW6QeYvJ+OIWw
25
+ ykRFxJ94uwoB9/6vVFntN4XruFUwZX4AaaiADL+cO4kXgr7qW2FeSHyoMUvbJosU
26
+ 5zYF6bro31ipLPMg1TX7PH5fVBhVnvj879fPnkzv9nScXzNAq9UaSLyNoH35MuwM
27
+ TEH4RnBIPcEvG3b4+/R/ihfypocHnfQq+fwTph0+W1vhNGCBPqv3ic80TVf5FWbS
28
+ uVRyqlnpai6DKsXMEt8XQYKqHuWd2FIJcuFXDlKnj9szBhoKk3o/E+E=
29
+ =t9Gg
30
+ -----END PGP PUBLIC KEY BLOCK-----
@@ -0,0 +1,30 @@
1
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
2
+ Version: GnuPG v1.4.14 (Darwin)
3
+
4
+ mQENBFK0ZE8BCADVV09/1tGbkTkSxGrZT2AO4PCyMxnIegbiav5HCoIe9dxSpQBf
5
+ qewgx/g6YaHchBMP6py4wayrmThTFd94TEPNTEo++lbj1ysbEqe4oDUOXhwksdKg
6
+ p7Tpk0ZwSqd2A5HU4brb8N9K6KW6oSOWNTmseY/uDosFqDsRI8DmWv4PWiEZdyUh
7
+ YQVKWEFtIPdcgjR9sRisjNidMd7zzxF8HAcLwhHD3ryzkXVRchH6n8wggVZdvNNI
8
+ j5Ys92ska4efBPJZpKZbnh+1YB15SavSYXA0Jk4geGjVygSAwp3SyPiBOHiOYf8o
9
+ L4m2SsCmwJNZ4BjjigieGu6RNDaPusc5zOHjABEBAAG0KkFkZCAyIChLZXkgdG8g
10
+ YmUgYWRkZWQpIDxhZGQyQGV4YW1wbGUuY29tPokBOAQTAQIAIgUCUrRkTwIbAwYL
11
+ CQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQplyx9BBLHIFn6Qf+N6zmqArRTL/w
12
+ NL6t6yZygXGEqqoompG6ab03uC0TG3U3FjZkbi0Mjy9JAKe3Jv73wQbkkjxd2UeJ
13
+ MBom11i92U/Rhp2EXwSF3y/BmR4aa2yZ4hVYmwgIxSk4yVN6NJe/VZqhDH/CD3yx
14
+ 0GlejAc0V0oRMe1L7KFcbkrjcYVh/Y33vrVDmnA7uVPhPT/yt2p7wHJU5dOMaS4Y
15
+ uZ/zwb/UjcE6LlwCdex1Ke3qNPubEnEUmBz18EWQT+mNXO8yw56yZIw/qCNkVPSD
16
+ 4XrQdfHxCqIiE1SqH9fQRGdh1L0DDdy0lBqgblKVS7SxlnJDUK4h5bxo4zd9yBsj
17
+ ovlB7tf7jbkBDQRStGRPAQgAzGrwPhg6PAD13HQPkhjefFUS0jzGCgrlYAuuEX/T
18
+ 6MIDYkb5n8xN1VNrqk33T32l9D/CcCXRRe+18XFJpSlD29WiObsNn+rU4EIFFQN+
19
+ 3PJuswvVJPlc6itONo6S/rod+u24hUMvc0iTHDbJkVG5WRiadxFQwIrMm0vchthc
20
+ 0kPnDZgkCh1309SE2Xc5vaWbCzmELEnXgplYTlfUNYmmKU0R7HhMzfpBkcAPsFrD
21
+ TgqNJcBQkvAGuyM0DcgPu6NNVeKq3xOoiYDq5Cdu3jRKK2p6k2w0SOIKIHxauWZ9
22
+ uYky2DX8a2BO2KXKlwnGFLqPA2Da10dHHdC3X3bMNn+x/wARAQABiQEfBBgBAgAJ
23
+ BQJStGRPAhsMAAoJEKZcsfQQSxyBrocH/0jBSSQJFwrqkkR/GKWJQofRWYd4OgNk
24
+ n5AAPxhemytjMk9EN2O9nuogjY+Bh/WCbBYOC0bwKb9Z2eotXkT8lmYVgog2qE9K
25
+ 7V9RFAeK7nRPpJN9LPXY6dEgcEjKSnU4a0wBDZzhUtbEYv68qNoO03MaXa3rnGcy
26
+ 8t/Veyvw4j7oKWKfxTcDvtHgX+S/T/NyzmxpnhbL/OUAWp0qX3+MG2XJOe5tJuY+
27
+ YL8gAGVZwveKHVBCYrVYzbsgknoEYErnEhHB3bND6d5IzeursF2pr+eT3QRWX+ye
28
+ fINqHLWG8xsuTRtzU99oo07vdrzXBj4xq/R0CM97HF0mM1fW1rlEVu4=
29
+ =majZ
30
+ -----END PGP PUBLIC KEY BLOCK-----
@@ -0,0 +1,30 @@
1
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
2
+ Version: GnuPG v1.4.14 (Darwin)
3
+
4
+ mQENBFK1bxMBCAC5/fGSnyKlsXKU7mMHzdPkrV0a+l6NU25gqDtmZk5huF1sHLuE
5
+ lOSh0iXzgNRNRU/bliZQrRMrY+HKQES/vIQt2NuoL18Jqd34o6MmEBqj2aVT6K0v
6
+ SY00QSPUj6irTJtrBMMqRxhu1e4mNKQs2JWnTK7bx5FtiHAZINcIClNboeC2c0nU
7
+ NffguN/V0U+QLyjmAEOkFFIuj440p/gACiP6ruNyjze51CF+SBp0/zMpf/SFbuTx
8
+ zugoAudodoTXQ8fPt3zL3DqxNSvIX3sm/7bYF9B1dVJBxZh8pmjlH+rjkBdCqkxl
9
+ sAdPAYlN5T/76OJkFtugI4SuXN6Vgvt1PIkfABEBAAG0MEFkZGVkIDMgKFRvIGJl
10
+ IGFkZGVkIHdyb25nbHkpIDxhZGQzQGV4YW1wbGUuY29tPokBOAQTAQIAIgUCUrVv
11
+ EwIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ2JIhWqibSWpuXggAmE8S
12
+ qvmc/DZNcR1UYf0+0koA5NSYFpNljFGKXzNku3I1WgFe/VgJQOP08GxVV3183L2f
13
+ S5PxW19u8gv37Y75ybLZI8ucbS+NaK4mzxFsbI2fnOKf9xkvD/lVWYJauUgYKZPc
14
+ GTBxTxxaTRhO6X83PU2PehGffXsVwMjMZ/EkC/b9ziqoHKjVYGAcBWRMLGyCSL5U
15
+ I2qnZ31PWP3y1bVU1OAHrRCKvkYWXes/BHMNEfb5aaYM9+0dPeG0cc3s13gsUBfX
16
+ eH/GamJiNOak4yqtCNM2b9TZl2bgzSfgc+pCGYs3NTV3zAN+xmFhz3mztGdhKl2x
17
+ 2ZnqtTyevErd7WE82rkBDQRStW8TAQgA9T241d5Krp9CvQuPIyWp4+ZM8SJ8Rut4
18
+ w8W1zF/b1/iHWvDsyb+MbP34dJDGK852/Nqxsd74VYGW1+Onm8QLcMLOWb4dwk4j
19
+ XBcVPDfcppau0y2sw1bJpIyI5DOCKiINA2vOvyyeMk538bFUX+cUk8tYau5o05Qe
20
+ cLze57+yrWgyQXCB+ni3C0tYZOQYjBRxoxuPnYpSs2zZchcHhrLdzI+HPVmpHqyP
21
+ nKmp3GwQpx8vhBy1pyyIa0ocDG/d33YhI6xYjwsuQphmBwmk9viG8wK6lmBU4yz5
22
+ aPh8JcU+HB4eGPnODCO2AaWS+Ql12nwAMuu08DR8z4qiwos7tQvXJwARAQABiQEf
23
+ BBgBAgAJBQJStW8TAhsMAAoJENiSIVqom0lqTtIIALLG5SZRUSP5AJ1TS+TVbafa
24
+ VM6S2lZ2IoCbYmVJHZYPjQIJ91E9Q5Q9hrW2vuS0XhlxcQ5dMcOFCTHkSi9klUoC
25
+ 00VjvPKaq6KyBXUBtfEeZwJ1NmfavkHWcSHNaKRYkvYJtAc14ZsBWIQ4Vv3JtApK
26
+ 7/NUOsDKJaGM17qSCKUkK8eMArE7ce31R68WGAnM8tbCVHqLdQgCvUQlqUBggvp/
27
+ 8cfRgUPK3XvuENP+BjusoyJUzcCeoFmPXAOuL2xAaerqlsEJNgcp5wpiSeDGjSLW
28
+ 3XlDmlOT0fF1k0YR4U8tBIipwrwQ/6lKAeu+1sup+xiK0bK5XO19XAKEiKa6SCs=
29
+ =OO6n
30
+ -----END PGP PUBLIC KEY BLOCK-----
@@ -0,0 +1,30 @@
1
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
2
+ Version: GnuPG v1.4.14 (Darwin)
3
+
4
+ mQENBFK0aB0BCACtzEZ+gx42nygqLXacyLxHyiKFO1hZyqcsMHicNw2skGrBx/B+
5
+ O3TG/C4MCefji2Fqa8CHXCrWH8lm5+OEhMWCQ64Kmo3ZujUvAnNNeiDAdRVCy0KS
6
+ FvUxFsRwKT4tAESixfJ8wL5ncWmaZFVchkTYsStOdeoNaGsVQDyRQgejZqxfO1Vj
7
+ 7bANPnkF2gFwNkYuNWInKHTV5n+u/gBZTZK2B0im7ah8Y3fdv8YSApr+J4JC/V/+
8
+ RSAScleotYL+1yP5pL3pmicIpA/oqcro7FBw2IOIaxi7ZkXuZoA5ZKQ9b6sY5YZn
9
+ ef3EvMSq2mcdWkLnqzgWS+xgwSLduzFza1YRABEBAAG0MFJlbW92ZWQgMSAoVG8g
10
+ YmUgcmVtb3ZlZCkgPHJlbW92ZWQxQGV4YW1wbGUuY29tPokBOAQTAQIAIgUCUrRo
11
+ HQIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQUNJW6jPNLiUgagf/RGVE
12
+ 8tuGhfQ9APvhsT3DTy7NcMoGtdfhMQ+9yyO+DbnvjHJ5YjAwbJM/1aacztHmWyJn
13
+ ftizuWihSkTV3fX4TnvPtw2DlqGQH0VDEqSCcl1bsCuQSGox42YTNIGl+hjUfAIX
14
+ nC7ATAN0O1aVpGiShAlrKYws99cCZeo9IVBKx3RfA+lC+hHs2CJ/JGFB44+EaQn0
15
+ IV1E/jVG2c/vJsptoSiMVsED1Q5z3fglaPuW6ffxTh527bmDxFGID89DgNbo/A0D
16
+ xLUo0vWUXSE5cZOn2RG/jGRVdGx3DHPvjlh6a3ili4L7XKKSeS1QJjnHJlrrd/fN
17
+ qeaeu7rPflvHf2uzDbkBDQRStGgdAQgAmImpJWIyQGMldvHtqv/1rKQ7KqaR0Hdv
18
+ sB9meyOhUhKNzBBV50IYc7DrF1wAVwIC0hawMGUEBdM29kKtWA3lOfYxNXSAF4HP
19
+ GmU2pYC6DvZ40FK8xC1+ZhBlrkCqKYaj7fg5VMrc3JE8tq/rKs1yyJGcFGWL3wQ6
20
+ mts+oydbgjIAHLiqob623WT3IrSwiIVEoiBr7wboGq2Mwm4GQ7HB5QBSmZhIMfOh
21
+ KRmnyOaoqmHFBnBkOpC8zyokkm67L4pi7iBfNlel97T0W39q2knynlun8jSijo3g
22
+ q/J1gVUiwJTuifrjFjZ8oLqyYa7tZhrC0pmXBQlUXM+ztD8WYLEKxwARAQABiQEf
23
+ BBgBAgAJBQJStGgdAhsMAAoJEFDSVuozzS4lEKkH/3TABVX0wnHjJ14zhXsVmP4f
24
+ LhlWqLXAEPAzBHd1WO61WpEWd4khyrfUFUjItccwTyoZNIQo/EIDceV0cT8SWyhL
25
+ DYgdmPExvLkmD0xzmewy3bKLzElf3T8LfB4pkKxPvlABfHw0RkwXVABkdYLka5a2
26
+ pFq5jWmM4uRwXoSqVZBvXfm7URFkxO6QRy1TD5+TZX0ZUHIrL93baBbFvBOy3g1e
27
+ Q/Sx+SE7f4j3gAsQdyIba4JCdd+ioHap2kmT+D7OBSPJhlKag3gudOBgAWpArl8w
28
+ feTf52vJAJ+JFyYuwtedbG2jecMFmFXK+2Q1tOIxveVwiJBa+0Wg59RUu6GP/W0=
29
+ =YoAy
30
+ -----END PGP PUBLIC KEY BLOCK-----
@@ -0,0 +1,30 @@
1
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
2
+ Version: GnuPG v1.4.14 (Darwin)
3
+
4
+ mQENBFK0aDABCADDSLiwsKSn39wNXo/ilqQSfwSW9n1DY3FvgILJfWgui132PXxX
5
+ gH6myDiuQIQbVaGa3I4/6//QAJHLzfV6bBVr6B/P9Kmrck3Yfnd0ywX/Pa4GiDCG
6
+ rwGFR7yS9ruq2cFnwFGSYIpee9Srzfgx6g4qxB++eBXJ8FFdhDaMreEwPKB0rTh3
7
+ we+Y41AbIng9cbP0M01ikrNcifjGF/DQgqXU0FG6OSnZ9Ltl6bgaKa/p3Q5EXL2c
8
+ mVVopRNMPc2KvPjV3CbQM0mNO9irynFp1galw1Gx09lHDKlMbdrP/m0Xg8LqxzXI
9
+ kUA3xZcu8HGsYBmPq1icSB6S8mVuzmehlWbrABEBAAG0MFJlbW92ZWQgMiAoVG8g
10
+ YmUgcmVtb3ZlZCkgPHJlbW92ZWQyQGV4YW1wbGUuY29tPokBOAQTAQIAIgUCUrRo
11
+ MAIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQuYk7Ptn954WgDQf/YWiA
12
+ OmvT6M8M0NMOhXr86c/yB5qn3m6BYgngve62sBK9nlvVWA+OawEPUxIMJFT/sFPk
13
+ vp3LC9L71kdfKr2hhBvO9bhzqgD/jLbCJMrEq8lv9u5u/nAZ/OiE5ABL0gg6lFMH
14
+ BMUoamzrkgbBPLOscrKhveZnYeNKdafW93+GfiyzRGxhfJMYbaTAS0cfrG9+87YO
15
+ 4wnbQwVmXmR9Hf2j9xN2q5ZOxOOeYCQr3kleeNXKK7yjNF49K9m2UiIav4/if/fp
16
+ 1P/Q174jUiGQ+Gay41+dUb73Xk8sCS2wlA74OxzFvduCjfJXnSf54pTS8TPXumCy
17
+ EpeH9Hr9NpHPqu0CEbkBDQRStGgwAQgAwpPtZWLwSiBib3RVfyi2GyVBj/L5DN05
18
+ SVx/ighRqlMPD+cmudklRjLDAzhx+v+5CEjZQGaV9oE3jJpDNor3mCS2nDpH9aCy
19
+ TFwvHD8FeJPKi7O+wekRw9kPvD7MhebsgXb4FCEzJFkh7kBZzlJuGzZY62YCXx1l
20
+ tLpWV8n0Rus7GSz8pLpxCP55i/WxJb5D5B29cwTxwHMMhSKDCDUjUppiFvA7XWki
21
+ eYimo65R57TPcgKAgrya3+fmHNN59nPg/Ebo2RxBUagvUhwjd9E7+F9DXJ4o5b3x
22
+ L1N8YVL13iA8DYwoR+TsyhEz0SgWPSTobQhpvPJ7XwXd3QQkfIaotwARAQABiQEf
23
+ BBgBAgAJBQJStGgwAhsMAAoJELmJOz7Z/eeF55UH/2IeAmb7KhgDoybAIR5MyGfo
24
+ W6GmkBFQMg2lFIzfQnPGRm/6fFcPPXsLINUkOzss3Igs/UP/48ORUKYFraKv3qC+
25
+ 7ZCI0VT7s10feFxXNzC1wq49vOSuOSePcZssVYR4KxLrFB4P74zAVNomV7P1TNbo
26
+ C+hotHu8Z9/0raYTfQZFdhUQlcLdPfp0VTa56ohsVWAXANTH9eGtL5oOJ/cI8VFK
27
+ 7xdGLzj38hOhJaJnvL8mHSo47AREAkqT1sKqjvdFIgh7qdGOqu9qI/rdO4YtxqHK
28
+ aTe6Jy/6Siqiw9iPvYzNbZ+iLtRIp/Lh8aL6+K7XizJW2qipmo5M9pkS8LZbjMk=
29
+ =Y4ep
30
+ -----END PGP PUBLIC KEY BLOCK-----
@@ -0,0 +1,31 @@
1
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
2
+ Version: GnuPG v1.4.14 (Darwin)
3
+
4
+ mQENBFKxawMBCADXVEOSnsA9nIMnbI1/S92j/wCQi9d1ND3SKHjsrFbHdXHwyt+m
5
+ p2JJ47lHQmCUs39hX0+wm/fP0uxqwptYfZwo73wsgQlla6msVcGnulmjaauXJNjR
6
+ c9kLbVd67yl92l7UNtUA9zU6zzGko3KjYc1LBdh6Y6Bp1BX0IzHKmRBwz+ykZogu
7
+ s+Khg4H1QK9aSB9F44fAE9A3w0u6Wk8kQmIdvGHB5YmjjNRTvC5hBmRsCEZ9Ck27
8
+ CjBlVc5kYxwfqfvYpsQ+FAhJuwv9rjesyJ2pxIXCb2+P8crM1WEtULkkcnWEf0LI
9
+ yr/2DlWrmTGlteUwjXAIT7ouK7lIjXvDhUmdABEBAAG0N1Rlc3QgUHVibGljIEtl
10
+ eSAoTm90IGluIHRydXN0c3RvcmUpIDx0ZXN0MkBleGFtcGxlLmNvbT6JATgEEwEC
11
+ ACIFAlKxawMCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEMRtA6Mz2K2N
12
+ 8MkH/1jyVQxv4lBOvU9kTWj2vFwVtT6rfGO7AMYIYwXtemnmi0QK0BqI3NBUcqdk
13
+ zNKyq1jGSa2fuFgcmFZ1csLclH6cz9P1XJUEtcu5CVK+fPKcUdECNIobtafXf8jT
14
+ tfgoITZTIVYYJhMakfD4TwaT4kNzgYtBLLFSXpv7P+lbXzyMERA/4gQBY/h5rUnX
15
+ +zTL/5vlN+qFobbrXIDeJGngcfngoi6JkuWAy1yQXIKl2ZNePqk7vbKEEwaVGV5Q
16
+ jVmJ5leThrjeOsf9w5WjbQmxx300BQ2OwCi8o7WP9n2RQb32kpkeJpNPLGhGRDk3
17
+ Trjwnn293FLsXwvVnJ0RejJv0e65AQ0EUrFrAwEIAMEci4LkOejO+6XSUQbGD7jN
18
+ /V3g1FFnCBT34X7mj0J7hkmAigQyZ9kSlyXLvz0i15yeybpAkFZBSWhNsJlGpdDB
19
+ fS9io0KfeKJKS990USEoxu5Llhvmr0N5uValfEwFAq5y8QdO+8cGqnMzbRxrYqka
20
+ BJEyW3A1vmAxInFSN8bvVewGF4zvvmOE8z6M6TwghYHGDBZkQRp8ZrXTVYafSWGW
21
+ MQgt0Kd9N4LPnFp3BVYagRwwQwNVRzuUPPzrATnlfVXDbmUYKGNXVfYZGhBaytSS
22
+ CHnthXrCeMyfz5+Cqq1JDvgQwSI1fEe6hux1YHhL/s+O9tfhdGYeIAq/N5pgBO8A
23
+ EQEAAYkBHwQYAQIACQUCUrFrAwIbDAAKCRDEbQOjM9itjTRjB/9R3hpuHmt8tC32
24
+ oB/6j4iq3/FLcD/aWEyGH+QyevVrH1iptCeEjfp8uUzHtcd3SbPKGPksklQYj/Ls
25
+ xPoDa7VixebrLEKNOM6rbSavOavXv6f3PaSP/zgA9psoGU2kQAQQjsVOVsfoLjum
26
+ lwGBH2CzBqrXCej9ErjMSTOdHN0s6IvMa0qlu0SFcBQ6BRdXdFlYawx+uYuV/XkY
27
+ VvU5bGdLM0ah1dJ4N0aSnGG1P1aedQXR2bV2bT7Mw8GKcYkdsZhDnjo2E2bMhBeX
28
+ eLH3YeH8zJLb6dthoe9KH1RHCvls/D6qIpR4A7s/Uyc0/3R6PdrtGMqFqjLK0z/Y
29
+ ldcIiCN6
30
+ =Tm11
31
+ -----END PGP PUBLIC KEY BLOCK-----
@@ -0,0 +1,31 @@
1
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
2
+ Version: GnuPG v1.4.14 (Darwin)
3
+
4
+ mQENBFKxbK0BCACfTYwBPmIPABaXi5j8/xvVOeN5s+a26wY7+KZg9Z86HGDSUtxv
5
+ PuXWkSubnCX44wPQTSJ6zjXtGNDWxS6Nydwy9yQQ0NpP3npO4TLzRP9rXMjJczw+
6
+ 1h/LpEtq4UHvBXJJtD0Wza9YACUUapQlajLl/rdBX3oybRyqlOgEJPWRFavT+tOn
7
+ /gYDdPqWdR+D26D/xfman24G0eVlwTkJQhRXzWohIt/91dmJQIlK8EJO3t2A4zrR
8
+ gAOj8kLiVIOliMFebVvcaE5UUYK8wf4uvsFkKxtMzc2mfQg+o1hCa6F6+8ldbP/8
9
+ Gek31x1PZPmSLNA7vKzgHue5isqJgROBWeBfABEBAAG0PlRlc3QgcHVibGljIGtl
10
+ eSAoUHVibGljIGtleSBpbiB0cnVzdHN0b3JlKSA8dGVzdDNAZXhhbXBsZS5jb20+
11
+ iQE4BBMBAgAiBQJSsWytAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRD6
12
+ V4QQlP7ENZaBB/47k3jAUQI9cTHxdI1xj+qX+mmcydL7DsPLLu/noshj0Lvv+XdX
13
+ D81mWP07zqBhQr5LKuNbtebD4fSy+Qc0hwjfie6/ODM39Cwm/uki9fINdIyGmEf4
14
+ CB44jAxq3N6Sf3PQdG08oi69vm4gwfniUtfmkyzCqOF4696gb4BsQB0d7UVM4uDr
15
+ efo6jdJBP82Nn+gy6kBSDiRwhuiiLXyGt5lGvMfgde39RmunnSh4fX+Q+e8QBz1e
16
+ zvG2PJwN/4lXT5WQlE2K3f4u20EguSPAPGimbEVUNzii4PFscLL+GdG603AMxXO8
17
+ vffaTu3Vwq1F87x0Di7H+b5PCObHANN6d2zVuQENBFKxbK0BCACmJLBVa7sl9xPn
18
+ FF/KDiP6vJlbafD6u9iT9JGWoUf1g0Ji2MFfdwRqNQKzai/uzGoaj9EikUv48U6A
19
+ 8dTX9dFNvWosl4wJWG93Xz80vm6vAzoP5ae9qunoy9Ui79CcmLIhm5BUo6uxKgB8
20
+ 4wdMlKEAx5E5KghR20gY1ne3mhyiIyoVTojj4NQC6ZyytEC7G6daZZsAy8JNmKpT
21
+ 4yFbEubwQNJvK17Or1OSgGW1ZWlDwGKt5jPOta2n8yNqppWDcs9su5/dWbrAJVs3
22
+ RH1d4GJYfDlk8kQzpNmBOPK64VsJ7pZT5mqTkAMeJ8+PuiI6C6MhOg5XAFdktlHB
23
+ zQWYUwADABEBAAGJAR8EGAECAAkFAlKxbK0CGwwACgkQ+leEEJT+xDX1XAgAhhyE
24
+ Dj+keINKIcjpc83y6OAVDQszE5QUbKm8y7p4CwElfpgUzkJyg4SpU9bighuvM7z5
25
+ ukpRrXGO74AF0ZgOVgiS00R3XRycrVuUuMhpehtdOyfejRF1tXanJDW06jKJ+hxr
26
+ CGyP0if1Zq0eCI5tC82mvwrwS9t1D0Ltwc8v+UM4wjVuHtOqCcA2J066LPhck15i
27
+ 35wIzxaW8MJZ2Am5G8V3Od5jN920Q6F8FcjOmVUV5DWMkYS9a6rtOGkjd7FLB5vQ
28
+ +59WpkmsBxNnQgkG4YQHr5l5xWGMSgISpzrDqfOnslxPNcbpV1e1v49uqsVH7n4I
29
+ L4P8L7XWFf1KYdYDaw==
30
+ =BSxU
31
+ -----END PGP PUBLIC KEY BLOCK-----
@@ -0,0 +1,31 @@
1
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
2
+ Version: GnuPG v1.4.14 (Darwin)
3
+
4
+ mQENBFKxatYBCADKEUNxr7Kl739U8c0/yrpM2IIBxBUukQH2ylUET70Mqi8hTLEK
5
+ VwGFPy3JAcVe1YDMSQTLs8/eqwIZXr054nFogZjxlHkUUQfx1IzUKRedKpgqW1QA
6
+ p/1EL1jDbPuE4KNOFKdu/jc6hCQoUAUsrvk3qrtlW/xYV93NLRfoCAr+Kd11jesu
7
+ mZ8ZWWYqRddtwAnA3ufIR5D/raDenbaNM3RBdFP/StjBgHwBgqws8Ln3EpSDD8pl
8
+ gJjMW2ME6Anj5wpKhSUt5+wKEErYzNAWMCGdgDaQvb58mL8BD89lgoSrh9kEESZZ
9
+ JJqPV6wHHWLA9PY0qpFmSX4QX/PhOuZiOtIvABEBAAG0M1Rlc3QgUHJpdmF0ZSBL
10
+ ZXkgKEluIHRydXN0c3RvcmUpIDx0ZXN0QGV4YW1wbGUuY29tPokBOAQTAQIAIgUC
11
+ UrFq1gIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQbVqUsqEDlwLZNggA
12
+ gJIO+rTc2aB0y5E5kK4sUBPma/ByAsEH3FRNjApglNe3Wf6nytb3C7fo7yKX7RoL
13
+ wHJbbdcrrr/5juEbllcpoQ1mlTsBQ4RUtOCYLT3Qhw+V9BZqFjsl07uHYg0tBy6x
14
+ IZbwLlCFbDov2iLwkS7vMxpBDQ28eLUYwDelwKWUcCfT9OlpOCaHMlQI2TTssjmI
15
+ YfUCsG9Ou/7U6j2cRjS4Iw4zRbKRjNpoz66qIVfUgz0V3QyezGgklKdhHpmSQyPC
16
+ AJ+H4JA4nxD1WsE07AVkYDgKvqKV5VlZcgbaRVYHD/cLxLWo+hhoDWYdQeSZsFwR
17
+ 80Atz8js9l5PCjuPkVl9BbkBDQRSsWrWAQgA3w0lYgOB0TZ0GfisucLTtVrolbVO
18
+ P8xeGv6w4Zcsh21DV5m+S5ZYObRow0s9G4uUXtmh4ky9Kq5T2+SxAcohuFK66JD3
19
+ ddGQDZ9H2kBxn2ZhqGj9j8r6mmgGkAs81cBg5nR4f7J8yjtW1gBDeqjubhvFB4Kl
20
+ XqAQSckjA0ymh6BtwVeRaqX00xSlfZnNEW343duSuTFk9tATpVUZaDUeI6ccqJaf
21
+ 4QuUFR3i/VxyfMpqXAYlR4QLn8ncHzE4jNo9MesdAPfdH38ruKjEgSYj6HlEkNQj
22
+ 2u1fNkDl33X0tbBeAquuLTWZXp5oMvpVDuKsHEsH4F0PFsxGwK+oCE5DSQARAQAB
23
+ iQEfBBgBAgAJBQJSsWrWAhsMAAoJEG1alLKhA5cClLcH/AmC/VrinfHYmB2g0f5/
24
+ 3J/CZPLiWEocRmJTgF3HB1deO5p8O3/wi415G9EhPuAf/yATf9Gs0wUosJy1TH5t
25
+ 6E/oJh7YTnIqLm568bc+o5lj0voqwqOrKl02E2vKGdlWRSL1M4sfX3VQkZlOAfSE
26
+ h0zjM5CHMqvJ57pRb0XyV1wAfAAOKXOwbUGnB3HNnGKlds4ZevjeweOiYSogSwiI
27
+ kqdJG65ZZHT9Dwd4AF5ZNVX4q90eXBFVD5P6EckLK22PAISNYvuMSy5GDcKFqPdt
28
+ +hzYJsAE7KcpuOS8mNkFB6G1OqpoFZHsFpqLFVcO0aNMauI0K+BIJoxFFRLVwVCf
29
+ ITA=
30
+ =jwu6
31
+ -----END PGP PUBLIC KEY BLOCK-----