|
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;
|