dotenv-gpg 0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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-----