Add library setup and teardown APIs

Add the following two functions to allow platform setup and teardown
operations for the full library to be hooked in:

* mbedtls_platform_setup()
* mbedtls_platform_teardown()

An mbedtls_platform_context C structure is also added and two internal
functions that are called by the corresponding setup and teardown
functions above:

* mbedtls_internal_platform_setup()
* mbedtls_internal_plartform_teardown()

Finally, the macro MBEDTLS_PLATFORM_SETUP_ALT is also added to allow
mbedtls_platform_context and internal function to be overriden by the
user as needed for a platform.
This commit is contained in:
Andres Amaya Garcia 2017-07-07 13:03:23 +01:00 committed by Simon Butcher
parent 51e8c3ed7e
commit 2a6f39cb63
3 changed files with 76 additions and 0 deletions

View file

@ -163,6 +163,7 @@
//#define MBEDTLS_PLATFORM_PRINTF_ALT //#define MBEDTLS_PLATFORM_PRINTF_ALT
//#define MBEDTLS_PLATFORM_SNPRINTF_ALT //#define MBEDTLS_PLATFORM_SNPRINTF_ALT
//#define MBEDTLS_PLATFORM_NV_SEED_ALT //#define MBEDTLS_PLATFORM_NV_SEED_ALT
//#define MBEDTLS_PLATFORM_SETUP_ALT
/** /**
* \def MBEDTLS_DEPRECATED_WARNING * \def MBEDTLS_DEPRECATED_WARNING

View file

@ -288,6 +288,51 @@ int mbedtls_platform_set_nv_seed(
#endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */ #endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */
#endif /* MBEDTLS_ENTROPY_NV_SEED */ #endif /* MBEDTLS_ENTROPY_NV_SEED */
#if !defined(MBEDTLS_PLATFORM_SETUP_ALT)
typedef struct mbedtls_platform_context mbedtls_platform_context;
#else
#include "platform_alt.h"
#endif /* !MBEDTLS_PLATFORM_SETUP_ALT */
/**
* \brief Perform any platform initialisation operations
*
* \param ctx mbed TLS context
*
* \return 0 if successful
*
* \note This function should be called before any other library function
*/
int mbedtls_platform_setup( mbedtls_platform_context *ctx );
/**
* \brief Perform any platform teardown operations
*
* \param ctx mbed TLS context
*
* \return 0 if successful
*
* \note This function should be after every other mbed TLS module has been
* correctly freed using the appropriate free function.
*/
void mbedtls_platform_teardown( mbedtls_platform_context *ctx );
/**
* \brief Internal function to perform any platform initialisation operations
* Only exposed to allow overriding it, see MBEDTLS_PLATFORM_SETUP_ALT
*
* \param ctx mbed TLS context
*
* \return 0 if successful
*/
int mbedtls_internal_platform_setup( mbedtls_platform_context *ctx );
/**
* \brief Internal function to perform any platform teardown operations
* Only exposed to allow overriding it, see MBEDTLS_PLATFORM_SETUP_ALT
*
* \param ctx mbed TLS context
*/
void mbedtls_internal_platform_teardown( mbedtls_platform_context *ctx );
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -304,4 +304,34 @@ int mbedtls_platform_set_nv_seed(
#endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */ #endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */
#endif /* MBEDTLS_ENTROPY_NV_SEED */ #endif /* MBEDTLS_ENTROPY_NV_SEED */
int mbedtls_platform_setup( mbedtls_platform_context *ctx )
{
return( mbedtls_internal_platform_setup( ctx ) );
}
void mbedtls_platform_teardown( mbedtls_platform_context *ctx )
{
mbedtls_internal_platform_teardown( ctx );
}
#if !defined(MBEDTLS_PLATFORM_SETUP_ALT)
/*
* Placeholder internal platform setup that does nothing by default
*/
int mbedtls_internal_platform_setup( mbedtls_platform_context *ctx )
{
(void)ctx;
return( 0 );
}
/*
* Placeholder internal platform teardown that does nothing by default
*/
void mbedtls_internal_platform_teardown( mbedtls_platform_context *ctx )
{
(void)ctx;
}
#endif /* MBEDTLS_PLATFORM_SETUP_ALT */
#endif /* MBEDTLS_PLATFORM_C */ #endif /* MBEDTLS_PLATFORM_C */