Coverage Report

Created: 2025-12-31 06:58

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/openssl33/include/internal/quic_vlint.h
Line
Count
Source
1
/*
2
 * Copyright 2022-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
#ifndef OSSL_INTERNAL_QUIC_VLINT_H
11
#define OSSL_INTERNAL_QUIC_VLINT_H
12
#pragma once
13
14
#include "internal/e_os.h"
15
16
#ifndef OPENSSL_NO_QUIC
17
18
/* The smallest value requiring a 1, 2, 4, or 8-byte representation. */
19
#define OSSL_QUIC_VLINT_1B_MIN 0
20
201M
#define OSSL_QUIC_VLINT_2B_MIN 64
21
128M
#define OSSL_QUIC_VLINT_4B_MIN 16384
22
28.0M
#define OSSL_QUIC_VLINT_8B_MIN 1073741824
23
24
/* The largest value representable in a given number of bytes. */
25
108k
#define OSSL_QUIC_VLINT_1B_MAX (OSSL_QUIC_VLINT_2B_MIN - 1)
26
50.8M
#define OSSL_QUIC_VLINT_2B_MAX (OSSL_QUIC_VLINT_4B_MIN - 1)
27
108k
#define OSSL_QUIC_VLINT_4B_MAX (OSSL_QUIC_VLINT_8B_MIN - 1)
28
17.5M
#define OSSL_QUIC_VLINT_8B_MAX (((uint64_t)1 << 62) - 1)
29
30
/* The largest value representable as a variable-length integer. */
31
10.5M
#define OSSL_QUIC_VLINT_MAX OSSL_QUIC_VLINT_8B_MAX
32
33
/*
34
 * Returns the number of bytes needed to encode v in the QUIC variable-length
35
 * integer encoding.
36
 *
37
 * Returns 0 if v exceeds OSSL_QUIC_VLINT_MAX.
38
 */
