Blame t/18tagdefault.t

Packit Service 8c15e4
#!/usr/bin/perl
Packit ef9df4
Packit ef9df4
#
Packit ef9df4
# Test that default EXPLICIT tagging works.
Packit ef9df4
#
Packit ef9df4
Packit ef9df4
use Convert::ASN1;
Packit ef9df4
BEGIN { require 't/funcs.pl' }
Packit ef9df4
Packit ef9df4
print "1..25\n";
Packit ef9df4
Packit ef9df4
btest 1, $asn = Convert::ASN1->new(encoding=>'DER',
Packit ef9df4
                                   tagdefault=>'EXPLICIT') or warn $asn->error;
Packit ef9df4
Packit ef9df4
# Tests from X.690-0207, section 8.14.3
Packit ef9df4
my $value = "Jones";
Packit ef9df4
btest 2, $asn->prepare(q(
Packit ef9df4
     Type1 ::= VisibleString
Packit ef9df4
     Type2 ::= [APPLICATION 3] IMPLICIT Type1
Packit ef9df4
     Type3 ::= [2] Type2
Packit ef9df4
     Type4 ::= [APPLICATION 7] IMPLICIT Type3
Packit ef9df4
     Type5 ::= [2] IMPLICIT Type2
Packit ef9df4
)) or warn $asn->error;
Packit ef9df4
Packit ef9df4
# Type 1
Packit ef9df4
btest 3, $type1 = $asn->find('Type1');
Packit ef9df4
$result = pack("H*", "1A054A6F6E6573");
Packit ef9df4
stest 4, $result, $type1->encode($value) or warn $asn->error;
Packit ef9df4
btest 5, $ret = $type1->decode($result) or warn $asn->error;
Packit ef9df4
stest 6, $value, $ret;
Packit ef9df4
Packit ef9df4
# Type 2
Packit ef9df4
btest 7, $type2 = $asn->find('Type2');
Packit ef9df4
$result = pack("H*", "43054A6F6E6573");
Packit ef9df4
stest 8, $result, $type2->encode($value) or warn $asn->error;
Packit ef9df4
btest 9, $ret = $type2->decode($result) or warn $asn->error;
Packit ef9df4
stest 10, $value, $ret;
Packit ef9df4
Packit ef9df4
# Type 3
Packit ef9df4
btest 11, $type3 = $asn->find('Type3');
Packit ef9df4
$result = pack("H*", "A20743054A6F6E6573");
Packit ef9df4
stest 12, $result, $type3->encode($value) or warn $asn->error;
Packit ef9df4
btest 13, $ret = $type3->decode($result) or warn $asn->error;
Packit ef9df4
stest 14, $value, $ret;
Packit ef9df4
Packit ef9df4
# Type 4
Packit ef9df4
btest 15, $type4 = $asn->find('Type4');
Packit ef9df4
$result = pack("H*", "670743054A6F6E6573");
Packit ef9df4
stest 16, $result, $type4->encode($value) or warn $asn->error;
Packit ef9df4
btest 17, $ret = $type4->decode($result) or warn $asn->error;
Packit ef9df4
stest 18, $value, $ret;
Packit ef9df4
Packit ef9df4
# Type 5
Packit ef9df4
btest 19, $type5 = $asn->find('Type5');
Packit ef9df4
$result = pack("H*", "82054A6F6E6573");
Packit ef9df4
stest 20, $result, $type5->encode($value) or warn $asn->error;
Packit ef9df4
btest 21, $ret = $type5->decode($result) or warn $asn->error;
Packit ef9df4
stest 22, $value, $ret;
Packit ef9df4
Packit ef9df4
# Test EXPLICIT tagging a nested SEQUENCE.
Packit ef9df4
btest 23, $asn->prepare(q(
Packit ef9df4
         X  ::= [APPLICATION 10] Y
Packit ef9df4
         Y  ::= SEQUENCE {
Packit ef9df4
                v [1] INTEGER,
Packit ef9df4
                b [4] Z
Packit ef9df4
         }
Packit ef9df4
         Z ::= SEQUENCE {
Packit ef9df4
             n [7] INTEGER,
Packit ef9df4
             e [8] SEQUENCE OF INTEGER
Packit ef9df4
         }
Packit ef9df4
)) or warn $asn->error;
Packit ef9df4
btest 24, $X = $asn->find('X');
Packit ef9df4
$value = { v => 5,b => { n => 117, e=>[18,17,16,23] }};
Packit ef9df4
$result = pack("H*", "6a20301ea103020105a4173015a703020175a80e300c020112020111020110020117");
Packit ef9df4
stest 25, $result, $X->encode($value) or warn $asn->error;