jruby-openssl-maven 0.7.4.1

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