1 /** 2 * \file psa/crypto_platform.h 3 * 4 * \brief PSA cryptography module: Mbed TLS platform definitions 5 * 6 * \note This file may not be included directly. Applications must 7 * include psa/crypto.h. 8 * 9 * This file contains platform-dependent type definitions. 10 * 11 * In implementations with isolation between the application and the 12 * cryptography module, implementers should take care to ensure that 13 * the definitions that are exposed to applications match what the 14 * module implements. 15 */ 16 /* 17 * Copyright The Mbed TLS Contributors 18 * SPDX-License-Identifier: Apache-2.0 19 * 20 * Licensed under the Apache License, Version 2.0 (the "License"); you may 21 * not use this file except in compliance with the License. 22 * You may obtain a copy of the License at 23 * 24 * http://www.apache.org/licenses/LICENSE-2.0 25 * 26 * Unless required by applicable law or agreed to in writing, software 27 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 28 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 29 * See the License for the specific language governing permissions and 30 * limitations under the License. 31 */ 32 33 #ifndef PSA_CRYPTO_PLATFORM_H 34 #define PSA_CRYPTO_PLATFORM_H 35 #include "mbedtls/private_access.h" 36 37 /* Include the Mbed TLS configuration file, the way Mbed TLS does it 38 * in each of its header files. */ 39 #include "mbedtls/build_info.h" 40 41 /* Translate between classic MBEDTLS_xxx feature symbols and PSA_xxx 42 * feature symbols. */ 43 #include "mbedtls/config_psa.h" 44 45 /* PSA requires several types which C99 provides in stdint.h. */ 46 #include <stdint.h> 47 48 #if defined(MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER) 49 50 /* Building for the PSA Crypto service on a PSA platform, a key owner is a PSA 51 * partition identifier. 52 * 53 * The function psa_its_identifier_of_slot() in psa_crypto_storage.c that 54 * translates a key identifier to a key storage file name assumes that 55 * mbedtls_key_owner_id_t is a 32-bit integer. This function thus needs 56 * reworking if mbedtls_key_owner_id_t is not defined as a 32-bit integer 57 * here anymore. 58 */ 59 typedef int32_t mbedtls_key_owner_id_t; 60 61 /** Compare two key owner identifiers. 62 * 63 * \param id1 First key owner identifier. 64 * \param id2 Second key owner identifier. 65 * 66 * \return Non-zero if the two key owner identifiers are equal, zero otherwise. 67 */ 68 static inline int mbedtls_key_owner_id_equal(mbedtls_key_owner_id_t id1, 69 mbedtls_key_owner_id_t id2) 70 { 71 return id1 == id2; 72 } 73 74 #endif /* MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER */ 75 76 /* 77 * When MBEDTLS_PSA_CRYPTO_SPM is defined, the code is being built for SPM 78 * (Secure Partition Manager) integration which separates the code into two 79 * parts: NSPE (Non-Secure Processing Environment) and SPE (Secure Processing 80 * Environment). When building for the SPE, an additional header file should be 81 * included. 82 */ 83 #if defined(MBEDTLS_PSA_CRYPTO_SPM) 84 #define PSA_CRYPTO_SECURE 1 85 #include "crypto_spe.h" 86 #endif // MBEDTLS_PSA_CRYPTO_SPM 87 88 #if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) 89 /** The type of the context passed to mbedtls_psa_external_get_random(). 90 * 91 * Mbed TLS initializes the context to all-bits-zero before calling 92 * mbedtls_psa_external_get_random() for the first time. 93 * 94 * The definition of this type in the Mbed TLS source code is for 95 * demonstration purposes. Implementers of mbedtls_psa_external_get_random() 96 * are expected to replace it with a custom definition. 97 */ 98 typedef struct { 99 uintptr_t MBEDTLS_PRIVATE(opaque)[2]; 100 } mbedtls_psa_external_random_context_t; 101 #endif /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ 102 103 #endif /* PSA_CRYPTO_PLATFORM_H */ 104