Coverage Report

Created: 2025-11-16 06:40

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/openssl33/crypto/quic_vlint.c
Line
Count
Source
1
#include "internal/quic_vlint.h"
2
#include "internal/e_os.h"
3
4
#ifndef OPENSSL_NO_QUIC
5
6
void ossl_quic_vlint_encode_n(uint8_t *buf, uint64_t v, int n)
7
66.1M
{
8
66.1M
    if (n == 1) {
9
45.2M
        buf[0] = (uint8_t)v;
10
45.2M
    } else if (n == 2) {
11
4.79M
        buf[0] = (uint8_t)(0x40 | ((v >> 8) & 0x3F));
12
4.79M
        buf[1] = (uint8_t)v;
13
16.0M
    } else if (n == 4) {
14
15.6M
        buf[0] = (uint8_t)(0x80 | ((v >> 24) & 0x3F));
15
15.6M
        buf[1] = (uint8_t)(v >> 16);
16
15.6M
        buf[2] = (uint8_t)(v >>  8);
17
15.6M
        buf[3] = (uint8_t)v;
18
15.6M
    } else {
19
451k
        buf[0] = (uint8_t)(0xC0 | ((v >> 56) & 0x3F));
20
451k
        buf[1] = (uint8_t)(v >> 48);
21
451k
        buf[2] = (uint8_t)(v >> 40);
22
451k
        buf[3] = (uint8_t)(v >> 32);
23
451k
        buf[4] = (uint8_t)(v >> 24);
24
451k
        buf[5] = (uint8_t)(v >> 16);
25
451k
        buf[6] = (uint8_t)(v >>  8);
26
451k
        buf[7] = (uint8_t)v;
27
451k
    }
28
66.1M
}
29
30
void ossl_quic_vlint_encode(uint8_t *buf, uint64_t v)
31
66.1M
{
32
66.1M
    ossl_quic_vlint_encode_n(buf, v, ossl_quic_vlint_encode_len(v));
33
66.1M
}
34
35
uint64_t ossl_quic_vlint_decode_unchecked(const unsigned char *buf)
36
15.0M
{
37
15.0M
    uint8_t first_byte = buf[0];
38
15.0M
    size_t sz = ossl_quic_vlint_decode_len(first_byte);
39
40
15.0M
    if (sz == 1)
41
12.4M
        return first_byte & 0x3F;
42
43
2.50M
    if (sz == 2)
44
1.43M
        return ((uint64_t)(first_byte & 0x3F) << 8)
45
1.43M
             | buf[1];
46
47
1.07M
    if (sz == 4)
48
1.01M
        return ((uint64_t)(first_byte & 0x3F) << 24)
49
1.01M
             | ((uint64_t)buf[1] << 16)
50
1.01M
             | ((uint64_t)buf[2] <<  8)
51
1.01M
             |  buf[3];
52
53
53.4k
    return ((uint64_t)(first_byte & 0x3F) << 56)
54
53.4k
         | ((uint64_t)buf[1] << 48)
55
53.4k
         | ((uint64_t)buf[2] << 40)
56
53.4k
         | ((uint64_t)buf[3] << 32)
57
53.4k
         | ((uint64_t)buf[4] << 24)
58
53.4k
         | ((uint64_t)buf[5] << 16)
59
53.4k
         | ((uint64_t)buf[6] <<  8)
60
53.4k
         |  buf[7];
61
1.07M
}
62
63
int ossl_quic_vlint_decode(const unsigned char *buf, size_t buf_len, uint64_t *v)
64
0
{
65
0
    size_t dec_len;
66
0
    uint64_t x;
67
68
0
    if (buf_len < 1)
69
0
        return 0;
70
71
0
    dec_len = ossl_quic_vlint_decode_len(buf[0]);
72
0
    if (buf_len < dec_len)
73
0
        return 0;
74
75
0
    x = ossl_quic_vlint_decode_unchecked(buf);
76
77
0
    *v = x;
78
0
    return dec_len;
79
0
}
80
81
#endif