jruby-openssl-maven 0.7.4.1

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 (100) hide show
  1. data/History.txt +171 -0
  2. data/License.txt +30 -0
  3. data/Manifest.txt +115 -0
  4. data/README.txt +13 -0
  5. data/Rakefile +79 -0
  6. data/lib/jopenssl.jar +0 -0
  7. data/lib/jopenssl/version.rb +5 -0
  8. data/lib/openssl.rb +76 -0
  9. data/lib/openssl/bn.rb +35 -0
  10. data/lib/openssl/buffering.rb +239 -0
  11. data/lib/openssl/cipher.rb +65 -0
  12. data/lib/openssl/config.rb +316 -0
  13. data/lib/openssl/digest.rb +61 -0
  14. data/lib/openssl/dummy.rb +33 -0
  15. data/lib/openssl/dummyssl.rb +14 -0
  16. data/lib/openssl/pkcs7.rb +25 -0
  17. data/lib/openssl/ssl.rb +179 -0
  18. data/lib/openssl/x509.rb +154 -0
  19. data/test/cert_with_ec_pk.cer +27 -0
  20. data/test/fixture/ca-bundle.crt +2794 -0
  21. data/test/fixture/ca_path/72fa7371.0 +19 -0
  22. data/test/fixture/ca_path/verisign.pem +19 -0
  23. data/test/fixture/cacert.pem +23 -0
  24. data/test/fixture/cert_localhost.pem +19 -0
  25. data/test/fixture/common.pem +48 -0
  26. data/test/fixture/imaps/cacert.pem +60 -0
  27. data/test/fixture/imaps/server.crt +61 -0
  28. data/test/fixture/imaps/server.key +15 -0
  29. data/test/fixture/key_then_cert.pem +34 -0
  30. data/test/fixture/keypair.pem +27 -0
  31. data/test/fixture/localhost_keypair.pem +18 -0
  32. data/test/fixture/max.pem +29 -0
  33. data/test/fixture/purpose/b70a5bc1.0 +24 -0
  34. data/test/fixture/purpose/ca/PASSWD_OF_CA_KEY_IS_1234 +0 -0
  35. data/test/fixture/purpose/ca/ca_config.rb +37 -0
  36. data/test/fixture/purpose/ca/cacert.pem +24 -0
  37. data/test/fixture/purpose/ca/newcerts/2_cert.pem +19 -0
  38. data/test/fixture/purpose/ca/newcerts/3_cert.pem +19 -0
  39. data/test/fixture/purpose/ca/private/cakeypair.pem +30 -0
  40. data/test/fixture/purpose/ca/serial +1 -0
  41. data/test/fixture/purpose/cacert.pem +24 -0
  42. data/test/fixture/purpose/scripts/gen_cert.rb +127 -0
  43. data/test/fixture/purpose/scripts/gen_csr.rb +50 -0
  44. data/test/fixture/purpose/scripts/init_ca.rb +66 -0
  45. data/test/fixture/purpose/sslclient.pem +19 -0
  46. data/test/fixture/purpose/sslclient/csr.pem +10 -0
  47. data/test/fixture/purpose/sslclient/keypair.pem +15 -0
  48. data/test/fixture/purpose/sslclient/sslclient.pem +19 -0
  49. data/test/fixture/purpose/sslserver.pem +19 -0
  50. data/test/fixture/purpose/sslserver/csr.pem +10 -0
  51. data/test/fixture/purpose/sslserver/keypair.pem +15 -0
  52. data/test/fixture/purpose/sslserver/sslserver.pem +19 -0
  53. data/test/fixture/selfcert.pem +23 -0
  54. data/test/fixture/verisign.pem +19 -0
  55. data/test/fixture/verisign_c3.pem +14 -0
  56. data/test/java/pkcs7_mime_enveloped.message +19 -0
  57. data/test/java/pkcs7_mime_signed.message +30 -0
  58. data/test/java/pkcs7_multipart_signed.message +45 -0
  59. data/test/java/test_java_attribute.rb +25 -0
  60. data/test/java/test_java_bio.rb +42 -0
  61. data/test/java/test_java_mime.rb +173 -0
  62. data/test/java/test_java_pkcs7.rb +772 -0
  63. data/test/java/test_java_smime.rb +177 -0
  64. data/test/openssl/ssl_server.rb +99 -0
  65. data/test/openssl/test_asn1.rb +197 -0
  66. data/test/openssl/test_cipher.rb +193 -0
  67. data/test/openssl/test_config.rb +290 -0
  68. data/test/openssl/test_digest.rb +88 -0
  69. data/test/openssl/test_ec.rb +128 -0
  70. data/test/openssl/test_hmac.rb +46 -0
  71. data/test/openssl/test_ns_spki.rb +59 -0
  72. data/test/openssl/test_pair.rb +141 -0
  73. data/test/openssl/test_pkcs7.rb +489 -0
  74. data/test/openssl/test_pkey_rsa.rb +49 -0
  75. data/test/openssl/test_ssl.rb +1035 -0
  76. data/test/openssl/test_x509cert.rb +277 -0
  77. data/test/openssl/test_x509crl.rb +253 -0
  78. data/test/openssl/test_x509ext.rb +99 -0
  79. data/test/openssl/test_x509name.rb +290 -0
  80. data/test/openssl/test_x509req.rb +195 -0
  81. data/test/openssl/test_x509store.rb +246 -0
  82. data/test/openssl/utils.rb +144 -0
  83. data/test/ref/a.out +0 -0
  84. data/test/ref/compile.rb +8 -0
  85. data/test/ref/pkcs1 +0 -0
  86. data/test/ref/pkcs1.c +21 -0
  87. data/test/test_all.rb +1 -0
  88. data/test/test_certificate.rb +123 -0
  89. data/test/test_cipher.rb +197 -0
  90. data/test/test_imaps.rb +107 -0
  91. data/test/test_integration.rb +144 -0
  92. data/test/test_java.rb +98 -0
  93. data/test/test_openssl.rb +4 -0
  94. data/test/test_parse_certificate.rb +27 -0
  95. data/test/test_pkcs7.rb +40 -0
  96. data/test/test_pkey.rb +204 -0
  97. data/test/test_ssl.rb +97 -0
  98. data/test/test_x509store.rb +160 -0
  99. data/test/ut_eof.rb +128 -0
  100. metadata +161 -0
