11indef.t   [plain text]


#!/usr/local/bin/perl

#
# Test that indefinite length encodings can be decoded
#

BEGIN { require 't/funcs.pl' }

use Convert::ASN1;
my @zz = ( 0, 0 );

print "1..7\n";

btest 1, $asn = Convert::ASN1->new or warn $asn->error;
btest 2, $asn->prepare(q(
  GroupOfThis ::= [1] OCTET STRING
  GroupOfThat ::= [2] OCTET STRING
  Item        ::= [3] SEQUENCE {
     aGroup GroupOfThis OPTIONAL,
     bGroup GroupOfThat OPTIONAL
  }
  Items       ::= [4] SEQUENCE OF Item
  List        ::= [5] SEQUENCE { list Items }
)) or warn $asn->error;

my $buf = pack( 'C*',
   0xa5, 0x80,
     0xa4, 0x80,
       0xa3, 0x80,
         0x81, 0x03, ( ord('A') ) x 3,
       @zz,
       0xa3, 0x80,
         0x82, 0x03, ( ord('B') ) x 3,
       @zz,
       0xa3, 0x80,
         0x81, 0x03, ( ord('C') ) x 3,
         0x82, 0x03, ( ord('D') ) x 3,
       @zz,
     @zz,
   @zz, 
);

my $nl = $asn->find( 'List' );
my $seq = $nl->decode( $buf ) or warn $asn->error;
btest 3, defined( $seq ) && exists( $seq->{list} );
stest 4, 'AAA', $seq->{list}->[0]->{aGroup};
stest 5, 'BBB', $seq->{list}->[1]->{bGroup};
stest 6, 'CCC', $seq->{list}->[2]->{aGroup};
stest 7, 'DDD', $seq->{list}->[2]->{bGroup};