Home | History | Annotate | Line # | Download | only in test
      1 /*
      2  * Copyright 2015-2023 The OpenSSL Project Authors. All Rights Reserved.
      3  *
      4  * Licensed under the Apache License 2.0 (the "License").  You may not use
      5  * this file except in compliance with the License.  You can obtain a copy
      6  * in the file LICENSE in the source distribution or at
      7  * https://www.openssl.org/source/license.html
      8  */
      9 
     10 #include "internal/packet_quic.h"
     11 #include "testutil.h"
     12 
     13 #define BUF_LEN 255
     14 
     15 static unsigned char smbuf[BUF_LEN + 1];
     16 
     17 static int test_PACKET_remaining(void)
     18 {
     19     PACKET pkt;
     20 
     21     if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
     22         || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN)
     23         || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 1))
     24         || !TEST_size_t_eq(PACKET_remaining(&pkt), 1)
     25         || !TEST_true(PACKET_forward(&pkt, 1))
     26         || !TEST_size_t_eq(PACKET_remaining(&pkt), 0))
     27         return 0;
     28 
     29     return 1;
     30 }
     31 
     32 static int test_PACKET_end(void)
     33 {
     34     PACKET pkt;
     35 
     36     if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
     37         || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN)
     38         || !TEST_ptr_eq(PACKET_end(&pkt), smbuf + BUF_LEN)
     39         || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 1))
     40         || !TEST_ptr_eq(PACKET_end(&pkt), smbuf + BUF_LEN)
     41         || !TEST_true(PACKET_forward(&pkt, 1))
     42         || !TEST_ptr_eq(PACKET_end(&pkt), smbuf + BUF_LEN))
     43         return 0;
     44 
     45     return 1;
     46 }
     47 
     48 static int test_PACKET_get_1(void)
     49 {
     50     unsigned int i = 0;
     51     PACKET pkt;
     52 
     53     if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
     54         || !TEST_true(PACKET_get_1(&pkt, &i))
     55         || !TEST_uint_eq(i, 0x02)
     56         || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 2))
     57         || !TEST_true(PACKET_get_1(&pkt, &i))
     58         || !TEST_uint_eq(i, 0xfe)
     59         || !TEST_false(PACKET_get_1(&pkt, &i)))
     60         return 0;
     61 
     62     return 1;
     63 }
     64 
     65 static int test_PACKET_get_4(void)
     66 {
     67     unsigned long i = 0;
     68     PACKET pkt;
     69 
     70     if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
     71         || !TEST_true(PACKET_get_4(&pkt, &i))
     72         || !TEST_ulong_eq(i, 0x08060402UL)
     73         || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 8))
     74         || !TEST_true(PACKET_get_4(&pkt, &i))
     75         || !TEST_ulong_eq(i, 0xfefcfaf8UL)
     76         || !TEST_false(PACKET_get_4(&pkt, &i)))
     77         return 0;
     78 
     79     return 1;
     80 }
     81 
     82 static int test_PACKET_get_net_2(void)
     83 {
     84     unsigned int i = 0;
     85     PACKET pkt;
     86 
     87     if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
     88         || !TEST_true(PACKET_get_net_2(&pkt, &i))
     89         || !TEST_uint_eq(i, 0x0204)
     90         || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 4))
     91         || !TEST_true(PACKET_get_net_2(&pkt, &i))
     92         || !TEST_uint_eq(i, 0xfcfe)
     93         || !TEST_false(PACKET_get_net_2(&pkt, &i)))
     94         return 0;
     95 
     96     return 1;
     97 }
     98 
     99 static int test_PACKET_get_net_3(void)
    100 {
    101     unsigned long i = 0;
    102     PACKET pkt;
    103 
    104     if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
    105         || !TEST_true(PACKET_get_net_3(&pkt, &i))
    106         || !TEST_ulong_eq(i, 0x020406UL)
    107         || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 6))
    108         || !TEST_true(PACKET_get_net_3(&pkt, &i))
    109         || !TEST_ulong_eq(i, 0xfafcfeUL)
    110         || !TEST_false(PACKET_get_net_3(&pkt, &i)))
    111         return 0;
    112 
    113     return 1;
    114 }
    115 
    116 static int test_PACKET_get_net_4(void)
    117 {
    118     unsigned long i = 0;
    119     PACKET pkt;
    120 
    121     if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
    122         || !TEST_true(PACKET_get_net_4(&pkt, &i))
    123         || !TEST_ulong_eq(i, 0x02040608UL)
    124         || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 8))
    125         || !TEST_true(PACKET_get_net_4(&pkt, &i))
    126         || !TEST_ulong_eq(i, 0xf8fafcfeUL)
    127         || !TEST_false(PACKET_get_net_4(&pkt, &i)))
    128         return 0;
    129 
    130     return 1;
    131 }
    132 
    133 static int test_PACKET_get_sub_packet(void)
    134 {
    135     PACKET pkt, subpkt;
    136     unsigned long i = 0;
    137 
    138     if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
    139         || !TEST_true(PACKET_get_sub_packet(&pkt, &subpkt, 4))
    140         || !TEST_true(PACKET_get_net_4(&subpkt, &i))
    141         || !TEST_ulong_eq(i, 0x02040608UL)
    142         || !TEST_size_t_eq(PACKET_remaining(&subpkt), 0)
    143         || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 8))
    144         || !TEST_true(PACKET_get_sub_packet(&pkt, &subpkt, 4))
    145         || !TEST_true(PACKET_get_net_4(&subpkt, &i))
    146         || !TEST_ulong_eq(i, 0xf8fafcfeUL)
    147         || !TEST_size_t_eq(PACKET_remaining(&subpkt), 0)
    148         || !TEST_false(PACKET_get_sub_packet(&pkt, &subpkt, 4)))
    149         return 0;
    150 
    151     return 1;
    152 }
    153 
    154 static int test_PACKET_get_bytes(void)
    155 {
    156     const unsigned char *bytes = NULL;
    157     PACKET pkt;
    158 
    159     if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
    160         || !TEST_true(PACKET_get_bytes(&pkt, &bytes, 4))
    161         || !TEST_uchar_eq(bytes[0], 2)
    162         || !TEST_uchar_eq(bytes[1], 4)
    163         || !TEST_uchar_eq(bytes[2], 6)
    164         || !TEST_uchar_eq(bytes[3], 8)
    165         || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN - 4)
    166         || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 8))
    167         || !TEST_true(PACKET_get_bytes(&pkt, &bytes, 4))
    168         || !TEST_uchar_eq(bytes[0], 0xf8)
    169         || !TEST_uchar_eq(bytes[1], 0xfa)
    170         || !TEST_uchar_eq(bytes[2], 0xfc)
    171         || !TEST_uchar_eq(bytes[3], 0xfe)
    172         || !TEST_false(PACKET_remaining(&pkt)))
    173         return 0;
    174 
    175     return 1;
    176 }
    177 
    178 static int test_PACKET_copy_bytes(void)
    179 {
    180     unsigned char bytes[4];
    181     PACKET pkt;
    182 
    183     if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
    184         || !TEST_true(PACKET_copy_bytes(&pkt, bytes, 4))
    185         || !TEST_char_eq(bytes[0], 2)
    186         || !TEST_char_eq(bytes[1], 4)
    187         || !TEST_char_eq(bytes[2], 6)
    188         || !TEST_char_eq(bytes[3], 8)
    189         || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN - 4)
    190         || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 8))
    191         || !TEST_true(PACKET_copy_bytes(&pkt, bytes, 4))
    192         || !TEST_uchar_eq(bytes[0], 0xf8)
    193         || !TEST_uchar_eq(bytes[1], 0xfa)
    194         || !TEST_uchar_eq(bytes[2], 0xfc)
    195         || !TEST_uchar_eq(bytes[3], 0xfe)
    196         || !TEST_false(PACKET_remaining(&pkt)))
    197         return 0;
    198 
    199     return 1;
    200 }
    201 
    202 static int test_PACKET_copy_all(void)
    203 {
    204     unsigned char tmp[BUF_LEN];
    205     PACKET pkt;
    206     size_t len;
    207 
    208     if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
    209         || !TEST_true(PACKET_copy_all(&pkt, tmp, BUF_LEN, &len))
    210         || !TEST_size_t_eq(len, BUF_LEN)
    211         || !TEST_mem_eq(smbuf, BUF_LEN, tmp, BUF_LEN)
    212         || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN)
    213         || !TEST_false(PACKET_copy_all(&pkt, tmp, BUF_LEN - 1, &len)))
    214         return 0;
    215 
    216     return 1;
    217 }
    218 
    219 static int test_PACKET_memdup(void)
    220 {
    221     unsigned char *data = NULL;
    222     size_t len;
    223     PACKET pkt;
    224     int result = 0;
    225 
    226     if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
    227         || !TEST_true(PACKET_memdup(&pkt, &data, &len))
    228         || !TEST_size_t_eq(len, BUF_LEN)
    229         || !TEST_mem_eq(data, len, PACKET_data(&pkt), len)
    230         || !TEST_true(PACKET_forward(&pkt, 10))
    231         || !TEST_true(PACKET_memdup(&pkt, &data, &len))
    232         || !TEST_size_t_eq(len, BUF_LEN - 10)
    233         || !TEST_mem_eq(data, len, PACKET_data(&pkt), len))
    234         goto end;
    235     result = 1;
    236 end:
    237     OPENSSL_free(data);
    238     return result;
    239 }
    240 
    241 static int test_PACKET_strndup(void)
    242 {
    243     char buf1[10], buf2[10];
    244     char *data = NULL;
    245     PACKET pkt;
    246     int result = 0;
    247 
    248     memset(buf1, 'x', 10);
    249     memset(buf2, 'y', 10);
    250     buf2[5] = '\0';
    251 
    252     if (!TEST_true(PACKET_buf_init(&pkt, (unsigned char *)buf1, 10))
    253         || !TEST_true(PACKET_strndup(&pkt, &data))
    254         || !TEST_size_t_eq(strlen(data), 10)
    255         || !TEST_strn_eq(data, buf1, 10)
    256         || !TEST_true(PACKET_buf_init(&pkt, (unsigned char *)buf2, 10))
    257         || !TEST_true(PACKET_strndup(&pkt, &data))
    258         || !TEST_size_t_eq(strlen(data), 5)
    259         || !TEST_str_eq(data, buf2))
    260         goto end;
    261 
    262     result = 1;
    263 end:
    264     OPENSSL_free(data);
    265     return result;
    266 }
    267 
    268 static int test_PACKET_contains_zero_byte(void)
    269 {
    270     char buf1[10], buf2[10];
    271     PACKET pkt;
    272 
    273     memset(buf1, 'x', 10);
    274     memset(buf2, 'y', 10);
    275     buf2[5] = '\0';
    276 
    277     if (!TEST_true(PACKET_buf_init(&pkt, (unsigned char *)buf1, 10))
    278         || !TEST_false(PACKET_contains_zero_byte(&pkt))
    279         || !TEST_true(PACKET_buf_init(&pkt, (unsigned char *)buf2, 10))
    280         || !TEST_true(PACKET_contains_zero_byte(&pkt)))
    281         return 0;
    282 
    283     return 1;
    284 }
    285 
    286 static int test_PACKET_forward(void)
    287 {
    288     const unsigned char *byte = NULL;
    289     PACKET pkt;
    290 
    291     if (!TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
    292         || !TEST_true(PACKET_forward(&pkt, 1))
    293         || !TEST_true(PACKET_get_bytes(&pkt, &byte, 1))
    294         || !TEST_uchar_eq(byte[0], 4)
    295         || !TEST_true(PACKET_forward(&pkt, BUF_LEN - 3))
    296         || !TEST_true(PACKET_get_bytes(&pkt, &byte, 1))
    297         || !TEST_uchar_eq(byte[0], 0xfe))
    298         return 0;
    299 
    300     return 1;
    301 }
    302 
    303 static int test_PACKET_buf_init(void)
    304 {
    305     unsigned char buf1[BUF_LEN] = { 0 };
    306     PACKET pkt;
    307 
    308     /* Also tests PACKET_remaining() */
    309     if (!TEST_true(PACKET_buf_init(&pkt, buf1, 4))
    310         || !TEST_size_t_eq(PACKET_remaining(&pkt), 4)
    311         || !TEST_true(PACKET_buf_init(&pkt, buf1, BUF_LEN))
    312         || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN)
    313         || !TEST_false(PACKET_buf_init(&pkt, buf1, -1)))
    314         return 0;
    315 
    316     return 1;
    317 }
    318 
    319 static int test_PACKET_null_init(void)
    320 {
    321     PACKET pkt;
    322 
    323     PACKET_null_init(&pkt);
    324     if (!TEST_size_t_eq(PACKET_remaining(&pkt), 0)
    325         || !TEST_false(PACKET_forward(&pkt, 1)))
    326         return 0;
    327 
    328     return 1;
    329 }
    330 
    331 static int test_PACKET_equal(void)
    332 {
    333     PACKET pkt;
    334 
    335     if (!TEST_true(PACKET_buf_init(&pkt, smbuf, 4))
    336         || !TEST_true(PACKET_equal(&pkt, smbuf, 4))
    337         || !TEST_false(PACKET_equal(&pkt, smbuf + 1, 4))
    338         || !TEST_true(PACKET_buf_init(&pkt, smbuf, BUF_LEN))
    339         || !TEST_true(PACKET_equal(&pkt, smbuf, BUF_LEN))
    340         || !TEST_false(PACKET_equal(&pkt, smbuf, BUF_LEN - 1))
    341         || !TEST_false(PACKET_equal(&pkt, smbuf, BUF_LEN + 1))
    342         || !TEST_false(PACKET_equal(&pkt, smbuf, 0)))
    343         return 0;
    344 
    345     return 1;
    346 }
    347 
    348 static int test_PACKET_get_length_prefixed_1(void)
    349 {
    350     unsigned char buf1[BUF_LEN];
    351     const size_t len = 16;
    352     unsigned int i;
    353     PACKET pkt, short_pkt, subpkt;
    354 
    355     memset(&subpkt, 0, sizeof(subpkt));
    356     buf1[0] = (unsigned char)len;
    357     for (i = 1; i < BUF_LEN; i++)
    358         buf1[i] = (i * 2) & 0xff;
    359 
    360     if (!TEST_true(PACKET_buf_init(&pkt, buf1, BUF_LEN))
    361         || !TEST_true(PACKET_buf_init(&short_pkt, buf1, len))
    362         || !TEST_true(PACKET_get_length_prefixed_1(&pkt, &subpkt))
    363         || !TEST_size_t_eq(PACKET_remaining(&subpkt), len)
    364         || !TEST_true(PACKET_get_net_2(&subpkt, &i))
    365         || !TEST_uint_eq(i, 0x0204)
    366         || !TEST_false(PACKET_get_length_prefixed_1(&short_pkt, &subpkt))
    367         || !TEST_size_t_eq(PACKET_remaining(&short_pkt), len))
    368         return 0;
    369 
    370     return 1;
    371 }
    372 
    373 static int test_PACKET_get_length_prefixed_2(void)
    374 {
    375     unsigned char buf1[1024];
    376     const size_t len = 516; /* 0x0204 */
    377     unsigned int i;
    378     PACKET pkt, short_pkt, subpkt;
    379 
    380     memset(&subpkt, 0, sizeof(subpkt));
    381     for (i = 1; i <= 1024; i++)
    382         buf1[i - 1] = (i * 2) & 0xff;
    383 
    384     if (!TEST_true(PACKET_buf_init(&pkt, buf1, 1024))
    385         || !TEST_true(PACKET_buf_init(&short_pkt, buf1, len))
    386         || !TEST_true(PACKET_get_length_prefixed_2(&pkt, &subpkt))
    387         || !TEST_size_t_eq(PACKET_remaining(&subpkt), len)
    388         || !TEST_true(PACKET_get_net_2(&subpkt, &i))
    389         || !TEST_uint_eq(i, 0x0608)
    390         || !TEST_false(PACKET_get_length_prefixed_2(&short_pkt, &subpkt))
    391         || !TEST_size_t_eq(PACKET_remaining(&short_pkt), len))
    392         return 0;
    393 
    394     return 1;
    395 }
    396 
    397 static int test_PACKET_get_length_prefixed_3(void)
    398 {
    399     unsigned char buf1[1024];
    400     const size_t len = 516; /* 0x000204 */
    401     unsigned int i;
    402     PACKET pkt, short_pkt, subpkt;
    403 
    404     memset(&subpkt, 0, sizeof(subpkt));
    405     for (i = 0; i < 1024; i++)
    406         buf1[i] = (i * 2) & 0xff;
    407 
    408     if (!TEST_true(PACKET_buf_init(&pkt, buf1, 1024))
    409         || !TEST_true(PACKET_buf_init(&short_pkt, buf1, len))
    410         || !TEST_true(PACKET_get_length_prefixed_3(&pkt, &subpkt))
    411         || !TEST_size_t_eq(PACKET_remaining(&subpkt), len)
    412         || !TEST_true(PACKET_get_net_2(&subpkt, &i))
    413         || !TEST_uint_eq(i, 0x0608)
    414         || !TEST_false(PACKET_get_length_prefixed_3(&short_pkt, &subpkt))
    415         || !TEST_size_t_eq(PACKET_remaining(&short_pkt), len))
    416         return 0;
    417 
    418     return 1;
    419 }
    420 
    421 static int test_PACKET_as_length_prefixed_1(void)
    422 {
    423     unsigned char buf1[BUF_LEN];
    424     const size_t len = 16;
    425     unsigned int i;
    426     PACKET pkt, exact_pkt, subpkt;
    427 
    428     memset(&subpkt, 0, sizeof(subpkt));
    429     buf1[0] = (unsigned char)len;
    430     for (i = 1; i < BUF_LEN; i++)
    431         buf1[i] = (i * 2) & 0xff;
    432 
    433     if (!TEST_true(PACKET_buf_init(&pkt, buf1, BUF_LEN))
    434         || !TEST_true(PACKET_buf_init(&exact_pkt, buf1, len + 1))
    435         || !TEST_false(PACKET_as_length_prefixed_1(&pkt, &subpkt))
    436         || !TEST_size_t_eq(PACKET_remaining(&pkt), BUF_LEN)
    437         || !TEST_true(PACKET_as_length_prefixed_1(&exact_pkt, &subpkt))
    438         || !TEST_size_t_eq(PACKET_remaining(&exact_pkt), 0)
    439         || !TEST_size_t_eq(PACKET_remaining(&subpkt), len))
    440         return 0;
    441 
    442     return 1;
    443 }
    444 
    445 static int test_PACKET_as_length_prefixed_2(void)
    446 {
    447     unsigned char buf[1024];
    448     const size_t len = 516; /* 0x0204 */
    449     unsigned int i;
    450     PACKET pkt, exact_pkt, subpkt;
    451 
    452     memset(&subpkt, 0, sizeof(subpkt));
    453     for (i = 1; i <= 1024; i++)
    454         buf[i - 1] = (i * 2) & 0xff;
    455 
    456     if (!TEST_true(PACKET_buf_init(&pkt, buf, 1024))
    457         || !TEST_true(PACKET_buf_init(&exact_pkt, buf, len + 2))
    458         || !TEST_false(PACKET_as_length_prefixed_2(&pkt, &subpkt))
    459         || !TEST_size_t_eq(PACKET_remaining(&pkt), 1024)
    460         || !TEST_true(PACKET_as_length_prefixed_2(&exact_pkt, &subpkt))
    461         || !TEST_size_t_eq(PACKET_remaining(&exact_pkt), 0)
    462         || !TEST_size_t_eq(PACKET_remaining(&subpkt), len))
    463         return 0;
    464 
    465     return 1;
    466 }
    467 
    468 #ifndef OPENSSL_NO_QUIC
    469 
    470 static int test_PACKET_get_quic_vlint(void)
    471 {
    472     struct quic_test_case {
    473         unsigned char buf[16];
    474         size_t expected_read_count;
    475         uint64_t value;
    476     };
    477 
    478     static const struct quic_test_case cases[] = {
    479         { { 0x00 }, 1, 0 },
    480         { { 0x01 }, 1, 1 },
    481         { { 0x3e }, 1, 62 },
    482         { { 0x3f }, 1, 63 },
    483         { { 0x40, 0x00 }, 2, 0 },
    484         { { 0x40, 0x01 }, 2, 1 },
    485         { { 0x40, 0x02 }, 2, 2 },
    486         { { 0x40, 0xff }, 2, 255 },
    487         { { 0x41, 0x00 }, 2, 256 },
    488         { { 0x7f, 0xfe }, 2, 16382 },
    489         { { 0x7f, 0xff }, 2, 16383 },
    490         { { 0x80, 0x00, 0x00, 0x00 }, 4, 0 },
    491         { { 0x80, 0x00, 0x00, 0x01 }, 4, 1 },
    492         { { 0x80, 0x00, 0x01, 0x02 }, 4, 258 },
    493         { { 0x80, 0x18, 0x49, 0x65 }, 4, 1591653 },
    494         { { 0xbe, 0x18, 0x49, 0x65 }, 4, 1041779045 },
    495         { { 0xbf, 0xff, 0xff, 0xff }, 4, 1073741823 },
    496         { { 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, 8, 0 },
    497         { { 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02 }, 8, 258 },
    498         { { 0xfd, 0x1f, 0x59, 0x8d, 0xc9, 0xf8, 0x71, 0x8a }, 8, 4404337426105397642 },
    499     };
    500 
    501     PACKET pkt;
    502     size_t i;
    503     uint64_t v;
    504 
    505     for (i = 0; i < OSSL_NELEM(cases); ++i) {
    506         memset(&pkt, 0, sizeof(pkt));
    507         v = 55;
    508 
    509         if (!TEST_true(PACKET_buf_init(&pkt, cases[i].buf, sizeof(cases[i].buf)))
    510             || !TEST_true(PACKET_get_quic_vlint(&pkt, &v))
    511             || !TEST_uint64_t_eq(v, cases[i].value)
    512             || !TEST_size_t_eq(PACKET_remaining(&pkt),
    513                 sizeof(cases[i].buf) - cases[i].expected_read_count))
    514             return 0;
    515     }
    516 
    517     return 1;
    518 }
    519 
    520 static int test_PACKET_get_quic_length_prefixed(void)
    521 {
    522     struct quic_test_case {
    523         unsigned char buf[16];
    524         size_t enclen, len;
    525         int fail;
    526     };
    527 
    528     static const struct quic_test_case cases[] = {
    529         /* success cases */
    530         { { 0x00 }, 1, 0, 0 },
    531         { { 0x01 }, 1, 1, 0 },
    532         { { 0x02 }, 1, 2, 0 },
    533         { { 0x03 }, 1, 3, 0 },
    534         { { 0x04 }, 1, 4, 0 },
    535         { { 0x05 }, 1, 5, 0 },
    536 
    537         /* failure cases */
    538         { { 0x10 }, 1, 0, 1 },
    539         { { 0x3f }, 1, 0, 1 },
    540     };
    541 
    542     size_t i;
    543     PACKET pkt, subpkt = { 0 };
    544 
    545     for (i = 0; i < OSSL_NELEM(cases); ++i) {
    546         memset(&pkt, 0, sizeof(pkt));
    547 
    548         if (!TEST_true(PACKET_buf_init(&pkt, cases[i].buf,
    549                 cases[i].fail
    550                     ? sizeof(cases[i].buf)
    551                     : cases[i].enclen + cases[i].len)))
    552             return 0;
    553 
    554         if (!TEST_int_eq(PACKET_get_quic_length_prefixed(&pkt, &subpkt), !cases[i].fail))
    555             return 0;
    556 
    557         if (cases[i].fail) {
    558             if (!TEST_ptr_eq(pkt.curr, cases[i].buf))
    559                 return 0;
    560             continue;
    561         }
    562 
    563         if (!TEST_ptr_eq(subpkt.curr, cases[i].buf + cases[i].enclen))
    564             return 0;
    565 
    566         if (!TEST_size_t_eq(subpkt.remaining, cases[i].len))
    567             return 0;
    568     }
    569 
    570     return 1;
    571 }
    572 
    573 #endif
    574 
    575 int setup_tests(void)
    576 {
    577     unsigned int i;
    578 
    579     for (i = 1; i <= BUF_LEN; i++)
    580         smbuf[i - 1] = (i * 2) & 0xff;
    581 
    582     ADD_TEST(test_PACKET_buf_init);
    583     ADD_TEST(test_PACKET_null_init);
    584     ADD_TEST(test_PACKET_remaining);
    585     ADD_TEST(test_PACKET_end);
    586     ADD_TEST(test_PACKET_equal);
    587     ADD_TEST(test_PACKET_get_1);
    588     ADD_TEST(test_PACKET_get_4);
    589     ADD_TEST(test_PACKET_get_net_2);
    590     ADD_TEST(test_PACKET_get_net_3);
    591     ADD_TEST(test_PACKET_get_net_4);
    592     ADD_TEST(test_PACKET_get_sub_packet);
    593     ADD_TEST(test_PACKET_get_bytes);
    594     ADD_TEST(test_PACKET_copy_bytes);
    595     ADD_TEST(test_PACKET_copy_all);
    596     ADD_TEST(test_PACKET_memdup);
    597     ADD_TEST(test_PACKET_strndup);
    598     ADD_TEST(test_PACKET_contains_zero_byte);
    599     ADD_TEST(test_PACKET_forward);
    600     ADD_TEST(test_PACKET_get_length_prefixed_1);
    601     ADD_TEST(test_PACKET_get_length_prefixed_2);
    602     ADD_TEST(test_PACKET_get_length_prefixed_3);
    603     ADD_TEST(test_PACKET_as_length_prefixed_1);
    604     ADD_TEST(test_PACKET_as_length_prefixed_2);
    605 #ifndef OPENSSL_NO_QUIC
    606     ADD_TEST(test_PACKET_get_quic_vlint);
    607     ADD_TEST(test_PACKET_get_quic_length_prefixed);
    608 #endif
    609     return 1;
    610 }
    611