Add typedef's for MPS buffer size types
Most buffers that MPS deals with are small and representable with integer types of width 16-bit or more. For highly memory constrained systems, it is therefore a potential for significant memory savings to use 16-bit types for buffer sizes throughout MPS. In prepraration for this, this commit introduces typdefs ``` mbedtls_mps_size_t mbedtls_mps_stored_size_t ``` for buffer sizes in the MPS implementation and the MPS structures, respectively. So far, those MUST be defined as `size_t`: While an effort has been made to write most of MPS code in terms of `mbedtls_mps_[stored_]size_t` in a way that would allow narrower types, those aren't yet supported. Still, we retain the typedefs in order to avoid unnecessary rewriting of a large body of the MPS codebase. Signed-off-by: Hanno Becker <hanno.becker@arm.com>
This commit is contained in:
parent
13cd7846a0
commit
d2f9f53f7f
1 changed files with 53 additions and 0 deletions
|
@ -26,6 +26,8 @@
|
|||
#ifndef MBEDTLS_MPS_COMMON_H
|
||||
#define MBEDTLS_MPS_COMMON_H
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
/**
|
||||
* \name SECTION: MPS Configuration
|
||||
*
|
||||
|
@ -52,4 +54,55 @@
|
|||
|
||||
/* \} name SECTION: MPS Configuration */
|
||||
|
||||
/**
|
||||
* \name SECTION: Common types
|
||||
*
|
||||
* Various common types used throughout MPS.
|
||||
* \{
|
||||
*/
|
||||
|
||||
/** \brief The type of buffer sizes and offsets used in MPS structures.
|
||||
*
|
||||
* This is an unsigned integer type that should be large enough to
|
||||
* hold the length of any buffer resp. message processed by MPS.
|
||||
*
|
||||
* The reason to pick a value as small as possible here is
|
||||
* to reduce the size of MPS structures.
|
||||
*
|
||||
* \warning Care has to be taken when using a narrower type
|
||||
* than ::mbedtls_mps_size_t here because of
|
||||
* potential truncation during conversion.
|
||||
*
|
||||
* \warning Handshake messages in TLS may be up to 2^24 ~ 16Mb in size.
|
||||
* If mbedtls_mps_[opt_]stored_size_t is smaller than that, the
|
||||
* maximum handshake message is restricted accordingly.
|
||||
*
|
||||
* For now, we use the default type of size_t throughout, and the use of
|
||||
* smaller types or different types for ::mbedtls_mps_size_t and
|
||||
* ::mbedtls_mps_stored_size_t is not yet supported.
|
||||
*
|
||||
*/
|
||||
typedef size_t mbedtls_mps_stored_size_t;
|
||||
#define MBEDTLS_MPS_SIZE_MAX ( (mbedtls_mps_size_t) -1 )
|
||||
|
||||
/** \brief The type of buffer sizes and offsets used in the MPS API
|
||||
* and implementation.
|
||||
*
|
||||
* This must be at least as wide as ::mbedtls_stored_size_t but
|
||||
* may be chosen to be strictly larger if more suitable for the
|
||||
* target architecture.
|
||||
*
|
||||
* For example, in a test build for ARM Thumb, using uint_fast16_t
|
||||
* instead of uint16_t reduced the code size from 1060 Byte to 962 Byte,
|
||||
* so almost 10%.
|
||||
*/
|
||||
typedef size_t mbedtls_mps_size_t;
|
||||
|
||||
#if (mbedtls_mps_size_t) -1 > (mbedtls_mps_stored_size_t) -1
|
||||
#error "Misconfiguration of mbedtls_mps_size_t and mbedtls_mps_stored_size_t."
|
||||
#endif
|
||||
|
||||
/* \} SECTION: Common types */
|
||||
|
||||
|
||||
#endif /* MBEDTLS_MPS_COMMON_H */
|
||||
|
|
Loading…
Reference in a new issue