ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Convert-BER-XS/t/02_simple.t
Revision: 1.10
Committed: Sun Apr 21 10:40:30 2019 UTC (5 years, 1 month ago) by root
Content type: application/x-troff
Branch: MAIN
Changes since 1.9: +1 -1 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 BEGIN { $| = 1; print "1..378\n"; }
2
3 use common::sense;
4 use Convert::BER::XS ':all';
5
6 our $test;
7 sub ok($;$) {
8 print $_[0] ? "" : "not ", "ok ", ++$test, " # $_[1]\n";
9 }
10
11 sub fail {
12 my ($hex, $match) = @_;
13
14 y/ //d for $hex;
15
16 ok (!eval { ber_decode pack "H*", $hex; 1 }, "# fail $hex");
17 $@ =~ s/ at .*//s;
18 ok ($@ =~ $match, "# $@ =~ $match");
19 }
20
21 sub roundtrip {
22 my ($hex, $is, $hex2) = @_;
23
24 $hex2 ||= $hex;
25
26 y/ //d for $hex, $hex2;
27
28 fail "$hex,", "trailing garbage";
29
30 my $bin = pack "H*", $hex;
31 my $bin2 = pack "H*", $hex2;
32
33 my ($dec0, $len) = ber_decode_prefix $bin . chr rand 256;
34
35 ok ($len == length $bin, "prefix length $len");
36
37 my $dec = ber_decode $bin;
38 ok (&ber_is ($dec, @$is), "decode $hex => @$dec");
39
40 my $enc = ber_encode $dec;
41 ok ($enc eq $bin2, "encode $hex2 == " . unpack "H*", $enc);
42
43 ok (($enc eq ber_encode $dec0), "identical recode");
44 }
45
46 # extended tags
47 roundtrip "1f020105", [ASN_UNIVERSAL, ASN_INTEGER, 0, 5], "020105";
48
49 # padding
50 roundtrip "020100", [ASN_UNIVERSAL, ASN_INTEGER, 0, 0];
51 roundtrip "0201ff", [ASN_UNIVERSAL, ASN_INTEGER, 0, -1];
52 fail "0202ffff", "X.690 8.3.2";
53 fail "02020001", "X.690 8.3.2";
54 fail "0208ffffffffffffffff", "X.690 8.3.2";
55
56 # types
57 roundtrip "020105", [ASN_UNIVERSAL, ASN_INTEGER, 0, 5];
58 roundtrip "0201ff", [ASN_UNIVERSAL, ASN_INTEGER, 0, -1];
59 roundtrip "020200ff", [ASN_UNIVERSAL, ASN_INTEGER, 0, 255];
60 roundtrip "020500ffffffff", [ASN_UNIVERSAL, ASN_INTEGER, 0, 4294967295];
61 roundtrip "020488776655", [ASN_UNIVERSAL, ASN_INTEGER, 0, -2005440939];
62 roundtrip "02050088776655", [ASN_UNIVERSAL, ASN_INTEGER, 0, 2289526357];
63
64 # 64 bit tests, clunky
65 if (8 == length pack "j", 0) {
66 roundtrip "0208feffffffffffffff", [ASN_UNIVERSAL, ASN_INTEGER, 0, -72057594037927937];
67 roundtrip "020900ffffffffffffffff", [ASN_UNIVERSAL, ASN_INTEGER, 0, 18446744073709551615];
68 roundtrip "02087fffffffffffffff", [ASN_UNIVERSAL, ASN_INTEGER, 0, 9223372036854775807];
69 roundtrip "0209008fffffffffffffff", [ASN_UNIVERSAL, ASN_INTEGER, 0, 10376293541461622783];
70 } else {
71 ok (1) for 1 .. 2 * 3;
72 }
73
74 roundtrip "010100", [ASN_UNIVERSAL, ASN_BOOLEAN, 0, 0];
75 roundtrip "010101", [ASN_UNIVERSAL, ASN_BOOLEAN, 0, 1], "0101ff";
76 roundtrip "010180", [ASN_UNIVERSAL, ASN_BOOLEAN, 0, 1], "0101ff";
77 roundtrip "0101ff", [ASN_UNIVERSAL, ASN_BOOLEAN, 0, 1], "0101ff";
78 fail "0100" , "BER_TYPE_BOOLEAN value with invalid length";
79 fail "01020000", "BER_TYPE_BOOLEAN value with invalid length";
80
81 roundtrip "0303353637", [ASN_UNIVERSAL, ASN_BIT_STRING, 0, "567"];
82 roundtrip "0403353637", [ASN_UNIVERSAL, ASN_OCTET_STRING, 0, "567"];
83 roundtrip "0402a0ff", [ASN_UNIVERSAL, ASN_OCTET_STRING, 0, "\xa0\xff"];
84 roundtrip "0400", [ASN_UNIVERSAL, ASN_OCTET_STRING, 0, ""];
85 fail "040201", "unexpected end of message buffer";
86 roundtrip "0500", [ASN_UNIVERSAL, ASN_NULL, 0];
87 roundtrip "0500", [ASN_UNIVERSAL, ASN_NULL, 0];
88 fail "050101", "BER_TYPE_NULL value with non-zero length";
89
90 roundtrip "06053305818219", [ASN_UNIVERSAL, ASN_OBJECT_IDENTIFIER, 0, "1.11.5.16665"];
91 fail "06053305818299", "unexpected end of message buffer";
92 roundtrip "0d053305818219", [ASN_UNIVERSAL, ASN_RELATIVE_OID, 0, "51.5.16665"];
93 fail "0600", "BER_TYPE_OID length";
94 roundtrip "0603818055", [ASN_UNIVERSAL, ASN_OID, 0, "2.16389"];
95 fail "06028001", "illegal BER padding";
96 # first component
97 roundtrip "06022777", [ASN_UNIVERSAL, ASN_OID, 0, "0.39.119"];
98 roundtrip "06022877", [ASN_UNIVERSAL, ASN_OID, 0, "1.0.119"];
99 roundtrip "06024f77", [ASN_UNIVERSAL, ASN_OID, 0, "1.39.119"];
100 roundtrip "06025077", [ASN_UNIVERSAL, ASN_OID, 0, "2.0.119"];
101 roundtrip "06027777", [ASN_UNIVERSAL, ASN_OID, 0, "2.39.119"];
102 roundtrip "06027877", [ASN_UNIVERSAL, ASN_OID, 0, "2.40.119"];
103 roundtrip "0603817877", [ASN_UNIVERSAL, ASN_OID, 0, "2.168.119"];
104 roundtrip "06028837", [ASN_UNIVERSAL, ASN_OID, 0, "2.999"];
105
106 roundtrip "0703353739", [ASN_UNIVERSAL, ASN_OBJECT_DESCRIPTOR, 0, "579"];
107 roundtrip "0a0177", [ASN_UNIVERSAL, ASN_ENUMERATED, 0, 0x77];
108 roundtrip "2b00", [ASN_UNIVERSAL, ASN_EMBEDDED_PDV, 1];
109 roundtrip "0c04c2a0c3bf", [ASN_UNIVERSAL, ASN_UTF8_STRING, 0, "\xa0\xff"];
110 roundtrip "3000", [ASN_UNIVERSAL, ASN_SEQUENCE, 1];
111 roundtrip "3100", [ASN_UNIVERSAL, ASN_SET, 1];
112 roundtrip "1603393334", [ASN_UNIVERSAL, ASN_ASCII_STRING, 0, "934"];
113
114 roundtrip "1c0400000031", [ASN_UNIVERSAL, ASN_UNIVERSAL_STRING, 0, "1"];
115 roundtrip "1c0411223344", [ASN_UNIVERSAL, ASN_UNIVERSAL_STRING, 0, chr 0x11223344];
116 fail "1c0111", "BER_TYPE_UCS has an invalid number of octets";
117 fail "1c021122", "BER_TYPE_UCS has an invalid number of octets";
118 fail "1c03112234", "BER_TYPE_UCS has an invalid number of octets";
119
120 roundtrip "1e0400310037", [ASN_UNIVERSAL, ASN_BMP_STRING, 0, "17"];
121 roundtrip "1e0411223344", [ASN_UNIVERSAL, ASN_BMP_STRING, 0, "\x{1122}\x{3344}"];
122 fail "1e0111", "BER_TYPE_UCS has an invalid number of octets";
123 fail "1e03112234", "BER_TYPE_UCS has an invalid number of octets";
124
125 for my $type (
126 ASN_NUMERIC_STRING, ASN_PRINTABLE_STRING, ASN_TELETEX_STRING, ASN_T61_STRING, ASN_VIDEOTEX_STRING,
127 ASN_IA5_STRING, ASN_UTC_TIME, ASN_GENERALIZED_TIME, ASN_GRAPHIC_STRING, ASN_VISIBLE_STRING,
128 ASN_ISO646_STRING, ASN_GENERAL_STRING, ASN_CHARACTER_STRING
129 ) {
130 roundtrip +(unpack "H*", pack "C C/a", $type, "234"), [ASN_UNIVERSAL, $type, 0, "234"];
131 }
132
133
134