Blame t/00prim.t

Packit Service 8c15e4
#!/usr/bin/perl
Packit ef9df4
Packit ef9df4
#
Packit ef9df4
# Test that the primitive operators are working
Packit ef9df4
#
Packit ef9df4
Packit ef9df4
use Convert::ASN1 qw(:all);
Packit ef9df4
Packit ef9df4
print "1..186\n";
Packit ef9df4
Packit ef9df4
BEGIN { require 't/funcs.pl' }
Packit ef9df4
Packit ef9df4
ntest 1, 129,      asn_tag(ASN_CONTEXT, 1);
Packit ef9df4
ntest 2, 0x201f,   asn_tag(ASN_UNIVERSAL, 32);
Packit ef9df4
ntest 3, 0x01825f, asn_tag(ASN_APPLICATION, 257);
Packit ef9df4
Packit ef9df4
stest 4, pack("C*", 129),            asn_encode_tag(129);
Packit ef9df4
stest 5, pack("C*", 0x1f,0x20),      asn_encode_tag(0x201f);
Packit ef9df4
stest 6, pack("C*", 0x5f,0x82,0x01), asn_encode_tag(0x01825f);
Packit ef9df4
Packit ef9df4
ntest 7, 129,       asn_decode_tag(asn_encode_tag(asn_tag(ASN_CONTEXT, 1)));
Packit ef9df4
ntest 8, 0x201f,    asn_decode_tag(asn_encode_tag(asn_tag(ASN_UNIVERSAL, 32)));
Packit ef9df4
ntest 9, 0x01825f,  asn_decode_tag(asn_encode_tag(asn_tag(ASN_APPLICATION, 257)));
Packit ef9df4
Packit ef9df4
ntest 10, 1, (asn_decode_tag(asn_encode_tag(asn_tag(ASN_CONTEXT, 1))))[0];
Packit ef9df4
ntest 11, 2, (asn_decode_tag(asn_encode_tag(asn_tag(ASN_UNIVERSAL, 32))))[0];
Packit ef9df4
ntest 12, 3, (asn_decode_tag(asn_encode_tag(asn_tag(ASN_APPLICATION, 257))))[0];
Packit ef9df4
Packit ef9df4
stest 13, pack("C*", 45),             asn_encode_length(45);
Packit ef9df4
stest 14, pack("C*", 0x81,0x8b),      asn_encode_length(139);
Packit ef9df4
stest 15, pack("C*", 0x82,0x12,0x34), asn_encode_length(0x1234);
Packit ef9df4
Packit ef9df4
ntest 16, 45,     asn_decode_length(asn_encode_length(45));
Packit ef9df4
ntest 17, 139,    asn_decode_length(asn_encode_length(139));
Packit ef9df4
ntest 18, 0x1234, asn_decode_length(asn_encode_length(0x1234));
Packit ef9df4
Packit ef9df4
ntest 19, 1, (asn_decode_length(asn_encode_length(45)))[0];
Packit ef9df4
ntest 20, 2, (asn_decode_length(asn_encode_length(139)))[0];
Packit ef9df4
ntest 21, 3, (asn_decode_length(asn_encode_length(0x1234)))[0];
Packit ef9df4
Packit ef9df4
btest 22, $asn = Convert::ASN1->new;
Packit ef9df4
Packit ef9df4
##
Packit ef9df4
## NULL
Packit ef9df4
##
Packit ef9df4
Packit ef9df4
print "# NULL\n";
Packit ef9df4
Packit ef9df4
$buf = pack("C*", 0x05, 0x00);
Packit ef9df4
btest 23, $asn->prepare(' null NULL ') or warn $asn->error;
Packit ef9df4
stest 24, $buf, $asn->encode(null => 1) or warn $asn->error;
Packit ef9df4
btest 25, $ret = $asn->decode($buf) or warn $asn->error;
Packit ef9df4
btest 26, $ret->{'null'};
Packit ef9df4
Packit ef9df4
##
Packit ef9df4
## BOOLEAN 
Packit ef9df4
##
Packit ef9df4
Packit ef9df4
$test = 27;
Packit ef9df4
Packit ef9df4
foreach $val (0,1,-99) {
Packit ef9df4
  print "# BOOLEAN $val\n";
Packit ef9df4
Packit ef9df4
  my $result = pack("C*", 0x01, 0x01, $val ? 0xFF : 0);
Packit ef9df4
Packit ef9df4
  btest $test++, $asn->prepare(' bool BOOLEAN') or warn $asn->error;
Packit ef9df4
  stest $test++, $result, $asn->encode(bool => $val) or warn $asn->error;
Packit ef9df4
  btest $test++, $ret = $asn->decode($result) or warn $asn->error;
Packit ef9df4
  ntest $test++, !!$val, !!$ret->{'bool'};
Packit ef9df4
}
Packit ef9df4
Packit ef9df4
##
Packit ef9df4
## INTEGER (tests 13 - 21)
Packit ef9df4
##
Packit ef9df4
Packit ef9df4
my %INTEGER = (
Packit ef9df4
  pack("C*", 0x02, 0x02, 0x00, 0x80), 	      128,
Packit ef9df4
  pack("C*", 0x02, 0x01, 0x80), 	      -128,
Packit ef9df4
  pack("C*", 0x02, 0x02, 0xff, 0x01), 	      -255,
Packit ef9df4
  pack("C*", 0x02, 0x01, 0x00), 	      0,
Packit ef9df4
  pack("C*", 0x02, 0x03, 0x66, 0x77, 0x99),   0x667799,
Packit ef9df4
  pack("C*", 0x02, 0x02, 0xFE, 0x37),	     -457,
Packit ef9df4
  pack("C*", 0x02, 0x04, 0x40, 0x00, 0x00, 0x00),	     2**30,
Packit ef9df4
  pack("C*", 0x02, 0x04, 0xC0, 0x00, 0x00, 0x00),	     -2**30,
Packit ef9df4
);
Packit ef9df4
Packit ef9df4
while(($result,$val) = each %INTEGER) {
Packit ef9df4
  print "# INTEGER $val\n";
Packit ef9df4
Packit ef9df4
  btest $test++, $asn->prepare(' integer INTEGER') or warn $asn->error;
Packit ef9df4
  stest $test++, $result, $asn->encode(integer => $val) or warn $asn->error;
Packit ef9df4
  btest $test++, $ret = $asn->decode($result) or warn $asn->error;
Packit ef9df4
  ntest $test++, $val, $ret->{integer};
Packit ef9df4
Packit ef9df4
}
Packit ef9df4
Packit ef9df4
btest $test++, $asn->prepare('test ::= INTEGER ');
Packit ef9df4
Packit ef9df4
$result = pack("C*", 0x02, 0x01, 0x09);
Packit ef9df4
Packit ef9df4
stest $test++, $result, $asn->encode(9) or warn $asn->error;
Packit ef9df4
btest $test++, $ret = $asn->decode($result) or warn $asn->error;
Packit ef9df4
btest $test++, $ret == 9;
Packit ef9df4
Packit ef9df4
##
Packit ef9df4
## STRING
Packit ef9df4
##
Packit ef9df4
Packit ef9df4
my %STRING = (
Packit ef9df4
  pack("C*",   0x04, 0x00),		  "",
Packit ef9df4
  pack("CCa*", 0x04, 0x08, "A string"),   "A string",
Packit ef9df4
);
Packit ef9df4
Packit ef9df4
while(($result,$val) = each %STRING) {
Packit ef9df4
  print "# STRING '$val'\n";
Packit ef9df4
Packit ef9df4
  btest $test++, $asn->prepare('str STRING') or warn $asn->error;
Packit ef9df4
  stest $test++, $result, $asn->encode(str => $val) or warn $asn->error;
Packit ef9df4
  btest $test++, $ret = $asn->decode($result) or warn $asn->error;
Packit ef9df4
  stest $test++, $val, $ret->{'str'};
Packit ef9df4
}
Packit ef9df4
Packit ef9df4
##
Packit ef9df4
## OBJECT_ID
Packit ef9df4
##
Packit ef9df4
Packit ef9df4
my %OBJECT_ID = (
Packit ef9df4
  pack("C*", 0x06, 0x04, 0x2A, 0x03, 0x04, 0x05), "1.2.3.4.5",
Packit ef9df4
  pack("C*", 0x06, 0x03, 0x55, 0x83, 0x49),       "2.5.457",  
Packit ef9df4
  pack("C*", 0x06, 0x07, 0x00, 0x11, 0x86, 0x05, 0x01, 0x01, 0x01), "0.0.17.773.1.1.1",
Packit ef9df4
  pack("C*", 0x06, 0x04, 0x86, 0x8D, 0x6F, 0x63), "2.99999.99",
Packit ef9df4
);
Packit ef9df4
Packit ef9df4
Packit ef9df4
while(($result,$val) = each %OBJECT_ID) {
Packit ef9df4
  print "# OBJECT_ID $val\n";
Packit ef9df4
Packit ef9df4
  btest $test++, $asn->prepare('oid OBJECT IDENTIFIER') or warn $asn->error;
Packit ef9df4
  stest $test++, $result, $asn->encode(oid => $val) or warn $asn->error;
Packit ef9df4
  btest $test++, $ret = $asn->decode($result) or warn $asn->error;
Packit ef9df4
  stest $test++, $val, $ret->{'oid'};
Packit ef9df4
}
Packit ef9df4
Packit ef9df4
##
Packit ef9df4
## ENUM
Packit ef9df4
##
Packit ef9df4
Packit ef9df4
my %ENUM = (
Packit ef9df4
  pack("C*", 0x0A, 0x01, 0x00),             0,	     
Packit ef9df4
  pack("C*", 0x0A, 0x01, 0x9D),            -99,	     
Packit ef9df4
  pack("C*", 0x0A, 0x03, 0x64, 0x4D, 0x90), 6573456,
Packit ef9df4
);
Packit ef9df4
Packit ef9df4
while(($result,$val) = each %ENUM) {
Packit ef9df4
  print "# ENUM $val\n";
Packit ef9df4
Packit ef9df4
  btest $test++, $asn->prepare('enum ENUMERATED') or warn $asn->error;
Packit ef9df4
  stest $test++, $result, $asn->encode(enum => $val) or warn $asn->error;
Packit ef9df4
  btest $test++, $ret = $asn->decode($result) or warn $asn->error;
Packit ef9df4
  ntest $test++, $val, $ret->{'enum'};
Packit ef9df4
}
Packit ef9df4
Packit ef9df4
##
Packit ef9df4
## BIT STRING
Packit ef9df4
##
Packit ef9df4
Packit ef9df4
my %BSTR = (
Packit ef9df4
  pack("C*", 0x03, 0x02, 0x07, 0x00),
Packit ef9df4
    [pack("B*",'0'), 1, pack("B*",'0')],
Packit ef9df4
Packit ef9df4
  pack("C*", 0x03, 0x02, 0x00, 0x33),
Packit ef9df4
    pack("B*",'00110011'),
Packit ef9df4
Packit ef9df4
  pack("C*", 0x03, 0x04, 0x03, 0x6E, 0x5D, 0xC0),
Packit ef9df4
    [pack("B*",'011011100101110111'), 21, pack("B*",'011011100101110111')],
Packit ef9df4
Packit ef9df4
  pack("C*", 0x03, 0x02, 0x01, 0x6E),
Packit ef9df4
    [pack("B*",'011011111101110111'), 7, pack("B*", '01101110')]
Packit ef9df4
);
Packit ef9df4
Packit ef9df4
while(($result,$val) = each %BSTR) {
Packit ef9df4
    print "# BIT STRING ", unpack("B*", ref($val) ? $val->[0] : $val),
Packit ef9df4
	" ",(ref($val) ? $val->[1] : $val),"\n";
Packit ef9df4
Packit ef9df4
  btest $test++, $asn->prepare('bit BIT STRING') or warn $asn->error;
Packit ef9df4
  stest $test++, $result, $asn->encode( bit => $val) or warn $asn->error;
Packit ef9df4
  btest $test++, $ret = $asn->decode($result) or warn $asn->error;
Packit ef9df4
  stest $test++, (ref($val) ? $val->[2] : $val), $ret->{'bit'}[0];
Packit ef9df4
  ntest $test++, (ref($val) ? $val->[1] : 8*length$val), $ret->{'bit'}[1];
Packit ef9df4
Packit ef9df4
}
Packit ef9df4
Packit ef9df4
##
Packit ef9df4
## REAL
Packit ef9df4
##
Packit ef9df4
Packit ef9df4
use POSIX qw(HUGE_VAL);
Packit ef9df4
Packit ef9df4
my %REAL = (
Packit ef9df4
  pack("C*", 0x09, 0x00),  0,
Packit ef9df4
  pack("C*", 0x09, 0x03, 0x80, 0xf9, 0xc0),  1.5,
Packit ef9df4
  pack("C*", 0x09, 0x03, 0xc0, 0xfb, 0xb0), -5.5,
Packit ef9df4
  pack("C*", 0x09, 0x01, 0x40),		      HUGE_VAL(),
Packit ef9df4
  pack("C*", 0x09, 0x01, 0x41),		    - HUGE_VAL(),
Packit ef9df4
);
Packit ef9df4
Packit ef9df4
while(($result,$val) = each %REAL) {
Packit ef9df4
  print "# REAL $val\n";
Packit ef9df4
  btest $test++, $asn->prepare('real REAL') or warn $asn->error;
Packit ef9df4
  stest $test++, $result, $asn->encode( real => $val) or warn $asn->error;
Packit ef9df4
  btest $test++, $ret = $asn->decode($result) or warn $asn->error;
Packit ef9df4
  ntest $test++, $val, $ret->{'real'};
Packit ef9df4
}
Packit ef9df4
Packit ef9df4
##
Packit ef9df4
## RELATIVE-OID
Packit ef9df4
##
Packit ef9df4
Packit ef9df4
my %ROID = (
Packit ef9df4
  pack("C*", 0x0D, 0x05, 0x01, 0x02, 0x03, 0x04, 0x05), "1.2.3.4.5",
Packit ef9df4
  pack("C*", 0x0D, 0x04, 0x02, 0x05, 0x83, 0x49),       "2.5.457",  
Packit ef9df4
  pack("C*", 0x0D, 0x08, 0x00,  0x00, 0x11, 0x86, 0x05, 0x01, 0x01, 0x01), "0.0.17.773.1.1.1",
Packit ef9df4
);
Packit ef9df4
Packit ef9df4
Packit ef9df4
while(($result,$val) = each %ROID) {
Packit ef9df4
  print "# RELATIVE-OID $val\n";
Packit ef9df4
Packit ef9df4
  btest $test++, $asn->prepare('roid RELATIVE-OID') or warn $asn->error;
Packit ef9df4
  stest $test++, $result, $asn->encode(roid => $val) or warn $asn->error;
Packit ef9df4
  btest $test++, $ret = $asn->decode($result) or warn $asn->error;
Packit ef9df4
  stest $test++, $val, $ret->{'roid'};
Packit ef9df4
}
Packit ef9df4
Packit ef9df4
Packit ef9df4
##
Packit ef9df4
## BCDString
Packit ef9df4
##
Packit ef9df4
Packit ef9df4
my %BCD = (
Packit ef9df4
  pack("C*", 0x04, 0x09, 0x12, 0x34, 0x56, 0x78, 0x91, 0x23, 0x45, 0x67, 0x89), "123456789123456789",
Packit ef9df4
  pack("C*", 0x04, 0x04, 0x12, 0x34, 0x56, 0x78), 12345678,
Packit ef9df4
  pack("C*", 0x04, 0x02, 0x56, 0x4f),             564,
Packit ef9df4
  pack("C*", 0x04, 0x00),             "",
Packit ef9df4
  pack("C*", 0x04, 0x00),             -1,
Packit ef9df4
  pack("C*", 0x04, 0x01, 0x0f),             0,
Packit ef9df4
  pack("C*", 0x04, 0x01, 0x2f),             2.2,
Packit ef9df4
);
Packit ef9df4
Packit ef9df4
Packit ef9df4
while(($result,$val) = each %BCD) {
Packit ef9df4
  print "# BCDString $val\n";
Packit ef9df4
Packit ef9df4
  btest $test++, $asn->prepare('bcd BCDString') or warn $asn->error;
Packit ef9df4
  stest $test++, $result, $asn->encode(bcd => $val) or warn $asn->error;
Packit ef9df4
  btest $test++, $ret = $asn->decode($result) or warn $asn->error;
Packit ef9df4
  $val =~ s/\D.*//;
Packit ef9df4
  stest $test++, $val, $ret->{'bcd'};
Packit ef9df4
}
Packit ef9df4