jruby-openssl 0.8.0.pre3 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. data/Manifest.txt +5 -124
  2. data/Rakefile +3 -3
  3. data/lib/shared/jopenssl.jar +0 -0
  4. data/lib/shared/jopenssl/version.rb +1 -1
  5. metadata +10 -116
  6. data/test/1.8/ssl_server.rb +0 -99
  7. data/test/1.8/test_asn1.rb +0 -212
  8. data/test/1.8/test_cipher.rb +0 -193
  9. data/test/1.8/test_config.rb +0 -290
  10. data/test/1.8/test_digest.rb +0 -88
  11. data/test/1.8/test_ec.rb +0 -128
  12. data/test/1.8/test_hmac.rb +0 -46
  13. data/test/1.8/test_ns_spki.rb +0 -59
  14. data/test/1.8/test_pair.rb +0 -149
  15. data/test/1.8/test_pkcs7.rb +0 -489
  16. data/test/1.8/test_pkey_rsa.rb +0 -49
  17. data/test/1.8/test_ssl.rb +0 -1032
  18. data/test/1.8/test_x509cert.rb +0 -277
  19. data/test/1.8/test_x509crl.rb +0 -253
  20. data/test/1.8/test_x509ext.rb +0 -99
  21. data/test/1.8/test_x509name.rb +0 -290
  22. data/test/1.8/test_x509req.rb +0 -195
  23. data/test/1.8/test_x509store.rb +0 -246
  24. data/test/1.8/utils.rb +0 -144
  25. data/test/1.9/ssl_server.rb +0 -81
  26. data/test/1.9/test_asn1.rb +0 -589
  27. data/test/1.9/test_bn.rb +0 -23
  28. data/test/1.9/test_buffering.rb +0 -88
  29. data/test/1.9/test_cipher.rb +0 -107
  30. data/test/1.9/test_config.rb +0 -288
  31. data/test/1.9/test_digest.rb +0 -118
  32. data/test/1.9/test_engine.rb +0 -15
  33. data/test/1.9/test_hmac.rb +0 -32
  34. data/test/1.9/test_ns_spki.rb +0 -50
  35. data/test/1.9/test_ocsp.rb +0 -47
  36. data/test/1.9/test_pair.rb +0 -257
  37. data/test/1.9/test_pkcs12.rb +0 -209
  38. data/test/1.9/test_pkcs7.rb +0 -156
  39. data/test/1.9/test_pkey_dh.rb +0 -72
  40. data/test/1.9/test_pkey_dsa.rb +0 -224
  41. data/test/1.9/test_pkey_ec.rb +0 -182
  42. data/test/1.9/test_pkey_rsa.rb +0 -244
  43. data/test/1.9/test_ssl.rb +0 -499
  44. data/test/1.9/test_ssl_session.rb +0 -327
  45. data/test/1.9/test_x509cert.rb +0 -217
  46. data/test/1.9/test_x509crl.rb +0 -221
  47. data/test/1.9/test_x509ext.rb +0 -69
  48. data/test/1.9/test_x509name.rb +0 -366
  49. data/test/1.9/test_x509req.rb +0 -150
  50. data/test/1.9/test_x509store.rb +0 -229
  51. data/test/1.9/utils.rb +0 -304
  52. data/test/cert_with_ec_pk.cer +0 -27
  53. data/test/fixture/ca-bundle.crt +0 -2794
  54. data/test/fixture/ca_path/72fa7371.0 +0 -19
  55. data/test/fixture/ca_path/verisign.pem +0 -19
  56. data/test/fixture/cacert.pem +0 -23
  57. data/test/fixture/cert_localhost.pem +0 -19
  58. data/test/fixture/common.pem +0 -48
  59. data/test/fixture/ids_in_subject_rdn_set.pem +0 -31
  60. data/test/fixture/imaps/cacert.pem +0 -60
  61. data/test/fixture/imaps/server.crt +0 -61
  62. data/test/fixture/imaps/server.key +0 -15
  63. data/test/fixture/key_then_cert.pem +0 -34
  64. data/test/fixture/keypair.pem +0 -27
  65. data/test/fixture/localhost_keypair.pem +0 -18
  66. data/test/fixture/max.pem +0 -29
  67. data/test/fixture/purpose/b70a5bc1.0 +0 -24
  68. data/test/fixture/purpose/ca/PASSWD_OF_CA_KEY_IS_1234 +0 -0
  69. data/test/fixture/purpose/ca/ca_config.rb +0 -37
  70. data/test/fixture/purpose/ca/cacert.pem +0 -24
  71. data/test/fixture/purpose/ca/newcerts/2_cert.pem +0 -19
  72. data/test/fixture/purpose/ca/newcerts/3_cert.pem +0 -19
  73. data/test/fixture/purpose/ca/newcerts/4_cert.pem +0 -19
  74. data/test/fixture/purpose/ca/private/cakeypair.pem +0 -30
  75. data/test/fixture/purpose/ca/serial +0 -1
  76. data/test/fixture/purpose/cacert.pem +0 -24
  77. data/test/fixture/purpose/scripts/gen_cert.rb +0 -127
  78. data/test/fixture/purpose/scripts/gen_csr.rb +0 -50
  79. data/test/fixture/purpose/scripts/init_ca.rb +0 -66
  80. data/test/fixture/purpose/sslclient.pem +0 -19
  81. data/test/fixture/purpose/sslclient/csr.pem +0 -10
  82. data/test/fixture/purpose/sslclient/keypair.pem +0 -15
  83. data/test/fixture/purpose/sslclient/sslclient.pem +0 -19
  84. data/test/fixture/purpose/sslserver.pem +0 -19
  85. data/test/fixture/purpose/sslserver/csr.pem +0 -10
  86. data/test/fixture/purpose/sslserver/keypair.pem +0 -15
  87. data/test/fixture/purpose/sslserver/sslserver.pem +0 -19
  88. data/test/fixture/purpose/sslserver_no_dsig_in_keyUsage.pem +0 -19
  89. data/test/fixture/selfcert.pem +0 -23
  90. data/test/fixture/verisign.pem +0 -19
  91. data/test/fixture/verisign_c3.pem +0 -14
  92. data/test/ref/a.out +0 -0
  93. data/test/ref/compile.rb +0 -8
  94. data/test/ref/pkcs1 +0 -0
  95. data/test/ref/pkcs1.c +0 -21
  96. data/test/ruby/envutil.rb +0 -208
  97. data/test/ruby/ut_eof.rb +0 -128
  98. data/test/test_all.rb +0 -1
  99. data/test/test_certificate.rb +0 -132
  100. data/test/test_cipher.rb +0 -197
  101. data/test/test_imaps.rb +0 -107
  102. data/test/test_integration.rb +0 -144
  103. data/test/test_openssl.rb +0 -4
  104. data/test/test_parse_certificate.rb +0 -27
  105. data/test/test_pkcs7.rb +0 -56
  106. data/test/test_pkey_dsa.rb +0 -180
  107. data/test/test_pkey_rsa.rb +0 -329
  108. data/test/test_ssl.rb +0 -97
  109. data/test/test_x509store.rb +0 -168