39
static ossl_unused ossl_inline size_t ossl_quic_vlint_encode_len(uint64_t v)
40
201M
{
41
201M
    if (v < OSSL_QUIC_VLINT_2B_MIN)
42
123M
        return 1;
43
44
77.8M
    if (v < OSSL_QUIC_VLINT_4B_MIN)
45
49.8M
        return 2;
46
47
27.9M
    if (v < OSSL_QUIC_VLINT_8B_MIN)
48
27.0M
        return 4;
49
50
971k
    if (v <= OSSL_QUIC_VLINT_MAX)
51
971k
        return 8;
52
53
0
    return 0;
54
971k
}
Unexecuted instantiation: quic-client.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: ssl_cert.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: ssl_ciph.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: ssl_init.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: ssl_lib.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: ssl_mcnf.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: ssl_sess.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: t1_lib.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: tls13_enc.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: tls_depr.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: tls_srp.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_impl.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_method.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_port.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_record_rx.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_record_shared.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_record_tx.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_record_util.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_rstream.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_sf_list.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_srtm.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_sstream.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_stream_map.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_thread_assist.c:ossl_quic_vlint_encode_len
quic_wire_pkt.c:ossl_quic_vlint_encode_len
Line
Count
Source
40
76.9M
{
41
76.9M
    if (v < OSSL_QUIC_VLINT_2B_MIN)
42
37.4M
        return 1;
43
44
39.5M
    if (v < OSSL_QUIC_VLINT_4B_MIN)
45
39.5M
        return 2;
46
47
0
    if (v < OSSL_QUIC_VLINT_8B_MIN)
48
0
        return 4;
49
50
0
    if (v <= OSSL_QUIC_VLINT_MAX)
51
0
        return 8;
52
53
0
    return 0;
54
0
}
Unexecuted instantiation: rec_layer_s3.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: dtls_meth.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: tls1_meth.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: tls_common.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: tls_multib.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: tlsany_meth.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: extensions.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: extensions_clnt.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: extensions_cust.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: extensions_srvr.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: statem.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: statem_clnt.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: statem_dtls.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: statem_lib.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: statem_srvr.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: d1_lib.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: d1_srtp.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: methods.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: pqueue.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: s3_enc.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: s3_lib.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: s3_msg.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: ssl_asn1.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: ssl_conf.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: ssl_rsa.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: t1_enc.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: qlog_event_helpers.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_channel.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_demux.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_engine.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_lcidm.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_rx_depack.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_tls.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_txp.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_txpim.c:ossl_quic_vlint_encode_len
quic_wire.c:ossl_quic_vlint_encode_len
Line
Count
Source
40
5.15M
{
41
5.15M
    if (v < OSSL_QUIC_VLINT_2B_MIN)
42
4.71M
        return 1;
43
44
444k
    if (v < OSSL_QUIC_VLINT_4B_MIN)
45
189k
        return 2;
46
47
254k
    if (v < OSSL_QUIC_VLINT_8B_MIN)
48
252k
        return 4;
49
50
2.03k
    if (v <= OSSL_QUIC_VLINT_MAX)
51
2.03k
        return 8;
52
53
0
    return 0;
54
2.03k
}
Unexecuted instantiation: rec_layer_d1.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: ssl3_meth.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: tls13_meth.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: d1_msg.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_ackm.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_fifd.c:ossl_quic_vlint_encode_len
packet.c:ossl_quic_vlint_encode_len
Line
Count
Source
40
59.6M
{
41
59.6M
    if (v < OSSL_QUIC_VLINT_2B_MIN)
42
40.7M
        return 1;
43
44
18.9M
    if (v < OSSL_QUIC_VLINT_4B_MIN)
45
5.07M
        return 2;
46
47
13.8M
    if (v < OSSL_QUIC_VLINT_8B_MIN)
48
13.3M
        return 4;
49
50
484k
    if (v <= OSSL_QUIC_VLINT_MAX)
51
484k
        return 8;
52
53
0
    return 0;
54
484k
}
quic_vlint.c:ossl_quic_vlint_encode_len
Line
Count
Source
40
59.6M
{
41
59.6M
    if (v < OSSL_QUIC_VLINT_2B_MIN)
42
40.7M
        return 1;
43
44
18.9M
    if (v < OSSL_QUIC_VLINT_4B_MIN)
45
5.07M
        return 2;
46
47
13.8M
    if (v < OSSL_QUIC_VLINT_8B_MIN)
48
13.3M
        return 4;
49
50
484k
    if (v <= OSSL_QUIC_VLINT_MAX)
51
484k
        return 8;
52
53
0
    return 0;
54
484k
}
Unexecuted instantiation: quic-srtm.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic-rcidm.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic_rcidm.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: ssl_txt.c:ossl_quic_vlint_encode_len
Unexecuted instantiation: quic-lcidm.c:ossl_quic_vlint_encode_len
55
56
/*
57
 * This function writes a QUIC varable-length encoded integer to buf.
58
 * The smallest usable representation is used.
59
 *
60
 * It is the caller's responsibility to ensure that the buffer is big enough by
61
 * calling ossl_quic_vlint_encode_len(v) before calling this function.
62
 *
63
 * Precondition: buf is at least ossl_quic_vlint_enc_len(v) bytes in size
64
 *   (unchecked)
65
 * Precondition: v does not exceed OSSL_QUIC_VLINT_MAX
66
 *   (unchecked)
67
 */
68
void ossl_quic_vlint_encode(unsigned char *buf, uint64_t v);
69
70
/*
71
 * This function writes a QUIC variable-length encoded integer to buf. The
72
 * specified number of bytes n are used for the encoding, which means that the
73
 * encoded value may take up more space than necessary.
74
 *
75
 * It is the caller's responsibility to ensure that the buffer is of at least n
76
 * bytes, and that v is representable by a n-byte QUIC variable-length integer.
77
 * The representable ranges are:
78
 *
79
 *   1-byte encoding: [0, 2** 6-1]
80
 *   2-byte encoding: [0, 2**14-1]
81
 *   4-byte encoding: [0, 2**30-1]
82
 *   8-byte encoding: [0, 2**62-1]
83
 *
84
 * Precondition: buf is at least n bytes in size (unchecked)
85
 * Precondition: v does not exceed the representable range
86
 *   (ossl_quic_vlint_encode_len(v) <= n) (unchecked)
87
 * Precondition: v does not exceed OSSL_QUIC_VLINT_MAX
88
 *   (unchecked)
89
 */
