1#!/usr/local/bin/perl
2
3#
4# Test that indefinite length encodings can be decoded
5#
6
7BEGIN { require './t/funcs.pl' }
8
9use Convert::ASN1;
10my @zz = ( 0, 0 );
11
12print "1..7\n";
13
14btest 1, $asn = Convert::ASN1->new or warn $asn->error;
15btest 2, $asn->prepare(q(
16  GroupOfThis ::= [1] OCTET STRING
17  GroupOfThat ::= [2] OCTET STRING
18  Item        ::= [3] SEQUENCE {
19     aGroup GroupOfThis OPTIONAL,
20     bGroup GroupOfThat OPTIONAL
21  }
22  Items       ::= [4] SEQUENCE OF Item
23  List        ::= [5] SEQUENCE { list Items }
24)) or warn $asn->error;
25
26my $buf = pack( 'C*',
27   0xa5, 0x80,
28     0xa4, 0x80,
29       0xa3, 0x80,
30         0x81, 0x03, ( ord('A') ) x 3,
31       @zz,
32       0xa3, 0x80,
33         0x82, 0x03, ( ord('B') ) x 3,
34       @zz,
35       0xa3, 0x80,
36         0x81, 0x03, ( ord('C') ) x 3,
37         0x82, 0x03, ( ord('D') ) x 3,
38       @zz,
39     @zz,
40   @zz,
41);
42
43my $nl = $asn->find( 'List' );
44my $seq = $nl->decode( $buf ) or warn $asn->error;
45btest 3, defined( $seq ) && exists( $seq->{list} );
46stest 4, 'AAA', $seq->{list}->[0]->{aGroup};
47stest 5, 'BBB', $seq->{list}->[1]->{bGroup};
48stest 6, 'CCC', $seq->{list}->[2]->{aGroup};
49stest 7, 'DDD', $seq->{list}->[2]->{bGroup};
50