From 552f6b6d17f4d9311ce1e58b41add584c56d2090 Mon Sep 17 00:00:00 2001 From: Janos Follath Date: Tue, 1 Nov 2016 16:39:47 +0000 Subject: [PATCH] Add global mutex for asymmetric crypto accelerator The primary use case behind providing an abstraction layer to enable alternative Elliptic Curve Point arithmetic implementation, is making use of cryptographic acceleration hardware if it is present. To provide thread safety for the hardware accelerator we need a mutex to guard it. --- include/mbedtls/threading.h | 3 +++ library/threading.c | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/include/mbedtls/threading.h b/include/mbedtls/threading.h index b0c34ecc74..d2d79a100e 100644 --- a/include/mbedtls/threading.h +++ b/include/mbedtls/threading.h @@ -97,6 +97,9 @@ extern int (*mbedtls_mutex_unlock)( mbedtls_threading_mutex_t *mutex ); */ extern mbedtls_threading_mutex_t mbedtls_threading_readdir_mutex; extern mbedtls_threading_mutex_t mbedtls_threading_gmtime_mutex; +#if defined(MBEDTLS_ECP_FUNCTION_ALT) +extern mbedtls_threading_mutex_t mbedtls_threading_cryptohw_asym_mutex; +#endif #endif /* MBEDTLS_THREADING_C */ #ifdef __cplusplus diff --git a/library/threading.c b/library/threading.c index 83ec01a45f..b0cebd1a77 100644 --- a/library/threading.c +++ b/library/threading.c @@ -113,6 +113,9 @@ void mbedtls_threading_set_alt( void (*mutex_init)( mbedtls_threading_mutex_t * mbedtls_mutex_init( &mbedtls_threading_readdir_mutex ); mbedtls_mutex_init( &mbedtls_threading_gmtime_mutex ); +#if defined(MBEDTLS_ECP_FUNCTION_ALT) + mbedtls_mutex_init( &mbedtls_threading_cryptohw_asym_mutex ); +#endif } /* @@ -122,6 +125,9 @@ void mbedtls_threading_free_alt( void ) { mbedtls_mutex_free( &mbedtls_threading_readdir_mutex ); mbedtls_mutex_free( &mbedtls_threading_gmtime_mutex ); +#if defined(MBEDTLS_ECP_FUNCTION_ALT) + mbedtls_mutex_free( &mbedtls_threading_cryptohw_asym_mutex ); +#endif } #endif /* MBEDTLS_THREADING_ALT */ @@ -133,5 +139,8 @@ void mbedtls_threading_free_alt( void ) #endif mbedtls_threading_mutex_t mbedtls_threading_readdir_mutex MUTEX_INIT; mbedtls_threading_mutex_t mbedtls_threading_gmtime_mutex MUTEX_INIT; +#if defined(MBEDTLS_ECP_FUNCTION_ALT) +mbedtls_threading_mutex_t mbedtls_threading_cryptohw_asym_mutex MUTEX_INIT; +#endif #endif /* MBEDTLS_THREADING_C */