xref: /aosp_15_r20/external/mbedtls/include/psa/crypto_builtin_primitives.h (revision 62c56f9862f102b96d72393aff6076c951fb8148)
1*62c56f98SSadaf Ebrahimi /*
2*62c56f98SSadaf Ebrahimi  *  Context structure declaration of the Mbed TLS software-based PSA drivers
3*62c56f98SSadaf Ebrahimi  *  called through the PSA Crypto driver dispatch layer.
4*62c56f98SSadaf Ebrahimi  *  This file contains the context structures of those algorithms which do not
5*62c56f98SSadaf Ebrahimi  *  rely on other algorithms, i.e. are 'primitive' algorithms.
6*62c56f98SSadaf Ebrahimi  *
7*62c56f98SSadaf Ebrahimi  * \note This file may not be included directly. Applications must
8*62c56f98SSadaf Ebrahimi  * include psa/crypto.h.
9*62c56f98SSadaf Ebrahimi  *
10*62c56f98SSadaf Ebrahimi  * \note This header and its content are not part of the Mbed TLS API and
11*62c56f98SSadaf Ebrahimi  * applications must not depend on it. Its main purpose is to define the
12*62c56f98SSadaf Ebrahimi  * multi-part state objects of the Mbed TLS software-based PSA drivers. The
13*62c56f98SSadaf Ebrahimi  * definitions of these objects are then used by crypto_struct.h to define the
14*62c56f98SSadaf Ebrahimi  * implementation-defined types of PSA multi-part state objects.
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_BUILTIN_PRIMITIVES_H
22*62c56f98SSadaf Ebrahimi #define PSA_CRYPTO_BUILTIN_PRIMITIVES_H
23*62c56f98SSadaf Ebrahimi #include "mbedtls/private_access.h"
24*62c56f98SSadaf Ebrahimi 
25*62c56f98SSadaf Ebrahimi #include <psa/crypto_driver_common.h>
26*62c56f98SSadaf Ebrahimi 
27*62c56f98SSadaf Ebrahimi /*
28*62c56f98SSadaf Ebrahimi  * Hash multi-part operation definitions.
29*62c56f98SSadaf Ebrahimi  */
30*62c56f98SSadaf Ebrahimi 
31*62c56f98SSadaf Ebrahimi #include "mbedtls/md5.h"
32*62c56f98SSadaf Ebrahimi #include "mbedtls/ripemd160.h"
33*62c56f98SSadaf Ebrahimi #include "mbedtls/sha1.h"
34*62c56f98SSadaf Ebrahimi #include "mbedtls/sha256.h"
35*62c56f98SSadaf Ebrahimi #include "mbedtls/sha512.h"
36*62c56f98SSadaf Ebrahimi #include "mbedtls/sha3.h"
37*62c56f98SSadaf Ebrahimi 
38*62c56f98SSadaf Ebrahimi #if defined(MBEDTLS_PSA_BUILTIN_ALG_MD5) || \
39*62c56f98SSadaf Ebrahimi     defined(MBEDTLS_PSA_BUILTIN_ALG_RIPEMD160) || \
40*62c56f98SSadaf Ebrahimi     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_1) || \
41*62c56f98SSadaf Ebrahimi     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_224) || \
42*62c56f98SSadaf Ebrahimi     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_256) || \
43*62c56f98SSadaf Ebrahimi     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_384) || \
44*62c56f98SSadaf Ebrahimi     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_512) || \
45*62c56f98SSadaf Ebrahimi     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_224) || \
46*62c56f98SSadaf Ebrahimi     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_256) || \
47*62c56f98SSadaf Ebrahimi     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_384) || \
48*62c56f98SSadaf Ebrahimi     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_512)
49*62c56f98SSadaf Ebrahimi #define MBEDTLS_PSA_BUILTIN_HASH
50*62c56f98SSadaf Ebrahimi #endif
51*62c56f98SSadaf Ebrahimi 
52*62c56f98SSadaf Ebrahimi typedef struct {
53*62c56f98SSadaf Ebrahimi     psa_algorithm_t MBEDTLS_PRIVATE(alg);
54*62c56f98SSadaf Ebrahimi     union {
55*62c56f98SSadaf Ebrahimi         unsigned dummy; /* Make the union non-empty even with no supported algorithms. */
56*62c56f98SSadaf Ebrahimi #if defined(MBEDTLS_PSA_BUILTIN_ALG_MD5)
57*62c56f98SSadaf Ebrahimi         mbedtls_md5_context md5;
58*62c56f98SSadaf Ebrahimi #endif
59*62c56f98SSadaf Ebrahimi #if defined(MBEDTLS_PSA_BUILTIN_ALG_RIPEMD160)
60*62c56f98SSadaf Ebrahimi         mbedtls_ripemd160_context ripemd160;
61*62c56f98SSadaf Ebrahimi #endif
62*62c56f98SSadaf Ebrahimi #if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_1)
63*62c56f98SSadaf Ebrahimi         mbedtls_sha1_context sha1;
64*62c56f98SSadaf Ebrahimi #endif
65*62c56f98SSadaf Ebrahimi #if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_256) || \
66*62c56f98SSadaf Ebrahimi         defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_224)
67*62c56f98SSadaf Ebrahimi         mbedtls_sha256_context sha256;
68*62c56f98SSadaf Ebrahimi #endif
69*62c56f98SSadaf Ebrahimi #if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_512) || \
70*62c56f98SSadaf Ebrahimi         defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_384)
71*62c56f98SSadaf Ebrahimi         mbedtls_sha512_context sha512;
72*62c56f98SSadaf Ebrahimi #endif
73*62c56f98SSadaf Ebrahimi #if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_224) || \
74*62c56f98SSadaf Ebrahimi         defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_256) || \
75*62c56f98SSadaf Ebrahimi         defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_384) || \
76*62c56f98SSadaf Ebrahimi         defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_512)
77*62c56f98SSadaf Ebrahimi         mbedtls_sha3_context sha3;
78*62c56f98SSadaf Ebrahimi #endif
79*62c56f98SSadaf Ebrahimi     } MBEDTLS_PRIVATE(ctx);
80*62c56f98SSadaf Ebrahimi } mbedtls_psa_hash_operation_t;
81*62c56f98SSadaf Ebrahimi 
82*62c56f98SSadaf Ebrahimi #define MBEDTLS_PSA_HASH_OPERATION_INIT { 0, { 0 } }
83*62c56f98SSadaf Ebrahimi 
84*62c56f98SSadaf Ebrahimi /*
85*62c56f98SSadaf Ebrahimi  * Cipher multi-part operation definitions.
86*62c56f98SSadaf Ebrahimi  */
87*62c56f98SSadaf Ebrahimi 
88*62c56f98SSadaf Ebrahimi #include "mbedtls/cipher.h"
89*62c56f98SSadaf Ebrahimi 
90*62c56f98SSadaf Ebrahimi #if defined(MBEDTLS_PSA_BUILTIN_ALG_STREAM_CIPHER) || \
91*62c56f98SSadaf Ebrahimi     defined(MBEDTLS_PSA_BUILTIN_ALG_CTR) || \
92*62c56f98SSadaf Ebrahimi     defined(MBEDTLS_PSA_BUILTIN_ALG_CFB) || \
93*62c56f98SSadaf Ebrahimi     defined(MBEDTLS_PSA_BUILTIN_ALG_OFB) || \
94*62c56f98SSadaf Ebrahimi     defined(MBEDTLS_PSA_BUILTIN_ALG_ECB_NO_PADDING) || \
95*62c56f98SSadaf Ebrahimi     defined(MBEDTLS_PSA_BUILTIN_ALG_CBC_NO_PADDING) || \
96*62c56f98SSadaf Ebrahimi     defined(MBEDTLS_PSA_BUILTIN_ALG_CBC_PKCS7) || \
97*62c56f98SSadaf Ebrahimi     defined(MBEDTLS_PSA_BUILTIN_ALG_CCM_STAR_NO_TAG)
98*62c56f98SSadaf Ebrahimi #define MBEDTLS_PSA_BUILTIN_CIPHER  1
99*62c56f98SSadaf Ebrahimi #endif
100*62c56f98SSadaf Ebrahimi 
101*62c56f98SSadaf Ebrahimi typedef struct {
102*62c56f98SSadaf Ebrahimi     /* Context structure for the Mbed TLS cipher implementation. */
103*62c56f98SSadaf Ebrahimi     psa_algorithm_t MBEDTLS_PRIVATE(alg);
104*62c56f98SSadaf Ebrahimi     uint8_t MBEDTLS_PRIVATE(iv_length);
105*62c56f98SSadaf Ebrahimi     uint8_t MBEDTLS_PRIVATE(block_length);
106*62c56f98SSadaf Ebrahimi     union {
107*62c56f98SSadaf Ebrahimi         unsigned int MBEDTLS_PRIVATE(dummy);
108*62c56f98SSadaf Ebrahimi         mbedtls_cipher_context_t MBEDTLS_PRIVATE(cipher);
109*62c56f98SSadaf Ebrahimi     } MBEDTLS_PRIVATE(ctx);
110*62c56f98SSadaf Ebrahimi } mbedtls_psa_cipher_operation_t;
111*62c56f98SSadaf Ebrahimi 
112*62c56f98SSadaf Ebrahimi #define MBEDTLS_PSA_CIPHER_OPERATION_INIT { 0, 0, 0, { 0 } }
113*62c56f98SSadaf Ebrahimi 
114*62c56f98SSadaf Ebrahimi #endif /* PSA_CRYPTO_BUILTIN_PRIMITIVES_H */
115