@@ -232,6 +232,67 @@ def test_enumerated
232232 encode_decode_test B ( %w{ 0A 09 01 00 00 00 00 00 00 00 00 } ) , OpenSSL ::ASN1 ::Enumerated . new ( 2 ** 64 )
233233 end
234234
235+ def test_object_identifier
236+ encode_decode_test B ( %w{ 06 01 00 } ) , OpenSSL ::ASN1 ::ObjectId . new ( "0.0" . b )
237+ encode_decode_test B ( %w{ 06 01 28 } ) , OpenSSL ::ASN1 ::ObjectId . new ( "1.0" . b )
238+ encode_decode_test B ( %w{ 06 03 88 37 03 } ) , OpenSSL ::ASN1 ::ObjectId . new ( "2.999.3" . b )
239+ encode_decode_test B ( %w{ 06 05 2A 22 83 BB 55 } ) , OpenSSL ::ASN1 ::ObjectId . new ( "1.2.34.56789" . b )
240+ obj = encode_decode_test B ( %w{ 06 09 60 86 48 01 65 03 04 02 01 } ) , OpenSSL ::ASN1 ::ObjectId . new ( "sha256" )
241+ assert_equal "2.16.840.1.101.3.4.2.1" , obj . oid
242+ assert_equal "SHA256" , obj . sn
243+ assert_equal "sha256" , obj . ln
244+ assert_raise ( OpenSSL ::ASN1 ::ASN1Error ) {
245+ OpenSSL ::ASN1 . decode ( B ( %w{ 06 00 } ) )
246+ }
247+ assert_raise ( OpenSSL ::ASN1 ::ASN1Error ) {
248+ OpenSSL ::ASN1 . decode ( B ( %w{ 06 01 80 } ) )
249+ }
250+ assert_raise ( OpenSSL ::ASN1 ::ASN1Error ) { OpenSSL ::ASN1 ::ObjectId . new ( "3.0" . b ) . to_der }
251+ assert_raise ( OpenSSL ::ASN1 ::ASN1Error ) { OpenSSL ::ASN1 ::ObjectId . new ( "0.40" . b ) . to_der }
252+
253+ oid = ( 0 ...100 ) . to_a . join ( "." ) . b
254+ obj = OpenSSL ::ASN1 ::ObjectId . new ( oid )
255+ assert_equal oid , obj . oid
256+ end
257+
258+ def test_object_identifier_equality
259+ aki = [
260+ OpenSSL ::ASN1 ::ObjectId . new ( "authorityKeyIdentifier" ) ,
261+ OpenSSL ::ASN1 ::ObjectId . new ( "X509v3 Authority Key Identifier" ) ,
262+ OpenSSL ::ASN1 ::ObjectId . new ( "2.5.29.35" )
263+ ]
264+
265+ ski = [
266+ OpenSSL ::ASN1 ::ObjectId . new ( "subjectKeyIdentifier" ) ,
267+ OpenSSL ::ASN1 ::ObjectId . new ( "X509v3 Subject Key Identifier" ) ,
268+ OpenSSL ::ASN1 ::ObjectId . new ( "2.5.29.14" )
269+ ]
270+
271+ aki . each do |a |
272+ aki . each do |b |
273+ puts "#{ a . value } == #{ b . value } "
274+ assert_equal true , a == b
275+ end
276+
277+ ski . each do |b |
278+ puts "#{ a . value } != #{ b . value } "
279+ assert_equal false , a == b
280+ end
281+ end
282+
283+ obj1 = OpenSSL ::ASN1 ::ObjectId . new ( "1.2.34.56789.10" )
284+ obj2 = OpenSSL ::ASN1 ::ObjectId . new ( "1.2.34.56789.10" )
285+ obj3 = OpenSSL ::ASN1 ::ObjectId . new ( "1.2.34.56789.11" )
286+ # TODO: OidToNid and NidToOid logic is done in a bespoke manner in jruby-openssl.
287+ # this should use the BC APIs to translated registered names to OID. They are a bit
288+ # scattered all over though (BCStyle.attrNameToOID, SECNamedCurves.getOID, X509Name hashtables...)
289+ # omit "OID 1.2.34.56789.10 is registered" if obj1.sn
290+ assert_equal true , obj1 == obj2
291+ assert_equal false , obj1 == obj3
292+
293+ assert_equal false , OpenSSL ::ASN1 ::ObjectId . new ( "authorityKeyIdentifier" ) == nil
294+ end
295+
235296 def test_encode_nested_sequence_to_der
236297 data_sequence = ::OpenSSL ::ASN1 ::Sequence ( [ ::OpenSSL ::ASN1 ::Integer ( 0 ) ] )
237298 asn1 = ::OpenSSL ::ASN1 ::Sequence ( data_sequence )
@@ -312,67 +373,6 @@ def test_encode_data_integer
312373 assert_equal OpenSSL ::BN . new ( 90 ) , int . value
313374 end
314375
315- def test_object_identifier
316- encode_decode_test B ( %w{ 06 01 00 } ) , OpenSSL ::ASN1 ::ObjectId . new ( "0.0" . b )
317- encode_decode_test B ( %w{ 06 01 28 } ) , OpenSSL ::ASN1 ::ObjectId . new ( "1.0" . b )
318- encode_decode_test B ( %w{ 06 03 88 37 03 } ) , OpenSSL ::ASN1 ::ObjectId . new ( "2.999.3" . b )
319- encode_decode_test B ( %w{ 06 05 2A 22 83 BB 55 } ) , OpenSSL ::ASN1 ::ObjectId . new ( "1.2.34.56789" . b )
320- obj = encode_decode_test B ( %w{ 06 09 60 86 48 01 65 03 04 02 01 } ) , OpenSSL ::ASN1 ::ObjectId . new ( "sha256" )
321- assert_equal "2.16.840.1.101.3.4.2.1" , obj . oid
322- assert_equal "SHA256" , obj . sn
323- assert_equal "sha256" , obj . ln
324- # TODO: Import Issue
325- # Fails with: <OpenSSL::ASN1::ASN1Error> expected but was <RuntimeError(<(TypeError) string not an OID>)
326- #assert_raise(OpenSSL::ASN1::ASN1Error) {
327- # OpenSSL::ASN1.decode(B(%w{ 06 00 }))
328- #}
329- #assert_raise(OpenSSL::ASN1::ASN1Error) {
330- # OpenSSL::ASN1.decode(B(%w{ 06 01 80 }))
331- #}
332- # <OpenSSL::ASN1::ASN1Error> expected but was <TypeError(<string 3.0 not an OID>)
333- #assert_raise(OpenSSL::ASN1::ASN1Error) { OpenSSL::ASN1::ObjectId.new("3.0".b).to_der }
334- # <OpenSSL::ASN1::ASN1Error> exception was expected but none was thrown.
335- #assert_raise(OpenSSL::ASN1::ASN1Error) { OpenSSL::ASN1::ObjectId.new("0.40".b).to_der }
336-
337- oid = ( 0 ...100 ) . to_a . join ( "." ) . b
338- obj = OpenSSL ::ASN1 ::ObjectId . new ( oid )
339- assert_equal oid , obj . oid
340-
341- aki = [
342- OpenSSL ::ASN1 ::ObjectId . new ( "authorityKeyIdentifier" ) ,
343- OpenSSL ::ASN1 ::ObjectId . new ( "X509v3 Authority Key Identifier" ) ,
344- OpenSSL ::ASN1 ::ObjectId . new ( "2.5.29.35" )
345- ]
346-
347- ski = [
348- OpenSSL ::ASN1 ::ObjectId . new ( "subjectKeyIdentifier" ) ,
349- OpenSSL ::ASN1 ::ObjectId . new ( "X509v3 Subject Key Identifier" ) ,
350- OpenSSL ::ASN1 ::ObjectId . new ( "2.5.29.14" )
351- ]
352-
353- aki . each do |a |
354- # TODO: Import Issue
355- # None of these are equivalent to each other
356- #aki.each do |b|
357- # assert a == b
358- #end
359-
360- ski . each do |b |
361- refute a == b
362- end
363- end
364-
365- # TODO: Import Issue
366- # <TypeError> exception was expected but none was thrown.
367- #assert_raise(TypeError) {
368- # OpenSSL::ASN1::ObjectId.new("authorityKeyIdentifier") == nil
369- #}
370-
371- oid = OpenSSL ::ASN1 ::ObjectId . new ( "2.5.29.14" )
372- assert_equal true , oid == OpenSSL ::ASN1 ::ObjectId . new ( "2.5.29.14" )
373- assert_equal false , oid == OpenSSL ::ASN1 ::ObjectId . new ( "2.5.29.35" )
374- end
375-
376376 def test_instantiate
377377 # nothing shall raise :
378378 OpenSSL ::ASN1 ::Null . new ( nil )
0 commit comments