| /** @file | 
 |  * @brief mbed TLS initialization | 
 |  * | 
 |  * Initialize the mbed TLS library like setup the heap etc. | 
 |  */ | 
 |  | 
 | /* | 
 |  * Copyright (c) 2017 Intel Corporation | 
 |  * Copyright (c) 2024 Nordic Semiconductor ASA | 
 |  * | 
 |  * SPDX-License-Identifier: Apache-2.0 | 
 |  */ | 
 |  | 
 | #include <zephyr/init.h> | 
 | #include <zephyr/app_memory/app_memdomain.h> | 
 | #include <mbedtls/platform_time.h> | 
 |  | 
 | #include <mbedtls/debug.h> | 
 |  | 
 | #if defined(CONFIG_MBEDTLS) | 
 | #if !defined(CONFIG_MBEDTLS_CFG_FILE) | 
 | #include "mbedtls/config.h" | 
 | #else | 
 | #include CONFIG_MBEDTLS_CFG_FILE | 
 | #endif /* CONFIG_MBEDTLS_CFG_FILE */ | 
 | #endif | 
 |  | 
 | #if defined(CONFIG_MBEDTLS_ENABLE_HEAP) && \ | 
 | 	defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) | 
 | #include <mbedtls/memory_buffer_alloc.h> | 
 |  | 
 | #ifdef CONFIG_MBEDTLS_HEAP_CUSTOM_SECTION | 
 | #define HEAP_MEM_ATTRIBUTES Z_GENERIC_SECTION(.mbedtls_heap) | 
 | #else | 
 | #define HEAP_MEM_ATTRIBUTES | 
 | #endif /* CONFIG_MBEDTLS_HEAP_CUSTOM_SECTION */ | 
 | static unsigned char _mbedtls_heap[CONFIG_MBEDTLS_HEAP_SIZE] HEAP_MEM_ATTRIBUTES; | 
 |  | 
 | static void init_heap(void) | 
 | { | 
 | 	mbedtls_memory_buffer_alloc_init(_mbedtls_heap, sizeof(_mbedtls_heap)); | 
 | } | 
 | #else | 
 | #define init_heap(...) | 
 | #endif /* CONFIG_MBEDTLS_ENABLE_HEAP && MBEDTLS_MEMORY_BUFFER_ALLOC_C */ | 
 |  | 
 | static int _mbedtls_init(void) | 
 | { | 
 |  | 
 | 	init_heap(); | 
 |  | 
 | #if defined(CONFIG_MBEDTLS_DEBUG_LEVEL) | 
 | 	mbedtls_debug_set_threshold(CONFIG_MBEDTLS_DEBUG_LEVEL); | 
 | #endif | 
 |  | 
 | #if defined(CONFIG_MBEDTLS_PSA_CRYPTO_CLIENT) | 
 | 	if (psa_crypto_init() != PSA_SUCCESS) { | 
 | 		return -EIO; | 
 | 	} | 
 | #endif | 
 |  | 
 | 	return 0; | 
 | } | 
 |  | 
 | #if defined(CONFIG_MBEDTLS_INIT) | 
 | SYS_INIT(_mbedtls_init, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); | 
 | #endif | 
 |  | 
 | /* if CONFIG_MBEDTLS_INIT is not defined then this function | 
 |  * should be called by the platform before any mbedtls functionality | 
 |  * is used | 
 |  */ | 
 | int mbedtls_init(void) | 
 | { | 
 | 	return _mbedtls_init(); | 
 | } | 
 |  | 
 | /* TLS 1.3 ticket lifetime needs a timing interface */ | 
 | mbedtls_ms_time_t mbedtls_ms_time(void) | 
 | { | 
 | 	return (mbedtls_ms_time_t)k_uptime_get(); | 
 | } |