jamescook-ezcrypto 0.7.4

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.
data/test/database.yml ADDED
@@ -0,0 +1,18 @@
1
+ sqlite:
2
+ :adapter: sqlite
3
+ :dbfile: crypto_test.sqlite.db
4
+ sqlite3:
5
+ :adapter: sqlite3
6
+ :dbfile: crypto_test.sqlite3.db
7
+ postgresql:
8
+ :adapter: postgresql
9
+ :username: postgres
10
+ :password: postgres
11
+ :database: crypto_test
12
+ :min_messages: ERROR
13
+ mysql:
14
+ :adapter: mysql
15
+ :host: localhost
16
+ :username: rails
17
+ :password:
18
+ :database: crypto_test
@@ -0,0 +1,50 @@
1
+ $:.unshift(File.dirname(__FILE__) + "/../lib/")
2
+
3
+ require 'test/unit'
4
+ require 'ezcrypto'
5
+ require 'digest/sha1'
6
+
7
+ class DigestTest < Test::Unit::TestCase
8
+
9
+ def setup
10
+ end
11
+
12
+ def test_digest
13
+ ["hello","","test"].each do |data|
14
+ assert_equal Digest::SHA1.digest(data)[0..15],EzCrypto::Digester.digest(data)
15
+ end
16
+ end
17
+
18
+ def test_digest64
19
+ ["hello","","test"].each do |data|
20
+ assert_equal [Digest::SHA1.digest(data)[0..15]].pack('m'),EzCrypto::Digester.digest64(data)
21
+ end
22
+ end
23
+
24
+ def test_hexdigest
25
+ ["hello","","test"].each do |data|
26
+ assert_equal Digest::SHA1.hexdigest(data)[0..40],EzCrypto::Digester.hexdigest(data)
27
+ end
28
+ end
29
+
30
+ def test_generate_key
31
+ key=EzCrypto::Digester.generate_key
32
+ assert 16,key.size
33
+ end
34
+
35
+ def test_generate_key64
36
+ key=EzCrypto::Digester.generate_key64
37
+ assert 24,key.size
38
+
39
+ end
40
+
41
+ def test_generate_hexkey
42
+ key=EzCrypto::Digester.generate_hexkey
43
+ assert 40,key.size
44
+
45
+ end
46
+
47
+ def test_get_key
48
+
49
+ end
50
+ end
data/test/dsakey.pem ADDED
@@ -0,0 +1,12 @@
1
+ -----BEGIN DSA PRIVATE KEY-----
2
+ MIIBugIBAAKBgQCGwFYmCsY6XeXmC2vB2VwGy7N4jV0vjwTh22VAXLlMtKrjJJ0k
3
+ WW/QI7wYWqttUIDQ1//ETRlW5+uV9E9WF1EtMo/Dv48LU/c1YCDjA5EAp2Wu/CnU
4
+ Qgd6ibLNTvkzSDdiZhryuq3nv0s1hLR6cysMOWg/l6usiwU5jgWDXrMK2wIVAJS8
5
+ gadASb6W8ZL6Ua4EqIFdYCdbAoGAWzwV5WF157O/oZeOmNv6IuV8MLD0m3JkJNkZ
6
+ DrY0G0M7YIVryCkmvCOuu8PLu7M+GGp9hEKV/wrpWJgiOlWAz0C0yxwxMyz3GFbx
7
+ ipqEL0CqKkl4QVMpKAhL1h2iIL+yI7p/8whcfeMnQXb0iIMD7AVvF++AJ/LAzulb
8
+ zZXdfP8CgYApedgToseniE9KWVrV3CMXrkwf3Er5CgcVF2JJWAfBbm8/PI2wX5GU
9
+ zT5++k+2sPISPQV3RFZiVKwdFNdft41KNNdfFPEC/4KhgHbK4nCJ3ReLiy2+MkHi
10
+ msgzvxAg8WRc+0aZKNFlNyqsIezE6ufs8e9YvKZJ2d30ggOqCHTBtgIUZ6jIgX60
11
+ PmOeqfRh32svQkP1p/E=
12
+ -----END DSA PRIVATE KEY-----
@@ -0,0 +1,12 @@
1
+ -----BEGIN PUBLIC KEY-----
2
+ MIIBtjCCASsGByqGSM44BAEwggEeAoGBAIbAViYKxjpd5eYLa8HZXAbLs3iNXS+P
3
+ BOHbZUBcuUy0quMknSRZb9AjvBhaq21QgNDX/8RNGVbn65X0T1YXUS0yj8O/jwtT
4
+ 9zVgIOMDkQCnZa78KdRCB3qJss1O+TNIN2JmGvK6ree/SzWEtHpzKww5aD+Xq6yL
5
+ BTmOBYNeswrbAhUAlLyBp0BJvpbxkvpRrgSogV1gJ1sCgYBbPBXlYXXns7+hl46Y
6
+ 2/oi5XwwsPSbcmQk2RkOtjQbQztghWvIKSa8I667w8u7sz4Yan2EQpX/CulYmCI6
7
+ VYDPQLTLHDEzLPcYVvGKmoQvQKoqSXhBUykoCEvWHaIgv7Ijun/zCFx94ydBdvSI
8
+ gwPsBW8X74An8sDO6VvNld18/wOBhAACgYApedgToseniE9KWVrV3CMXrkwf3Er5
9
+ CgcVF2JJWAfBbm8/PI2wX5GUzT5++k+2sPISPQV3RFZiVKwdFNdft41KNNdfFPEC
10
+ /4KhgHbK4nCJ3ReLiy2+MkHimsgzvxAg8WRc+0aZKNFlNyqsIezE6ufs8e9YvKZJ
11
+ 2d30ggOqCHTBtg==
12
+ -----END PUBLIC KEY-----
data/test/dsig_test.rb ADDED
@@ -0,0 +1,287 @@
1
+ $:.unshift(File.dirname(__FILE__) + "/../lib/")
2
+
3
+ require 'test/unit'
4
+ require 'fileutils'
5
+ require 'ezsig'
6
+
7
+ class EzCryptoTest < Test::Unit::TestCase
8
+
9
+ def setup
10
+ end
11
+
12
+ def _test_generate_key #very slow so not run by default
13
+ signer=EzCrypto::Signer.generate
14
+ assert signer.rsa?
15
+ assert !signer.dsa?
16
+
17
+ assert_signer(signer)
18
+ end
19
+
20
+ def test_from_file
21
+ signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/testsigner.pem"
22
+ assert signer.rsa?
23
+ assert !signer.dsa?
24
+ assert_signer(signer)
25
+ end
26
+
27
+ def test_dsa_from_file
28
+ signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/dsakey.pem"
29
+ assert signer.dsa?
30
+ assert !signer.rsa?
31
+ assert_signer(signer)
32
+ end
33
+
34
+ def test_from_password_protected_file
35
+ signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/protectedsigner.pem","secret"
36
+ assert signer.rsa?
37
+ assert !signer.dsa?
38
+ assert_signer(signer)
39
+ end
40
+
41
+ def test_public_key_read
42
+ signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/testsigner.pem"
43
+ verifier=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/testpub.pem"
44
+ assert verifier
45
+ sig=signer.sign "test this rsa"
46
+ assert sig
47
+ assert verifier.verify( sig,"test this rsa")
48
+
49
+ assert !verifier.cert?
50
+ assert_equal signer.public_key.to_s, verifier.public_key.to_s
51
+ end
52
+
53
+ def test_dsa_public_key_read
54
+ signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/dsakey.pem"
55
+ verifier=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/dsapubkey.pem"
56
+
57
+ assert verifier
58
+ sig=signer.sign "test this dsa"
59
+ assert sig
60
+ assert verifier.verify( sig,"test this dsa")
61
+
62
+ assert !verifier.cert?
63
+
64
+ # This fails as it seems like it returns an incorrect public key
65
+ # assert_equal signer.public_key.to_s, verifier.public_key.to_s
66
+ end
67
+
68
+ def test_certificate_reader
69
+ signer=EzCrypto::Signer.from_file File.dirname(__FILE__) + "/testsigner.pem"
70
+ cert=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/testsigner.cert"
71
+ assert cert
72
+ assert cert.cert?
73
+ assert_instance_of EzCrypto::Certificate, cert
74
+ assert_equal signer.public_key.to_s, cert.public_key.to_s
75
+
76
+ sig=signer.sign "hello"
77
+ assert sig
78
+ assert cert.verify( sig,"hello")
79
+
80
+ assert_equal "/C=DK/ST=Denmark/L=Copenhagen/O=EzCrypto Test Certificate/OU=testing/CN=EzCrypto Testing/emailAddress=pelleb@gmail.com",cert.subject.to_s
81
+ assert_equal "/C=DK/ST=Denmark/L=Copenhagen/O=EzCrypto Test Certificate/OU=testing/CN=EzCrypto Testing/emailAddress=pelleb@gmail.com",cert.issuer.to_s
82
+
83
+ assert_kind_of EzCrypto::Name,cert.issuer
84
+ assert_kind_of EzCrypto::Name,cert.subject
85
+ assert cert.serial
86
+ assert cert.not_after
87
+ assert cert.not_before
88
+ assert cert.valid?
89
+
90
+
91
+ assert_equal cert.subject[:emailAddress],"pelleb@gmail.com"
92
+ assert_equal cert.subject[:C],"DK"
93
+ assert_equal cert.subject[:ST],"Denmark"
94
+ assert_equal cert.subject[:L],"Copenhagen"
95
+ assert_equal cert.subject[:OU],"testing"
96
+ assert_equal cert.subject[:O],"EzCrypto Test Certificate"
97
+ assert_equal cert.subject[:CN],"EzCrypto Testing"
98
+
99
+ assert_equal cert.subject.emailAddress,"pelleb@gmail.com"
100
+ assert_equal cert.subject.C,"DK"
101
+ assert_equal cert.subject.ST,"Denmark"
102
+ assert_equal cert.subject.L,"Copenhagen"
103
+ assert_equal cert.subject.OU,"testing"
104
+ assert_equal cert.subject.O,"EzCrypto Test Certificate"
105
+ assert_equal cert.subject.CN,"EzCrypto Testing"
106
+
107
+ assert_equal cert.subject.email,"pelleb@gmail.com"
108
+ assert_equal cert.subject.c,"DK"
109
+ assert_equal cert.subject.st,"Denmark"
110
+ assert_equal cert.subject.l,"Copenhagen"
111
+ assert_equal cert.subject.ou,"testing"
112
+ assert_equal cert.subject.o,"EzCrypto Test Certificate"
113
+ assert_equal cert.subject.cn,"EzCrypto Testing"
114
+
115
+ assert_equal cert.subject.country,"DK"
116
+ assert_equal cert.subject.state,"Denmark"
117
+ assert_equal cert.subject.locality,"Copenhagen"
118
+ assert_equal cert.subject.organisational_unit,"testing"
119
+ assert_equal cert.subject.organisation,"EzCrypto Test Certificate"
120
+ assert_equal cert.subject.organizational_unit,"testing"
121
+ assert_equal cert.subject.organization,"EzCrypto Test Certificate"
122
+ assert_equal cert.subject.name,"EzCrypto Testing"
123
+ assert_equal cert.subject.common_name,"EzCrypto Testing"
124
+
125
+ assert_equal cert.emailAddress,"pelleb@gmail.com"
126
+ assert_equal cert.C,"DK"
127
+ assert_equal cert.ST,"Denmark"
128
+ assert_equal cert.L,"Copenhagen"
129
+ assert_equal cert.OU,"testing"
130
+ assert_equal cert.O,"EzCrypto Test Certificate"
131
+ assert_equal cert.CN,"EzCrypto Testing"
132
+
133
+ assert_equal cert.email,"pelleb@gmail.com"
134
+ assert_equal cert.c,"DK"
135
+ assert_equal cert.st,"Denmark"
136
+ assert_equal cert.l,"Copenhagen"
137
+ assert_equal cert.ou,"testing"
138
+ assert_equal cert.o,"EzCrypto Test Certificate"
139
+ assert_equal cert.cn,"EzCrypto Testing"
140
+
141
+ assert_equal cert.country,"DK"
142
+ assert_equal cert.state,"Denmark"
143
+ assert_equal cert.locality,"Copenhagen"
144
+ assert_equal cert.organisational_unit,"testing"
145
+ assert_equal cert.organisation,"EzCrypto Test Certificate"
146
+ assert_equal cert.organizational_unit,"testing"
147
+ assert_equal cert.organization,"EzCrypto Test Certificate"
148
+ assert_equal cert.name,"EzCrypto Testing"
149
+ assert_equal cert.common_name,"EzCrypto Testing"
150
+
151
+ assert_equal cert.issuer[:emailAddress],"pelleb@gmail.com"
152
+ assert_equal cert.issuer[:C],"DK"
153
+ assert_equal cert.issuer[:ST],"Denmark"
154
+ assert_equal cert.issuer[:L],"Copenhagen"
155
+ assert_equal cert.issuer[:OU],"testing"
156
+ assert_equal cert.issuer[:O],"EzCrypto Test Certificate"
157
+ assert_equal cert.issuer[:CN],"EzCrypto Testing"
158
+
159
+ assert_equal cert.issuer.emailAddress,"pelleb@gmail.com"
160
+ assert_equal cert.issuer.C,"DK"
161
+ assert_equal cert.issuer.ST,"Denmark"
162
+ assert_equal cert.issuer.L,"Copenhagen"
163
+ assert_equal cert.issuer.OU,"testing"
164
+ assert_equal cert.issuer.O,"EzCrypto Test Certificate"
165
+ assert_equal cert.issuer.CN,"EzCrypto Testing"
166
+
167
+ assert_equal cert.issuer.email,"pelleb@gmail.com"
168
+ assert_equal cert.issuer.c,"DK"
169
+ assert_equal cert.issuer.st,"Denmark"
170
+ assert_equal cert.issuer.l,"Copenhagen"
171
+ assert_equal cert.issuer.ou,"testing"
172
+ assert_equal cert.issuer.o,"EzCrypto Test Certificate"
173
+ assert_equal cert.issuer.cn,"EzCrypto Testing"
174
+ assert_equal cert.issuer.country,"DK"
175
+ assert_equal cert.issuer.state,"Denmark"
176
+ assert_equal cert.issuer.locality,"Copenhagen"
177
+ assert_equal cert.issuer.organisational_unit,"testing"
178
+ assert_equal cert.issuer.organisation,"EzCrypto Test Certificate"
179
+ assert_equal cert.issuer.organizational_unit,"testing"
180
+ assert_equal cert.issuer.organization,"EzCrypto Test Certificate"
181
+ assert_equal cert.issuer.name,"EzCrypto Testing"
182
+ assert_equal cert.issuer.common_name,"EzCrypto Testing"
183
+
184
+ ## Extensions
185
+
186
+ assert cert.extensions
187
+
188
+ end
189
+
190
+ def test_in_memory_store
191
+ trust=EzCrypto::TrustStore.new
192
+ cert=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/testsigner.cert"
193
+ assert !trust.verify(cert)
194
+ trust.add cert
195
+ assert trust.verify(cert)
196
+
197
+ sf_root=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf-class2-root.crt"
198
+ assert !trust.verify(sf_root)
199
+ starfield=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf_intermediate.crt"
200
+ assert !trust.verify(starfield)
201
+ agree2=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/agree2.com.cert"
202
+ assert !trust.verify(agree2)
203
+
204
+ trust.add sf_root
205
+ assert trust.verify(sf_root)
206
+ assert trust.verify(starfield)
207
+ assert !trust.verify(agree2)
208
+
209
+ trust.add starfield
210
+ assert trust.verify(agree2)
211
+ end
212
+
213
+ def test_disk_store
214
+ trust=EzCrypto::TrustStore.new File.dirname(__FILE__) + "/store"
215
+ sf_root=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf-class2-root.crt"
216
+ trust.add(sf_root)
217
+ assert trust.verify(sf_root)
218
+ starfield=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf_intermediate.crt"
219
+ assert trust.verify(starfield)
220
+ trust.add(starfield)
221
+ agree2=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/agree2.com.cert"
222
+ assert trust.verify(agree2)
223
+
224
+ cert=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/testsigner.cert"
225
+ assert !trust.verify(cert)
226
+ trust.add cert
227
+ assert trust.verify(cert)
228
+ end
229
+
230
+ def test_load_combined
231
+ certs=EzCrypto::Verifier.load_all_from_file File.dirname(__FILE__) + "/../lib/trusted.pem"
232
+ assert certs.is_a?( Array)
233
+ assert certs.size>1
234
+ certs.each do |cert|
235
+ assert_instance_of EzCrypto::Certificate, cert
236
+ end
237
+ end
238
+
239
+ def test_load_trusted_truststore
240
+ trust=EzCrypto::TrustStore.default_trusted
241
+ sf_root=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf-class2-root.crt"
242
+ assert trust.verify(sf_root)
243
+ starfield=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/sf_intermediate.crt"
244
+ assert trust.verify(starfield)
245
+ agree2=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/agree2.com.cert"
246
+ assert trust.verify(agree2)
247
+
248
+ cert=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/testsigner.cert"
249
+ assert !trust.verify(cert)
250
+ trust.add cert
251
+ assert trust.verify(cert)
252
+ end
253
+
254
+ # Disabling these until pkyp is back up
255
+ # def test_public_key_load_from_pkyp
256
+ # verifier=EzCrypto::Verifier.from_pkyp "e93e18114cbefaaa89fda908b09df63d3662879a"
257
+ # agree2=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/agree2.com.cert"
258
+ # assert_equal agree2.cert.to_s,verifier.cert.to_s
259
+ # assert verifier
260
+ # end
261
+ #
262
+ # def test_register_public_key_at_pkyp
263
+ # pub=EzCrypto::Verifier.from_file File.dirname(__FILE__) + "/agree2.com.cert"
264
+ # assert_equal pub.digest,pub.register_with_pkyp
265
+ # end
266
+ #
267
+ # def test_create_register_and_fetch_public_key
268
+ # signer=EzCrypto::Signer.generate
269
+ # assert_equal signer.verifier.digest,signer.verifier.register_with_pkyp
270
+ # verifier=EzCrypto::Verifier.from_pkyp signer.verifier.digest
271
+ # sig=signer.sign "hello"
272
+ # assert sig
273
+ # assert verifier.verify( sig,"hello")
274
+ # end
275
+ #
276
+
277
+ def assert_signer(signer)
278
+ assert signer
279
+ assert signer.public_key
280
+
281
+ sig=signer.sign "hello"
282
+ assert sig
283
+ assert signer.verifier
284
+ assert signer.verifier.verify( sig,"hello")
285
+ end
286
+
287
+ end
@@ -0,0 +1,41 @@
1
+ require 'association_key_holder_test'
2
+
3
+ class EncUser < ActiveRecord::Base
4
+ set_table_name "users"
5
+ encrypt :name, :base64=>true
6
+ end
7
+
8
+ class RawUser < ActiveRecord::Base
9
+ set_table_name "users"
10
+ end
11
+
12
+ class EncryptTest < AssociationKeyHolderTest
13
+ def setup
14
+ @key_holder=EncUser.create
15
+ end
16
+
17
+ def test_should_be_base64
18
+ assert EncUser.ezcrypto_base64?
19
+ end
20
+
21
+ def test_should_retain_session_key_on_reload
22
+ key=EzCrypto::Key.generate
23
+ key_holder.set_session_key key
24
+ assert_not_nil key_holder.session_key
25
+ assert_equal key.raw,key_holder.session_key.raw
26
+
27
+ key_holder.name="bob"
28
+ key_holder.save
29
+
30
+ assert_equal "bob",key_holder.name
31
+
32
+ found=EncUser.find key_holder.id
33
+ assert_equal key_holder.name,found.name
34
+
35
+ raw=RawUser.find key_holder.id
36
+ assert_not_nil raw.name
37
+ assert_not_equal key_holder.name,raw.name
38
+
39
+ end
40
+
41
+ end
@@ -0,0 +1,215 @@
1
+ #coding: utf-8
2
+ $:.unshift(File.dirname(__FILE__) + "/../lib/")
3
+
4
+ require 'test/unit'
5
+ require 'fileutils'
6
+ require 'ezcrypto'
7
+ require 'base64'
8
+
9
+ class EzCryptoTest < Test::Unit::TestCase
10
+
11
+ def setup
12
+ end
13
+
14
+ def test_generate_alg_key
15
+ assert_generate_alg_key "aes-128-cbc",16
16
+ assert_generate_alg_key "aes-192-cbc",24
17
+ assert_generate_alg_key "aes-256-cbc",32
18
+ assert_generate_alg_key "rc2-40-cbc",5
19
+ assert_generate_alg_key "rc2-64-cbc",8
20
+ assert_generate_alg_key "rc4-64" ,8
21
+ assert_generate_alg_key "blowfish" ,16
22
+ assert_generate_alg_key "des" ,8
23
+ end
24
+
25
+ def test_with_password
26
+ assert_with_password "","secret","aes-128-cbc",16
27
+ assert_with_password "test","secret","aes-128-cbc",16
28
+ assert_with_password "password","secret","aes-128-cbc",16
29
+ assert_with_password "a�sldfad8q5�34j2�l4j24l6j2456","secret","aes-128-cbc",16
30
+
31
+ assert_with_password "","secret","aes-192-cbc",24
32
+ assert_with_password "test","secret","aes-192-cbc",24
33
+ assert_with_password "password","secret","aes-192-cbc",24
34
+ assert_with_password "a�sldfad8q5�34j2�l4j24l6j2456","secret","aes-192-cbc",24
35
+
36
+ assert_with_password "","secret","aes-256-cbc",32
37
+ assert_with_password "test","secret","aes-256-cbc",32
38
+ assert_with_password "password","secret","aes-256-cbc",32
39
+ assert_with_password "a�sldfad8q5�34j2�l4j24l6j2456","secret","aes-256-cbc",32
40
+
41
+ end
42
+
43
+ def test_encoded
44
+ 0.upto 32 do |size|
45
+ assert_encoded_keys size
46
+ end
47
+ end
48
+
49
+ def test_encrypt
50
+ 0.upto(CLEAR_TEXT.size-1) do |size|
51
+ assert_encrypt CLEAR_TEXT[0..size]
52
+ end
53
+ end
54
+
55
+ def test_decrypt
56
+ 0.upto(CLEAR_TEXT.size) do |size|
57
+ assert_decrypt CLEAR_TEXT[0..size]
58
+ end
59
+ end
60
+
61
+ def test_decrypt64
62
+ 0.upto(CLEAR_TEXT.size) do |size|
63
+ assert_decrypt64 CLEAR_TEXT[0..size]
64
+ end
65
+ end
66
+
67
+ def test_keyfile_store_load
68
+
69
+ algo, size = "aes-256-cbc", 32
70
+ keyfile = 'ezcrypto-test.key'
71
+
72
+ FileUtils.rm [keyfile], :force => true
73
+ key = EzCrypto::Key.generate :algorithm => algo
74
+ assert_file_not_exists keyfile
75
+ key.store keyfile
76
+ assert_file_exists keyfile
77
+ assert_file_permissions keyfile, 0100400
78
+
79
+ key2 = EzCrypto::Key.load(keyfile)
80
+ assert_equal key.raw, key2.raw
81
+
82
+ FileUtils.rm [keyfile], :force => true
83
+ end
84
+
85
+ def test_filestuff_with_defaults
86
+
87
+ clearfile = 'lorem_ipsum.txt'
88
+ keyfile = 'lorem_ipsum.key'
89
+ algo, size = "aes-256-cbc", 32
90
+
91
+ File.open(clearfile, 'w') { |f| f.write(CLEAR_TEXT) }
92
+ assert_file_contains clearfile, CLEAR_TEXT
93
+
94
+ key = EzCrypto::Key.generate :algorithm => algo
95
+
96
+ # default behaviour: remove clearfile, append '.ez' suffix
97
+ cryptfile = key.encrypt_file(clearfile)
98
+ assert_equal cryptfile, clearfile + ".ez"
99
+ #assert_file_not_exists clearfile
100
+ assert_file_exists cryptfile
101
+ assert_file_contains cryptfile, key.encrypt(CLEAR_TEXT)
102
+
103
+ # default behaviour: unlink cryptfile and remove suffix from filename
104
+ clearfile = key.decrypt_file cryptfile
105
+ assert_file_exists clearfile
106
+ assert_file_not_exists cryptfile
107
+ assert_file_contains clearfile, CLEAR_TEXT
108
+ FileUtils.rm [keyfile, clearfile, cryptfile], :force => true
109
+ end
110
+
111
+ def test_filestuff_with_options
112
+
113
+ clearfile = 'lorem_ipsum.txt'
114
+ keyfile = 'lorem_ipsum.key'
115
+ algo, size = "aes-256-cbc", 32
116
+
117
+ File.open(clearfile, 'w') { |f| f.write(CLEAR_TEXT) }
118
+ assert_file_contains clearfile, CLEAR_TEXT
119
+
120
+ key = EzCrypto::Key.generate :algorithm => algo
121
+
122
+ # with options: keep the original file, auto-create a
123
+ # new filename with a user-defined suffix
124
+ cryptfile = key.encrypt_file(clearfile, nil, :autoclean => false, :suffix => '.Encrypted')
125
+ assert_equal cryptfile, clearfile + ".Encrypted", 'suffix was added'
126
+ assert_file_exists clearfile
127
+ assert_file_exists cryptfile
128
+ assert_file_permissions cryptfile, 0100600
129
+
130
+ assert_raises(Errno::EEXIST, "the original file would not be overwritten") {
131
+ key.decrypt_file(cryptfile, nil, :autoclean => false, :suffix => '.Encrypted')
132
+ }
133
+ FileUtils.rm [clearfile], :force => true
134
+
135
+ clearfile = key.decrypt_file(cryptfile, nil, :autoclean => false, :suffix => '.Encrypted')
136
+ assert_equal cryptfile, clearfile + ".Encrypted", 'suffix was removed'
137
+ assert_file_exists clearfile
138
+ assert_file_exists cryptfile
139
+ assert_file_permissions cryptfile, 0100600
140
+ assert_file_contains clearfile, CLEAR_TEXT
141
+
142
+ FileUtils.rm [keyfile, clearfile, cryptfile], :force => true
143
+ end
144
+
145
+ def assert_file_permissions(filename, mode, msg='')
146
+ fmode = File.stat(filename).mode
147
+ assert_equal fmode, mode, msg
148
+ end
149
+
150
+ def assert_file_exists(filename)
151
+ assert File.exists?(filename)
152
+ end
153
+
154
+ def assert_file_not_exists(filename)
155
+ assert !File.exists?(filename)
156
+ end
157
+
158
+ def assert_file_contains(filename, expected)
159
+ assert_file_exists(filename)
160
+ content = File.open(filename,'rb').read # Use b flag here to prevent encoding errors
161
+ assert_equal expected, content
162
+ end
163
+
164
+ def assert_key_size(size,key)
165
+ assert_equal size,key.raw.size
166
+ end
167
+
168
+ def assert_generate_alg_key(algorithm,size)
169
+ key=EzCrypto::Key.generate :algorithm=>algorithm
170
+ assert_key_size size,key
171
+ end
172
+
173
+ def assert_with_password(password,salt,algorithm,size)
174
+ key=EzCrypto::Key.with_password password,salt,:algorithm=>algorithm
175
+ assert_key_size size,key
176
+ assert_equal key.raw,EzCrypto::Key.with_password( password,salt,:algorithm=>algorithm).raw
177
+ end
178
+
179
+ def assert_encoded_keys(size)
180
+ # In original test, we pass in integer. generate expects a hash with a :algorithm key -james
181
+ key = EzCrypto::Key.new(EzCrypto::Digester.generate_key(size))
182
+ #key=EzCrypto::Key.generate size
183
+ key2=EzCrypto::Key.decode(key.encode)
184
+ assert_equal key.raw, key2.raw
185
+ end
186
+
187
+ def assert_encrypt(clear)
188
+ ALGORITHMS.each do |alg|
189
+ key=EzCrypto::Key.generate :algorithm=>alg
190
+ encrypted=key.encrypt clear
191
+ assert_not_nil encrypted
192
+ end
193
+ end
194
+
195
+ def assert_decrypt(clear)
196
+ ALGORITHMS.each do |alg|
197
+ key=EzCrypto::Key.generate :algorithm=>alg
198
+ encrypted=key.encrypt clear
199
+ assert_not_nil encrypted
200
+ assert_equal clear,key.decrypt(encrypted)
201
+ end
202
+ end
203
+
204
+ def assert_decrypt64(clear)
205
+ key=EzCrypto::Key.generate
206
+ encrypted=key.encrypt64 clear
207
+ assert_not_nil encrypted
208
+ assert_equal clear,key.decrypt64(encrypted)
209
+ end
210
+
211
+ ALGORITHMS=["aes128","bf","blowfish","des","des3","rc4","rc2"]
212
+ CLEAR_TEXT="Lorem ipsum dolor sit amet, suspendisse id interdum mus leo id. Sapien tempus consequat nullam, platea vitae sociis sed elementum et fermentum, vel praesent eget. Sed blandit augue, molestie mus sed habitant, semper voluptatibus neque, nullam a augue. Aptent imperdiet curabitur, quam quis laoreet. Dolor magna. Quis vestibulum amet eu arcu fringilla nibh, mi urna sunt dictumst nulla, elit quisque purus eros, sem hendrerit. Vulputate tortor rhoncus ac nonummy tortor nulla. Nunc id nunc luctus ligula."
213
+ end
214
+
215
+