diff options
Diffstat (limited to 'include/internal/quic_vlint.h')
-rw-r--r-- | include/internal/quic_vlint.h | 127 |
1 files changed, 0 insertions, 127 deletions
diff --git a/include/internal/quic_vlint.h b/include/internal/quic_vlint.h deleted file mode 100644 index d4b70b229c32..000000000000 --- a/include/internal/quic_vlint.h +++ /dev/null @@ -1,127 +0,0 @@ -/* -* Copyright 2022-2023 The OpenSSL Project Authors. All Rights Reserved. -* -* Licensed under the Apache License 2.0 (the "License"). You may not use -* this file except in compliance with the License. You can obtain a copy -* in the file LICENSE in the source distribution or at -* https://www.openssl.org/source/license.html -*/ - -#ifndef OSSL_INTERNAL_QUIC_VLINT_H -# define OSSL_INTERNAL_QUIC_VLINT_H -# pragma once - -# include "internal/e_os.h" - -# ifndef OPENSSL_NO_QUIC - -/* The smallest value requiring a 1, 2, 4, or 8-byte representation. */ -#define OSSL_QUIC_VLINT_1B_MIN 0 -#define OSSL_QUIC_VLINT_2B_MIN 64 -#define OSSL_QUIC_VLINT_4B_MIN 16384 -#define OSSL_QUIC_VLINT_8B_MIN 1073741824 - -/* The largest value representable in a given number of bytes. */ -#define OSSL_QUIC_VLINT_1B_MAX (OSSL_QUIC_VLINT_2B_MIN - 1) -#define OSSL_QUIC_VLINT_2B_MAX (OSSL_QUIC_VLINT_4B_MIN - 1) -#define OSSL_QUIC_VLINT_4B_MAX (OSSL_QUIC_VLINT_8B_MIN - 1) -#define OSSL_QUIC_VLINT_8B_MAX (((uint64_t)1 << 62) - 1) - -/* The largest value representable as a variable-length integer. */ -#define OSSL_QUIC_VLINT_MAX OSSL_QUIC_VLINT_8B_MAX - -/* - * Returns the number of bytes needed to encode v in the QUIC variable-length - * integer encoding. - * - * Returns 0 if v exceeds OSSL_QUIC_VLINT_MAX. - */ -static ossl_unused ossl_inline size_t ossl_quic_vlint_encode_len(uint64_t v) -{ - if (v < OSSL_QUIC_VLINT_2B_MIN) - return 1; - - if (v < OSSL_QUIC_VLINT_4B_MIN) - return 2; - - if (v < OSSL_QUIC_VLINT_8B_MIN) - return 4; - - if (v <= OSSL_QUIC_VLINT_MAX) - return 8; - - return 0; -} - -/* - * This function writes a QUIC varable-length encoded integer to buf. - * The smallest usable representation is used. - * - * It is the caller's responsibility to ensure that the buffer is big enough by - * calling ossl_quic_vlint_encode_len(v) before calling this function. - * - * Precondition: buf is at least ossl_quic_vlint_enc_len(v) bytes in size - * (unchecked) - * Precondition: v does not exceed OSSL_QUIC_VLINT_MAX - * (unchecked) - */ -void ossl_quic_vlint_encode(unsigned char *buf, uint64_t v); - -/* - * This function writes a QUIC variable-length encoded integer to buf. The - * specified number of bytes n are used for the encoding, which means that the - * encoded value may take up more space than necessary. - * - * It is the caller's responsibility to ensure that the buffer is of at least n - * bytes, and that v is representable by a n-byte QUIC variable-length integer. - * The representable ranges are: - * - * 1-byte encoding: [0, 2** 6-1] - * 2-byte encoding: [0, 2**14-1] - * 4-byte encoding: [0, 2**30-1] - * 8-byte encoding: [0, 2**62-1] - * - * Precondition: buf is at least n bytes in size (unchecked) - * Precondition: v does not exceed the representable range - * (ossl_quic_vlint_encode_len(v) <= n) (unchecked) - * Precondition: v does not exceed OSSL_QUIC_VLINT_MAX - * (unchecked) - */ -void ossl_quic_vlint_encode_n(unsigned char *buf, uint64_t v, int n); - -/* - * Given the first byte of an encoded QUIC variable-length integer, returns - * the number of bytes comprising the encoded integer, including the first - * byte. - */ -static ossl_unused ossl_inline size_t ossl_quic_vlint_decode_len(uint8_t first_byte) -{ - return 1U << ((first_byte & 0xC0) >> 6); -} - -/* - * Given a buffer containing an encoded QUIC variable-length integer, returns - * the decoded value. The buffer must be of at least - * ossl_quic_vlint_decode_len(buf[0]) bytes in size, and the caller is responsible - * for checking this. - * - * Precondition: buf is at least ossl_quic_vlint_decode_len(buf[0]) bytes in size - * (unchecked) - */ -uint64_t ossl_quic_vlint_decode_unchecked(const unsigned char *buf); - -/* - * Given a buffer buf of buf_len bytes in length, attempts to decode an encoded - * QUIC variable-length integer at the start of the buffer and writes the result - * to *v. If buf_len is inadequate, suggesting a truncated encoded integer, the - * function fails and 0 is returned. Otherwise, returns the number of bytes - * consumed. - * - * Precondition: buf is at least buf_len bytes in size - * Precondition: v (unchecked) - */ -int ossl_quic_vlint_decode(const unsigned char *buf, size_t buf_len, uint64_t *v); - -# endif - -#endif |