jruby-openssl 0.8.0.pre3 → 0.8.0

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 (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,589 +0,0 @@
1
- require_relative 'utils'
2
-
3
- class OpenSSL::TestASN1 < Test::Unit::TestCase
4
- def test_decode
5
- subj = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=TestCA")
6
- key = OpenSSL::TestUtils::TEST_KEY_RSA1024
7
- now = Time.at(Time.now.to_i) # suppress usec
8
- s = 0xdeadbeafdeadbeafdeadbeafdeadbeaf
9
- exts = [
10
- ["basicConstraints","CA:TRUE,pathlen:1",true],
11
- ["keyUsage","keyCertSign, cRLSign",true],
12
- ["subjectKeyIdentifier","hash",false],
13
- ]
14
- dgst = OpenSSL::Digest::SHA1.new
15
- cert = OpenSSL::TestUtils.issue_cert(
16
- subj, key, s, now, now+3600, exts, nil, nil, dgst)
17
-
18
-
19
- asn1 = OpenSSL::ASN1.decode(cert)
20
- assert_equal(OpenSSL::ASN1::Sequence, asn1.class)
21
- assert_equal(3, asn1.value.size)
22
- tbs_cert, sig_alg, sig_val = *asn1.value
23
-
24
- assert_equal(OpenSSL::ASN1::Sequence, tbs_cert.class)
25
- assert_equal(8, tbs_cert.value.size)
26
-
27
- version = tbs_cert.value[0]
28
- assert_equal(:CONTEXT_SPECIFIC, version.tag_class)
29
- assert_equal(0, version.tag)
30
- assert_equal(1, version.value.size)
31
- assert_equal(OpenSSL::ASN1::Integer, version.value[0].class)
32
- assert_equal(2, version.value[0].value)
33
-
34
- serial = tbs_cert.value[1]
35
- assert_equal(OpenSSL::ASN1::Integer, serial.class)
36
- assert_equal(0xdeadbeafdeadbeafdeadbeafdeadbeaf, serial.value)
37
-
38
- sig = tbs_cert.value[2]
39
- assert_equal(OpenSSL::ASN1::Sequence, sig.class)
40
- assert_equal(2, sig.value.size)
41
- assert_equal(OpenSSL::ASN1::ObjectId, sig.value[0].class)
42
- assert_equal("1.2.840.113549.1.1.5", sig.value[0].oid)
43
- assert_equal(OpenSSL::ASN1::Null, sig.value[1].class)
44
-
45
- dn = tbs_cert.value[3] # issuer
46
- assert_equal(subj.hash, OpenSSL::X509::Name.new(dn).hash)
47
- assert_equal(OpenSSL::ASN1::Sequence, dn.class)
48
- assert_equal(3, dn.value.size)
49
- assert_equal(OpenSSL::ASN1::Set, dn.value[0].class)
50
- assert_equal(OpenSSL::ASN1::Set, dn.value[1].class)
51
- assert_equal(OpenSSL::ASN1::Set, dn.value[2].class)
52
- assert_equal(1, dn.value[0].value.size)
53
- assert_equal(1, dn.value[1].value.size)
54
- assert_equal(1, dn.value[2].value.size)
55
- assert_equal(OpenSSL::ASN1::Sequence, dn.value[0].value[0].class)
56
- assert_equal(OpenSSL::ASN1::Sequence, dn.value[1].value[0].class)
57
- assert_equal(OpenSSL::ASN1::Sequence, dn.value[2].value[0].class)
58
- assert_equal(2, dn.value[0].value[0].value.size)
59
- assert_equal(2, dn.value[1].value[0].value.size)
60
- assert_equal(2, dn.value[2].value[0].value.size)
61
- oid, value = *dn.value[0].value[0].value
62
- assert_equal(OpenSSL::ASN1::ObjectId, oid.class)
63
- assert_equal("0.9.2342.19200300.100.1.25", oid.oid)
64
- assert_equal(OpenSSL::ASN1::IA5String, value.class)
65
- assert_equal("org", value.value)
66
- oid, value = *dn.value[1].value[0].value
67
- assert_equal(OpenSSL::ASN1::ObjectId, oid.class)
68
- assert_equal("0.9.2342.19200300.100.1.25", oid.oid)
69
- assert_equal(OpenSSL::ASN1::IA5String, value.class)
70
- assert_equal("ruby-lang", value.value)
71
- oid, value = *dn.value[2].value[0].value
72
- assert_equal(OpenSSL::ASN1::ObjectId, oid.class)
73
- assert_equal("2.5.4.3", oid.oid)
74
- assert_equal(OpenSSL::ASN1::UTF8String, value.class)
75
- assert_equal("TestCA", value.value)
76
-
77
- validity = tbs_cert.value[4]
78
- assert_equal(OpenSSL::ASN1::Sequence, validity.class)
79
- assert_equal(2, validity.value.size)
80
- assert_equal(OpenSSL::ASN1::UTCTime, validity.value[0].class)
81
- assert_equal(now, validity.value[0].value)
82
- assert_equal(OpenSSL::ASN1::UTCTime, validity.value[1].class)
83
- assert_equal(now+3600, validity.value[1].value)
84
-
85
- dn = tbs_cert.value[5] # subject
86
- assert_equal(subj.hash, OpenSSL::X509::Name.new(dn).hash)
87
- assert_equal(OpenSSL::ASN1::Sequence, dn.class)
88
- assert_equal(3, dn.value.size)
89
- assert_equal(OpenSSL::ASN1::Set, dn.value[0].class)
90
- assert_equal(OpenSSL::ASN1::Set, dn.value[1].class)
91
- assert_equal(OpenSSL::ASN1::Set, dn.value[2].class)
92
- assert_equal(1, dn.value[0].value.size)
93
- assert_equal(1, dn.value[1].value.size)
94
- assert_equal(1, dn.value[2].value.size)
95
- assert_equal(OpenSSL::ASN1::Sequence, dn.value[0].value[0].class)
96
- assert_equal(OpenSSL::ASN1::Sequence, dn.value[1].value[0].class)
97
- assert_equal(OpenSSL::ASN1::Sequence, dn.value[2].value[0].class)
98
- assert_equal(2, dn.value[0].value[0].value.size)
99
- assert_equal(2, dn.value[1].value[0].value.size)
100
- assert_equal(2, dn.value[2].value[0].value.size)
101
- oid, value = *dn.value[0].value[0].value
102
- assert_equal(OpenSSL::ASN1::ObjectId, oid.class)
103
- assert_equal("0.9.2342.19200300.100.1.25", oid.oid)
104
- assert_equal(OpenSSL::ASN1::IA5String, value.class)
105
- assert_equal("org", value.value)
106
- oid, value = *dn.value[1].value[0].value
107
- assert_equal(OpenSSL::ASN1::ObjectId, oid.class)
108
- assert_equal("0.9.2342.19200300.100.1.25", oid.oid)
109
- assert_equal(OpenSSL::ASN1::IA5String, value.class)
110
- assert_equal("ruby-lang", value.value)
111
- oid, value = *dn.value[2].value[0].value
112
- assert_equal(OpenSSL::ASN1::ObjectId, oid.class)
113
- assert_equal("2.5.4.3", oid.oid)
114
- assert_equal(OpenSSL::ASN1::UTF8String, value.class)
115
- assert_equal("TestCA", value.value)
116
-
117
- pkey = tbs_cert.value[6]
118
- assert_equal(OpenSSL::ASN1::Sequence, pkey.class)
119
- assert_equal(2, pkey.value.size)
120
- assert_equal(OpenSSL::ASN1::Sequence, pkey.value[0].class)
121
- assert_equal(2, pkey.value[0].value.size)
122
- assert_equal(OpenSSL::ASN1::ObjectId, pkey.value[0].value[0].class)
123
- assert_equal("1.2.840.113549.1.1.1", pkey.value[0].value[0].oid)
124
- assert_equal(OpenSSL::ASN1::BitString, pkey.value[1].class)
125
- assert_equal(0, pkey.value[1].unused_bits)
126
- spkey = OpenSSL::ASN1.decode(pkey.value[1].value)
127
- assert_equal(OpenSSL::ASN1::Sequence, spkey.class)
128
- assert_equal(2, spkey.value.size)
129
- assert_equal(OpenSSL::ASN1::Integer, spkey.value[0].class)
130
- assert_equal(143085709396403084580358323862163416700436550432664688288860593156058579474547937626086626045206357324274536445865308750491138538454154232826011964045825759324933943290377903384882276841880081931690695505836279972214003660451338124170055999155993192881685495391496854691199517389593073052473319331505702779271, spkey.value[0].value)
131
- assert_equal(OpenSSL::ASN1::Integer, spkey.value[1].class)
132
- assert_equal(65537, spkey.value[1].value)
133
-
134
- extensions = tbs_cert.value[7]
135
- assert_equal(:CONTEXT_SPECIFIC, extensions.tag_class)
136
- assert_equal(3, extensions.tag)
137
- assert_equal(1, extensions.value.size)
138
- assert_equal(OpenSSL::ASN1::Sequence, extensions.value[0].class)
139
- assert_equal(3, extensions.value[0].value.size)
140
-
141
- ext = extensions.value[0].value[0] # basicConstraints
142
- assert_equal(OpenSSL::ASN1::Sequence, ext.class)
143
- assert_equal(3, ext.value.size)
144
- assert_equal(OpenSSL::ASN1::ObjectId, ext.value[0].class)
145
- assert_equal("2.5.29.19", ext.value[0].oid)
146
- assert_equal(OpenSSL::ASN1::Boolean, ext.value[1].class)
147
- assert_equal(true, ext.value[1].value)
148
- assert_equal(OpenSSL::ASN1::OctetString, ext.value[2].class)
149
- extv = OpenSSL::ASN1.decode(ext.value[2].value)
150
- assert_equal(OpenSSL::ASN1::Sequence, extv.class)
151
- assert_equal(2, extv.value.size)
152
- assert_equal(OpenSSL::ASN1::Boolean, extv.value[0].class)
153
- assert_equal(true, extv.value[0].value)
154
- assert_equal(OpenSSL::ASN1::Integer, extv.value[1].class)
155
- assert_equal(1, extv.value[1].value)
156
-
157
- ext = extensions.value[0].value[1] # keyUsage
158
- assert_equal(OpenSSL::ASN1::Sequence, ext.class)
159
- assert_equal(3, ext.value.size)
160
- assert_equal(OpenSSL::ASN1::ObjectId, ext.value[0].class)
161
- assert_equal("2.5.29.15", ext.value[0].oid)
162
- assert_equal(OpenSSL::ASN1::Boolean, ext.value[1].class)
163
- assert_equal(true, ext.value[1].value)
164
- assert_equal(OpenSSL::ASN1::OctetString, ext.value[2].class)
165
- extv = OpenSSL::ASN1.decode(ext.value[2].value)
166
- assert_equal(OpenSSL::ASN1::BitString, extv.class)
167
- str = "\000"; str[0] = 0b00000110.chr
168
- assert_equal(str, extv.value)
169
-
170
- ext = extensions.value[0].value[2] # subjetKeyIdentifier
171
- assert_equal(OpenSSL::ASN1::Sequence, ext.class)
172
- assert_equal(2, ext.value.size)
173
- assert_equal(OpenSSL::ASN1::ObjectId, ext.value[0].class)
174
- assert_equal("2.5.29.14", ext.value[0].oid)
175
- assert_equal(OpenSSL::ASN1::OctetString, ext.value[1].class)
176
- extv = OpenSSL::ASN1.decode(ext.value[1].value)
177
- assert_equal(OpenSSL::ASN1::OctetString, extv.class)
178
- sha1 = OpenSSL::Digest::SHA1.new
179
- sha1.update(pkey.value[1].value)
180
- assert_equal(sha1.digest, extv.value)
181
-
182
- assert_equal(OpenSSL::ASN1::Sequence, sig_alg.class)
183
- assert_equal(2, sig_alg.value.size)
184
- assert_equal(OpenSSL::ASN1::ObjectId, pkey.value[0].value[0].class)
185
- assert_equal("1.2.840.113549.1.1.1", pkey.value[0].value[0].oid)
186
- assert_equal(OpenSSL::ASN1::Null, pkey.value[0].value[1].class)
187
-
188
- assert_equal(OpenSSL::ASN1::BitString, sig_val.class)
189
- cululated_sig = key.sign(OpenSSL::Digest::SHA1.new, tbs_cert.to_der)
190
- assert_equal(cululated_sig, sig_val.value)
191
- end
192
-
193
- def test_encode_boolean
194
- encode_decode_test(OpenSSL::ASN1::Boolean, [true, false])
195
- end
196
-
197
- def test_encode_integer
198
- encode_decode_test(OpenSSL::ASN1::Integer, [72, -127, -128, 128, -1, 0, 1, -(2**12345), 2**12345])
199
- end
200
-
201
- def encode_decode_test(type, values)
202
- values.each do |v|
203
- assert_equal(v, OpenSSL::ASN1.decode(type.new(v).to_der).value)
204
- end
205
- end
206
-
207
- def test_decode_pem #should fail gracefully (cf. [ruby-dev:44542])
208
- pem = <<-_EOS_
209
- -----BEGIN CERTIFICATE-----
210
- MIIC8zCCAdugAwIBAgIBATANBgkqhkiG9w0BAQUFADA9MRMwEQYKCZImiZPyLGQB
211
- GRYDb3JnMRkwFwYKCZImiZPyLGQBGRYJcnVieS1sYW5nMQswCQYDVQQDDAJDQTAe
212
- Fw0xMTA5MjUxMzQ4MjZaFw0xMTA5MjUxNDQ4MjZaMD0xEzARBgoJkiaJk/IsZAEZ
213
- FgNvcmcxGTAXBgoJkiaJk/IsZAEZFglydWJ5LWxhbmcxCzAJBgNVBAMMAkNBMIIB
214
- IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuV9ht9J7k4NBs38jOXvvTKY9
215
- gW8nLICSno5EETR1cuF7i4pNs9I1QJGAFAX0BEO4KbzXmuOvfCpD3CU+Slp1enen
216
- fzq/t/e/1IRW0wkJUJUFQign4CtrkJL+P07yx18UjyPlBXb81ApEmAB5mrJVSrWm
217
- qbjs07JbuS4QQGGXLc+Su96DkYKmSNVjBiLxVVSpyZfAY3hD37d60uG+X8xdW5v6
218
- 8JkRFIhdGlb6JL8fllf/A/blNwdJOhVr9mESHhwGjwfSeTDPfd8ZLE027E5lyAVX
219
- 9KZYcU00mOX+fdxOSnGqS/8JDRh0EPHDL15RcJjV2J6vZjPb0rOYGDoMcH+94wID
220
- AQABMA0GCSqGSIb3DQEBBQUAA4IBAQAiAtrIr1pLX4GYN5klviWKb8HC9ICYuAFI
221
- NfE3FwqzErEVXotuMe3yPVyB3Bv6rjYY/x5EtS5+WPTbHlvHZTkfcsnTpizcn4mW
222
- dJ6dDRaFCHt1YKKjUxqBt9lvvrc3nReYZN/P+s1mrDhWzGf8iPZgf8sFUHgnaK7W
223
- CXRVXmPFgCDRNpDDVQ0MQkr509yYfTH+dujNzqTCwSvkyZFyQ7Oe8Yj0VR6kquG3
224
- rEzBQ0F9dUyqQ9gyRg8KHhDfv9HzT1d/rnUZMkoombwYBRIUChGCYV0GnJcan2Zm
225
- /93PnPG1IvPjYNd5VlV+sXSnaxQn974HRCsMv7jA8BD6IgSaX6WK
226
- -----END CERTIFICATE-----
227
- _EOS_
228
- assert_raise(OpenSSL::ASN1::ASN1Error) { OpenSSL::ASN1.decode(pem) }
229
- assert_raise(OpenSSL::ASN1::ASN1Error) { OpenSSL::ASN1.decode_all(pem) }
230
- end
231
-
232
- def test_primitive_cannot_set_infinite_length
233
- begin
234
- prim = OpenSSL::ASN1::Integer.new(50)
235
- assert_equal(false, prim.infinite_length)
236
- prim.infinite_length = true
237
- flunk('Could set infinite length on primitive value')
238
- rescue NoMethodError => e
239
- #ok
240
- end
241
- end
242
-
243
- def test_decode_all
244
- expected = %w{ 02 01 01 02 01 02 02 01 03 }
245
- raw = [expected.join('')].pack('H*')
246
- ary = OpenSSL::ASN1.decode_all(raw)
247
- assert_equal(3, ary.size)
248
- ary.each_with_index do |asn1, i|
249
- assert_universal(OpenSSL::ASN1::INTEGER, asn1)
250
- assert_equal(i + 1, asn1.value)
251
- end
252
- end
253
-
254
- def test_create_inf_length_primitive
255
- expected = %w{ 24 80 04 01 61 00 00 }
256
- raw = [expected.join('')].pack('H*')
257
- val = OpenSSL::ASN1::OctetString.new('a')
258
- cons = OpenSSL::ASN1::Constructive.new([val,
259
- OpenSSL::ASN1::EndOfContent.new],
260
- OpenSSL::ASN1::OCTET_STRING,
261
- nil,
262
- :UNIVERSAL)
263
- cons.infinite_length = true
264
- assert_equal(nil, cons.tagging)
265
- assert_equal(raw, cons.to_der)
266
- asn1 = OpenSSL::ASN1.decode(raw)
267
- assert(asn1.infinite_length)
268
- assert_equal(raw, asn1.to_der)
269
- end
270
-
271
- def test_cons_without_inf_length_forbidden
272
- assert_raise(OpenSSL::ASN1::ASN1Error) do
273
- val = OpenSSL::ASN1::OctetString.new('a')
274
- cons = OpenSSL::ASN1::Constructive.new([val],
275
- OpenSSL::ASN1::OCTET_STRING,
276
- nil,
277
- :UNIVERSAL)
278
- cons.to_der
279
- end
280
- end
281
-
282
- def test_cons_without_array_forbidden
283
- assert_raise(OpenSSL::ASN1::ASN1Error) do
284
- val = OpenSSL::ASN1::OctetString.new('a')
285
- cons = OpenSSL::ASN1::Constructive.new(val,
286
- OpenSSL::ASN1::OCTET_STRING,
287
- nil,
288
- :UNIVERSAL)
289
- cons.infinite_length = true
290
- cons.to_der
291
- end
292
- end
293
-
294
- def test_parse_empty_sequence
295
- expected = %w{ A0 07 30 02 30 00 02 01 00 }
296
- raw = [expected.join('')].pack('H*')
297
- asn1 = OpenSSL::ASN1.decode(raw)
298
- assert_equal(raw, asn1.to_der)
299
- assert_equal(2, asn1.value.size)
300
- seq = asn1.value[0]
301
- assert_equal(1, seq.value.size)
302
- inner_seq = seq.value[0]
303
- assert_equal(0, inner_seq.value.size)
304
- end
305
-
306
- def test_parse_tagged_0_infinite
307
- expected = %w{ 30 80 02 01 01 80 01 02 00 00 }
308
- raw = [expected.join('')].pack('H*')
309
- asn1 = OpenSSL::ASN1.decode(raw)
310
- assert_equal(3, asn1.value.size)
311
- int = asn1.value[0]
312
- assert_universal(OpenSSL::ASN1::INTEGER, int)
313
- tagged = asn1.value[1]
314
- assert_equal(0, tagged.tag)
315
- assert_universal(OpenSSL::ASN1::EOC, asn1.value[2])
316
- assert_equal(raw, asn1.to_der)
317
- end
318
-
319
- def test_seq_infinite_length
320
- begin
321
- content = [ OpenSSL::ASN1::Null.new(nil),
322
- OpenSSL::ASN1::EndOfContent.new ]
323
- cons = OpenSSL::ASN1::Sequence.new(content)
324
- cons.infinite_length = true
325
- expected = %w{ 30 80 05 00 00 00 }
326
- raw = [expected.join('')].pack('H*')
327
- assert_equal(raw, cons.to_der)
328
- assert_equal(raw, OpenSSL::ASN1.decode(raw).to_der)
329
- end
330
- end
331
-
332
- def test_set_infinite_length
333
- begin
334
- content = [ OpenSSL::ASN1::Null.new(nil),
335
- OpenSSL::ASN1::EndOfContent.new() ]
336
- cons = OpenSSL::ASN1::Set.new(content)
337
- cons.infinite_length = true
338
- expected = %w{ 31 80 05 00 00 00 }
339
- raw = [expected.join('')].pack('H*')
340
- assert_equal(raw, cons.to_der)
341
- assert_equal(raw, OpenSSL::ASN1.decode(raw).to_der)
342
- end
343
- end
344
-
345
- def test_octet_string_infinite_length
346
- begin
347
- octets = [ OpenSSL::ASN1::OctetString.new('aaa'),
348
- OpenSSL::ASN1::EndOfContent.new() ]
349
- cons = OpenSSL::ASN1::Constructive.new(
350
- octets,
351
- OpenSSL::ASN1::OCTET_STRING,
352
- nil,
353
- :UNIVERSAL)
354
- cons.infinite_length = true
355
- expected = %w{ 24 80 04 03 61 61 61 00 00 }
356
- raw = [expected.join('')].pack('H*')
357
- assert_equal(raw, cons.to_der)
358
- assert_equal(raw, OpenSSL::ASN1.decode(raw).to_der)
359
- end
360
- end
361
-
362
- def test_prim_explicit_tagging
363
- begin
364
- oct_str = OpenSSL::ASN1::OctetString.new("a", 0, :EXPLICIT)
365
- expected = %w{ A0 03 04 01 61 }
366
- raw = [expected.join('')].pack('H*')
367
- assert_equal(raw, oct_str.to_der)
368
- assert_equal(raw, OpenSSL::ASN1.decode(raw).to_der)
369
- end
370
- end
371
-
372
- def test_prim_explicit_tagging_tag_class
373
- begin
374
- oct_str = OpenSSL::ASN1::OctetString.new("a", 0, :EXPLICIT)
375
- oct_str2 = OpenSSL::ASN1::OctetString.new(
376
- "a",
377
- 0,
378
- :EXPLICIT,
379
- :CONTEXT_SPECIFIC)
380
- assert_equal(oct_str.to_der, oct_str2.to_der)
381
- end
382
- end
383
-
384
- def test_prim_implicit_tagging
385
- begin
386
- int = OpenSSL::ASN1::Integer.new(1, 0, :IMPLICIT)
387
- expected = %w{ 80 01 01 }
388
- raw = [expected.join('')].pack('H*')
389
- assert_equal(raw, int.to_der)
390
- assert_equal(raw, OpenSSL::ASN1.decode(raw).to_der)
391
- end
392
- end
393
-
394
- def test_prim_implicit_tagging_tag_class
395
- begin
396
- int = OpenSSL::ASN1::Integer.new(1, 0, :IMPLICIT)
397
- int2 = OpenSSL::ASN1::Integer.new(1, 0, :IMPLICIT, :CONTEXT_SPECIFIC);
398
- assert_equal(int.to_der, int2.to_der)
399
- end
400
- end
401
-
402
- def test_cons_explicit_tagging
403
- begin
404
- content = [ OpenSSL::ASN1::PrintableString.new('abc') ]
405
- seq = OpenSSL::ASN1::Sequence.new(content, 2, :EXPLICIT)
406
- expected = %w{ A2 07 30 05 13 03 61 62 63 }
407
- raw = [expected.join('')].pack('H*')
408
- assert_equal(raw, seq.to_der)
409
- assert_equal(raw, OpenSSL::ASN1.decode(raw).to_der)
410
- end
411
- end
412
-
413
- def test_cons_explicit_tagging_inf_length
414
- begin
415
- content = [ OpenSSL::ASN1::PrintableString.new('abc') ,
416
- OpenSSL::ASN1::EndOfContent.new() ]
417
- seq = OpenSSL::ASN1::Sequence.new(content, 2, :EXPLICIT)
418
- seq.infinite_length = true
419
- expected = %w{ A2 80 30 80 13 03 61 62 63 00 00 00 00 }
420
- raw = [expected.join('')].pack('H*')
421
- assert_equal(raw, seq.to_der)
422
- assert_equal(raw, OpenSSL::ASN1.decode(raw).to_der)
423
- end
424
- end
425
-
426
- def test_cons_implicit_tagging
427
- begin
428
- content = [ OpenSSL::ASN1::Null.new(nil) ]
429
- seq = OpenSSL::ASN1::Sequence.new(content, 1, :IMPLICIT)
430
- expected = %w{ A1 02 05 00 }
431
- raw = [expected.join('')].pack('H*')
432
- assert_equal(raw, seq.to_der)
433
- assert_equal(raw, OpenSSL::ASN1.decode(raw).to_der)
434
- end
435
- end
436
-
437
- def test_cons_implicit_tagging_inf_length
438
- begin
439
- content = [ OpenSSL::ASN1::Null.new(nil),
440
- OpenSSL::ASN1::EndOfContent.new() ]
441
- seq = OpenSSL::ASN1::Sequence.new(content, 1, :IMPLICIT)
442
- seq.infinite_length = true
443
- expected = %w{ A1 80 05 00 00 00 }
444
- raw = [expected.join('')].pack('H*')
445
- assert_equal(raw, seq.to_der)
446
- assert_equal(raw, OpenSSL::ASN1.decode(raw).to_der)
447
- end
448
- end
449
-
450
- def test_octet_string_infinite_length_explicit_tagging
451
- begin
452
- octets = [ OpenSSL::ASN1::OctetString.new('aaa'),
453
- OpenSSL::ASN1::EndOfContent.new() ]
454
- cons = OpenSSL::ASN1::Constructive.new(
455
- octets,
456
- 1,
457
- :EXPLICIT)
458
- cons.infinite_length = true
459
- expected = %w{ A1 80 24 80 04 03 61 61 61 00 00 00 00 }
460
- raw = [expected.join('')].pack('H*')
461
- assert_equal(raw, cons.to_der)
462
- assert_equal(raw, OpenSSL::ASN1.decode(raw).to_der)
463
- end
464
- end
465
-
466
- def test_octet_string_infinite_length_implicit_tagging
467
- begin
468
- octets = [ OpenSSL::ASN1::OctetString.new('aaa'),
469
- OpenSSL::ASN1::EndOfContent.new() ]
470
- cons = OpenSSL::ASN1::Constructive.new(
471
- octets,
472
- 0,
473
- :IMPLICIT)
474
- cons.infinite_length = true
475
- expected = %w{ A0 80 04 03 61 61 61 00 00 }
476
- raw = [expected.join('')].pack('H*')
477
- assert_equal(raw, cons.to_der)
478
- assert_equal(raw, OpenSSL::ASN1.decode(raw).to_der)
479
- end
480
- end
481
-
482
- def test_recursive_octet_string_infinite_length
483
- begin
484
- octets_sub1 = [ OpenSSL::ASN1::OctetString.new("\x01"),
485
- OpenSSL::ASN1::EndOfContent.new() ]
486
- octets_sub2 = [ OpenSSL::ASN1::OctetString.new("\x02"),
487
- OpenSSL::ASN1::EndOfContent.new() ]
488
- container1 = OpenSSL::ASN1::Constructive.new(
489
- octets_sub1,
490
- OpenSSL::ASN1::OCTET_STRING,
491
- nil,
492
- :UNIVERSAL)
493
- container1.infinite_length = true
494
- container2 = OpenSSL::ASN1::Constructive.new(
495
- octets_sub2,
496
- OpenSSL::ASN1::OCTET_STRING,
497
- nil,
498
- :UNIVERSAL)
499
- container2.infinite_length = true
500
- octets3 = OpenSSL::ASN1::OctetString.new("\x03")
501
-
502
- octets = [ container1, container2, octets3,
503
- OpenSSL::ASN1::EndOfContent.new() ]
504
- cons = OpenSSL::ASN1::Constructive.new(
505
- octets,
506
- OpenSSL::ASN1::OCTET_STRING,
507
- nil,
508
- :UNIVERSAL)
509
- cons.infinite_length = true
510
- expected = %w{ 24 80 24 80 04 01 01 00 00 24 80 04 01 02 00 00 04 01 03 00 00 }
511
- raw = [expected.join('')].pack('H*')
512
- assert_equal(raw, cons.to_der)
513
- assert_equal(raw, OpenSSL::ASN1.decode(raw).to_der)
514
- end
515
- end
516
-
517
- def test_bit_string_infinite_length
518
- begin
519
- content = [ OpenSSL::ASN1::BitString.new("\x01"),
520
- OpenSSL::ASN1::EndOfContent.new() ]
521
- cons = OpenSSL::ASN1::Constructive.new(
522
- content,
523
- OpenSSL::ASN1::BIT_STRING,
524
- nil,
525
- :UNIVERSAL)
526
- cons.infinite_length = true
527
- expected = %w{ 23 80 03 02 00 01 00 00 }
528
- raw = [expected.join('')].pack('H*')
529
- assert_equal(raw, cons.to_der)
530
- assert_equal(raw, OpenSSL::ASN1.decode(raw).to_der)
531
- end
532
- end
533
-
534
- def test_primitive_inf_length
535
- assert_raises(OpenSSL::ASN1::ASN1Error) do
536
- spec = %w{ 02 80 02 01 01 00 00 }
537
- raw = [spec.join('')].pack('H*')
538
- OpenSSL::ASN1.decode(raw)
539
- OpenSSL::ASN1.decode_all(raw)
540
- end
541
- end
542
-
543
- def test_recursive_octet_string_parse
544
- test = %w{ 24 80 24 80 04 01 01 00 00 24 80 04 01 02 00 00 04 01 03 00 00 }
545
- raw = [test.join('')].pack('H*')
546
- asn1 = OpenSSL::ASN1.decode(raw)
547
- assert_equal(OpenSSL::ASN1::Constructive, asn1.class)
548
- assert_universal(OpenSSL::ASN1::OCTET_STRING, asn1)
549
- assert_equal(true, asn1.infinite_length)
550
- assert_equal(4, asn1.value.size)
551
- nested1 = asn1.value[0]
552
- assert_equal(OpenSSL::ASN1::Constructive, nested1.class)
553
- assert_universal(OpenSSL::ASN1::OCTET_STRING, nested1)
554
- assert_equal(true, nested1.infinite_length)
555
- assert_equal(2, nested1.value.size)
556
- oct1 = nested1.value[0]
557
- assert_universal(OpenSSL::ASN1::OCTET_STRING, oct1)
558
- assert_equal(false, oct1.infinite_length)
559
- assert_universal(OpenSSL::ASN1::EOC, nested1.value[1])
560
- assert_equal(false, nested1.value[1].infinite_length)
561
- nested2 = asn1.value[1]
562
- assert_equal(OpenSSL::ASN1::Constructive, nested2.class)
563
- assert_universal(OpenSSL::ASN1::OCTET_STRING, nested2)
564
- assert_equal(true, nested2.infinite_length)
565
- assert_equal(2, nested2.value.size)
566
- oct2 = nested2.value[0]
567
- assert_universal(OpenSSL::ASN1::OCTET_STRING, oct2)
568
- assert_equal(false, oct2.infinite_length)
569
- assert_universal(OpenSSL::ASN1::EOC, nested2.value[1])
570
- assert_equal(false, nested2.value[1].infinite_length)
571
- oct3 = asn1.value[2]
572
- assert_universal(OpenSSL::ASN1::OCTET_STRING, oct3)
573
- assert_equal(false, oct3.infinite_length)
574
- assert_universal(OpenSSL::ASN1::EOC, asn1.value[3])
575
- assert_equal(false, asn1.value[3].infinite_length)
576
- end
577
-
578
- private
579
-
580
- def assert_universal(tag, asn1)
581
- assert_equal(tag, asn1.tag)
582
- if asn1.respond_to?(:tagging)
583
- assert_nil(asn1.tagging)
584
- end
585
- assert_equal(:UNIVERSAL, asn1.tag_class)
586
- end
587
-
588
- end if defined?(OpenSSL)
589
-