@@ -260,6 +260,30 @@ def test_encode_nil
260260 assert_raise ( TypeError ) { OpenSSL ::ASN1 ::Boolean . new ( nil ) . to_der }
261261 end
262262
263+ def test_encode_data_integer
264+ data = OpenSSL ::ASN1 ::ASN1Data . new ( [ OpenSSL ::ASN1 ::Integer . new ( 90 ) ] , 1 , :CONTEXT_SPECIFIC )
265+ der = data . to_der
266+ assert_equal "\xA1 \x03 \x02 \x01 Z" , der
267+
268+ dec = OpenSSL ::ASN1 . decode ( der )
269+ # #<OpenSSL::ASN1::ASN1Data:0x000077be141e1e60
270+ # @indefinite_length=false,
271+ # @tag=1,
272+ # @tag_class=:CONTEXT_SPECIFIC,
273+ # @value=[#<OpenSSL::ASN1::Integer:0x000077be141e1e88 @indefinite_length=false, @tag=2, @tag_class=:UNIVERSAL, @tagging=nil, @value=#<OpenSSL::BN 1>>]>
274+ assert_equal OpenSSL ::ASN1 ::ASN1Data , dec . class
275+ assert_equal :CONTEXT_SPECIFIC , dec . tag_class
276+ assert_equal 1 , dec . tag
277+
278+ assert_equal Array , dec . value . class
279+ assert_equal 1 , dec . value . size
280+ int = dec . value [ 0 ]
281+ assert_equal OpenSSL ::ASN1 ::Integer , int . class
282+ assert_equal 2 , int . tag
283+ assert_equal :UNIVERSAL , int . tag_class
284+ assert_equal OpenSSL ::BN . new ( 90 ) , int . value
285+ end
286+
263287 def test_object_identifier
264288 encode_decode_test B ( %w{ 06 01 00 } ) , OpenSSL ::ASN1 ::ObjectId . new ( "0.0" . b )
265289 encode_decode_test B ( %w{ 06 01 28 } ) , OpenSSL ::ASN1 ::ObjectId . new ( "1.0" . b )
0 commit comments