jruby-jruby-openssl 0.5.0.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.
Files changed (56) hide show
  1. data/History.txt +34 -0
  2. data/License.txt +30 -0
  3. data/README.txt +24 -0
  4. data/lib/bcmail-jdk14-139.jar +0 -0
  5. data/lib/bcprov-jdk14-139.jar +0 -0
  6. data/lib/jopenssl.jar +0 -0
  7. data/lib/jopenssl/version.rb +5 -0
  8. data/lib/openssl.rb +24 -0
  9. data/lib/openssl/bn.rb +35 -0
  10. data/lib/openssl/buffering.rb +239 -0
  11. data/lib/openssl/cipher.rb +58 -0
  12. data/lib/openssl/digest.rb +48 -0
  13. data/lib/openssl/dummy.rb +34 -0
  14. data/lib/openssl/dummyssl.rb +13 -0
  15. data/lib/openssl/ssl.rb +135 -0
  16. data/lib/openssl/x509.rb +154 -0
  17. data/test/fixture/cacert.pem +23 -0
  18. data/test/fixture/cert_localhost.pem +19 -0
  19. data/test/fixture/localhost_keypair.pem +18 -0
  20. data/test/openssl/ssl_server.rb +99 -0
  21. data/test/openssl/test_asn1.rb +199 -0
  22. data/test/openssl/test_cipher.rb +174 -0
  23. data/test/openssl/test_digest.rb +88 -0
  24. data/test/openssl/test_hmac.rb +44 -0
  25. data/test/openssl/test_ns_spki.rb +69 -0
  26. data/test/openssl/test_pair.rb +149 -0
  27. data/test/openssl/test_pkcs7.rb +159 -0
  28. data/test/openssl/test_pkey_rsa.rb +49 -0
  29. data/test/openssl/test_ssl.rb +307 -0
  30. data/test/openssl/test_x509cert.rb +236 -0
  31. data/test/openssl/test_x509crl.rb +234 -0
  32. data/test/openssl/test_x509ext.rb +74 -0
  33. data/test/openssl/test_x509name.rb +265 -0
  34. data/test/openssl/test_x509req.rb +178 -0
  35. data/test/openssl/test_x509store.rb +245 -0
  36. data/test/openssl/utils.rb +135 -0
  37. data/test/pkcs7_mime_enveloped.message +19 -0
  38. data/test/pkcs7_mime_signed.message +30 -0
  39. data/test/pkcs7_multipart_signed.message +45 -0
  40. data/test/ref/a.out +0 -0
  41. data/test/ref/compile.rb +8 -0
  42. data/test/ref/pkcs1 +0 -0
  43. data/test/ref/pkcs1.c +21 -0
  44. data/test/test_cipher.rb +81 -0
  45. data/test/test_integration.rb +100 -0
  46. data/test/test_java.rb +98 -0
  47. data/test/test_java_attribute.rb +25 -0
  48. data/test/test_java_bio.rb +42 -0
  49. data/test/test_java_mime.rb +173 -0
  50. data/test/test_java_pkcs7.rb +769 -0
  51. data/test/test_java_smime.rb +177 -0
  52. data/test/test_openssl.rb +34 -0
  53. data/test/test_openssl_x509.rb +34 -0
  54. data/test/test_pkey.rb +46 -0
  55. data/test/ut_eof.rb +128 -0
  56. metadata +120 -0
