xref: /optee_os/lib/libmbedtls/mbedtls/include/psa/crypto_builtin_primitives.h (revision b0563631928755fe864b97785160fb3088e9efdc)
132b31808SJens Wiklander /*
232b31808SJens Wiklander  *  Context structure declaration of the Mbed TLS software-based PSA drivers
332b31808SJens Wiklander  *  called through the PSA Crypto driver dispatch layer.
432b31808SJens Wiklander  *  This file contains the context structures of those algorithms which do not
532b31808SJens Wiklander  *  rely on other algorithms, i.e. are 'primitive' algorithms.
632b31808SJens Wiklander  *
732b31808SJens Wiklander  * \note This file may not be included directly. Applications must
832b31808SJens Wiklander  * include psa/crypto.h.
932b31808SJens Wiklander  *
10*b0563631STom Van Eyck  * \note This header and its content are not part of the Mbed TLS API and
1132b31808SJens Wiklander  * applications must not depend on it. Its main purpose is to define the
1232b31808SJens Wiklander  * multi-part state objects of the Mbed TLS software-based PSA drivers. The
13*b0563631STom Van Eyck  * definitions of these objects are then used by crypto_struct.h to define the
1432b31808SJens Wiklander  * implementation-defined types of PSA multi-part state objects.
1532b31808SJens Wiklander  */
1632b31808SJens Wiklander /*
1732b31808SJens Wiklander  *  Copyright The Mbed TLS Contributors
18*b0563631STom Van Eyck  *  SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
1932b31808SJens Wiklander  */
2032b31808SJens Wiklander 
2132b31808SJens Wiklander #ifndef PSA_CRYPTO_BUILTIN_PRIMITIVES_H
2232b31808SJens Wiklander #define PSA_CRYPTO_BUILTIN_PRIMITIVES_H
2332b31808SJens Wiklander #include "mbedtls/private_access.h"
2432b31808SJens Wiklander 
2532b31808SJens Wiklander #include <psa/crypto_driver_common.h>
2632b31808SJens Wiklander 
2732b31808SJens Wiklander /*
2832b31808SJens Wiklander  * Hash multi-part operation definitions.
2932b31808SJens Wiklander  */
3032b31808SJens Wiklander 
3132b31808SJens Wiklander #include "mbedtls/md5.h"
3232b31808SJens Wiklander #include "mbedtls/ripemd160.h"
3332b31808SJens Wiklander #include "mbedtls/sha1.h"
3432b31808SJens Wiklander #include "mbedtls/sha256.h"
3532b31808SJens Wiklander #include "mbedtls/sha512.h"
36*b0563631STom Van Eyck #include "mbedtls/sha3.h"
3732b31808SJens Wiklander 
3832b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_MD5) || \
3932b31808SJens Wiklander     defined(MBEDTLS_PSA_BUILTIN_ALG_RIPEMD160) || \
4032b31808SJens Wiklander     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_1) || \
4132b31808SJens Wiklander     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_224) || \
4232b31808SJens Wiklander     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_256) || \
4332b31808SJens Wiklander     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_384) || \
44*b0563631STom Van Eyck     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_512) || \
45*b0563631STom Van Eyck     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_224) || \
46*b0563631STom Van Eyck     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_256) || \
47*b0563631STom Van Eyck     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_384) || \
48*b0563631STom Van Eyck     defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_512)
4932b31808SJens Wiklander #define MBEDTLS_PSA_BUILTIN_HASH
5032b31808SJens Wiklander #endif
5132b31808SJens Wiklander 
5232b31808SJens Wiklander typedef struct {
5332b31808SJens Wiklander     psa_algorithm_t MBEDTLS_PRIVATE(alg);
5432b31808SJens Wiklander     union {
5532b31808SJens Wiklander         unsigned dummy; /* Make the union non-empty even with no supported algorithms. */
5632b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_MD5)
5732b31808SJens Wiklander         mbedtls_md5_context md5;
5832b31808SJens Wiklander #endif
5932b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_RIPEMD160)
6032b31808SJens Wiklander         mbedtls_ripemd160_context ripemd160;
6132b31808SJens Wiklander #endif
6232b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_1)
6332b31808SJens Wiklander         mbedtls_sha1_context sha1;
6432b31808SJens Wiklander #endif
6532b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_256) || \
6632b31808SJens Wiklander         defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_224)
6732b31808SJens Wiklander         mbedtls_sha256_context sha256;
6832b31808SJens Wiklander #endif
6932b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_512) || \
7032b31808SJens Wiklander         defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_384)
7132b31808SJens Wiklander         mbedtls_sha512_context sha512;
7232b31808SJens Wiklander #endif
73*b0563631STom Van Eyck #if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_224) || \
74*b0563631STom Van Eyck         defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_256) || \
75*b0563631STom Van Eyck         defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_384) || \
76*b0563631STom Van Eyck         defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_512)
77*b0563631STom Van Eyck         mbedtls_sha3_context sha3;
78*b0563631STom Van Eyck #endif
7932b31808SJens Wiklander     } MBEDTLS_PRIVATE(ctx);
8032b31808SJens Wiklander } mbedtls_psa_hash_operation_t;
8132b31808SJens Wiklander 
8232b31808SJens Wiklander #define MBEDTLS_PSA_HASH_OPERATION_INIT { 0, { 0 } }
8332b31808SJens Wiklander 
8432b31808SJens Wiklander /*
8532b31808SJens Wiklander  * Cipher multi-part operation definitions.
8632b31808SJens Wiklander  */
8732b31808SJens Wiklander 
8832b31808SJens Wiklander #include "mbedtls/cipher.h"
8932b31808SJens Wiklander 
9032b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_STREAM_CIPHER) || \
9132b31808SJens Wiklander     defined(MBEDTLS_PSA_BUILTIN_ALG_CTR) || \
9232b31808SJens Wiklander     defined(MBEDTLS_PSA_BUILTIN_ALG_CFB) || \
9332b31808SJens Wiklander     defined(MBEDTLS_PSA_BUILTIN_ALG_OFB) || \
9432b31808SJens Wiklander     defined(MBEDTLS_PSA_BUILTIN_ALG_ECB_NO_PADDING) || \
9532b31808SJens Wiklander     defined(MBEDTLS_PSA_BUILTIN_ALG_CBC_NO_PADDING) || \
96*b0563631STom Van Eyck     defined(MBEDTLS_PSA_BUILTIN_ALG_CBC_PKCS7) || \
97*b0563631STom Van Eyck     defined(MBEDTLS_PSA_BUILTIN_ALG_CCM_STAR_NO_TAG)
9832b31808SJens Wiklander #define MBEDTLS_PSA_BUILTIN_CIPHER  1
9932b31808SJens Wiklander #endif
10032b31808SJens Wiklander 
10132b31808SJens Wiklander typedef struct {
10232b31808SJens Wiklander     /* Context structure for the Mbed TLS cipher implementation. */
10332b31808SJens Wiklander     psa_algorithm_t MBEDTLS_PRIVATE(alg);
10432b31808SJens Wiklander     uint8_t MBEDTLS_PRIVATE(iv_length);
10532b31808SJens Wiklander     uint8_t MBEDTLS_PRIVATE(block_length);
10632b31808SJens Wiklander     union {
10732b31808SJens Wiklander         unsigned int MBEDTLS_PRIVATE(dummy);
10832b31808SJens Wiklander         mbedtls_cipher_context_t MBEDTLS_PRIVATE(cipher);
10932b31808SJens Wiklander     } MBEDTLS_PRIVATE(ctx);
11032b31808SJens Wiklander } mbedtls_psa_cipher_operation_t;
11132b31808SJens Wiklander 
11232b31808SJens Wiklander #define MBEDTLS_PSA_CIPHER_OPERATION_INIT { 0, 0, 0, { 0 } }
11332b31808SJens Wiklander 
11432b31808SJens Wiklander #endif /* PSA_CRYPTO_BUILTIN_PRIMITIVES_H */
115