90
void ossl_quic_vlint_encode_n(unsigned char *buf, uint64_t v, int n);
91
92
/*
93
 * Given the first byte of an encoded QUIC variable-length integer, returns
94
 * the number of bytes comprising the encoded integer, including the first
95
 * byte.
96
 */
97
static ossl_unused ossl_inline size_t ossl_quic_vlint_decode_len(uint8_t first_byte)
98
34.5M
{
99
34.5M
    return 1U << ((first_byte & 0xC0) >> 6);
100
34.5M
}
Unexecuted instantiation: quic-client.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: ssl_cert.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: ssl_ciph.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: ssl_init.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: ssl_lib.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: ssl_mcnf.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: ssl_sess.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: t1_lib.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: tls13_enc.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: tls_depr.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: tls_srp.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_impl.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_method.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_port.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_record_rx.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_record_shared.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_record_tx.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_record_util.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_rstream.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_sf_list.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_srtm.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_sstream.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_stream_map.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_thread_assist.c:ossl_quic_vlint_decode_len
quic_wire_pkt.c:ossl_quic_vlint_decode_len
Line
Count
Source
98
4.69M
{
99
4.69M
    return 1U << ((first_byte & 0xC0) >> 6);
100
4.69M
}
Unexecuted instantiation: rec_layer_s3.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: dtls_meth.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: tls1_meth.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: tls_common.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: tls_multib.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: tlsany_meth.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: extensions.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: extensions_clnt.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: extensions_cust.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: extensions_srvr.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: statem.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: statem_clnt.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: statem_dtls.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: statem_lib.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: statem_srvr.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: d1_lib.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: d1_srtp.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: methods.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: pqueue.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: s3_enc.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: s3_lib.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: s3_msg.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: ssl_asn1.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: ssl_conf.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: ssl_rsa.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: t1_enc.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: qlog_event_helpers.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_channel.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_demux.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_engine.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_lcidm.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_rx_depack.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_tls.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_txp.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_txpim.c:ossl_quic_vlint_decode_len
quic_wire.c:ossl_quic_vlint_decode_len
Line
Count
Source
98
12.8M
{
99
12.8M
    return 1U << ((first_byte & 0xC0) >> 6);
100
12.8M
}
Unexecuted instantiation: rec_layer_d1.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: ssl3_meth.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: tls13_meth.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: d1_msg.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_ackm.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_fifd.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: packet.c:ossl_quic_vlint_decode_len
quic_vlint.c:ossl_quic_vlint_decode_len
Line
Count
Source
98
16.9M
{
99
16.9M
    return 1U << ((first_byte & 0xC0) >> 6);
100
16.9M
}
Unexecuted instantiation: quic-srtm.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic-rcidm.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic_rcidm.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: ssl_txt.c:ossl_quic_vlint_decode_len
Unexecuted instantiation: quic-lcidm.c:ossl_quic_vlint_decode_len
101
102
/*
103
 * Given a buffer containing an encoded QUIC variable-length integer, returns
104
 * the decoded value. The buffer must be of at least
105
 * ossl_quic_vlint_decode_len(buf[0]) bytes in size, and the caller is responsible
106
 * for checking this.
107
 *
108
 * Precondition: buf is at least ossl_quic_vlint_decode_len(buf[0]) bytes in size
109
 *   (unchecked)
110
 */
111
uint64_t ossl_quic_vlint_decode_unchecked(const unsigned char *buf);
112
113
/*
114
 * Given a buffer buf of buf_len bytes in length, attempts to decode an encoded
115
 * QUIC variable-length integer at the start of the buffer and writes the result
116
 * to *v. If buf_len is inadequate, suggesting a truncated encoded integer, the
117
 * function fails and 0 is returned. Otherwise, returns the number of bytes
118
 * consumed.
119
 *
120
 * Precondition: buf is at least buf_len bytes in size
121
 * Precondition: v (unchecked)
122
 */
123
int ossl_quic_vlint_decode(const unsigned char *buf, size_t buf_len, uint64_t *v);
124
125
#endif
126
127
#endif