1*62c56f98SSadaf Ebrahimi /** 2*62c56f98SSadaf Ebrahimi * \file psa/crypto_platform.h 3*62c56f98SSadaf Ebrahimi * 4*62c56f98SSadaf Ebrahimi * \brief PSA cryptography module: Mbed TLS platform definitions 5*62c56f98SSadaf Ebrahimi * 6*62c56f98SSadaf Ebrahimi * \note This file may not be included directly. Applications must 7*62c56f98SSadaf Ebrahimi * include psa/crypto.h. 8*62c56f98SSadaf Ebrahimi * 9*62c56f98SSadaf Ebrahimi * This file contains platform-dependent type definitions. 10*62c56f98SSadaf Ebrahimi * 11*62c56f98SSadaf Ebrahimi * In implementations with isolation between the application and the 12*62c56f98SSadaf Ebrahimi * cryptography module, implementers should take care to ensure that 13*62c56f98SSadaf Ebrahimi * the definitions that are exposed to applications match what the 14*62c56f98SSadaf Ebrahimi * module implements. 15*62c56f98SSadaf Ebrahimi */ 16*62c56f98SSadaf Ebrahimi /* 17*62c56f98SSadaf Ebrahimi * Copyright The Mbed TLS Contributors 18*62c56f98SSadaf Ebrahimi * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 19*62c56f98SSadaf Ebrahimi */ 20*62c56f98SSadaf Ebrahimi 21*62c56f98SSadaf Ebrahimi #ifndef PSA_CRYPTO_PLATFORM_H 22*62c56f98SSadaf Ebrahimi #define PSA_CRYPTO_PLATFORM_H 23*62c56f98SSadaf Ebrahimi #include "mbedtls/private_access.h" 24*62c56f98SSadaf Ebrahimi 25*62c56f98SSadaf Ebrahimi /* 26*62c56f98SSadaf Ebrahimi * Include the build-time configuration information file. Here, we do not 27*62c56f98SSadaf Ebrahimi * include `"mbedtls/build_info.h"` directly but `"psa/build_info.h"`, which 28*62c56f98SSadaf Ebrahimi * is basically just an alias to it. This is to ease the maintenance of the 29*62c56f98SSadaf Ebrahimi * PSA cryptography repository which has a different build system and 30*62c56f98SSadaf Ebrahimi * configuration. 31*62c56f98SSadaf Ebrahimi */ 32*62c56f98SSadaf Ebrahimi #include "psa/build_info.h" 33*62c56f98SSadaf Ebrahimi 34*62c56f98SSadaf Ebrahimi /* PSA requires several types which C99 provides in stdint.h. */ 35*62c56f98SSadaf Ebrahimi #include <stdint.h> 36*62c56f98SSadaf Ebrahimi 37*62c56f98SSadaf Ebrahimi #if defined(MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER) 38*62c56f98SSadaf Ebrahimi 39*62c56f98SSadaf Ebrahimi /* Building for the PSA Crypto service on a PSA platform, a key owner is a PSA 40*62c56f98SSadaf Ebrahimi * partition identifier. 41*62c56f98SSadaf Ebrahimi * 42*62c56f98SSadaf Ebrahimi * The function psa_its_identifier_of_slot() in psa_crypto_storage.c that 43*62c56f98SSadaf Ebrahimi * translates a key identifier to a key storage file name assumes that 44*62c56f98SSadaf Ebrahimi * mbedtls_key_owner_id_t is a 32-bit integer. This function thus needs 45*62c56f98SSadaf Ebrahimi * reworking if mbedtls_key_owner_id_t is not defined as a 32-bit integer 46*62c56f98SSadaf Ebrahimi * here anymore. 47*62c56f98SSadaf Ebrahimi */ 48*62c56f98SSadaf Ebrahimi typedef int32_t mbedtls_key_owner_id_t; 49*62c56f98SSadaf Ebrahimi 50*62c56f98SSadaf Ebrahimi /** Compare two key owner identifiers. 51*62c56f98SSadaf Ebrahimi * 52*62c56f98SSadaf Ebrahimi * \param id1 First key owner identifier. 53*62c56f98SSadaf Ebrahimi * \param id2 Second key owner identifier. 54*62c56f98SSadaf Ebrahimi * 55*62c56f98SSadaf Ebrahimi * \return Non-zero if the two key owner identifiers are equal, zero otherwise. 56*62c56f98SSadaf Ebrahimi */ mbedtls_key_owner_id_equal(mbedtls_key_owner_id_t id1,mbedtls_key_owner_id_t id2)57*62c56f98SSadaf Ebrahimistatic inline int mbedtls_key_owner_id_equal(mbedtls_key_owner_id_t id1, 58*62c56f98SSadaf Ebrahimi mbedtls_key_owner_id_t id2) 59*62c56f98SSadaf Ebrahimi { 60*62c56f98SSadaf Ebrahimi return id1 == id2; 61*62c56f98SSadaf Ebrahimi } 62*62c56f98SSadaf Ebrahimi 63*62c56f98SSadaf Ebrahimi #endif /* MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER */ 64*62c56f98SSadaf Ebrahimi 65*62c56f98SSadaf Ebrahimi /* 66*62c56f98SSadaf Ebrahimi * When MBEDTLS_PSA_CRYPTO_SPM is defined, the code is being built for SPM 67*62c56f98SSadaf Ebrahimi * (Secure Partition Manager) integration which separates the code into two 68*62c56f98SSadaf Ebrahimi * parts: NSPE (Non-Secure Processing Environment) and SPE (Secure Processing 69*62c56f98SSadaf Ebrahimi * Environment). When building for the SPE, an additional header file should be 70*62c56f98SSadaf Ebrahimi * included. 71*62c56f98SSadaf Ebrahimi */ 72*62c56f98SSadaf Ebrahimi #if defined(MBEDTLS_PSA_CRYPTO_SPM) 73*62c56f98SSadaf Ebrahimi #define PSA_CRYPTO_SECURE 1 74*62c56f98SSadaf Ebrahimi #include "crypto_spe.h" 75*62c56f98SSadaf Ebrahimi #endif // MBEDTLS_PSA_CRYPTO_SPM 76*62c56f98SSadaf Ebrahimi 77*62c56f98SSadaf Ebrahimi #if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) 78*62c56f98SSadaf Ebrahimi /** The type of the context passed to mbedtls_psa_external_get_random(). 79*62c56f98SSadaf Ebrahimi * 80*62c56f98SSadaf Ebrahimi * Mbed TLS initializes the context to all-bits-zero before calling 81*62c56f98SSadaf Ebrahimi * mbedtls_psa_external_get_random() for the first time. 82*62c56f98SSadaf Ebrahimi * 83*62c56f98SSadaf Ebrahimi * The definition of this type in the Mbed TLS source code is for 84*62c56f98SSadaf Ebrahimi * demonstration purposes. Implementers of mbedtls_psa_external_get_random() 85*62c56f98SSadaf Ebrahimi * are expected to replace it with a custom definition. 86*62c56f98SSadaf Ebrahimi */ 87*62c56f98SSadaf Ebrahimi typedef struct { 88*62c56f98SSadaf Ebrahimi uintptr_t MBEDTLS_PRIVATE(opaque)[2]; 89*62c56f98SSadaf Ebrahimi } mbedtls_psa_external_random_context_t; 90*62c56f98SSadaf Ebrahimi #endif /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ 91*62c56f98SSadaf Ebrahimi 92*62c56f98SSadaf Ebrahimi #endif /* PSA_CRYPTO_PLATFORM_H */ 93