@@ -0,0 +1,99 @@
1
+ require "socket"
2
+ require "thread"
3
+ require "openssl"
4
+ require File.join(File.dirname(__FILE__), "utils.rb")
5
+
6
+ def get_pem(io=$stdin)
7
+ buf = ""
8
+ while line = io.gets
9
+ if /^-----BEGIN / =~ line
10
+ buf << line
11
+ break
12
+ end
13
+ end
14
+ while line = io.gets
15
+ buf << line
16
+ if /^-----END / =~ line
17
+ break
18
+ end
19
+ end
20
+ return buf
21
+ end
22
+
23
+ def make_key(pem)
24
+ begin
25
+ return OpenSSL::PKey::RSA.new(pem)
26
+ rescue
27
+ return OpenSSL::PKey::DSA.new(pem)
28
+ end
29
+ end
30
+
31
+ if $DEBUG
32
+ def log(s); File.open("ssl-server-debug", "a") {|f| f.puts s}; end
33
+ File.open("ssl-server-debug", "w") {|f| f << ""}
34
+ log "server starting"
35
+ else
36
+ def log(s) end
37
+ end
38
+
39
+ begin
40
+ ca_cert = OpenSSL::X509::Certificate.new(get_pem)
41
+ log "got ca cert #{ca_cert.inspect}"
42
+ ssl_cert = OpenSSL::X509::Certificate.new(get_pem)
43
+ log "got ssl cert #{ssl_cert.inspect}"
44
+ ssl_key = make_key(get_pem)
45
+ port = Integer(ARGV.shift)
46
+ verify_mode = Integer(ARGV.shift)
47
+ start_immediately = (/yes/ =~ ARGV.shift)
48
+
49
+ store = OpenSSL::X509::Store.new
50
+ store.add_cert(ca_cert)
51
+ store.purpose = OpenSSL::X509::PURPOSE_SSL_CLIENT
52
+ ctx = OpenSSL::SSL::SSLContext.new
53
+ ctx.cert_store = store
54
+ #ctx.extra_chain_cert = [ ca_cert ]
55
+ ctx.cert = ssl_cert
56
+ ctx.key = ssl_key
57
+ ctx.verify_mode = verify_mode
58
+
59
+ Socket.do_not_reverse_lookup = true
60
+ tcps = nil
61
+ 100.times{|i|
62
+ begin
63
+ log "starting server on #{port+i}"
64
+ tcps = TCPServer.new("0.0.0.0", port+i)
65
+ port = port + i
66
+ break
67
+ rescue Errno::EADDRINUSE
68
+ next
69
+ end
70
+ }
71
+ log "starting ssl server"
72
+ ssls = OpenSSL::SSL::SSLServer.new(tcps, ctx)
73
+ ssls.start_immediately = start_immediately
74
+
75
+ log("sending pid #{Process.pid}")
76
+ $stdout.sync = true
77
+ $stdout.puts Process.pid
78
+ $stdout.puts port
79
+
80
+ loop do
81
+ ssl = ssls.accept rescue next
82
+ Thread.start{
83
+ q = Queue.new
84
+ th = Thread.start{ ssl.write(q.shift) while true }
85
+ while line = ssl.gets
86
+ if line =~ /^STARTTLS$/
87
+ ssl.accept
88
+ next
89
+ end
90
+ q.push(line)
91
+ end
92
+ th.kill if q.empty?
93
+ ssl.close
94
+ }
95
+ end
96
+ rescue
97
+ log $!
98
+ log $!.backtrace.join("\n")
99
+ end
@@ -0,0 +1,199 @@
1
+ begin
2
+ require "openssl"
3
+ require File.join(File.dirname(__FILE__), "utils.rb")
4
+ rescue LoadError
5
+ end
6
+ require 'test/unit'
7
+
8
+ class OpenSSL::TestASN1 < Test::Unit::TestCase
9
+ def test_decode
10
+ subj = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=TestCA")
11
+ key = OpenSSL::TestUtils::TEST_KEY_RSA1024
12
+ now = Time.at(Time.now.to_i) # suppress usec
13
+ # now = Time.utc(2006,04,03,22,15,13)
14
+ s = 0xdeadbeafdeadbeafdeadbeafdeadbeaf
15
+ exts = [
16
+ ["basicConstraints","CA:TRUE,pathlen:1",true],
17
+ ["keyUsage","keyCertSign, cRLSign",true],
18
+ ["subjectKeyIdentifier","hash",false],
19
+ ]
20
+ dgst = OpenSSL::Digest::SHA1.new
21
+ cert = OpenSSL::TestUtils.issue_cert(
22
+ subj, key, s, now, now+3600, exts, nil, nil, dgst)
23
+
24
+ asn1 = OpenSSL::ASN1.decode(cert)
25
+ assert_equal(OpenSSL::ASN1::Sequence, asn1.class)
26
+ assert_equal(3, asn1.value.size)
27
+ tbs_cert, sig_alg, sig_val = *asn1.value
28
+
29
+ assert_equal(OpenSSL::ASN1::Sequence, tbs_cert.class)
30
+ assert_equal(8, tbs_cert.value.size)
31
+
32
+ version = tbs_cert.value[0]
33
+ assert_equal(:CONTEXT_SPECIFIC, version.tag_class)
34
+ assert_equal(0, version.tag)
35
+
36
+ assert_equal(1, version.value.size)
37
+ assert_equal(OpenSSL::ASN1::Integer, version.value[0].class)
38
+ assert_equal(2, version.value[0].value)
39
+
40
+ serial = tbs_cert.value[1]
41
+ assert_equal(OpenSSL::ASN1::Integer, serial.class)
42
+ assert_equal(0xdeadbeafdeadbeafdeadbeafdeadbeaf, serial.value)
43
+
44
+ sig = tbs_cert.value[2]
45
+ assert_equal(OpenSSL::ASN1::Sequence, sig.class)
46
+ assert_equal(2, sig.value.size)
47
+ assert_equal(OpenSSL::ASN1::ObjectId, sig.value[0].class)
48
+ assert_equal("1.2.840.113549.1.1.5", sig.value[0].oid)
49
+ assert_equal(OpenSSL::ASN1::Null, sig.value[1].class)
50
+
51
+ dn = tbs_cert.value[3] # issuer
52
+ assert_equal(subj.hash, OpenSSL::X509::Name.new(dn).hash)
53
+ assert_equal(OpenSSL::ASN1::Sequence, dn.class)
54
+ assert_equal(3, dn.value.size)
55
+ assert_equal(OpenSSL::ASN1::Set, dn.value[0].class)
56
+ assert_equal(OpenSSL::ASN1::Set, dn.value[1].class)
57
+ assert_equal(OpenSSL::ASN1::Set, dn.value[2].class)
58
+ assert_equal(1, dn.value[0].value.size)
59
+ assert_equal(1, dn.value[1].value.size)
60
+ assert_equal(1, dn.value[2].value.size)
61
+ assert_equal(OpenSSL::ASN1::Sequence, dn.value[0].value[0].class)
62
+ assert_equal(OpenSSL::ASN1::Sequence, dn.value[1].value[0].class)
63
+ assert_equal(OpenSSL::ASN1::Sequence, dn.value[2].value[0].class)
64
+ assert_equal(2, dn.value[0].value[0].value.size)
65
+ assert_equal(2, dn.value[1].value[0].value.size)
66
+ assert_equal(2, dn.value[2].value[0].value.size)
67
+ oid, value = *dn.value[0].value[0].value
68
+ assert_equal(OpenSSL::ASN1::ObjectId, oid.class)
69
+ assert_equal("0.9.2342.19200300.100.1.25", oid.oid)
70
+ assert_equal(OpenSSL::ASN1::IA5String, value.class)
71
+ assert_equal("org", value.value)
72
+ oid, value = *dn.value[1].value[0].value
73
+ assert_equal(OpenSSL::ASN1::ObjectId, oid.class)
74
+ assert_equal("0.9.2342.19200300.100.1.25", oid.oid)
75
+ assert_equal(OpenSSL::ASN1::IA5String, value.class)
76
+ assert_equal("ruby-lang", value.value)
77
+ oid, value = *dn.value[2].value[0].value
78
+ assert_equal(OpenSSL::ASN1::ObjectId, oid.class)
79
+ assert_equal("2.5.4.3", oid.oid)
80
+ assert_equal(OpenSSL::ASN1::UTF8String, value.class)
81
+ assert_equal("TestCA", value.value)
82
+
83
+ validity = tbs_cert.value[4]
84
+ assert_equal(OpenSSL::ASN1::Sequence, validity.class)
85
+ assert_equal(2, validity.value.size)
86
+ assert_equal(OpenSSL::ASN1::UTCTime, validity.value[0].class)
87
+ assert_equal(now, validity.value[0].value)
88
+ assert_equal(OpenSSL::ASN1::UTCTime, validity.value[1].class)
89
+ assert_equal(now+3600, validity.value[1].value)
90
+
91
+ dn = tbs_cert.value[5] # subject
92
+ assert_equal(subj.hash, OpenSSL::X509::Name.new(dn).hash)
93
+ assert_equal(OpenSSL::ASN1::Sequence, dn.class)
94
+ assert_equal(3, dn.value.size)
95
+ assert_equal(OpenSSL::ASN1::Set, dn.value[0].class)
96
+ assert_equal(OpenSSL::ASN1::Set, dn.value[1].class)
97
+ assert_equal(OpenSSL::ASN1::Set, dn.value[2].class)
98
+ assert_equal(1, dn.value[0].value.size)
99
+ assert_equal(1, dn.value[1].value.size)
100
+ assert_equal(1, dn.value[2].value.size)
101
+ assert_equal(OpenSSL::ASN1::Sequence, dn.value[0].value[0].class)
102
+ assert_equal(OpenSSL::ASN1::Sequence, dn.value[1].value[0].class)
103
+ assert_equal(OpenSSL::ASN1::Sequence, dn.value[2].value[0].class)
104
+ assert_equal(2, dn.value[0].value[0].value.size)
105
+ assert_equal(2, dn.value[1].value[0].value.size)
106
+ assert_equal(2, dn.value[2].value[0].value.size)
107
+ oid, value = *dn.value[0].value[0].value
108
+ assert_equal(OpenSSL::ASN1::ObjectId, oid.class)
109
+ assert_equal("0.9.2342.19200300.100.1.25", oid.oid)
110
+ assert_equal(OpenSSL::ASN1::IA5String, value.class)
111
+ assert_equal("org", value.value)
112
+ oid, value = *dn.value[1].value[0].value
113
+ assert_equal(OpenSSL::ASN1::ObjectId, oid.class)
114
+ assert_equal("0.9.2342.19200300.100.1.25", oid.oid)
115
+ assert_equal(OpenSSL::ASN1::IA5String, value.class)
116
+ assert_equal("ruby-lang", value.value)
117
+ oid, value = *dn.value[2].value[0].value
118
+ assert_equal(OpenSSL::ASN1::ObjectId, oid.class)
119
+ assert_equal("2.5.4.3", oid.oid)
120
+ assert_equal(OpenSSL::ASN1::UTF8String, value.class)
121
+ assert_equal("TestCA", value.value)
122
+
123
+ pkey = tbs_cert.value[6]
124
+ assert_equal(OpenSSL::ASN1::Sequence, pkey.class)
125
+ assert_equal(2, pkey.value.size)
126
+ assert_equal(OpenSSL::ASN1::Sequence, pkey.value[0].class)
127
+ assert_equal(2, pkey.value[0].value.size)
128
+ assert_equal(OpenSSL::ASN1::ObjectId, pkey.value[0].value[0].class)
129
+ assert_equal("1.2.840.113549.1.1.1", pkey.value[0].value[0].oid)
130
+ assert_equal(OpenSSL::ASN1::BitString, pkey.value[1].class)
131
+ assert_equal(0, pkey.value[1].unused_bits)
132
+ spkey = OpenSSL::ASN1.decode(pkey.value[1].value)
133
+ assert_equal(OpenSSL::ASN1::Sequence, spkey.class)
134
+ assert_equal(2, spkey.value.size)
135
+ assert_equal(OpenSSL::ASN1::Integer, spkey.value[0].class)
136
+ assert_equal(143085709396403084580358323862163416700436550432664688288860593156058579474547937626086626045206357324274536445865308750491138538454154232826011964045825759324933943290377903384882276841880081931690695505836279972214003660451338124170055999155993192881685495391496854691199517389593073052473319331505702779271, spkey.value[0].value)
137
+ assert_equal(OpenSSL::ASN1::Integer, spkey.value[1].class)
138
+ assert_equal(65537, spkey.value[1].value)
139
+
140
+ extensions = tbs_cert.value[7]
141
+ assert_equal(:CONTEXT_SPECIFIC, extensions.tag_class)
142
+ assert_equal(3, extensions.tag)
143
+ assert_equal(1, extensions.value.size)
144
+ assert_equal(OpenSSL::ASN1::Sequence, extensions.value[0].class)
145
+ assert_equal(3, extensions.value[0].value.size)
146
+
147
+ ext = extensions.value[0].value[0] # basicConstraints
148
+ assert_equal(OpenSSL::ASN1::Sequence, ext.class)
149
+ assert_equal(3, ext.value.size)
150
+ assert_equal(OpenSSL::ASN1::ObjectId, ext.value[0].class)
151
+ assert_equal("2.5.29.19", ext.value[0].oid)
152
+ assert_equal(OpenSSL::ASN1::Boolean, ext.value[1].class)
153
+ assert_equal(true, ext.value[1].value)
154
+ assert_equal(OpenSSL::ASN1::OctetString, ext.value[2].class)
155
+ extv = OpenSSL::ASN1.decode(ext.value[2].value)
156
+ assert_equal(OpenSSL::ASN1::Sequence, extv.class)
157
+ assert_equal(2, extv.value.size)
158
+ assert_equal(OpenSSL::ASN1::Boolean, extv.value[0].class)
159
+ assert_equal(true, extv.value[0].value)
160
+ assert_equal(OpenSSL::ASN1::Integer, extv.value[1].class)
161
+ assert_equal(1, extv.value[1].value)
162
+
163
+ ext = extensions.value[0].value[1] # keyUsage
164
+ assert_equal(OpenSSL::ASN1::Sequence, ext.class)
165
+ assert_equal(3, ext.value.size)
166
+ assert_equal(OpenSSL::ASN1::ObjectId, ext.value[0].class)
167
+ assert_equal("2.5.29.15", ext.value[0].oid)
168
+ assert_equal(OpenSSL::ASN1::Boolean, ext.value[1].class)
169
+ assert_equal(true, ext.value[1].value)
170
+ assert_equal(OpenSSL::ASN1::OctetString, ext.value[2].class)
171
+ extv = OpenSSL::ASN1.decode(ext.value[2].value)
172
+ assert_equal(OpenSSL::ASN1::BitString, extv.class)
173
+ str = "\000"; str[0] = 0b00000110
174
+ assert_equal(str, extv.value)
175
+
176
+ ext = extensions.value[0].value[2] # subjetKeyIdentifier
177
+ assert_equal(OpenSSL::ASN1::Sequence, ext.class)
178
+ assert_equal(2, ext.value.size)
179
+ assert_equal(OpenSSL::ASN1::ObjectId, ext.value[0].class)
180
+ assert_equal("2.5.29.14", ext.value[0].oid)
181
+ assert_equal(OpenSSL::ASN1::OctetString, ext.value[1].class)
182
+ extv = OpenSSL::ASN1.decode(ext.value[1].value)
183
+ assert_equal(OpenSSL::ASN1::OctetString, extv.class)
184
+ sha1 = OpenSSL::Digest::SHA1.new
185
+ sha1.update(pkey.value[1].value)
186
+ assert_equal(sha1.digest, extv.value)
187
+
188
+ assert_equal(OpenSSL::ASN1::Sequence, sig_alg.class)
189
+ assert_equal(2, sig_alg.value.size)
190
+ assert_equal(OpenSSL::ASN1::ObjectId, pkey.value[0].value[0].class)
191
+ assert_equal("1.2.840.113549.1.1.1", pkey.value[0].value[0].oid)
192
+ assert_equal(OpenSSL::ASN1::Null, pkey.value[0].value[1].class)
193
+
194
+ assert_equal(OpenSSL::ASN1::BitString, sig_val.class)
195
+
196
+ cululated_sig = key.sign(OpenSSL::Digest::SHA1.new, tbs_cert.to_der)
197
+ assert_equal(cululated_sig, sig_val.value)
198
+ end
199
+ end if defined?(OpenSSL)
@@ -0,0 +1,174 @@
1
+ if defined?(JRUBY_VERSION)
2
+ require "java"
3
+ base = File.join(File.dirname(__FILE__), '..', '..')
4
+ $CLASSPATH << File.join(base, 'pkg', 'classes')
5
+ $CLASSPATH << File.join(base, 'lib', 'bcprov-jdk14-139.jar')
6
+ end
7
+
8
+ begin
9
+ require "openssl"
10
+ rescue LoadError
11
+ end
12
+ require "test/unit"
13
+
14
+ if defined?(OpenSSL)
15
+
16
+ class OpenSSL::TestCipher < Test::Unit::TestCase
17
+ def setup
18
+ @c1 = OpenSSL::Cipher::Cipher.new("DES-EDE3-CBC")
19
+ @c2 = OpenSSL::Cipher::DES.new(:EDE3, "CBC")
20
+ @key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
21
+ @iv = "\0\0\0\0\0\0\0\0"
22
+ @iv1 = "\1\1\1\1\1\1\1\1"
23
+ @hexkey = "0000000000000000000000000000000000000000000000"
24
+ @hexiv = "0000000000000000"
25
+ @data = "DATA"
26
+ end
27
+
28
+ def teardown
29
+ @c1 = @c2 = nil
30
+ end
31
+
32
+ def test_crypt
33
+ @c1.encrypt.pkcs5_keyivgen(@key, @iv)
34
+ @c2.encrypt.pkcs5_keyivgen(@key, @iv)
35
+ s1 = @c1.update(@data) + @c1.final
36
+ s2 = @c2.update(@data) + @c2.final
37
+ assert_equal(s1, s2, "encrypt")
38
+
39
+ @c1.decrypt.pkcs5_keyivgen(@key, @iv)
40
+ @c2.decrypt.pkcs5_keyivgen(@key, @iv)
41
+ assert_equal(@data, @c1.update(s1)+@c1.final, "decrypt")
42
+ assert_equal(@data, @c2.update(s2)+@c2.final, "decrypt")
43
+ end
44
+
45
+ def test_info
46
+ assert_equal("DES-EDE3-CBC", @c1.name, "name")
47
+ assert_equal("DES-EDE3-CBC", @c2.name, "name")
48
+ assert_kind_of(Fixnum, @c1.key_len, "key_len")
49
+ assert_kind_of(Fixnum, @c1.iv_len, "iv_len")
50
+ end
51
+
52
+ def test_dup
53
+ assert_equal(@c1.name, @c1.dup.name, "dup")
54
+ assert_equal(@c1.name, @c1.clone.name, "clone")
55
+ @c1.encrypt
56
+ @c1.key = @key
57
+ @c1.iv = @iv
58
+ tmpc = @c1.dup
59
+ s1 = @c1.update(@data) + @c1.final
60
+ s2 = tmpc.update(@data) + tmpc.final
61
+ assert_equal(s1, s2, "encrypt dup")
62
+ end
63
+
64
+ def test_reset
65
+ @c1.encrypt
66
+ @c1.key = @key
67
+ @c1.iv = @iv
68
+ s1 = @c1.update(@data) + @c1.final
69
+ @c1.reset
70
+ s2 = @c1.update(@data) + @c1.final
71
+ assert_equal(s1, s2, "encrypt reset")
72
+ end
73
+
74
+ def test_set_iv
75
+ @c1.encrypt
76
+ @c1.key = @key
77
+ @c1.iv = @iv
78
+ s1 = @c1.update(@data) + @c1.final
79
+ @c1.iv = @iv1
80
+ s1 += @c1.update(@data) + @c1.final
81
+ @c1.reset
82
+ @c1.iv = @iv
83
+ s2 = @c1.update(@data) + @c1.final
84
+ @c1.iv = @iv1
85
+ s2 += @c1.update(@data) + @c1.final
86
+ assert_equal(s1, s2, "encrypt reset")
87
+ end
88
+
89
+ def test_empty_data
90
+ @c1.encrypt
91
+ assert_raises(ArgumentError){ @c1.update("") }
92
+ end
93
+
94
+ def test_disable_padding(padding=0)
95
+ # assume a padding size of 8
96
+ # encrypt the data with padding
97
+ @c1.encrypt
98
+ @c1.key = @key
99
+ @c1.iv = @iv
100
+ encrypted_data = @c1.update(@data) + @c1.final
101
+ assert_equal(8, encrypted_data.size)
102
+ # decrypt with padding disabled
103
+ @c1.decrypt
104
+ @c1.padding = padding
105
+ decrypted_data = @c1.update(encrypted_data) + @c1.final
106
+ # check that the result contains the padding
107
+ assert_equal(8, decrypted_data.size)
108
+ assert_equal(@data, decrypted_data[0...@data.size])
109
+ end
110
+
111
+ if PLATFORM =~ /java/
112
+ # JRuby extension - using Java padding types
113
+
114
+ def test_disable_padding_javastyle
115
+ test_disable_padding('NoPadding')
116
+ end
117
+
118
+ def test_iso10126_padding
119
+ @c1.encrypt
120
+ @c1.key = @key
121
+ @c1.iv = @iv
122
+ @c1.padding = 'ISO10126Padding'
123
+ encrypted_data = @c1.update(@data) + @c1.final
124
+ # decrypt with padding disabled to see the padding
125
+ @c1.decrypt
126
+ @c1.padding = 0
127
+ decrypted_data = @c1.update(encrypted_data) + @c1.final
128
+ assert_equal(@data, decrypted_data[0...@data.size])
129
+ # last byte should be the amount of padding
130
+ assert_equal(4, decrypted_data[-1])
131
+ end
132
+
133
+ def test_iso10126_padding_boundry
134
+ @data = 'HELODATA' # 8 bytes, same as padding size
135
+ @c1.encrypt
136
+ @c1.key = @key
137
+ @c1.iv = @iv
138
+ @c1.padding = 'ISO10126Padding'
139
+ encrypted_data = @c1.update(@data) + @c1.final
140
+ # decrypt with padding disabled to see the padding
141
+ @c1.decrypt
142
+ @c1.padding = 0
143
+ decrypted_data = @c1.update(encrypted_data) + @c1.final
144
+ assert_equal(@data, decrypted_data[0...@data.size])
145
+ # padding should be one whole block
146
+ assert_equal(8, decrypted_data[-1])
147
+ end
148
+ end
149
+
150
+ if OpenSSL::OPENSSL_VERSION_NUMBER > 0x00907000
151
+ def test_ciphers
152
+ OpenSSL::Cipher.ciphers.each{|name|
153
+ assert(OpenSSL::Cipher::Cipher.new(name).is_a?(OpenSSL::Cipher::Cipher))
154
+ }
155
+ end
156
+
157
+ def test_AES
158
+ pt = File.read(__FILE__)
159
+ %w(ECB CBC CFB OFB).each{|mode|
160
+ c1 = OpenSSL::Cipher::AES256.new(mode)
161
+ c1.encrypt
162
+ c1.pkcs5_keyivgen("passwd")
163
+ ct = c1.update(pt) + c1.final
164
+
165
+ c2 = OpenSSL::Cipher::AES256.new(mode)
166
+ c2.decrypt
167
+ c2.pkcs5_keyivgen("passwd")
168
+ assert_equal(pt, c2.update(ct) + c2.final)
169
+ }
170
+ end
171
+ end
172
+ end
173
+
174
+ end