@@ -0,0 +1,88 @@
1
+ begin
2
+ require "openssl"
3
+ rescue LoadError
4
+ end
5
+ require "digest/md5"
6
+ require "test/unit"
7
+
8
+ if defined?(OpenSSL)
9
+
10
+ class OpenSSL::TestDigest < Test::Unit::TestCase
11
+ def setup
12
+ @d1 = OpenSSL::Digest::Digest::new("MD5")
13
+ @d2 = OpenSSL::Digest::MD5.new
14
+ @md = Digest::MD5.new
15
+ @data = "DATA"
16
+ end
17
+
18
+ def teardown
19
+ @d1 = @d2 = @md = nil
20
+ end
21
+
22
+ def test_digest
23
+ assert_equal(@md.digest, @d1.digest)
24
+ assert_equal(@md.hexdigest, @d1.hexdigest)
25
+ @d1 << @data
26
+ @d2 << @data
27
+ @md << @data
28
+ assert_equal(@md.digest, @d1.digest)
29
+ assert_equal(@md.hexdigest, @d1.hexdigest)
30
+ assert_equal(@d1.digest, @d2.digest)
31
+ assert_equal(@d1.hexdigest, @d2.hexdigest)
32
+ assert_equal(@md.digest, OpenSSL::Digest::MD5.digest(@data))
33
+ assert_equal(@md.hexdigest, OpenSSL::Digest::MD5.hexdigest(@data))
34
+ end
35
+
36
+ def test_eql
37
+ assert(@d1 == @d2, "==")
38
+ d = @d1.clone
39
+ assert(d == @d1, "clone")
40
+ end
41
+
42
+ def test_info
43
+ assert_equal("MD5", @d1.name, "name")
44
+ assert_equal("MD5", @d2.name, "name")
45
+ assert_equal(16, @d1.size, "size")
46
+ end
47
+
48
+ def test_dup
49
+ @d1.update(@data)
50
+ assert_equal(@d1.name, @d1.dup.name, "dup")
51
+ assert_equal(@d1.name, @d1.clone.name, "clone")
52
+ assert_equal(@d1.digest, @d1.clone.digest, "clone .digest")
53
+ end
54
+
55
+ def test_reset
56
+ @d1.update(@data)
57
+ dig1 = @d1.digest
58
+ @d1.reset
59
+ @d1.update(@data)
60
+ dig2 = @d1.digest
61
+ assert_equal(dig1, dig2, "reset")
62
+ end
63
+
64
+ if OpenSSL::OPENSSL_VERSION_NUMBER > 0x00908000
65
+ def encode16(str)
66
+ str.unpack("H*").first
67
+ end
68
+
69
+ def test_098_features
70
+ sha224_a = "abd37534c7d9a2efb9465de931cd7055ffdb8879563ae98078d6d6d5"
71
+ sha256_a = "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
72
+ sha384_a = "54a59b9f22b0b80880d8427e548b7c23abd873486e1f035dce9cd697e85175033caa88e6d57bc35efae0b5afd3145f31"
73
+ sha512_a = "1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75"
74
+
75
+ assert_equal(sha224_a, OpenSSL::Digest::SHA224.hexdigest("a"))
76
+ assert_equal(sha256_a, OpenSSL::Digest::SHA256.hexdigest("a"))
77
+ assert_equal(sha384_a, OpenSSL::Digest::SHA384.hexdigest("a"))
78
+ assert_equal(sha512_a, OpenSSL::Digest::SHA512.hexdigest("a"))
79
+
80
+ assert_equal(sha224_a, encode16(OpenSSL::Digest::SHA224.digest("a")))
81
+ assert_equal(sha256_a, encode16(OpenSSL::Digest::SHA256.digest("a")))
82
+ assert_equal(sha384_a, encode16(OpenSSL::Digest::SHA384.digest("a")))
83
+ assert_equal(sha512_a, encode16(OpenSSL::Digest::SHA512.digest("a")))
84
+ end
85
+ end
86
+ end
87
+
88
+ end
@@ -0,0 +1,128 @@
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
+ if defined?(OpenSSL::PKey::EC)
9
+
10
+ class OpenSSL::TestEC < Test::Unit::TestCase
11
+ def setup
12
+ @data1 = 'foo'
13
+ @data2 = 'bar' * 1000 # data too long for DSA sig
14
+
15
+ @group1 = OpenSSL::PKey::EC::Group.new('secp112r1')
16
+ @group2 = OpenSSL::PKey::EC::Group.new('sect163k1')
17
+
18
+ @key1 = OpenSSL::PKey::EC.new
19
+ @key1.group = @group1
20
+ @key1.generate_key
21
+
22
+ @key2 = OpenSSL::PKey::EC.new(@group2.curve_name)
23
+ @key2.generate_key
24
+
25
+ @groups = [@group1, @group2]
26
+ @keys = [@key1, @key2]
27
+ end
28
+
29
+ def compare_keys(k1, k2)
30
+ assert_equal(k1.to_pem, k2.to_pem)
31
+ end
32
+
33
+ def test_curve_names
34
+ @groups.each_with_index do |group, idx|
35
+ key = @keys[idx]
36
+ assert_equal(group.curve_name, key.group.curve_name)
37
+ end
38
+ end
39
+
40
+ def test_check_key
41
+ for key in @keys
42
+ assert_equal(key.check_key, true)
43
+ assert_equal(key.private_key?, true)
44
+ assert_equal(key.public_key?, true)
45
+ end
46
+ end
47
+
48
+ def test_encoding
49
+ for group in @groups
50
+ for meth in [:to_der, :to_pem]
51
+ txt = group.send(meth)
52
+ gr = OpenSSL::PKey::EC::Group.new(txt)
53
+ assert_equal(txt, gr.send(meth))
54
+
55
+ assert_equal(group.generator.to_bn, gr.generator.to_bn)
56
+ assert_equal(group.cofactor, gr.cofactor)
57
+ assert_equal(group.order, gr.order)
58
+ assert_equal(group.seed, gr.seed)
59
+ assert_equal(group.degree, gr.degree)
60
+ end
61
+ end
62
+
63
+ for key in @keys
64
+ group = key.group
65
+
66
+ for meth in [:to_der, :to_pem]
67
+ txt = key.send(meth)
68
+ assert_equal(txt, OpenSSL::PKey::EC.new(txt).send(meth))
69
+ end
70
+
71
+ bn = key.public_key.to_bn
72
+ assert_equal(bn, OpenSSL::PKey::EC::Point.new(group, bn).to_bn)
73
+ end
74
+ end
75
+
76
+ def test_set_keys
77
+ for key in @keys
78
+ k = OpenSSL::PKey::EC.new
79
+ k.group = key.group
80
+ k.private_key = key.private_key
81
+ k.public_key = key.public_key
82
+
83
+ compare_keys(key, k)
84
+ end
85
+ end
86
+
87
+ def test_dsa_sign_verify
88
+ for key in @keys
89
+ sig = key.dsa_sign_asn1(@data1)
90
+ assert(key.dsa_verify_asn1(@data1, sig))
91
+ end
92
+ end
93
+
94
+ def test_dsa_sign_asn1_FIPS186_3
95
+ for key in @keys
96
+ size = key.group.order.num_bits / 8 + 1
97
+ dgst = (1..size).to_a.pack('C*')
98
+ begin
99
+ sig = key.dsa_sign_asn1(dgst)
100
+ # dgst is auto-truncated according to FIPS186-3 after openssl-0.9.8m
101
+ assert(key.dsa_verify_asn1(dgst + "garbage", sig))
102
+ rescue OpenSSL::PKey::ECError => e
103
+ # just an exception for longer dgst before openssl-0.9.8m
104
+ assert_equal('ECDSA_sign: data too large for key size', e.message)
105
+ # no need to do following tests
106
+ return
107
+ end
108
+ end
109
+ end
110
+
111
+ def test_dh_compute_key
112
+ for key in @keys
113
+ k = OpenSSL::PKey::EC.new(key.group)
114
+ k.generate_key
115
+
116
+ puba = key.public_key
117
+ pubb = k.public_key
118
+ a = key.dh_compute_key(pubb)
119
+ b = k.dh_compute_key(puba)
120
+ assert_equal(a, b)
121
+ end
122
+ end
123
+
124
+ # test Group: asn1_flag, point_conversion
125
+
126
+ end
127
+
128
+ end
@@ -0,0 +1,46 @@
1
+ begin
2
+ require "openssl"
3
+ rescue LoadError
4
+ end
5
+ require "test/unit"
6
+
7
+ class OpenSSL::TestHMAC < Test::Unit::TestCase
8
+ def setup
9
+ @digest = OpenSSL::Digest::MD5
10
+ @key = "KEY"
11
+ @data = "DATA"
12
+ @h1 = OpenSSL::HMAC.new(@key, @digest.new)
13
+ @h2 = OpenSSL::HMAC.new(@key, "MD5")
14
+ end
15
+
16
+ def teardown
17
+ end
18
+
19
+ def test_hmac
20
+ @h1.update(@data)
21
+ @h2.update(@data)
22
+ assert_equal(@h1.digest, @h2.digest)
23
+
24
+ assert_equal(OpenSSL::HMAC.digest(@digest.new, @key, @data), @h1.digest, "digest")
25
+ assert_equal(OpenSSL::HMAC.hexdigest(@digest.new, @key, @data), @h1.hexdigest, "hexdigest")
26
+
27
+ assert_equal(OpenSSL::HMAC.digest("MD5", @key, @data), @h2.digest, "digest")
28
+ assert_equal(OpenSSL::HMAC.hexdigest("MD5", @key, @data), @h2.hexdigest, "hexdigest")
29
+ end
30
+
31
+ def test_dup
32
+ @h1.update(@data)
33
+ h = @h1.dup
34
+ assert_equal(@h1.digest, h.digest, "dup digest")
35
+ end
36
+
37
+ def test_sha256
38
+ digest256 = OpenSSL::Digest::Digest.new("sha256")
39
+ assert_equal(
40
+ "\210\236-\3270\331Yq\265\177sE\266\231hXa\332\250\026\235O&c*\307\001\227~\260n\362",
41
+ OpenSSL::HMAC.digest(digest256, 'blah', "blah"))
42
+ assert_equal(
43
+ "889e2dd730d95971b57f7345b699685861daa8169d4f26632ac701977eb06ef2",
44
+ OpenSSL::HMAC.hexdigest(digest256, 'blah', "blah"))
45
+ end
46
+ end
@@ -0,0 +1,59 @@
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
+ if defined?(OpenSSL)
9
+
10
+
11
+ class OpenSSL::TestNSSPI < Test::Unit::TestCase
12
+ def setup
13
+ # This request data is adopt from the specification of
14
+ # "Netscape Extensions for User Key Generation".
15
+ # -- http://wp.netscape.com/eng/security/comm4-keygen.html
16
+ @b64 = "MIHFMHEwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAnX0TILJrOMUue+PtwBRE6XfV"
17
+ @b64 << "WtKQbsshxk5ZhcUwcwyvcnIq9b82QhJdoACdD34rqfCAIND46fXKQUnb0mvKzQID"
18
+ @b64 << "AQABFhFNb3ppbGxhSXNNeUZyaWVuZDANBgkqhkiG9w0BAQQFAANBAAKv2Eex2n/S"
19
+ @b64 << "r/7iJNroWlSzSMtTiQTEB+ADWHGj9u1xrUrOilq/o2cuQxIfZcNZkYAkWP4DubqW"
20
+ @b64 << "i0//rgBvmco="
21
+ end
22
+
23
+ def teardown
24
+ end
25
+
26
+ def test_build_data
27
+ key1 = OpenSSL::TestUtils::TEST_KEY_RSA1024
28
+ key2 = OpenSSL::TestUtils::TEST_KEY_RSA2048
29
+ spki = OpenSSL::Netscape::SPKI.new
30
+ spki.challenge = "RandomString"
31
+ spki.public_key = key1.public_key
32
+ spki.sign(key1, OpenSSL::Digest::SHA1.new)
33
+ assert(spki.verify(spki.public_key))
34
+ assert(spki.verify(key1.public_key))
35
+ assert(!spki.verify(key2.public_key))
36
+
37
+ der = spki.to_der
38
+ spki = OpenSSL::Netscape::SPKI.new(der)
39
+ assert_equal("RandomString", spki.challenge)
40
+ assert_equal(key1.public_key.to_der, spki.public_key.to_der)
41
+ assert(spki.verify(spki.public_key))
42
+ end
43
+
44
+ def test_decode_data
45
+ spki = OpenSSL::Netscape::SPKI.new(@b64)
46
+ assert_equal(@b64, spki.to_pem)
47
+ assert_equal(@b64.unpack("m").first, spki.to_der)
48
+ assert_equal("MozillaIsMyFriend", spki.challenge)
49
+ assert_equal(OpenSSL::PKey::RSA, spki.public_key.class)
50
+
51
+ spki = OpenSSL::Netscape::SPKI.new(@b64.unpack("m").first)
52
+ assert_equal(@b64, spki.to_pem)
53
+ assert_equal(@b64.unpack("m").first, spki.to_der)
54
+ assert_equal("MozillaIsMyFriend", spki.challenge)
55
+ assert_equal(OpenSSL::PKey::RSA, spki.public_key.class)
56
+ end
57
+ end
58
+
59
+ end
@@ -0,0 +1,141 @@
1
+ begin
2
+ require "openssl"
3
+ rescue LoadError
4
+ end
5
+ require 'test/unit'
6
+
7
+ if defined?(OpenSSL)
8
+
9
+ require 'socket'
10
+ require File.join(File.dirname(__FILE__), "../ut_eof")
11
+
12
+ module SSLPair
13
+ def server
14
+ host = "127.0.0.1"
15
+ port = 0
16
+ ctx = OpenSSL::SSL::SSLContext.new()
17
+ ctx.ciphers = "ADH"
18
+ tcps = TCPServer.new(host, port)
19
+ ssls = OpenSSL::SSL::SSLServer.new(tcps, ctx)
20
+ return ssls
21
+ end
22
+
23
+ def client(port)
24
+ host = "127.0.0.1"
25
+ ctx = OpenSSL::SSL::SSLContext.new()
26
+ ctx.ciphers = "ADH"
27
+ s = TCPSocket.new(host, port)
28
+ ssl = OpenSSL::SSL::SSLSocket.new(s, ctx)
29
+ ssl.connect
30
+ ssl.sync_close = true
31
+ ssl
32
+ end
33
+
34
+ def ssl_pair
35
+ ssls = server
36
+ th = Thread.new {
37
+ ns = ssls.accept
38
+ ssls.close
39
+ ns
40
+ }
41
+ port = ssls.to_io.addr[1]
42
+ c = client(port)
43
+ s = th.value
44
+ if block_given?
45
+ begin
46
+ yield c, s
47
+ ensure
48
+ c.close unless c.closed?
49
+ s.close unless s.closed?
50
+ end
51
+ else
52
+ return c, s
53
+ end
54
+ end
55
+ end
56
+
57
+ class OpenSSL::TestEOF1 < Test::Unit::TestCase
58
+ include TestEOF
59
+ include SSLPair
60
+
61
+ def open_file(content)
62
+ s1, s2 = ssl_pair
63
+ Thread.new { s2 << content; s2.close }
64
+ yield s1
65
+ end
66
+ end
67
+
68
+ class OpenSSL::TestEOF2 < Test::Unit::TestCase
69
+ include TestEOF
70
+ include SSLPair
71
+
72
+ def open_file(content)
73
+ s1, s2 = ssl_pair
74
+ Thread.new { s1 << content; s1.close }
75
+ yield s2
76
+ end
77
+ end
78
+
79
+ class OpenSSL::TestPair < Test::Unit::TestCase
80
+ include SSLPair
81
+
82
+ def test_getc
83
+ ssl_pair {|s1, s2|
84
+ s1 << "a"
85
+ assert_equal(?a, s2.getc)
86
+ }
87
+ end
88
+
89
+ def test_readpartial
90
+ ssl_pair {|s1, s2|
91
+ s2.write "a\nbcd"
92
+ assert_equal("a\n", s1.gets)
93
+ assert_equal("bcd", s1.readpartial(10))
94
+ s2.write "efg"
95
+ assert_equal("efg", s1.readpartial(10))
96
+ s2.close
97
+ assert_raise(EOFError) { s1.readpartial(10) }
98
+ assert_raise(EOFError) { s1.readpartial(10) }
99
+ assert_equal("", s1.readpartial(0))
100
+ }
101
+ end
102
+
103
+ def test_readall
104
+ ssl_pair {|s1, s2|
105
+ s2.close
106
+ assert_equal("", s1.read)
107
+ }
108
+ end
109
+
110
+ def test_readline
111
+ ssl_pair {|s1, s2|
112
+ s2.close
113
+ assert_raise(EOFError) { s1.readline }
114
+ }
115
+ end
116
+
117
+ def test_puts_meta
118
+ ssl_pair {|s1, s2|
119
+ begin
120
+ old = $/
121
+ $/ = '*'
122
+ s1.puts 'a'
123
+ ensure
124
+ $/ = old
125
+ end
126
+ s1.close
127
+ assert_equal("a\n", s2.read)
128
+ }
129
+ end
130
+
131
+ def test_puts_empty
132
+ ssl_pair {|s1, s2|
133
+ s1.puts
134
+ s1.close
135
+ assert_equal("\n", s2.read)
136
+ }
137
+ end
138
+
139
+ end
140
+
141
+ end