|
Packit |
ef9df4 |
#!/usr/local/bin/perl
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
#
|
|
Packit |
ef9df4 |
# Test that the primitive operators are working
|
|
Packit |
ef9df4 |
#
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
BEGIN { require 't/funcs.pl' }
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
use Convert::ASN1;
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
print "1..35\n";
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
btest 1, $asn = Convert::ASN1->new or warn $asn->error;
|
|
Packit |
ef9df4 |
btest 2, $asn->prepare(' ints SEQUENCE OF INTEGER ') or warn $asn->error;
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
$result = pack("C*", 0x30, 0x0C, 0x02, 0x01, 0x09, 0x02, 0x01, 0x05,
|
|
Packit |
ef9df4 |
0x02, 0x01, 0x03, 0x02, 0x01, 0x01);
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
stest 3, $result, $asn->encode(ints => [9,5,3,1]) or warn $asn->error;
|
|
Packit |
ef9df4 |
btest 4, $ret = $asn->decode($result) or warn $asn->error;
|
|
Packit |
ef9df4 |
btest 5, exists $ret->{'ints'};
|
|
Packit |
ef9df4 |
stest 6, "9:5:3:1", join(":", @{$ret->{'ints'}});
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
##
|
|
Packit |
ef9df4 |
##
|
|
Packit |
ef9df4 |
##
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
$result = pack("C*",
|
|
Packit |
ef9df4 |
0x30, 0x25,
|
|
Packit |
ef9df4 |
0x30, 0x11,
|
|
Packit |
ef9df4 |
0x04, 0x04, ord('f'), ord('r'), ord('e'), ord('d'),
|
|
Packit |
ef9df4 |
0x30, 0x09,
|
|
Packit |
ef9df4 |
0x04, 0x01, ord('a'),
|
|
Packit |
ef9df4 |
0x04, 0x01, ord('b'),
|
|
Packit |
ef9df4 |
0x04, 0x01, ord('c'),
|
|
Packit |
ef9df4 |
0x30, 0x10,
|
|
Packit |
ef9df4 |
0x04, 0x03, ord('j'), ord('o'), ord('e'),
|
|
Packit |
ef9df4 |
0x30, 0x09,
|
|
Packit |
ef9df4 |
0x04, 0x01, ord('q'),
|
|
Packit |
ef9df4 |
0x04, 0x01, ord('w'),
|
|
Packit |
ef9df4 |
0x04, 0x01, ord('e'),
|
|
Packit |
ef9df4 |
);
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
btest 7, $asn->prepare(' seq SEQUENCE OF SEQUENCE { str STRING, val SEQUENCE OF STRING } ')
|
|
Packit |
ef9df4 |
or warn $asn->error;
|
|
Packit |
ef9df4 |
stest 8, $result, $asn->encode(
|
|
Packit |
ef9df4 |
seq => [
|
|
Packit |
ef9df4 |
{ str => 'fred', val => [qw(a b c)] },
|
|
Packit |
ef9df4 |
{ str => 'joe', val => [qw(q w e)] }
|
|
Packit |
ef9df4 |
]) or warn $asn->error;
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
btest 9, $ret = $asn->decode($result) or warn $asn->error;
|
|
Packit |
ef9df4 |
ntest 10, 1, scalar keys %$ret;
|
|
Packit |
ef9df4 |
btest 11, exists $ret->{'seq'};
|
|
Packit |
ef9df4 |
ntest 12, 2, scalar @{$ret->{'seq'}};
|
|
Packit |
ef9df4 |
stest 13, 'fred', $ret->{'seq'}[0]{'str'};
|
|
Packit |
ef9df4 |
stest 14, 'joe', $ret->{'seq'}[1]{'str'};
|
|
Packit |
ef9df4 |
stest 15, "a:b:c", join(":", @{$ret->{'seq'}[0]{'val'}});
|
|
Packit |
ef9df4 |
stest 16, "q:w:e", join(":", @{$ret->{'seq'}[1]{'val'}});
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
btest 17, $asn = Convert::ASN1->new or warn $asn->error;
|
|
Packit |
ef9df4 |
btest 18, $asn->prepare(<<'EOS') or warn $asn->error;
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
AttributeTypeAndValue ::= SEQUENCE {
|
|
Packit |
ef9df4 |
type STRING,
|
|
Packit |
ef9df4 |
value STRING }
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
RelativeDistinguishedName ::= SET OF AttributeTypeAndValue
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
Name ::= CHOICE { -- only one possibility for now --
|
|
Packit |
ef9df4 |
rdnSequence RDNSequence }
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
Issuer ::= SEQUENCE { issuer Name }
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
EOS
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
btest 19, $asn = $asn->find('Issuer') or warn $asn->error;
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
$result = pack("C*",
|
|
Packit |
ef9df4 |
0x30, 0x26, 0x30, 0x24, 0x31, 0x10, 0x30, 0x06,
|
|
Packit |
ef9df4 |
0x04, 0x01, 0x31, 0x04, 0x01, 0x61, 0x30, 0x06,
|
|
Packit |
ef9df4 |
0x04, 0x01, 0x32, 0x04, 0x01, 0x62, 0x31, 0x10,
|
|
Packit |
ef9df4 |
0x30, 0x06, 0x04, 0x01, 0x33, 0x04, 0x01, 0x63,
|
|
Packit |
ef9df4 |
0x30, 0x06, 0x04, 0x01, 0x34, 0x04, 0x01, 0x64
|
|
Packit |
ef9df4 |
);
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
stest 20, $result, $asn->encode(
|
|
Packit |
ef9df4 |
issuer => {
|
|
Packit |
ef9df4 |
rdnSequence => [
|
|
Packit |
ef9df4 |
[{ type => "1", value => "a" }, { type => "2", value => "b" }],
|
|
Packit |
ef9df4 |
[{ type => "3", value => "c" }, { type => "4", value => "d" }],
|
|
Packit |
ef9df4 |
]
|
|
Packit |
ef9df4 |
}
|
|
Packit |
ef9df4 |
) or warn $asn->error;
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
btest 21, $ret = $asn->decode($result) or warn $asn->error;
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
ntest 22, 1, $ret->{issuer}{rdnSequence}[0][0]{type};
|
|
Packit |
ef9df4 |
ntest 23, 2, $ret->{issuer}{rdnSequence}[0][1]{type};
|
|
Packit |
ef9df4 |
ntest 24, 3, $ret->{issuer}{rdnSequence}[1][0]{type};
|
|
Packit |
ef9df4 |
ntest 25, 4, $ret->{issuer}{rdnSequence}[1][1]{type};
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
stest 26, 'a', $ret->{issuer}{rdnSequence}[0][0]{value};
|
|
Packit |
ef9df4 |
stest 27, 'b', $ret->{issuer}{rdnSequence}[0][1]{value};
|
|
Packit |
ef9df4 |
stest 28, 'c', $ret->{issuer}{rdnSequence}[1][0]{value};
|
|
Packit |
ef9df4 |
stest 29, 'd', $ret->{issuer}{rdnSequence}[1][1]{value};
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
btest 30, $asn = Convert::ASN1->new or warn $asn->error;
|
|
Packit |
ef9df4 |
btest 31, $asn->prepare('test ::= SEQUENCE OF INTEGER ') or warn $asn->error;
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
$result = pack("C*", 0x30, 0x0C, 0x02, 0x01, 0x09, 0x02, 0x01, 0x05,
|
|
Packit |
ef9df4 |
0x02, 0x01, 0x03, 0x02, 0x01, 0x01);
|
|
Packit |
ef9df4 |
|
|
Packit |
ef9df4 |
stest 32, $result, $asn->encode([9,5,3,1]) or warn $asn->error;
|
|
Packit |
ef9df4 |
btest 33, $ret = $asn->decode($result) or warn $asn->error;
|
|
Packit |
ef9df4 |
btest 34, ref($ret) eq 'ARRAY';
|
|
Packit |
ef9df4 |
stest 35, "9:5:3:1", join(":", @{$ret});
|