1*e0c4386eSCy Schubert /*
2*e0c4386eSCy Schubert * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
3*e0c4386eSCy Schubert *
4*e0c4386eSCy Schubert * Licensed under the Apache License 2.0 (the "License"). You may not use
5*e0c4386eSCy Schubert * this file except in compliance with the License. You can obtain a copy
6*e0c4386eSCy Schubert * in the file LICENSE in the source distribution or at
7*e0c4386eSCy Schubert * https://www.openssl.org/source/license.html
8*e0c4386eSCy Schubert */
9*e0c4386eSCy Schubert
10*e0c4386eSCy Schubert #include "internal/packet.h"
11*e0c4386eSCy Schubert #include "testutil.h"
12*e0c4386eSCy Schubert
13*e0c4386eSCy Schubert #define BUF_LEN 255
14*e0c4386eSCy Schubert
15*e0c4386eSCy Schubert static unsigned char smbuf[BUF_LEN + 1];
16*e0c4386eSCy Schubert
test_PACKET_remaining(void)17*e0c4386eSCy Schubert static int test_PACKET_remaining(void)
18*e0c4386eSCy Schubert {
19*e0c4386eSCy Schubert PACKET pkt;
20*e0c4386eSCy Schubert
21*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
22*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN)
23*e0c4386eSCy Schubert || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 1))
24*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&pkt), 1)
25*e0c4386eSCy Schubert || !TEST_true(PACKET_forward(&pkt, 1))
26*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&pkt), 0))
27*e0c4386eSCy Schubert return 0;
28*e0c4386eSCy Schubert
29*e0c4386eSCy Schubert return 1;
30*e0c4386eSCy Schubert }
31*e0c4386eSCy Schubert
test_PACKET_end(void)32*e0c4386eSCy Schubert static int test_PACKET_end(void)
33*e0c4386eSCy Schubert {
34*e0c4386eSCy Schubert PACKET pkt;
35*e0c4386eSCy Schubert
36*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
37*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN)
38*e0c4386eSCy Schubert || !TEST_ptr_eq(PACKET_end(&pkt), smbuf + BUF_LEN)
39*e0c4386eSCy Schubert || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 1))
40*e0c4386eSCy Schubert || !TEST_ptr_eq(PACKET_end(&pkt), smbuf + BUF_LEN)
41*e0c4386eSCy Schubert || !TEST_true(PACKET_forward(&pkt, 1))
42*e0c4386eSCy Schubert || !TEST_ptr_eq(PACKET_end(&pkt), smbuf + BUF_LEN))
43*e0c4386eSCy Schubert return 0;
44*e0c4386eSCy Schubert
45*e0c4386eSCy Schubert return 1;
46*e0c4386eSCy Schubert }
47*e0c4386eSCy Schubert
test_PACKET_get_1(void)48*e0c4386eSCy Schubert static int test_PACKET_get_1(void)
49*e0c4386eSCy Schubert {
50*e0c4386eSCy Schubert unsigned int i = 0;
51*e0c4386eSCy Schubert PACKET pkt;
52*e0c4386eSCy Schubert
53*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
54*e0c4386eSCy Schubert || !TEST_true(PACKET_get_1(&pkt, &i))
55*e0c4386eSCy Schubert || !TEST_uint_eq(i, 0x02)
56*e0c4386eSCy Schubert || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 2))
57*e0c4386eSCy Schubert || !TEST_true(PACKET_get_1(&pkt, &i))
58*e0c4386eSCy Schubert || !TEST_uint_eq(i, 0xfe)
59*e0c4386eSCy Schubert || !TEST_false(PACKET_get_1(&pkt, &i)))
60*e0c4386eSCy Schubert return 0;
61*e0c4386eSCy Schubert
62*e0c4386eSCy Schubert return 1;
63*e0c4386eSCy Schubert }
64*e0c4386eSCy Schubert
test_PACKET_get_4(void)65*e0c4386eSCy Schubert static int test_PACKET_get_4(void)
66*e0c4386eSCy Schubert {
67*e0c4386eSCy Schubert unsigned long i = 0;
68*e0c4386eSCy Schubert PACKET pkt;
69*e0c4386eSCy Schubert
70*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
71*e0c4386eSCy Schubert || !TEST_true(PACKET_get_4(&pkt, &i))
72*e0c4386eSCy Schubert || !TEST_ulong_eq(i, 0x08060402UL)
73*e0c4386eSCy Schubert || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 8))
74*e0c4386eSCy Schubert || !TEST_true(PACKET_get_4(&pkt, &i))
75*e0c4386eSCy Schubert || !TEST_ulong_eq(i, 0xfefcfaf8UL)
76*e0c4386eSCy Schubert || !TEST_false(PACKET_get_4(&pkt, &i)))
77*e0c4386eSCy Schubert return 0;
78*e0c4386eSCy Schubert
79*e0c4386eSCy Schubert return 1;
80*e0c4386eSCy Schubert }
81*e0c4386eSCy Schubert
test_PACKET_get_net_2(void)82*e0c4386eSCy Schubert static int test_PACKET_get_net_2(void)
83*e0c4386eSCy Schubert {
84*e0c4386eSCy Schubert unsigned int i = 0;
85*e0c4386eSCy Schubert PACKET pkt;
86*e0c4386eSCy Schubert
87*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
88*e0c4386eSCy Schubert || !TEST_true(PACKET_get_net_2(&pkt, &i))
89*e0c4386eSCy Schubert || !TEST_uint_eq(i, 0x0204)
90*e0c4386eSCy Schubert || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 4))
91*e0c4386eSCy Schubert || !TEST_true(PACKET_get_net_2(&pkt, &i))
92*e0c4386eSCy Schubert || !TEST_uint_eq(i, 0xfcfe)
93*e0c4386eSCy Schubert || !TEST_false(PACKET_get_net_2(&pkt, &i)))
94*e0c4386eSCy Schubert return 0;
95*e0c4386eSCy Schubert
96*e0c4386eSCy Schubert return 1;
97*e0c4386eSCy Schubert }
98*e0c4386eSCy Schubert
test_PACKET_get_net_3(void)99*e0c4386eSCy Schubert static int test_PACKET_get_net_3(void)
100*e0c4386eSCy Schubert {
101*e0c4386eSCy Schubert unsigned long i = 0;
102*e0c4386eSCy Schubert PACKET pkt;
103*e0c4386eSCy Schubert
104*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
105*e0c4386eSCy Schubert || !TEST_true(PACKET_get_net_3(&pkt, &i))
106*e0c4386eSCy Schubert || !TEST_ulong_eq(i, 0x020406UL)
107*e0c4386eSCy Schubert || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 6))
108*e0c4386eSCy Schubert || !TEST_true(PACKET_get_net_3(&pkt, &i))
109*e0c4386eSCy Schubert || !TEST_ulong_eq(i, 0xfafcfeUL)
110*e0c4386eSCy Schubert || !TEST_false(PACKET_get_net_3(&pkt, &i)))
111*e0c4386eSCy Schubert return 0;
112*e0c4386eSCy Schubert
113*e0c4386eSCy Schubert return 1;
114*e0c4386eSCy Schubert }
115*e0c4386eSCy Schubert
test_PACKET_get_net_4(void)116*e0c4386eSCy Schubert static int test_PACKET_get_net_4(void)
117*e0c4386eSCy Schubert {
118*e0c4386eSCy Schubert unsigned long i = 0;
119*e0c4386eSCy Schubert PACKET pkt;
120*e0c4386eSCy Schubert
121*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
122*e0c4386eSCy Schubert || !TEST_true(PACKET_get_net_4(&pkt, &i))
123*e0c4386eSCy Schubert || !TEST_ulong_eq(i, 0x02040608UL)
124*e0c4386eSCy Schubert || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 8))
125*e0c4386eSCy Schubert || !TEST_true(PACKET_get_net_4(&pkt, &i))
126*e0c4386eSCy Schubert || !TEST_ulong_eq(i, 0xf8fafcfeUL)
127*e0c4386eSCy Schubert || !TEST_false(PACKET_get_net_4(&pkt, &i)))
128*e0c4386eSCy Schubert return 0;
129*e0c4386eSCy Schubert
130*e0c4386eSCy Schubert return 1;
131*e0c4386eSCy Schubert }
132*e0c4386eSCy Schubert
test_PACKET_get_sub_packet(void)133*e0c4386eSCy Schubert static int test_PACKET_get_sub_packet(void)
134*e0c4386eSCy Schubert {
135*e0c4386eSCy Schubert PACKET pkt, subpkt;
136*e0c4386eSCy Schubert unsigned long i = 0;
137*e0c4386eSCy Schubert
138*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
139*e0c4386eSCy Schubert || !TEST_true(PACKET_get_sub_packet(&pkt, &subpkt, 4))
140*e0c4386eSCy Schubert || !TEST_true(PACKET_get_net_4(&subpkt, &i))
141*e0c4386eSCy Schubert || !TEST_ulong_eq(i, 0x02040608UL)
142*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&subpkt), 0)
143*e0c4386eSCy Schubert || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 8))
144*e0c4386eSCy Schubert || !TEST_true(PACKET_get_sub_packet(&pkt, &subpkt, 4))
145*e0c4386eSCy Schubert || !TEST_true(PACKET_get_net_4(&subpkt, &i))
146*e0c4386eSCy Schubert || !TEST_ulong_eq(i, 0xf8fafcfeUL)
147*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&subpkt), 0)
148*e0c4386eSCy Schubert || !TEST_false(PACKET_get_sub_packet(&pkt, &subpkt, 4)))
149*e0c4386eSCy Schubert return 0;
150*e0c4386eSCy Schubert
151*e0c4386eSCy Schubert return 1;
152*e0c4386eSCy Schubert }
153*e0c4386eSCy Schubert
test_PACKET_get_bytes(void)154*e0c4386eSCy Schubert static int test_PACKET_get_bytes(void)
155*e0c4386eSCy Schubert {
156*e0c4386eSCy Schubert const unsigned char *bytes = NULL;
157*e0c4386eSCy Schubert PACKET pkt;
158*e0c4386eSCy Schubert
159*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
160*e0c4386eSCy Schubert || !TEST_true(PACKET_get_bytes(&pkt, &bytes, 4))
161*e0c4386eSCy Schubert || !TEST_uchar_eq(bytes[0], 2)
162*e0c4386eSCy Schubert || !TEST_uchar_eq(bytes[1], 4)
163*e0c4386eSCy Schubert || !TEST_uchar_eq(bytes[2], 6)
164*e0c4386eSCy Schubert || !TEST_uchar_eq(bytes[3], 8)
165*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN -4)
166*e0c4386eSCy Schubert || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 8))
167*e0c4386eSCy Schubert || !TEST_true(PACKET_get_bytes(&pkt, &bytes, 4))
168*e0c4386eSCy Schubert || !TEST_uchar_eq(bytes[0], 0xf8)
169*e0c4386eSCy Schubert || !TEST_uchar_eq(bytes[1], 0xfa)
170*e0c4386eSCy Schubert || !TEST_uchar_eq(bytes[2], 0xfc)
171*e0c4386eSCy Schubert || !TEST_uchar_eq(bytes[3], 0xfe)
172*e0c4386eSCy Schubert || !TEST_false(PACKET_remaining(&pkt)))
173*e0c4386eSCy Schubert return 0;
174*e0c4386eSCy Schubert
175*e0c4386eSCy Schubert return 1;
176*e0c4386eSCy Schubert }
177*e0c4386eSCy Schubert
test_PACKET_copy_bytes(void)178*e0c4386eSCy Schubert static int test_PACKET_copy_bytes(void)
179*e0c4386eSCy Schubert {
180*e0c4386eSCy Schubert unsigned char bytes[4];
181*e0c4386eSCy Schubert PACKET pkt;
182*e0c4386eSCy Schubert
183*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
184*e0c4386eSCy Schubert || !TEST_true(PACKET_copy_bytes(&pkt, bytes, 4))
185*e0c4386eSCy Schubert || !TEST_char_eq(bytes[0], 2)
186*e0c4386eSCy Schubert || !TEST_char_eq(bytes[1], 4)
187*e0c4386eSCy Schubert || !TEST_char_eq(bytes[2], 6)
188*e0c4386eSCy Schubert || !TEST_char_eq(bytes[3], 8)
189*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN - 4)
190*e0c4386eSCy Schubert || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 8))
191*e0c4386eSCy Schubert || !TEST_true(PACKET_copy_bytes(&pkt, bytes, 4))
192*e0c4386eSCy Schubert || !TEST_uchar_eq(bytes[0], 0xf8)
193*e0c4386eSCy Schubert || !TEST_uchar_eq(bytes[1], 0xfa)
194*e0c4386eSCy Schubert || !TEST_uchar_eq(bytes[2], 0xfc)
195*e0c4386eSCy Schubert || !TEST_uchar_eq(bytes[3], 0xfe)
196*e0c4386eSCy Schubert || !TEST_false(PACKET_remaining(&pkt)))
197*e0c4386eSCy Schubert return 0;
198*e0c4386eSCy Schubert
199*e0c4386eSCy Schubert return 1;
200*e0c4386eSCy Schubert }
201*e0c4386eSCy Schubert
test_PACKET_copy_all(void)202*e0c4386eSCy Schubert static int test_PACKET_copy_all(void)
203*e0c4386eSCy Schubert {
204*e0c4386eSCy Schubert unsigned char tmp[BUF_LEN];
205*e0c4386eSCy Schubert PACKET pkt;
206*e0c4386eSCy Schubert size_t len;
207*e0c4386eSCy Schubert
208*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
209*e0c4386eSCy Schubert || !TEST_true(PACKET_copy_all(&pkt, tmp, BUF_LEN, &len))
210*e0c4386eSCy Schubert || !TEST_size_t_eq(len, BUF_LEN)
211*e0c4386eSCy Schubert || !TEST_mem_eq(smbuf, BUF_LEN, tmp, BUF_LEN)
212*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN)
213*e0c4386eSCy Schubert || !TEST_false(PACKET_copy_all(&pkt, tmp, BUF_LEN - 1, &len)))
214*e0c4386eSCy Schubert return 0;
215*e0c4386eSCy Schubert
216*e0c4386eSCy Schubert return 1;
217*e0c4386eSCy Schubert }
218*e0c4386eSCy Schubert
test_PACKET_memdup(void)219*e0c4386eSCy Schubert static int test_PACKET_memdup(void)
220*e0c4386eSCy Schubert {
221*e0c4386eSCy Schubert unsigned char *data = NULL;
222*e0c4386eSCy Schubert size_t len;
223*e0c4386eSCy Schubert PACKET pkt;
224*e0c4386eSCy Schubert int result = 0;
225*e0c4386eSCy Schubert
226*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
227*e0c4386eSCy Schubert || !TEST_true(PACKET_memdup(&pkt, &data, &len))
228*e0c4386eSCy Schubert || !TEST_size_t_eq(len, BUF_LEN)
229*e0c4386eSCy Schubert || !TEST_mem_eq(data, len, PACKET_data(&pkt), len)
230*e0c4386eSCy Schubert || !TEST_true(PACKET_forward(&pkt, 10))
231*e0c4386eSCy Schubert || !TEST_true(PACKET_memdup(&pkt, &data, &len))
232*e0c4386eSCy Schubert || !TEST_size_t_eq(len, BUF_LEN - 10)
233*e0c4386eSCy Schubert || !TEST_mem_eq(data, len, PACKET_data(&pkt), len))
234*e0c4386eSCy Schubert goto end;
235*e0c4386eSCy Schubert result = 1;
236*e0c4386eSCy Schubert end:
237*e0c4386eSCy Schubert OPENSSL_free(data);
238*e0c4386eSCy Schubert return result;
239*e0c4386eSCy Schubert }
240*e0c4386eSCy Schubert
test_PACKET_strndup(void)241*e0c4386eSCy Schubert static int test_PACKET_strndup(void)
242*e0c4386eSCy Schubert {
243*e0c4386eSCy Schubert char buf1[10], buf2[10];
244*e0c4386eSCy Schubert char *data = NULL;
245*e0c4386eSCy Schubert PACKET pkt;
246*e0c4386eSCy Schubert int result = 0;
247*e0c4386eSCy Schubert
248*e0c4386eSCy Schubert memset(buf1, 'x', 10);
249*e0c4386eSCy Schubert memset(buf2, 'y', 10);
250*e0c4386eSCy Schubert buf2[5] = '\0';
251*e0c4386eSCy Schubert
252*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, (unsigned char*)buf1, 10))
253*e0c4386eSCy Schubert || !TEST_true(PACKET_strndup(&pkt, &data))
254*e0c4386eSCy Schubert || !TEST_size_t_eq(strlen(data), 10)
255*e0c4386eSCy Schubert || !TEST_strn_eq(data, buf1, 10)
256*e0c4386eSCy Schubert || !TEST_true(PACKET_buf_init(&pkt, (unsigned char*)buf2, 10))
257*e0c4386eSCy Schubert || !TEST_true(PACKET_strndup(&pkt, &data))
258*e0c4386eSCy Schubert || !TEST_size_t_eq(strlen(data), 5)
259*e0c4386eSCy Schubert || !TEST_str_eq(data, buf2))
260*e0c4386eSCy Schubert goto end;
261*e0c4386eSCy Schubert
262*e0c4386eSCy Schubert result = 1;
263*e0c4386eSCy Schubert end:
264*e0c4386eSCy Schubert OPENSSL_free(data);
265*e0c4386eSCy Schubert return result;
266*e0c4386eSCy Schubert }
267*e0c4386eSCy Schubert
test_PACKET_contains_zero_byte(void)268*e0c4386eSCy Schubert static int test_PACKET_contains_zero_byte(void)
269*e0c4386eSCy Schubert {
270*e0c4386eSCy Schubert char buf1[10], buf2[10];
271*e0c4386eSCy Schubert PACKET pkt;
272*e0c4386eSCy Schubert
273*e0c4386eSCy Schubert memset(buf1, 'x', 10);
274*e0c4386eSCy Schubert memset(buf2, 'y', 10);
275*e0c4386eSCy Schubert buf2[5] = '\0';
276*e0c4386eSCy Schubert
277*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, (unsigned char*)buf1, 10))
278*e0c4386eSCy Schubert || !TEST_false(PACKET_contains_zero_byte(&pkt))
279*e0c4386eSCy Schubert || !TEST_true(PACKET_buf_init(&pkt, (unsigned char*)buf2, 10))
280*e0c4386eSCy Schubert || !TEST_true(PACKET_contains_zero_byte(&pkt)))
281*e0c4386eSCy Schubert return 0;
282*e0c4386eSCy Schubert
283*e0c4386eSCy Schubert return 1;
284*e0c4386eSCy Schubert }
285*e0c4386eSCy Schubert
test_PACKET_forward(void)286*e0c4386eSCy Schubert static int test_PACKET_forward(void)
287*e0c4386eSCy Schubert {
288*e0c4386eSCy Schubert const unsigned char *byte = NULL;
289*e0c4386eSCy Schubert PACKET pkt;
290*e0c4386eSCy Schubert
291*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
292*e0c4386eSCy Schubert || !TEST_true(PACKET_forward(&pkt, 1))
293*e0c4386eSCy Schubert || !TEST_true(PACKET_get_bytes(&pkt, &byte, 1))
294*e0c4386eSCy Schubert || !TEST_uchar_eq(byte[0], 4)
295*e0c4386eSCy Schubert || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 3))
296*e0c4386eSCy Schubert || !TEST_true(PACKET_get_bytes(&pkt, &byte, 1))
297*e0c4386eSCy Schubert || !TEST_uchar_eq(byte[0], 0xfe))
298*e0c4386eSCy Schubert return 0;
299*e0c4386eSCy Schubert
300*e0c4386eSCy Schubert return 1;
301*e0c4386eSCy Schubert }
302*e0c4386eSCy Schubert
test_PACKET_buf_init(void)303*e0c4386eSCy Schubert static int test_PACKET_buf_init(void)
304*e0c4386eSCy Schubert {
305*e0c4386eSCy Schubert unsigned char buf1[BUF_LEN] = { 0 };
306*e0c4386eSCy Schubert PACKET pkt;
307*e0c4386eSCy Schubert
308*e0c4386eSCy Schubert /* Also tests PACKET_remaining() */
309*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, buf1, 4))
310*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&pkt), 4)
311*e0c4386eSCy Schubert || !TEST_true(PACKET_buf_init(&pkt, buf1, BUF_LEN))
312*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN)
313*e0c4386eSCy Schubert || !TEST_false(PACKET_buf_init(&pkt, buf1, -1)))
314*e0c4386eSCy Schubert return 0;
315*e0c4386eSCy Schubert
316*e0c4386eSCy Schubert return 1;
317*e0c4386eSCy Schubert }
318*e0c4386eSCy Schubert
test_PACKET_null_init(void)319*e0c4386eSCy Schubert static int test_PACKET_null_init(void)
320*e0c4386eSCy Schubert {
321*e0c4386eSCy Schubert PACKET pkt;
322*e0c4386eSCy Schubert
323*e0c4386eSCy Schubert PACKET_null_init(&pkt);
324*e0c4386eSCy Schubert if (!TEST_size_t_eq(PACKET_remaining(&pkt), 0)
325*e0c4386eSCy Schubert || !TEST_false(PACKET_forward(&pkt, 1)))
326*e0c4386eSCy Schubert return 0;
327*e0c4386eSCy Schubert
328*e0c4386eSCy Schubert return 1;
329*e0c4386eSCy Schubert }
330*e0c4386eSCy Schubert
test_PACKET_equal(void)331*e0c4386eSCy Schubert static int test_PACKET_equal(void)
332*e0c4386eSCy Schubert {
333*e0c4386eSCy Schubert PACKET pkt;
334*e0c4386eSCy Schubert
335*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, smbuf, 4))
336*e0c4386eSCy Schubert || !TEST_true(PACKET_equal(&pkt, smbuf, 4))
337*e0c4386eSCy Schubert || !TEST_false(PACKET_equal(&pkt, smbuf + 1, 4))
338*e0c4386eSCy Schubert || !TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
339*e0c4386eSCy Schubert || !TEST_true(PACKET_equal(&pkt, smbuf, BUF_LEN))
340*e0c4386eSCy Schubert || !TEST_false(PACKET_equal(&pkt, smbuf, BUF_LEN - 1))
341*e0c4386eSCy Schubert || !TEST_false(PACKET_equal(&pkt, smbuf, BUF_LEN + 1))
342*e0c4386eSCy Schubert || !TEST_false(PACKET_equal(&pkt, smbuf, 0)))
343*e0c4386eSCy Schubert return 0;
344*e0c4386eSCy Schubert
345*e0c4386eSCy Schubert return 1;
346*e0c4386eSCy Schubert }
347*e0c4386eSCy Schubert
test_PACKET_get_length_prefixed_1(void)348*e0c4386eSCy Schubert static int test_PACKET_get_length_prefixed_1(void)
349*e0c4386eSCy Schubert {
350*e0c4386eSCy Schubert unsigned char buf1[BUF_LEN];
351*e0c4386eSCy Schubert const size_t len = 16;
352*e0c4386eSCy Schubert unsigned int i;
353*e0c4386eSCy Schubert PACKET pkt, short_pkt, subpkt;
354*e0c4386eSCy Schubert
355*e0c4386eSCy Schubert memset(&subpkt, 0, sizeof(subpkt));
356*e0c4386eSCy Schubert buf1[0] = (unsigned char)len;
357*e0c4386eSCy Schubert for (i = 1; i < BUF_LEN; i++)
358*e0c4386eSCy Schubert buf1[i] = (i * 2) & 0xff;
359*e0c4386eSCy Schubert
360*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, buf1, BUF_LEN))
361*e0c4386eSCy Schubert || !TEST_true(PACKET_buf_init(&short_pkt, buf1, len))
362*e0c4386eSCy Schubert || !TEST_true(PACKET_get_length_prefixed_1(&pkt, &subpkt))
363*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&subpkt), len)
364*e0c4386eSCy Schubert || !TEST_true(PACKET_get_net_2(&subpkt, &i))
365*e0c4386eSCy Schubert || !TEST_uint_eq(i, 0x0204)
366*e0c4386eSCy Schubert || !TEST_false(PACKET_get_length_prefixed_1(&short_pkt, &subpkt))
367*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&short_pkt), len))
368*e0c4386eSCy Schubert return 0;
369*e0c4386eSCy Schubert
370*e0c4386eSCy Schubert return 1;
371*e0c4386eSCy Schubert }
372*e0c4386eSCy Schubert
test_PACKET_get_length_prefixed_2(void)373*e0c4386eSCy Schubert static int test_PACKET_get_length_prefixed_2(void)
374*e0c4386eSCy Schubert {
375*e0c4386eSCy Schubert unsigned char buf1[1024];
376*e0c4386eSCy Schubert const size_t len = 516; /* 0x0204 */
377*e0c4386eSCy Schubert unsigned int i;
378*e0c4386eSCy Schubert PACKET pkt, short_pkt, subpkt;
379*e0c4386eSCy Schubert
380*e0c4386eSCy Schubert memset(&subpkt, 0, sizeof(subpkt));
381*e0c4386eSCy Schubert for (i = 1; i <= 1024; i++)
382*e0c4386eSCy Schubert buf1[i - 1] = (i * 2) & 0xff;
383*e0c4386eSCy Schubert
384*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, buf1, 1024))
385*e0c4386eSCy Schubert || !TEST_true(PACKET_buf_init(&short_pkt, buf1, len))
386*e0c4386eSCy Schubert || !TEST_true(PACKET_get_length_prefixed_2(&pkt, &subpkt))
387*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&subpkt), len)
388*e0c4386eSCy Schubert || !TEST_true(PACKET_get_net_2(&subpkt, &i))
389*e0c4386eSCy Schubert || !TEST_uint_eq(i, 0x0608)
390*e0c4386eSCy Schubert || !TEST_false(PACKET_get_length_prefixed_2(&short_pkt, &subpkt))
391*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&short_pkt), len))
392*e0c4386eSCy Schubert return 0;
393*e0c4386eSCy Schubert
394*e0c4386eSCy Schubert return 1;
395*e0c4386eSCy Schubert }
396*e0c4386eSCy Schubert
test_PACKET_get_length_prefixed_3(void)397*e0c4386eSCy Schubert static int test_PACKET_get_length_prefixed_3(void)
398*e0c4386eSCy Schubert {
399*e0c4386eSCy Schubert unsigned char buf1[1024];
400*e0c4386eSCy Schubert const size_t len = 516; /* 0x000204 */
401*e0c4386eSCy Schubert unsigned int i;
402*e0c4386eSCy Schubert PACKET pkt, short_pkt, subpkt;
403*e0c4386eSCy Schubert
404*e0c4386eSCy Schubert memset(&subpkt, 0, sizeof(subpkt));
405*e0c4386eSCy Schubert for (i = 0; i < 1024; i++)
406*e0c4386eSCy Schubert buf1[i] = (i * 2) & 0xff;
407*e0c4386eSCy Schubert
408*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, buf1, 1024))
409*e0c4386eSCy Schubert || !TEST_true(PACKET_buf_init(&short_pkt, buf1, len))
410*e0c4386eSCy Schubert || !TEST_true(PACKET_get_length_prefixed_3(&pkt, &subpkt))
411*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&subpkt), len)
412*e0c4386eSCy Schubert || !TEST_true(PACKET_get_net_2(&subpkt, &i))
413*e0c4386eSCy Schubert || !TEST_uint_eq(i, 0x0608)
414*e0c4386eSCy Schubert || !TEST_false(PACKET_get_length_prefixed_3(&short_pkt, &subpkt))
415*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&short_pkt), len))
416*e0c4386eSCy Schubert return 0;
417*e0c4386eSCy Schubert
418*e0c4386eSCy Schubert return 1;
419*e0c4386eSCy Schubert }
420*e0c4386eSCy Schubert
test_PACKET_as_length_prefixed_1(void)421*e0c4386eSCy Schubert static int test_PACKET_as_length_prefixed_1(void)
422*e0c4386eSCy Schubert {
423*e0c4386eSCy Schubert unsigned char buf1[BUF_LEN];
424*e0c4386eSCy Schubert const size_t len = 16;
425*e0c4386eSCy Schubert unsigned int i;
426*e0c4386eSCy Schubert PACKET pkt, exact_pkt, subpkt;
427*e0c4386eSCy Schubert
428*e0c4386eSCy Schubert memset(&subpkt, 0, sizeof(subpkt));
429*e0c4386eSCy Schubert buf1[0] = (unsigned char)len;
430*e0c4386eSCy Schubert for (i = 1; i < BUF_LEN; i++)
431*e0c4386eSCy Schubert buf1[i] = (i * 2) & 0xff;
432*e0c4386eSCy Schubert
433*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, buf1, BUF_LEN))
434*e0c4386eSCy Schubert || !TEST_true(PACKET_buf_init(&exact_pkt, buf1, len + 1))
435*e0c4386eSCy Schubert || !TEST_false(PACKET_as_length_prefixed_1(&pkt, &subpkt))
436*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN)
437*e0c4386eSCy Schubert || !TEST_true(PACKET_as_length_prefixed_1(&exact_pkt, &subpkt))
438*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&exact_pkt), 0)
439*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&subpkt), len))
440*e0c4386eSCy Schubert return 0;
441*e0c4386eSCy Schubert
442*e0c4386eSCy Schubert return 1;
443*e0c4386eSCy Schubert }
444*e0c4386eSCy Schubert
test_PACKET_as_length_prefixed_2(void)445*e0c4386eSCy Schubert static int test_PACKET_as_length_prefixed_2(void)
446*e0c4386eSCy Schubert {
447*e0c4386eSCy Schubert unsigned char buf[1024];
448*e0c4386eSCy Schubert const size_t len = 516; /* 0x0204 */
449*e0c4386eSCy Schubert unsigned int i;
450*e0c4386eSCy Schubert PACKET pkt, exact_pkt, subpkt;
451*e0c4386eSCy Schubert
452*e0c4386eSCy Schubert memset(&subpkt, 0, sizeof(subpkt));
453*e0c4386eSCy Schubert for (i = 1; i <= 1024; i++)
454*e0c4386eSCy Schubert buf[i-1] = (i * 2) & 0xff;
455*e0c4386eSCy Schubert
456*e0c4386eSCy Schubert if (!TEST_true(PACKET_buf_init(&pkt, buf, 1024))
457*e0c4386eSCy Schubert || !TEST_true(PACKET_buf_init(&exact_pkt, buf, len + 2))
458*e0c4386eSCy Schubert || !TEST_false(PACKET_as_length_prefixed_2(&pkt, &subpkt))
459*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&pkt), 1024)
460*e0c4386eSCy Schubert || !TEST_true(PACKET_as_length_prefixed_2(&exact_pkt, &subpkt))
461*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&exact_pkt), 0)
462*e0c4386eSCy Schubert || !TEST_size_t_eq(PACKET_remaining(&subpkt), len))
463*e0c4386eSCy Schubert return 0;
464*e0c4386eSCy Schubert
465*e0c4386eSCy Schubert return 1;
466*e0c4386eSCy Schubert }
467*e0c4386eSCy Schubert
setup_tests(void)468*e0c4386eSCy Schubert int setup_tests(void)
469*e0c4386eSCy Schubert {
470*e0c4386eSCy Schubert unsigned int i;
471*e0c4386eSCy Schubert
472*e0c4386eSCy Schubert for (i = 1; i <= BUF_LEN; i++)
473*e0c4386eSCy Schubert smbuf[i - 1] = (i * 2) & 0xff;
474*e0c4386eSCy Schubert
475*e0c4386eSCy Schubert ADD_TEST(test_PACKET_buf_init);
476*e0c4386eSCy Schubert ADD_TEST(test_PACKET_null_init);
477*e0c4386eSCy Schubert ADD_TEST(test_PACKET_remaining);
478*e0c4386eSCy Schubert ADD_TEST(test_PACKET_end);
479*e0c4386eSCy Schubert ADD_TEST(test_PACKET_equal);
480*e0c4386eSCy Schubert ADD_TEST(test_PACKET_get_1);
481*e0c4386eSCy Schubert ADD_TEST(test_PACKET_get_4);
482*e0c4386eSCy Schubert ADD_TEST(test_PACKET_get_net_2);
483*e0c4386eSCy Schubert ADD_TEST(test_PACKET_get_net_3);
484*e0c4386eSCy Schubert ADD_TEST(test_PACKET_get_net_4);
485*e0c4386eSCy Schubert ADD_TEST(test_PACKET_get_sub_packet);
486*e0c4386eSCy Schubert ADD_TEST(test_PACKET_get_bytes);
487*e0c4386eSCy Schubert ADD_TEST(test_PACKET_copy_bytes);
488*e0c4386eSCy Schubert ADD_TEST(test_PACKET_copy_all);
489*e0c4386eSCy Schubert ADD_TEST(test_PACKET_memdup);
490*e0c4386eSCy Schubert ADD_TEST(test_PACKET_strndup);
491*e0c4386eSCy Schubert ADD_TEST(test_PACKET_contains_zero_byte);
492*e0c4386eSCy Schubert ADD_TEST(test_PACKET_forward);
493*e0c4386eSCy Schubert ADD_TEST(test_PACKET_get_length_prefixed_1);
494*e0c4386eSCy Schubert ADD_TEST(test_PACKET_get_length_prefixed_2);
495*e0c4386eSCy Schubert ADD_TEST(test_PACKET_get_length_prefixed_3);
496*e0c4386eSCy Schubert ADD_TEST(test_PACKET_as_length_prefixed_1);
497*e0c4386eSCy Schubert ADD_TEST(test_PACKET_as_length_prefixed_2);
498*e0c4386eSCy Schubert return 1;
499*e0c4386eSCy Schubert }
500