diff --git a/TESTS/mbed_hal/trng/main.cpp b/TESTS/mbed_hal/trng/main.cpp
index 31be677758..6166219888 100644
--- a/TESTS/mbed_hal/trng/main.cpp
+++ b/TESTS/mbed_hal/trng/main.cpp
@@ -43,6 +43,8 @@
 #include "base64b.h"
 #include "pithy.h"
 #include <stdio.h>
+#include "mbedtls/config.h"
+#include "mbedtls/platform.h"
 
 #if !DEVICE_TRNG
 #error [NOT_SUPPORTED] TRNG API not supported for this target
@@ -268,11 +270,17 @@ Specification specification(greentea_test_setup, cases, greentea_test_teardown_h
 
 int main()
 {
+    int ret = 0;
+#if defined(MBEDTLS_PLATFORM_C)
+    ret = mbedtls_platform_setup(NULL);
+#endif /* MBEDTLS_PLATFORM_C */
 #if (defined(TARGET_PSA) && defined(COMPONENT_PSA_SRV_IPC) && defined(MBEDTLS_PSA_CRYPTO_C))
     inject_entropy_for_psa();
 #endif
-    bool ret = !Harness::run(specification);
-
+    ret = !Harness::run(specification);
+#if defined(MBEDTLS_PLATFORM_C)
+    mbedtls_platform_teardown(NULL);
+#endif /* MBEDTLS_PLATFORM_C */
     return ret;
 }
 
diff --git a/UNITTESTS/features/lorawan/loramaccrypto/unittest.cmake b/UNITTESTS/features/lorawan/loramaccrypto/unittest.cmake
index e41d668906..a2740df449 100644
--- a/UNITTESTS/features/lorawan/loramaccrypto/unittest.cmake
+++ b/UNITTESTS/features/lorawan/loramaccrypto/unittest.cmake
@@ -35,6 +35,7 @@ set(unittest-test-sources
   stubs/cipher_stub.c
   stubs/aes_stub.c
   stubs/cmac_stub.c
+  ../features/nanostack/coap-service/test/coap-service/unittest/stub/mbedtls_stub.c
 
 )
 
diff --git a/UNITTESTS/stubs/LoRaMacCrypto_stub.cpp b/UNITTESTS/stubs/LoRaMacCrypto_stub.cpp
index 669e44f64c..c824a16eb2 100644
--- a/UNITTESTS/stubs/LoRaMacCrypto_stub.cpp
+++ b/UNITTESTS/stubs/LoRaMacCrypto_stub.cpp
@@ -30,6 +30,10 @@ LoRaMacCrypto::LoRaMacCrypto()
 {
 }
 
+LoRaMacCrypto::~LoRaMacCrypto()
+{
+}
+
 int LoRaMacCrypto::compute_mic(const uint8_t *, uint16_t, const uint8_t *, uint32_t, uint32_t,
                                uint8_t dir, uint32_t, uint32_t *)
 {
diff --git a/features/device_key/source/DeviceKey.cpp b/features/device_key/source/DeviceKey.cpp
index 7491add70a..f49ca44e5e 100644
--- a/features/device_key/source/DeviceKey.cpp
+++ b/features/device_key/source/DeviceKey.cpp
@@ -19,6 +19,7 @@
 #if DEVICEKEY_ENABLED
 #include "mbedtls/config.h"
 #include "mbedtls/cmac.h"
+#include "mbedtls/platform.h"
 #include "KVStore.h"
 #include "TDBStore.h"
 #include "KVMap.h"
@@ -59,15 +60,25 @@ namespace mbed {
 
 DeviceKey::DeviceKey()
 {
+
     int ret = kv_init_storage_config();
     if (ret != MBED_SUCCESS) {
         tr_error("DeviceKey: Fail to initialize KvStore configuration.");
     }
+#if defined(MBEDTLS_PLATFORM_C)
+    ret = mbedtls_platform_setup(NULL);
+    if (ret != MBED_SUCCESS) {
+        tr_error("DeviceKey: Fail in mbedtls_platform_setup.");
+    }
+#endif /* MBEDTLS_PLATFORM_C */
     return;
 }
 
 DeviceKey::~DeviceKey()
 {
+#if defined(MBEDTLS_PLATFORM_C)
+    mbedtls_platform_teardown(NULL);
+#endif /* MBEDTLS_PLATFORM_C */
     return;
 }
 
diff --git a/features/lorawan/lorastack/mac/LoRaMacCrypto.cpp b/features/lorawan/lorastack/mac/LoRaMacCrypto.cpp
index 7b66144bae..1050784089 100644
--- a/features/lorawan/lorastack/mac/LoRaMacCrypto.cpp
+++ b/features/lorawan/lorastack/mac/LoRaMacCrypto.cpp
@@ -28,12 +28,26 @@
 
 #include "LoRaMacCrypto.h"
 #include "system/lorawan_data_structures.h"
+#include "mbedtls/platform.h"
 
 
 #if defined(MBEDTLS_CMAC_C) && defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_C)
 
 LoRaMacCrypto::LoRaMacCrypto()
 {
+#if defined(MBEDTLS_PLATFORM_C)
+    int ret = mbedtls_platform_setup(NULL);
+    if (ret != 0) {
+        MBED_ASSERT(0 && "LoRaMacCrypto: Fail in mbedtls_platform_setup.");
+    }
+#endif /* MBEDTLS_PLATFORM_C */
+}
+
+LoRaMacCrypto::~LoRaMacCrypto()
+{
+#if defined(MBEDTLS_PLATFORM_C)
+    mbedtls_platform_teardown(NULL);
+#endif /* MBEDTLS_PLATFORM_C */
 }
 
 int LoRaMacCrypto::compute_mic(const uint8_t *buffer, uint16_t size,
@@ -291,6 +305,10 @@ LoRaMacCrypto::LoRaMacCrypto()
     MBED_ASSERT(0 && "[LoRaCrypto] Must enable AES, CMAC & CIPHER from mbedTLS");
 }
 
+LoRaMacCrypto::~LoRaMacCrypto()
+{
+}
+
 // If mbedTLS is not configured properly, these dummies will ensure that
 // user knows what is wrong and in addition to that these ensure that
 // Mbed-OS compiles properly under normal conditions where LoRaWAN in conjunction
diff --git a/features/lorawan/lorastack/mac/LoRaMacCrypto.h b/features/lorawan/lorastack/mac/LoRaMacCrypto.h
index 845b8ee635..9136ab2d1f 100644
--- a/features/lorawan/lorastack/mac/LoRaMacCrypto.h
+++ b/features/lorawan/lorastack/mac/LoRaMacCrypto.h
@@ -30,6 +30,7 @@ SPDX-License-Identifier: BSD-3-Clause
 #ifndef MBED_LORAWAN_MAC_LORAMAC_CRYPTO_H__
 #define MBED_LORAWAN_MAC_LORAMAC_CRYPTO_H__
 
+#include "mbedtls/config.h"
 #include "mbedtls/aes.h"
 #include "mbedtls/cmac.h"
 
@@ -41,6 +42,11 @@ public:
      */
     LoRaMacCrypto();
 
+    /**
+     * Destructor
+     */
+    ~LoRaMacCrypto();
+
     /**
      * Computes the LoRaMAC frame MIC field
      *
diff --git a/features/lwipstack/lwip/src/apps/snmp/lwip_snmpv3_mbedtls.c b/features/lwipstack/lwip/src/apps/snmp/lwip_snmpv3_mbedtls.c
index 0b1eefb87e..64ca62a64f 100644
--- a/features/lwipstack/lwip/src/apps/snmp/lwip_snmpv3_mbedtls.c
+++ b/features/lwipstack/lwip/src/apps/snmp/lwip_snmpv3_mbedtls.c
@@ -47,6 +47,7 @@
 
 #include "mbedtls/md5.h"
 #include "mbedtls/sha1.h"
+#include "mbedtls/platform.h"
 
 err_t
 snmpv3_auth(struct snmp_pbuf_stream* stream, u16_t length,
@@ -59,6 +60,11 @@ snmpv3_auth(struct snmp_pbuf_stream* stream, u16_t length,
   struct snmp_pbuf_stream read_stream;
   snmp_pbuf_stream_init(&read_stream, stream->pbuf, stream->offset, stream->length);
 
+#if defined(MBEDTLS_PLATFORM_C)
+    if (mbedtls_platform_setup(NULL) != 0) {
+        return ERR_ARG;
+    }
+#endif /* MBEDTLS_PLATFORM_C */
   if (algo == SNMP_V3_AUTH_ALGO_MD5) {
     md_info = mbedtls_md_info_from_type(MBEDTLS_MD_MD5);
     key_len = SNMP_V3_MD5_LEN;
@@ -66,12 +72,12 @@ snmpv3_auth(struct snmp_pbuf_stream* stream, u16_t length,
     md_info = mbedtls_md_info_from_type(MBEDTLS_MD_SHA1);
     key_len = SNMP_V3_SHA_LEN;
   } else {
-    return ERR_ARG;
+    goto platform_teardown;
   }
 
   mbedtls_md_init(&ctx);
   if(mbedtls_md_setup(&ctx, md_info, 1) != 0) {
-    return ERR_ARG;
+    goto platform_teardown;
   }
           
   if (mbedtls_md_hmac_starts(&ctx, key, key_len) != 0) {
@@ -95,10 +101,17 @@ snmpv3_auth(struct snmp_pbuf_stream* stream, u16_t length,
   }
 
   mbedtls_md_free(&ctx);
+#if defined(MBEDTLS_PLATFORM_C)
+    mbedtls_platform_teardown(NULL);
+#endif /* MBEDTLS_PLATFORM_C */
   return ERR_OK;
   
 free_md:
   mbedtls_md_free(&ctx);
+platform_teardown:
+#if defined(MBEDTLS_PLATFORM_C)
+    mbedtls_platform_teardown(NULL);
+#endif /* MBEDTLS_PLATFORM_C */
   return ERR_ARG;
 }
 
@@ -117,6 +130,11 @@ snmpv3_crypt(struct snmp_pbuf_stream* stream, u16_t length,
   struct snmp_pbuf_stream write_stream;
   snmp_pbuf_stream_init(&read_stream, stream->pbuf, stream->offset, stream->length);
   snmp_pbuf_stream_init(&write_stream, stream->pbuf, stream->offset, stream->length);
+#if defined(MBEDTLS_PLATFORM_C)
+  if (mbedtls_platform_setup(NULL) != 0) {
+    return ERR_ARG;
+  }
+#endif /* MBEDTLS_PLATFORM_C */
   mbedtls_cipher_init(&ctx);
 
   if (algo == SNMP_V3_PRIV_ALGO_DES) {
@@ -126,15 +144,15 @@ snmpv3_crypt(struct snmp_pbuf_stream* stream, u16_t length,
 
     /* RFC 3414 mandates padding for DES */
     if ((length & 0x07) != 0) {
-      return ERR_ARG;
+      goto platform_teardown;
     }
 
     cipher_info = mbedtls_cipher_info_from_type(MBEDTLS_CIPHER_DES_CBC);
     if(mbedtls_cipher_setup(&ctx, cipher_info) != 0) {
-      return ERR_ARG;
+      goto platform_teardown
     }
     if(mbedtls_cipher_set_padding_mode(&ctx, MBEDTLS_PADDING_NONE) != 0) {
-      return ERR_ARG;
+      goto platform_teardown;
     }
     if(mbedtls_cipher_setkey(&ctx, key, 8*8, (mode == SNMP_V3_PRIV_MODE_ENCRYPT)? MBEDTLS_ENCRYPT : MBEDTLS_DECRYPT) != 0) {
       goto error;
@@ -174,7 +192,7 @@ snmpv3_crypt(struct snmp_pbuf_stream* stream, u16_t length,
 
     cipher_info = mbedtls_cipher_info_from_type(MBEDTLS_CIPHER_AES_128_CFB128);
     if(mbedtls_cipher_setup(&ctx, cipher_info) != 0) {
-      return ERR_ARG;
+      goto platform_teardown;
     }
     if(mbedtls_cipher_setkey(&ctx, key, 16*8, (mode == SNMP_V3_PRIV_MODE_ENCRYPT)? MBEDTLS_ENCRYPT : MBEDTLS_DECRYPT) != 0) {
       goto error;
@@ -209,7 +227,7 @@ snmpv3_crypt(struct snmp_pbuf_stream* stream, u16_t length,
       snmp_pbuf_stream_write(&write_stream, out_byte);
     }
   } else {
-    return ERR_ARG;
+    goto platform_teardown;
   }
 
   mbedtls_cipher_free(&ctx);
@@ -217,7 +235,11 @@ snmpv3_crypt(struct snmp_pbuf_stream* stream, u16_t length,
 
 error:
   mbedtls_cipher_free(&ctx);
-  return ERR_OK;
+platform_teardown:
+#if defined(MBEDTLS_PLATFORM_C)
+  mbedtls_platform_teardown(NULL);
+#endif /* MBEDTLS_PLATFORM_C */
+  return ERR_ARG;
 }
 
 #endif /* LWIP_SNMP_V3_CRYPTO */
@@ -237,6 +259,11 @@ snmpv3_password_to_key_md5(
   u8_t i;
   u32_t count = 0;
 
+#if defined(MBEDTLS_PLATFORM_C)
+  if (mbedtls_platform_setup(NULL) != 0) {
+    goto end;
+  }
+#endif /* MBEDTLS_PLATFORM_C */
   mbedtls_md5_init(&MD); /* initialize MD5 */
   mbedtls_md5_starts(&MD);
 
@@ -272,6 +299,11 @@ snmpv3_password_to_key_md5(
   mbedtls_md5_finish(&MD, key);
 
   mbedtls_md5_free(&MD);
+
+end:
+#if defined(MBEDTLS_PLATFORM_C)
+  mbedtls_platform_teardown(NULL);
+#endif /* MBEDTLS_PLATFORM_C */
   return;
 }
 
@@ -290,6 +322,11 @@ snmpv3_password_to_key_sha(
   u8_t i;
   u32_t count = 0;
 
+#if defined(MBEDTLS_PLATFORM_C)
+  if (mbedtls_platform_setup(NULL) != 0) {
+    goto end;
+  }
+#endif /* MBEDTLS_PLATFORM_C */
   mbedtls_sha1_init(&SH); /* initialize SHA */
   mbedtls_sha1_starts(&SH);
 
@@ -325,6 +362,11 @@ snmpv3_password_to_key_sha(
   mbedtls_sha1_finish(&SH, key);
   
   mbedtls_sha1_free(&SH);
+
+end:
+#if defined(MBEDTLS_PLATFORM_C)
+  mbedtls_platform_teardown(NULL);
+#endif /* MBEDTLS_PLATFORM_C */
   return;
 }
 
diff --git a/features/mbedtls/platform/src/mbed_trng.cpp b/features/mbedtls/platform/src/mbed_trng.cpp
index 53c1c21097..79fed2a7d0 100644
--- a/features/mbedtls/platform/src/mbed_trng.cpp
+++ b/features/mbedtls/platform/src/mbed_trng.cpp
@@ -17,17 +17,19 @@
 #if DEVICE_TRNG
 
 #include "hal/trng_api.h"
+#include "platform/SingletonPtr.h"
 #include "platform/PlatformMutex.h"
 
+SingletonPtr<PlatformMutex> mbedtls_mutex;
+
 extern "C"
 int mbedtls_hardware_poll( void *data, unsigned char *output, size_t len, size_t *olen ) {
-    static PlatformMutex trng_mutex;
     trng_t trng_obj;
-    trng_mutex.lock();
+    mbedtls_mutex->lock();
     trng_init(&trng_obj);
     int ret = trng_get_bytes(&trng_obj, output, len, olen);
     trng_free(&trng_obj);
-    trng_mutex.unlock();
+    mbedtls_mutex->unlock();
     return ret;
 }
 
diff --git a/features/mbedtls/platform/src/platform_alt.c b/features/mbedtls/platform/src/platform_alt.cpp
similarity index 83%
rename from features/mbedtls/platform/src/platform_alt.c
rename to features/mbedtls/platform/src/platform_alt.cpp
index c0254de9dc..c6f0abce66 100644
--- a/features/mbedtls/platform/src/platform_alt.c
+++ b/features/mbedtls/platform/src/platform_alt.cpp
@@ -20,33 +20,38 @@
 
 #include "mbedtls/platform.h"
 #if defined(MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT)
-#include "mbed_critical.h"
+#include "platform/SingletonPtr.h"
+#include "platform/PlatformMutex.h"
 
 mbedtls_platform_context plat_ctx = { { 0 } };
+extern SingletonPtr<PlatformMutex> mbedtls_mutex;
 
 int mbedtls_platform_setup( mbedtls_platform_context *unused_ctx )
 {
     int ret = 0;
-
-    core_util_atomic_incr_u32( ( volatile uint32_t * )&plat_ctx.reference_count, 1 );
+    mbedtls_mutex->lock();
+    ++plat_ctx.reference_count;
 
     if( plat_ctx.reference_count == 1 )
     {
         /* call platform specific code to setup crypto driver */
         ret = crypto_platform_setup( &plat_ctx.platform_impl_ctx );
     }
+    mbedtls_mutex->unlock();
     return ( ret );
 }
 
 void mbedtls_platform_teardown( mbedtls_platform_context *unused_ctx )
 {
-    core_util_atomic_decr_u32( ( volatile uint32_t * )&plat_ctx.reference_count, 1 );
+    mbedtls_mutex->lock();
+    --plat_ctx.reference_count;
     if( plat_ctx.reference_count < 1 )
     {
         /* call platform specific code to terminate crypto driver */
         crypto_platform_terminate( &plat_ctx.platform_impl_ctx );
         plat_ctx.reference_count = 0;
     }
+    mbedtls_mutex->unlock();
 }
 
 #endif /* MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT*/
diff --git a/features/nanostack/coap-service/source/coap_security_handler.c b/features/nanostack/coap-service/source/coap_security_handler.c
index 0cd28220bf..cf124ddf12 100644
--- a/features/nanostack/coap-service/source/coap_security_handler.c
+++ b/features/nanostack/coap-service/source/coap_security_handler.c
@@ -102,6 +102,11 @@ static int coap_security_handler_init(coap_security_t *sec)
     const int entropy_source_type = MBEDTLS_ENTROPY_SOURCE_WEAK;
 #endif
 
+#if defined(MBEDTLS_PLATFORM_C)
+    if (mbedtls_platform_setup(NULL) != 0)
+        return -1;
+#endif /* MBEDTLS_PLATFORM_C */
+
     mbedtls_ssl_init(&sec->_ssl);
     mbedtls_ssl_config_init(&sec->_conf);
     mbedtls_ctr_drbg_init(&sec->_ctr_drbg);
@@ -153,6 +158,9 @@ static void coap_security_handler_reset(coap_security_t *sec)
     mbedtls_ctr_drbg_free(&sec->_ctr_drbg);
     mbedtls_ssl_config_free(&sec->_conf);
     mbedtls_ssl_free(&sec->_ssl);
+#if defined(MBEDTLS_PLATFORM_C)
+    mbedtls_platform_teardown(NULL);
+#endif /* MBEDTLS_PLATFORM_C */
 }
 
 
diff --git a/features/nanostack/coap-service/test/coap-service/unittest/stub/mbedtls_stub.c b/features/nanostack/coap-service/test/coap-service/unittest/stub/mbedtls_stub.c
index ba97c62e9f..f4ee36e69b 100644
--- a/features/nanostack/coap-service/test/coap-service/unittest/stub/mbedtls_stub.c
+++ b/features/nanostack/coap-service/test/coap-service/unittest/stub/mbedtls_stub.c
@@ -386,3 +386,15 @@ int mbedtls_ssl_session_reset(mbedtls_ssl_context *ssl)
 
 void mbedtls_strerror( int ret, char *buf, size_t buflen ){
 }
+
+int mbedtls_platform_setup( mbedtls_platform_context *ctx )
+{
+    (void)ctx;
+
+    return( 0 );
+}
+
+void mbedtls_platform_teardown( mbedtls_platform_context *ctx )
+{
+    (void)ctx;
+}
diff --git a/features/nanostack/coap-service/test/coap-service/unittest/stub/mbedtls_stub.h b/features/nanostack/coap-service/test/coap-service/unittest/stub/mbedtls_stub.h
index b5a6b00620..2ad72cb939 100644
--- a/features/nanostack/coap-service/test/coap-service/unittest/stub/mbedtls_stub.h
+++ b/features/nanostack/coap-service/test/coap-service/unittest/stub/mbedtls_stub.h
@@ -28,7 +28,7 @@
 #include "mbedtls/sha256.h"
 #include "mbedtls/entropy.h"
 #include "mbedtls/pk.h"
-
+#include "mbedtls/platform.h"
 
 
 #define HANDSHAKE_FINISHED_VALUE 8888
diff --git a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_random.c b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_random.c
index 7ba0aae6f8..804f1485ab 100644
--- a/features/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_random.c
+++ b/features/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_random.c
@@ -27,9 +27,15 @@ uint32_t arm_random_seed_get(void)
 {
     uint32_t result = 0;
 #ifdef MBEDTLS_ENTROPY_HARDWARE_ALT
+#if defined(MBEDTLS_PLATFORM_C)
+    mbedtls_platform_setup(NULL);
+#endif /* MBEDTLS_PLATFORM_C */
     /* Grab a seed from a function we provide for mbedtls */
     size_t len;
     mbedtls_hardware_poll(NULL, (uint8_t *) &result, sizeof result, &len);
+#if defined(MBEDTLS_PLATFORM_C)
+    mbedtls_platform_teardown(NULL);
+#endif /* MBEDTLS_PLATFORM_C */
 #endif
     return result;
 }
diff --git a/features/netsocket/TLSSocketWrapper.cpp b/features/netsocket/TLSSocketWrapper.cpp
index c58947564e..6a81f3ea46 100644
--- a/features/netsocket/TLSSocketWrapper.cpp
+++ b/features/netsocket/TLSSocketWrapper.cpp
@@ -23,6 +23,7 @@
 #define TRACE_GROUP "TLSW"
 #include "mbed-trace/mbed_trace.h"
 #include "mbedtls/debug.h"
+#include "mbedtls/platform.h"
 #include "mbed_error.h"
 #include "Kernel.h"
 
@@ -45,6 +46,12 @@ TLSSocketWrapper::TLSSocketWrapper(Socket *transport, const char *hostname, cont
     _clicert_allocated(false),
     _ssl_conf_allocated(false)
 {
+#if defined(MBEDTLS_PLATFORM_C)
+    int ret = mbedtls_platform_setup(NULL);
+    if (ret != 0) {
+        print_mbedtls_error("mbedtls_platform_setup()", ret);
+    }
+#endif /* MBEDTLS_PLATFORM_C */
     mbedtls_entropy_init(&_entropy);
     mbedtls_ctr_drbg_init(&_ctr_drbg);
     mbedtls_ssl_init(&_ssl);
@@ -71,6 +78,9 @@ TLSSocketWrapper::~TLSSocketWrapper()
     set_ca_chain(NULL);
 #endif
     set_ssl_config(NULL);
+#if defined(MBEDTLS_PLATFORM_C)
+    mbedtls_platform_teardown(NULL);
+#endif /* MBEDTLS_PLATFORM_C */
 }
 
 void TLSSocketWrapper::set_hostname(const char *hostname)
diff --git a/features/storage/kvstore/securestore/SecureStore.cpp b/features/storage/kvstore/securestore/SecureStore.cpp
index 20cfeca0c9..17207481a7 100644
--- a/features/storage/kvstore/securestore/SecureStore.cpp
+++ b/features/storage/kvstore/securestore/SecureStore.cpp
@@ -22,6 +22,7 @@
 
 #include "aes.h"
 #include "cmac.h"
+#include "mbedtls/platform.h"
 #include "entropy.h"
 #include "DeviceKey.h"
 #include "mbed_assert.h"
@@ -737,6 +738,12 @@ int SecureStore::init()
     MBED_ASSERT(!(scratch_buf_size % enc_block_size));
 
     _mutex.lock();
+#if defined(MBEDTLS_PLATFORM_C)
+    ret = mbedtls_platform_setup(NULL);
+    if (ret) {
+        goto fail;
+    }
+#endif /* MBEDTLS_PLATFORM_C */
 
     _entropy = new mbedtls_entropy_context;
     mbedtls_entropy_init(static_cast<mbedtls_entropy_context *>(_entropy));
@@ -775,6 +782,9 @@ int SecureStore::deinit()
     }
 
     _is_initialized = false;
+#if defined(MBEDTLS_PLATFORM_C)
+    mbedtls_platform_teardown(NULL);
+#endif /* MBEDTLS_PLATFORM_C */
     _mutex.unlock();
 
     return MBED_SUCCESS;