@@ -1,221 +0,0 @@
1
- require_relative "utils"
2
-
3
- if defined?(OpenSSL)
4
-
5
- class OpenSSL::TestX509CRL < Test::Unit::TestCase
6
- def setup
7
- @rsa1024 = OpenSSL::TestUtils::TEST_KEY_RSA1024
8
- @rsa2048 = OpenSSL::TestUtils::TEST_KEY_RSA2048
9
- @dsa256 = OpenSSL::TestUtils::TEST_KEY_DSA256
10
- @dsa512 = OpenSSL::TestUtils::TEST_KEY_DSA512
11
- @ca = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=CA")
12
- @ee1 = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=EE1")
13
- @ee2 = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=EE2")
14
- end
15
-
16
- def teardown
17
- end
18
-
19
- def issue_crl(*args)
20
- OpenSSL::TestUtils.issue_crl(*args)
21
- end
22
-
23
- def issue_cert(*args)
24
- OpenSSL::TestUtils.issue_cert(*args)
25
- end
26
-
27
- def test_basic
28
- now = Time.at(Time.now.to_i)
29
-
30
- cert = issue_cert(@ca, @rsa2048, 1, now, now+3600, [],
31
- nil, nil, OpenSSL::Digest::SHA1.new)
32
- crl = issue_crl([], 1, now, now+1600, [],
33
- cert, @rsa2048, OpenSSL::Digest::SHA1.new)
34
- assert_equal(1, crl.version)
35
- assert_equal(cert.issuer.to_der, crl.issuer.to_der)
36
- assert_equal(now, crl.last_update)
37
- assert_equal(now+1600, crl.next_update)
38
-
39
- crl = OpenSSL::X509::CRL.new(crl.to_der)
40
- assert_equal(1, crl.version)
41
- assert_equal(cert.issuer.to_der, crl.issuer.to_der)
42
- assert_equal(now, crl.last_update)
43
- assert_equal(now+1600, crl.next_update)
44
- end
45
-
46
- def test_revoked
47
-
48
- # CRLReason ::= ENUMERATED {
49
- # unspecified (0),
50
- # keyCompromise (1),
51
- # cACompromise (2),
52
- # affiliationChanged (3),
53
- # superseded (4),
54
- # cessationOfOperation (5),
55
- # certificateHold (6),
56
- # removeFromCRL (8),
57
- # privilegeWithdrawn (9),
58
- # aACompromise (10) }
59
-
60
- now = Time.at(Time.now.to_i)
61
- revoke_info = [
62
- [1, Time.at(0), 1],
63
- [2, Time.at(0x7fffffff), 2],
64
- [3, now, 3],
65
- [4, now, 4],
66
- [5, now, 5],
67
- ]
68
- cert = issue_cert(@ca, @rsa2048, 1, Time.now, Time.now+3600, [],
69
- nil, nil, OpenSSL::Digest::SHA1.new)
70
- crl = issue_crl(revoke_info, 1, Time.now, Time.now+1600, [],
71
- cert, @rsa2048, OpenSSL::Digest::SHA1.new)
72
- revoked = crl.revoked
73
- assert_equal(5, revoked.size)
74
- assert_equal(1, revoked[0].serial)
75
- assert_equal(2, revoked[1].serial)
76
- assert_equal(3, revoked[2].serial)
77
- assert_equal(4, revoked[3].serial)
78
- assert_equal(5, revoked[4].serial)
79
-
80
- assert_equal(Time.at(0), revoked[0].time)
81
- assert_equal(Time.at(0x7fffffff), revoked[1].time)
82
- assert_equal(now, revoked[2].time)
83
- assert_equal(now, revoked[3].time)
84
- assert_equal(now, revoked[4].time)
85
-
86
- assert_equal("CRLReason", revoked[0].extensions[0].oid)
87
- assert_equal("CRLReason", revoked[1].extensions[0].oid)
88
- assert_equal("CRLReason", revoked[2].extensions[0].oid)
89
- assert_equal("CRLReason", revoked[3].extensions[0].oid)
90
- assert_equal("CRLReason", revoked[4].extensions[0].oid)
91
-
92
- assert_equal("Key Compromise", revoked[0].extensions[0].value)
93
- assert_equal("CA Compromise", revoked[1].extensions[0].value)
94
- assert_equal("Affiliation Changed", revoked[2].extensions[0].value)
95
- assert_equal("Superseded", revoked[3].extensions[0].value)
96
- assert_equal("Cessation Of Operation", revoked[4].extensions[0].value)
97
-
98
- assert_equal(false, revoked[0].extensions[0].critical?)
99
- assert_equal(false, revoked[1].extensions[0].critical?)
100
- assert_equal(false, revoked[2].extensions[0].critical?)
101
- assert_equal(false, revoked[3].extensions[0].critical?)
102
- assert_equal(false, revoked[4].extensions[0].critical?)
103
-
104
- crl = OpenSSL::X509::CRL.new(crl.to_der)
105
- assert_equal("Key Compromise", revoked[0].extensions[0].value)
106
- assert_equal("CA Compromise", revoked[1].extensions[0].value)
107
- assert_equal("Affiliation Changed", revoked[2].extensions[0].value)
108
- assert_equal("Superseded", revoked[3].extensions[0].value)
109
- assert_equal("Cessation Of Operation", revoked[4].extensions[0].value)
110
-
111
- revoke_info = (1..1000).collect{|i| [i, now, 0] }
112
- crl = issue_crl(revoke_info, 1, Time.now, Time.now+1600, [],
113
- cert, @rsa2048, OpenSSL::Digest::SHA1.new)
114
- revoked = crl.revoked
115
- assert_equal(1000, revoked.size)
116
- assert_equal(1, revoked[0].serial)
117
- assert_equal(1000, revoked[999].serial)
118
- end
119
-
120
- def test_extension
121
- cert_exts = [
122
- ["basicConstraints", "CA:TRUE", true],
123
- ["subjectKeyIdentifier", "hash", false],
124
- ["authorityKeyIdentifier", "keyid:always", false],
125
- ["subjectAltName", "email:xyzzy@ruby-lang.org", false],
126
- ["keyUsage", "cRLSign, keyCertSign", true],
127
- ]
128
- crl_exts = [
129
- ["authorityKeyIdentifier", "keyid:always", false],
130
- ["issuerAltName", "issuer:copy", false],
131
- ]
132
-
133
- cert = issue_cert(@ca, @rsa2048, 1, Time.now, Time.now+3600, cert_exts,
134
- nil, nil, OpenSSL::Digest::SHA1.new)
135
- crl = issue_crl([], 1, Time.now, Time.now+1600, crl_exts,
136
- cert, @rsa2048, OpenSSL::Digest::SHA1.new)
137
- exts = crl.extensions
138
- assert_equal(3, exts.size)
139
- assert_equal("1", exts[0].value)
140
- assert_equal("crlNumber", exts[0].oid)
141
- assert_equal(false, exts[0].critical?)
142
-
143
- assert_equal("authorityKeyIdentifier", exts[1].oid)
144
- keyid = OpenSSL::TestUtils.get_subject_key_id(cert)
145
- assert_match(/^keyid:#{keyid}/, exts[1].value)
146
- assert_equal(false, exts[1].critical?)
147
-
148
- assert_equal("issuerAltName", exts[2].oid)
149
- assert_equal("email:xyzzy@ruby-lang.org", exts[2].value)
150
- assert_equal(false, exts[2].critical?)
151
-
152
- crl = OpenSSL::X509::CRL.new(crl.to_der)
153
- exts = crl.extensions
154
- assert_equal(3, exts.size)
155
- assert_equal("1", exts[0].value)
156
- assert_equal("crlNumber", exts[0].oid)
157
- assert_equal(false, exts[0].critical?)
158
-
159
- assert_equal("authorityKeyIdentifier", exts[1].oid)
160
- keyid = OpenSSL::TestUtils.get_subject_key_id(cert)
161
- assert_match(/^keyid:#{keyid}/, exts[1].value)
162
- assert_equal(false, exts[1].critical?)
163
-
164
- assert_equal("issuerAltName", exts[2].oid)
165
- assert_equal("email:xyzzy@ruby-lang.org", exts[2].value)
166
- assert_equal(false, exts[2].critical?)
167
- end
168
-
169
- def test_crlnumber
170
- cert = issue_cert(@ca, @rsa2048, 1, Time.now, Time.now+3600, [],
171
- nil, nil, OpenSSL::Digest::SHA1.new)
172
- crl = issue_crl([], 1, Time.now, Time.now+1600, [],
173
- cert, @rsa2048, OpenSSL::Digest::SHA1.new)
174
- assert_match(1.to_s, crl.extensions[0].value)
175
- assert_match(/X509v3 CRL Number:\s+#{1}/m, crl.to_text)
176
-
177
- crl = issue_crl([], 2**32, Time.now, Time.now+1600, [],
178
- cert, @rsa2048, OpenSSL::Digest::SHA1.new)
179
- assert_match((2**32).to_s, crl.extensions[0].value)
180
- assert_match(/X509v3 CRL Number:\s+#{2**32}/m, crl.to_text)
181
-
182
- crl = issue_crl([], 2**100, Time.now, Time.now+1600, [],
183
- cert, @rsa2048, OpenSSL::Digest::SHA1.new)
184
- assert_match(/X509v3 CRL Number:\s+#{2**100}/m, crl.to_text)
185
- assert_match((2**100).to_s, crl.extensions[0].value)
186
- end
187
-
188
- def test_sign_and_verify
189
- cert = issue_cert(@ca, @rsa2048, 1, Time.now, Time.now+3600, [],
190
- nil, nil, OpenSSL::Digest::SHA1.new)
191
- crl = issue_crl([], 1, Time.now, Time.now+1600, [],
192
- cert, @rsa2048, OpenSSL::Digest::SHA1.new)
193
- assert_equal(false, crl.verify(@rsa1024))
194
- assert_equal(true, crl.verify(@rsa2048))
195
- assert_equal(false, crl_error_returns_false { crl.verify(@dsa256) })
196
- assert_equal(false, crl_error_returns_false { crl.verify(@dsa512) })
197
- crl.version = 0
198
- assert_equal(false, crl.verify(@rsa2048))
199
-
200
- cert = issue_cert(@ca, @dsa512, 1, Time.now, Time.now+3600, [],
201
- nil, nil, OpenSSL::Digest::DSS1.new)
202
- crl = issue_crl([], 1, Time.now, Time.now+1600, [],
203
- cert, @dsa512, OpenSSL::Digest::DSS1.new)
204
- assert_equal(false, crl_error_returns_false { crl.verify(@rsa1024) })
205
- assert_equal(false, crl_error_returns_false { crl.verify(@rsa2048) })
206
- assert_equal(false, crl.verify(@dsa256))
207
- assert_equal(true, crl.verify(@dsa512))
208
- crl.version = 0
209
- assert_equal(false, crl.verify(@dsa512))
210
- end
211
-
212
- private
213
-
214
- def crl_error_returns_false
215
- yield
216
- rescue OpenSSL::X509::CRLError
217
- false
218
- end
219
- end
220
-
221
- end
@@ -1,69 +0,0 @@
1
- require_relative 'utils'
2
-
3
- if defined?(OpenSSL)
4
-
5
- class OpenSSL::TestX509Extension < Test::Unit::TestCase
6
- def setup
7
- @basic_constraints_value = OpenSSL::ASN1::Sequence([
8
- OpenSSL::ASN1::Boolean(true), # CA
9
- OpenSSL::ASN1::Integer(2) # pathlen
10
- ])
11
- @basic_constraints = OpenSSL::ASN1::Sequence([
12
- OpenSSL::ASN1::ObjectId("basicConstraints"),
13
- OpenSSL::ASN1::Boolean(true),
14
- OpenSSL::ASN1::OctetString(@basic_constraints_value.to_der),
15
- ])
16
- end
17
-
18
- def teardown
19
- end
20
-
21
- def test_new
22
- ext = OpenSSL::X509::Extension.new(@basic_constraints.to_der)
23
- assert_equal("basicConstraints", ext.oid)
24
- assert_equal(true, ext.critical?)
25
- assert_equal("CA:TRUE, pathlen:2", ext.value)
26
-
27
- ext = OpenSSL::X509::Extension.new("2.5.29.19",
28
- @basic_constraints_value.to_der, true)
29
- assert_equal(@basic_constraints.to_der, ext.to_der)
30
- end
31
-
32
- def test_create_by_factory
33
- ef = OpenSSL::X509::ExtensionFactory.new
34
-
35
- bc = ef.create_extension("basicConstraints", "critical, CA:TRUE, pathlen:2")
36
- assert_equal(@basic_constraints.to_der, bc.to_der)
37
-
38
- bc = ef.create_extension("basicConstraints", "CA:TRUE, pathlen:2", true)
39
- assert_equal(@basic_constraints.to_der, bc.to_der)
40
-
41
- begin
42
- ef.config = OpenSSL::Config.parse(<<-_end_of_cnf_)
43
- [crlDistPts]
44
- URI.1 = http://www.example.com/crl
45
- URI.2 = ldap://ldap.example.com/cn=ca?certificateRevocationList;binary
46
- _end_of_cnf_
47
- rescue NotImplementedError
48
- return
49
- end
50
-
51
- cdp = ef.create_extension("crlDistributionPoints", "@crlDistPts")
52
- assert_equal(false, cdp.critical?)
53
- assert_equal("crlDistributionPoints", cdp.oid)
54
- assert_match(%{URI:http://www\.example\.com/crl}, cdp.value)
55
- assert_match(
56
- %r{URI:ldap://ldap\.example\.com/cn=ca\?certificateRevocationList;binary},
57
- cdp.value)
58
-
59
- cdp = ef.create_extension("crlDistributionPoints", "critical, @crlDistPts")
60
- assert_equal(true, cdp.critical?)
61
- assert_equal("crlDistributionPoints", cdp.oid)
62
- assert_match(%{URI:http://www.example.com/crl}, cdp.value)
63
- assert_match(
64
- %r{URI:ldap://ldap.example.com/cn=ca\?certificateRevocationList;binary},
65
- cdp.value)
66
- end
67
- end
68
-
69
- end
@@ -1,366 +0,0 @@
1
- require_relative 'utils'
2
-
3
- if defined?(OpenSSL)
4
-
5
- class OpenSSL::TestX509Name < Test::Unit::TestCase
6
- OpenSSL::ASN1::ObjectId.register(
7
- "1.2.840.113549.1.9.1", "emailAddress", "emailAddress")
8
- OpenSSL::ASN1::ObjectId.register(
9
- "2.5.4.5", "serialNumber", "serialNumber")
10
-
11
- def setup
12
- @obj_type_tmpl = Hash.new(OpenSSL::ASN1::PRINTABLESTRING)
13
- @obj_type_tmpl.update(OpenSSL::X509::Name::OBJECT_TYPE_TEMPLATE)
14
- end
15
-
16
- def teardown
17
- end
18
-
19
- def test_s_new
20
- dn = [ ["C", "JP"], ["O", "example"], ["CN", "www.example.jp"] ]
21
- name = OpenSSL::X509::Name.new(dn)
22
- ary = name.to_a
23
- assert_equal("/C=JP/O=example/CN=www.example.jp", name.to_s)
24
- assert_equal("C", ary[0][0])
25
- assert_equal("O", ary[1][0])
26
- assert_equal("CN", ary[2][0])
27
- assert_equal("JP", ary[0][1])
28
- assert_equal("example", ary[1][1])
29
- assert_equal("www.example.jp", ary[2][1])
30
- assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[0][2])
31
- assert_equal(OpenSSL::ASN1::UTF8STRING, ary[1][2])
32
- assert_equal(OpenSSL::ASN1::UTF8STRING, ary[2][2])
33
-
34
- dn = [
35
- ["countryName", "JP"],
36
- ["organizationName", "example"],
37
- ["commonName", "www.example.jp"]
38
- ]
39
- name = OpenSSL::X509::Name.new(dn)
40
- ary = name.to_a
41
- assert_equal("/C=JP/O=example/CN=www.example.jp", name.to_s)
42
- assert_equal("C", ary[0][0])
43
- assert_equal("O", ary[1][0])
44
- assert_equal("CN", ary[2][0])
45
- assert_equal("JP", ary[0][1])
46
- assert_equal("example", ary[1][1])
47
- assert_equal("www.example.jp", ary[2][1])
48
- assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[0][2])
49
- assert_equal(OpenSSL::ASN1::UTF8STRING, ary[1][2])
50
- assert_equal(OpenSSL::ASN1::UTF8STRING, ary[2][2])
51
-
52
- name = OpenSSL::X509::Name.new(dn, @obj_type_tmpl)
53
- ary = name.to_a
54
- assert_equal("/C=JP/O=example/CN=www.example.jp", name.to_s)
55
- assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[0][2])
56
- assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[1][2])
57
- assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[2][2])
58
-
59
- dn = [
60
- ["countryName", "JP", OpenSSL::ASN1::PRINTABLESTRING],
61
- ["organizationName", "example", OpenSSL::ASN1::PRINTABLESTRING],
62
- ["commonName", "www.example.jp", OpenSSL::ASN1::PRINTABLESTRING]
63
- ]
64
- name = OpenSSL::X509::Name.new(dn)
65
- ary = name.to_a
66
- assert_equal("/C=JP/O=example/CN=www.example.jp", name.to_s)
67
- assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[0][2])
68
- assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[1][2])
69
- assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[2][2])
70
-
71
- dn = [
72
- ["DC", "org"],
73
- ["DC", "ruby-lang"],
74
- ["CN", "GOTOU Yuuzou"],
75
- ["emailAddress", "gotoyuzo@ruby-lang.org"],
76
- ["serialNumber", "123"],
77
- ]
78
- name = OpenSSL::X509::Name.new(dn)
79
- ary = name.to_a
80
- assert_equal("/DC=org/DC=ruby-lang/CN=GOTOU Yuuzou/emailAddress=gotoyuzo@ruby-lang.org/serialNumber=123", name.to_s)
81
- assert_equal("DC", ary[0][0])
82
- assert_equal("DC", ary[1][0])
83
- assert_equal("CN", ary[2][0])
84
- assert_equal("emailAddress", ary[3][0])
85
- assert_equal("serialNumber", ary[4][0])
86
- assert_equal("org", ary[0][1])
87
- assert_equal("ruby-lang", ary[1][1])
88
- assert_equal("GOTOU Yuuzou", ary[2][1])
89
- assert_equal("gotoyuzo@ruby-lang.org", ary[3][1])
90
- assert_equal("123", ary[4][1])
91
- assert_equal(OpenSSL::ASN1::IA5STRING, ary[0][2])
92
- assert_equal(OpenSSL::ASN1::IA5STRING, ary[1][2])
93
- assert_equal(OpenSSL::ASN1::UTF8STRING, ary[2][2])
94
- assert_equal(OpenSSL::ASN1::IA5STRING, ary[3][2])
95
- assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[4][2])
96
-
97
- name_from_der = OpenSSL::X509::Name.new(name.to_der)
98
- assert_equal(name_from_der.to_s, name.to_s)
99
- assert_equal(name_from_der.to_a, name.to_a)
100
- assert_equal(name_from_der.to_der, name.to_der)
101
- end
102
-
103
- def test_unrecognized_oid
104
- dn = [ ["1.2.3.4.5.6.7.8.9.7.5.3.1", "Unknown OID 1"],
105
- ["1.1.2.3.5.8.13.21.34", "Unknown OID 2"],
106
- ["C", "US"],
107
- ["postalCode", "60602"],
108
- ["ST", "Illinois"],
109
- ["L", "Chicago"],
110
- #["street", "123 Fake St"],
111
- ["O", "Some Company LLC"],
112
- ["CN", "mydomain.com"] ]
113
-
114
- name = OpenSSL::X509::Name.new(dn)
115
- ary = name.to_a
116
- #assert_equal("/1.2.3.4.5.6.7.8.9.7.5.3.1=Unknown OID 1/1.1.2.3.5.8.13.21.34=Unknown OID 2/C=US/postalCode=60602/ST=Illinois/L=Chicago/street=123 Fake St/O=Some Company LLC/CN=mydomain.com", name.to_s)
117
- assert_equal("/1.2.3.4.5.6.7.8.9.7.5.3.1=Unknown OID 1/1.1.2.3.5.8.13.21.34=Unknown OID 2/C=US/postalCode=60602/ST=Illinois/L=Chicago/O=Some Company LLC/CN=mydomain.com", name.to_s)
118
- assert_equal("1.2.3.4.5.6.7.8.9.7.5.3.1", ary[0][0])
119
- assert_equal("1.1.2.3.5.8.13.21.34", ary[1][0])
120
- assert_equal("C", ary[2][0])
121
- assert_equal("postalCode", ary[3][0])
122
- assert_equal("ST", ary[4][0])
123
- assert_equal("L", ary[5][0])
124
- #assert_equal("street", ary[6][0])
125
- assert_equal("O", ary[6][0])
126
- assert_equal("CN", ary[7][0])
127
- assert_equal("Unknown OID 1", ary[0][1])
128
- assert_equal("Unknown OID 2", ary[1][1])
129
- assert_equal("US", ary[2][1])
130
- assert_equal("60602", ary[3][1])
131
- assert_equal("Illinois", ary[4][1])
132
- assert_equal("Chicago", ary[5][1])
133
- #assert_equal("123 Fake St", ary[6][1])
134
- assert_equal("Some Company LLC", ary[6][1])
135
- assert_equal("mydomain.com", ary[7][1])
136
- end
137
-
138
- def test_unrecognized_oid_parse_encode_equality
139
- dn = [ ["1.2.3.4.5.6.7.8.9.7.5.3.2", "Unknown OID1"],
140
- ["1.1.2.3.5.8.13.21.35", "Unknown OID2"],
141
- ["C", "US"],
142
- ["postalCode", "60602"],
143
- ["ST", "Illinois"],
144
- ["L", "Chicago"],
145
- #["street", "123 Fake St"],
146
- ["O", "Some Company LLC"],
147
- ["CN", "mydomain.com"] ]
148
-
149
- name1 = OpenSSL::X509::Name.new(dn)
150
- name2 = OpenSSL::X509::Name.parse(name1.to_s)
151
- assert_equal(name1.to_s, name2.to_s)
152
- assert_equal(name1.to_a, name2.to_a)
153
- end
154
-
155
- def test_s_parse
156
- dn = "/DC=org/DC=ruby-lang/CN=www.ruby-lang.org"
157
- name = OpenSSL::X509::Name.parse(dn)
158
- assert_equal(dn, name.to_s)
159
- ary = name.to_a
160
- assert_equal("DC", ary[0][0])
161
- assert_equal("DC", ary[1][0])
162
- assert_equal("CN", ary[2][0])
163
- assert_equal("org", ary[0][1])
164
- assert_equal("ruby-lang", ary[1][1])
165
- assert_equal("www.ruby-lang.org", ary[2][1])
166
- assert_equal(OpenSSL::ASN1::IA5STRING, ary[0][2])
167
- assert_equal(OpenSSL::ASN1::IA5STRING, ary[1][2])
168
- assert_equal(OpenSSL::ASN1::UTF8STRING, ary[2][2])
169
-
170
- dn2 = "DC=org, DC=ruby-lang, CN=www.ruby-lang.org"
171
- name = OpenSSL::X509::Name.parse(dn2)
172
- ary = name.to_a
173
- assert_equal(dn, name.to_s)
174
- assert_equal("org", ary[0][1])
175
- assert_equal("ruby-lang", ary[1][1])
176
- assert_equal("www.ruby-lang.org", ary[2][1])
177
-
178
- name = OpenSSL::X509::Name.parse(dn2, @obj_type_tmpl)
179
- ary = name.to_a
180
- assert_equal(OpenSSL::ASN1::IA5STRING, ary[0][2])
181
- assert_equal(OpenSSL::ASN1::IA5STRING, ary[1][2])
182
- assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[2][2])
183
- end
184
-
185
- def test_s_parse_rfc2253
186
- scanner = OpenSSL::X509::Name::RFC2253DN.method(:scan)
187
-
188
- assert_equal([["C", "JP"]], scanner.call("C=JP"))
189
- assert_equal([
190
- ["DC", "org"],
191
- ["DC", "ruby-lang"],
192
- ["CN", "GOTOU Yuuzou"],
193
- ["emailAddress", "gotoyuzo@ruby-lang.org"],
194
- ],
195
- scanner.call(
196
- "emailAddress=gotoyuzo@ruby-lang.org,CN=GOTOU Yuuzou,"+
197
- "DC=ruby-lang,DC=org")
198
- )
199
-
200
- u8 = OpenSSL::ASN1::UTF8STRING
201
- assert_equal([
202
- ["DC", "org"],
203
- ["DC", "ruby-lang"],
204
- ["O", ",=+<>#;"],
205
- ["O", ",=+<>#;"],
206
- ["OU", ""],
207
- ["OU", ""],
208
- ["L", "aaa=\"bbb, ccc\""],
209
- ["L", "aaa=\"bbb, ccc\""],
210
- ["CN", "\345\276\214\350\227\244\350\243\225\350\224\265"],
211
- ["CN", "\345\276\214\350\227\244\350\243\225\350\224\265"],
212
- ["CN", "\345\276\214\350\227\244\350\243\225\350\224\265"],
213
- ["CN", "\345\276\214\350\227\244\350\243\225\350\224\265", u8],
214
- ["2.5.4.3", "GOTOU, Yuuzou"],
215
- ["2.5.4.3", "GOTOU, Yuuzou"],
216
- ["2.5.4.3", "GOTOU, Yuuzou"],
217
- ["2.5.4.3", "GOTOU, Yuuzou"],
218
- ["CN", "GOTOU \"gotoyuzo\" Yuuzou"],
219
- ["CN", "GOTOU \"gotoyuzo\" Yuuzou"],
220
- ["1.2.840.113549.1.9.1", "gotoyuzo@ruby-lang.org"],
221
- ["emailAddress", "gotoyuzo@ruby-lang.org"],
222
- ],
223
- scanner.call(
224
- "emailAddress=gotoyuzo@ruby-lang.org," +
225
- "1.2.840.113549.1.9.1=gotoyuzo@ruby-lang.org," +
226
- 'CN=GOTOU \"gotoyuzo\" Yuuzou,' +
227
- 'CN="GOTOU \"gotoyuzo\" Yuuzou",' +
228
- '2.5.4.3=GOTOU\,\20Yuuzou,' +
229
- '2.5.4.3=GOTOU\, Yuuzou,' +
230
- '2.5.4.3="GOTOU, Yuuzou",' +
231
- '2.5.4.3="GOTOU\, Yuuzou",' +
232
- "CN=#0C0CE5BE8CE897A4E8A395E894B5," +
233
- 'CN=\E5\BE\8C\E8\97\A4\E8\A3\95\E8\94\B5,' +
234
- "CN=\"\xE5\xBE\x8C\xE8\x97\xA4\xE8\xA3\x95\xE8\x94\xB5\"," +
235
- "CN=\xE5\xBE\x8C\xE8\x97\xA4\xE8\xA3\x95\xE8\x94\xB5," +
236
- 'L=aaa\=\"bbb\, ccc\",' +
237
- 'L="aaa=\"bbb, ccc\"",' +
238
- 'OU=,' +
239
- 'OU="",' +
240
- 'O=\,\=\+\<\>\#\;,' +
241
- 'O=",=+<>#;",' +
242
- "DC=ruby-lang," +
243
- "DC=org")
244
- )
245
-
246
- [
247
- "DC=org+DC=jp",
248
- "DC=org,DC=ruby-lang+DC=rubyist,DC=www"
249
- ].each{|dn|
250
- ex = scanner.call(dn) rescue $!
251
- dn_r = Regexp.escape(dn)
252
- assert_match(/^multi-valued RDN is not supported: #{dn_r}/, ex.message)
253
- }
254
-
255
- [
256
- ["DC=org,DC=exapmle,CN", "CN"],
257
- ["DC=org,DC=example,", ""],
258
- ["DC=org,DC=exapmle,CN=www.example.org;", "CN=www.example.org;"],
259
- ["DC=org,DC=exapmle,CN=#www.example.org", "CN=#www.example.org"],
260
- ["DC=org,DC=exapmle,CN=#777777.example.org", "CN=#777777.example.org"],
261
- ["DC=org,DC=exapmle,CN=\"www.example\".org", "CN=\"www.example\".org"],
262
- ["DC=org,DC=exapmle,CN=www.\"example.org\"", "CN=www.\"example.org\""],
263
- ["DC=org,DC=exapmle,CN=www.\"example\".org", "CN=www.\"example\".org"],
264
- ].each{|dn, msg|
265
- ex = scanner.call(dn) rescue $!
266
- assert_match(/^malformed RDN: .*=>#{Regexp.escape(msg)}/, ex.message)
267
- }
268
-
269
- dn = "CN=www.ruby-lang.org,DC=ruby-lang,DC=org"
270
- name = OpenSSL::X509::Name.parse_rfc2253(dn)
271
- assert_equal(dn, name.to_s(OpenSSL::X509::Name::RFC2253))
272
- ary = name.to_a
273
- assert_equal("DC", ary[0][0])
274
- assert_equal("DC", ary[1][0])
275
- assert_equal("CN", ary[2][0])
276
- assert_equal("org", ary[0][1])
277
- assert_equal("ruby-lang", ary[1][1])
278
- assert_equal("www.ruby-lang.org", ary[2][1])
279
- assert_equal(OpenSSL::ASN1::IA5STRING, ary[0][2])
280
- assert_equal(OpenSSL::ASN1::IA5STRING, ary[1][2])
281
- assert_equal(OpenSSL::ASN1::UTF8STRING, ary[2][2])
282
- end
283
-
284
- def test_add_entry
285
- dn = [
286
- ["DC", "org"],
287
- ["DC", "ruby-lang"],
288
- ["CN", "GOTOU Yuuzou"],
289
- ["emailAddress", "gotoyuzo@ruby-lang.org"],
290
- ["serialNumber", "123"],
291
- ]
292
- name = OpenSSL::X509::Name.new
293
- dn.each{|attr| name.add_entry(*attr) }
294
- ary = name.to_a
295
- assert_equal("/DC=org/DC=ruby-lang/CN=GOTOU Yuuzou/emailAddress=gotoyuzo@ruby-lang.org/serialNumber=123", name.to_s)
296
- assert_equal("DC", ary[0][0])
297
- assert_equal("DC", ary[1][0])
298
- assert_equal("CN", ary[2][0])
299
- assert_equal("emailAddress", ary[3][0])
300
- assert_equal("serialNumber", ary[4][0])
301
- assert_equal("org", ary[0][1])
302
- assert_equal("ruby-lang", ary[1][1])
303
- assert_equal("GOTOU Yuuzou", ary[2][1])
304
- assert_equal("gotoyuzo@ruby-lang.org", ary[3][1])
305
- assert_equal("123", ary[4][1])
306
- assert_equal(OpenSSL::ASN1::IA5STRING, ary[0][2])
307
- assert_equal(OpenSSL::ASN1::IA5STRING, ary[1][2])
308
- assert_equal(OpenSSL::ASN1::UTF8STRING, ary[2][2])
309
- assert_equal(OpenSSL::ASN1::IA5STRING, ary[3][2])
310
- assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[4][2])
311
- end
312
-
313
- def test_add_entry_street
314
- return if OpenSSL::OPENSSL_VERSION_NUMBER < 0x009080df # 0.9.8m
315
- # openssl/crypto/objects/obj_mac.h 1.83
316
- dn = [
317
- ["DC", "org"],
318
- ["DC", "ruby-lang"],
319
- ["CN", "GOTOU Yuuzou"],
320
- ["emailAddress", "gotoyuzo@ruby-lang.org"],
321
- ["serialNumber", "123"],
322
- ["street", "Namiki"],
323
- ]
324
- name = OpenSSL::X509::Name.new
325
- dn.each{|attr| name.add_entry(*attr) }
326
- ary = name.to_a
327
- assert_equal("/DC=org/DC=ruby-lang/CN=GOTOU Yuuzou/emailAddress=gotoyuzo@ruby-lang.org/serialNumber=123/street=Namiki", name.to_s)
328
- assert_equal("Namiki", ary[5][1])
329
- end
330
-
331
- def test_equals2
332
- n1 = OpenSSL::X509::Name.parse 'CN=a'
333
- n2 = OpenSSL::X509::Name.parse 'CN=a'
334
-
335
- assert_equal n1, n2
336
- end
337
-
338
- def test_spaceship
339
- n1 = OpenSSL::X509::Name.parse 'CN=a'
340
- n2 = OpenSSL::X509::Name.parse 'CN=b'
341
-
342
- assert_equal -1, n1 <=> n2
343
- end
344
-
345
- def name_hash(name)
346
- # OpenSSL 1.0.0 uses SHA1 for canonical encoding (not just a der) of
347
- # X509Name for X509_NAME_hash.
348
- name.respond_to?(:hash_old) ? name.hash_old : name.hash
349
- end
350
-
351
- def test_hash
352
- dn = "/DC=org/DC=ruby-lang/CN=www.ruby-lang.org"
353
- name = OpenSSL::X509::Name.parse(dn)
354
- d = Digest::MD5.digest(name.to_der)
355
- expected = (d[0].ord & 0xff) | (d[1].ord & 0xff) << 8 | (d[2].ord & 0xff) << 16 | (d[3].ord & 0xff) << 24
356
- assert_equal(expected, name_hash(name))
357
- #
358
- dn = "/DC=org/DC=ruby-lang/CN=baz.ruby-lang.org"
359
- name = OpenSSL::X509::Name.parse(dn)
360
- d = Digest::MD5.digest(name.to_der)
361
- expected = (d[0].ord & 0xff) | (d[1].ord & 0xff) << 8 | (d[2].ord & 0xff) << 16 | (d[3].ord & 0xff) << 24
362
- assert_equal(expected, name_hash(name))
363
- end
364
- end
365
-
366
- end