1#!/usr/local/bin/perl 2 3# 4# Test that default EXPLICIT tagging works. 5# 6 7use Convert::ASN1; 8BEGIN { require './t/funcs.pl' } 9 10print "1..25\n"; 11 12btest 1, $asn = Convert::ASN1->new(encoding=>'DER', 13 tagdefault=>'EXPLICIT') or warn $asn->error; 14 15# Tests from X.690-0207, section 8.14.3 16my $value = "Jones"; 17btest 2, $asn->prepare(q( 18 Type1 ::= VisibleString 19 Type2 ::= [APPLICATION 3] IMPLICIT Type1 20 Type3 ::= [2] Type2 21 Type4 ::= [APPLICATION 7] IMPLICIT Type3 22 Type5 ::= [2] IMPLICIT Type2 23)) or warn $asn->error; 24 25# Type 1 26btest 3, $type1 = $asn->find('Type1'); 27$result = pack("H*", "1A054A6F6E6573"); 28stest 4, $result, $type1->encode($value) or warn $asn->error; 29btest 5, $ret = $type1->decode($result) or warn $asn->error; 30stest 6, $value, $ret; 31 32# Type 2 33btest 7, $type2 = $asn->find('Type2'); 34$result = pack("H*", "43054A6F6E6573"); 35stest 8, $result, $type2->encode($value) or warn $asn->error; 36btest 9, $ret = $type2->decode($result) or warn $asn->error; 37stest 10, $value, $ret; 38 39# Type 3 40btest 11, $type3 = $asn->find('Type3'); 41$result = pack("H*", "A20743054A6F6E6573"); 42stest 12, $result, $type3->encode($value) or warn $asn->error; 43btest 13, $ret = $type3->decode($result) or warn $asn->error; 44stest 14, $value, $ret; 45 46# Type 4 47btest 15, $type4 = $asn->find('Type4'); 48$result = pack("H*", "670743054A6F6E6573"); 49stest 16, $result, $type4->encode($value) or warn $asn->error; 50btest 17, $ret = $type4->decode($result) or warn $asn->error; 51stest 18, $value, $ret; 52 53# Type 5 54btest 19, $type5 = $asn->find('Type5'); 55$result = pack("H*", "82054A6F6E6573"); 56stest 20, $result, $type5->encode($value) or warn $asn->error; 57btest 21, $ret = $type5->decode($result) or warn $asn->error; 58stest 22, $value, $ret; 59 60# Test EXPLICIT tagging a nested SEQUENCE. 61btest 23, $asn->prepare(q( 62 X ::= [APPLICATION 10] Y 63 Y ::= SEQUENCE { 64 v [1] INTEGER, 65 b [4] Z 66 } 67 Z ::= SEQUENCE { 68 n [7] INTEGER, 69 e [8] SEQUENCE OF INTEGER 70 } 71)) or warn $asn->error; 72btest 24, $X = $asn->find('X'); 73$value = { v => 5,b => { n => 117, e=>[18,17,16,23] }}; 74$result = pack("H*", "6a20301ea103020105a4173015a703020175a80e300c020112020111020110020117"); 75stest 25, $result, $X->encode($value) or warn $asn->error; 76