xref: /aosp_15_r20/external/mbedtls/include/psa/crypto_platform.h (revision 62c56f9862f102b96d72393aff6076c951fb8148)
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 Ebrahimi static 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