dotenv-gpg 0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +33 -0
- data/README.md +132 -0
- data/Rakefile +7 -0
- data/bin/dotgpg +5 -0
- data/dotenv-gpg.gemspec +22 -0
- data/lib/dotgpg.rb +96 -0
- data/lib/dotgpg/cli.rb +194 -0
- data/lib/dotgpg/dir.rb +220 -0
- data/lib/dotgpg/key.rb +105 -0
- data/lib/dotgpg/template/README.md +20 -0
- data/spec/cli_spec.rb +255 -0
- data/spec/dir_spec.rb +214 -0
- data/spec/fixture/add1.key +30 -0
- data/spec/fixture/add2.key +30 -0
- data/spec/fixture/add3.key +30 -0
- data/spec/fixture/basic/.gpg/removed1@example.com +30 -0
- data/spec/fixture/basic/.gpg/removed2@example.com +30 -0
- data/spec/fixture/basic/.gpg/removed3@example.com +0 -0
- data/spec/fixture/basic/.gpg/test2@example.com +31 -0
- data/spec/fixture/basic/.gpg/test3@example.com +31 -0
- data/spec/fixture/basic/.gpg/test@example.com +31 -0
- data/spec/fixture/basic/README.md +28 -0
- data/spec/fixture/basic/a +47 -0
- data/spec/fixture/basic/b/c +47 -0
- data/spec/fixture/gnupghome/pubring.gpg +0 -0
- data/spec/fixture/gnupghome/pubring.gpg~ +0 -0
- data/spec/fixture/gnupghome/random_seed +0 -0
- data/spec/fixture/gnupghome/secring.gpg +0 -0
- data/spec/fixture/gnupghome/trustdb.gpg +0 -0
- data/spec/fixture/secret1.key +31 -0
- data/spec/helper.rb +19 -0
- data/spec/helper/assertions.rb +54 -0
- metadata +136 -0
data/spec/dir_spec.rb
ADDED
@@ -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-----
|
Binary file
|
@@ -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-----
|