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 need to 532b31808SJens Wiklander * rely on other algorithms, i.e. are 'composite' 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_COMPOSITES_H 2232b31808SJens Wiklander #define PSA_CRYPTO_BUILTIN_COMPOSITES_H 2332b31808SJens Wiklander #include "mbedtls/private_access.h" 2432b31808SJens Wiklander 2532b31808SJens Wiklander #include <psa/crypto_driver_common.h> 2632b31808SJens Wiklander 27*b0563631STom Van Eyck #include "mbedtls/cmac.h" 28*b0563631STom Van Eyck #if defined(MBEDTLS_PSA_BUILTIN_ALG_GCM) 29*b0563631STom Van Eyck #include "mbedtls/gcm.h" 30*b0563631STom Van Eyck #endif 31*b0563631STom Van Eyck #if defined(MBEDTLS_PSA_BUILTIN_ALG_CCM) 32*b0563631STom Van Eyck #include "mbedtls/ccm.h" 33*b0563631STom Van Eyck #endif 34*b0563631STom Van Eyck #include "mbedtls/chachapoly.h" 35*b0563631STom Van Eyck 3632b31808SJens Wiklander /* 3732b31808SJens Wiklander * MAC multi-part operation definitions. 3832b31808SJens Wiklander */ 3932b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_CMAC) || \ 4032b31808SJens Wiklander defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC) 4132b31808SJens Wiklander #define MBEDTLS_PSA_BUILTIN_MAC 4232b31808SJens Wiklander #endif 4332b31808SJens Wiklander 4432b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC) || defined(PSA_CRYPTO_DRIVER_TEST) 4532b31808SJens Wiklander typedef struct { 4632b31808SJens Wiklander /** The HMAC algorithm in use */ 4732b31808SJens Wiklander psa_algorithm_t MBEDTLS_PRIVATE(alg); 4832b31808SJens Wiklander /** The hash context. */ 4932b31808SJens Wiklander struct psa_hash_operation_s hash_ctx; 5032b31808SJens Wiklander /** The HMAC part of the context. */ 5132b31808SJens Wiklander uint8_t MBEDTLS_PRIVATE(opad)[PSA_HMAC_MAX_HASH_BLOCK_SIZE]; 5232b31808SJens Wiklander } mbedtls_psa_hmac_operation_t; 5332b31808SJens Wiklander 5432b31808SJens Wiklander #define MBEDTLS_PSA_HMAC_OPERATION_INIT { 0, PSA_HASH_OPERATION_INIT, { 0 } } 5532b31808SJens Wiklander #endif /* MBEDTLS_PSA_BUILTIN_ALG_HMAC */ 5632b31808SJens Wiklander 5732b31808SJens Wiklander typedef struct { 5832b31808SJens Wiklander psa_algorithm_t MBEDTLS_PRIVATE(alg); 5932b31808SJens Wiklander union { 6032b31808SJens Wiklander unsigned MBEDTLS_PRIVATE(dummy); /* Make the union non-empty even with no supported algorithms. */ 6132b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC) || defined(PSA_CRYPTO_DRIVER_TEST) 6232b31808SJens Wiklander mbedtls_psa_hmac_operation_t MBEDTLS_PRIVATE(hmac); 6332b31808SJens Wiklander #endif /* MBEDTLS_PSA_BUILTIN_ALG_HMAC */ 6432b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_CMAC) || defined(PSA_CRYPTO_DRIVER_TEST) 6532b31808SJens Wiklander mbedtls_cipher_context_t MBEDTLS_PRIVATE(cmac); 6632b31808SJens Wiklander #endif /* MBEDTLS_PSA_BUILTIN_ALG_CMAC */ 6732b31808SJens Wiklander } MBEDTLS_PRIVATE(ctx); 6832b31808SJens Wiklander } mbedtls_psa_mac_operation_t; 6932b31808SJens Wiklander 7032b31808SJens Wiklander #define MBEDTLS_PSA_MAC_OPERATION_INIT { 0, { 0 } } 7132b31808SJens Wiklander 7232b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_GCM) || \ 7332b31808SJens Wiklander defined(MBEDTLS_PSA_BUILTIN_ALG_CCM) || \ 7432b31808SJens Wiklander defined(MBEDTLS_PSA_BUILTIN_ALG_CHACHA20_POLY1305) 7532b31808SJens Wiklander #define MBEDTLS_PSA_BUILTIN_AEAD 1 7632b31808SJens Wiklander #endif 7732b31808SJens Wiklander 7832b31808SJens Wiklander /* Context structure for the Mbed TLS AEAD implementation. */ 7932b31808SJens Wiklander typedef struct { 8032b31808SJens Wiklander psa_algorithm_t MBEDTLS_PRIVATE(alg); 8132b31808SJens Wiklander psa_key_type_t MBEDTLS_PRIVATE(key_type); 8232b31808SJens Wiklander 8332b31808SJens Wiklander unsigned int MBEDTLS_PRIVATE(is_encrypt) : 1; 8432b31808SJens Wiklander 8532b31808SJens Wiklander uint8_t MBEDTLS_PRIVATE(tag_length); 8632b31808SJens Wiklander 8732b31808SJens Wiklander union { 8832b31808SJens Wiklander unsigned dummy; /* Enable easier initializing of the union. */ 8932b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_CCM) 9032b31808SJens Wiklander mbedtls_ccm_context MBEDTLS_PRIVATE(ccm); 9132b31808SJens Wiklander #endif /* MBEDTLS_PSA_BUILTIN_ALG_CCM */ 9232b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_GCM) 9332b31808SJens Wiklander mbedtls_gcm_context MBEDTLS_PRIVATE(gcm); 9432b31808SJens Wiklander #endif /* MBEDTLS_PSA_BUILTIN_ALG_GCM */ 9532b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_CHACHA20_POLY1305) 9632b31808SJens Wiklander mbedtls_chachapoly_context MBEDTLS_PRIVATE(chachapoly); 9732b31808SJens Wiklander #endif /* MBEDTLS_PSA_BUILTIN_ALG_CHACHA20_POLY1305 */ 9832b31808SJens Wiklander 9932b31808SJens Wiklander } ctx; 10032b31808SJens Wiklander 10132b31808SJens Wiklander } mbedtls_psa_aead_operation_t; 10232b31808SJens Wiklander 10332b31808SJens Wiklander #define MBEDTLS_PSA_AEAD_OPERATION_INIT { 0, 0, 0, 0, { 0 } } 10432b31808SJens Wiklander 10532b31808SJens Wiklander #include "mbedtls/ecdsa.h" 10632b31808SJens Wiklander 10732b31808SJens Wiklander /* Context structure for the Mbed TLS interruptible sign hash implementation. */ 10832b31808SJens Wiklander typedef struct { 10932b31808SJens Wiklander #if (defined(MBEDTLS_PSA_BUILTIN_ALG_ECDSA) || \ 11032b31808SJens Wiklander defined(MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA)) && \ 11132b31808SJens Wiklander defined(MBEDTLS_ECP_RESTARTABLE) 11232b31808SJens Wiklander mbedtls_ecdsa_context *MBEDTLS_PRIVATE(ctx); 11332b31808SJens Wiklander mbedtls_ecdsa_restart_ctx MBEDTLS_PRIVATE(restart_ctx); 11432b31808SJens Wiklander 11532b31808SJens Wiklander uint32_t MBEDTLS_PRIVATE(num_ops); 11632b31808SJens Wiklander 11732b31808SJens Wiklander size_t MBEDTLS_PRIVATE(coordinate_bytes); 11832b31808SJens Wiklander psa_algorithm_t MBEDTLS_PRIVATE(alg); 11932b31808SJens Wiklander mbedtls_md_type_t MBEDTLS_PRIVATE(md_alg); 12032b31808SJens Wiklander uint8_t MBEDTLS_PRIVATE(hash)[PSA_BITS_TO_BYTES(PSA_VENDOR_ECC_MAX_CURVE_BITS)]; 12132b31808SJens Wiklander size_t MBEDTLS_PRIVATE(hash_length); 12232b31808SJens Wiklander 12332b31808SJens Wiklander #else 12432b31808SJens Wiklander /* Make the struct non-empty if algs not supported. */ 12532b31808SJens Wiklander unsigned MBEDTLS_PRIVATE(dummy); 12632b31808SJens Wiklander 12732b31808SJens Wiklander #endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_ECDSA) || 12832b31808SJens Wiklander * defined(MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA) && 12932b31808SJens Wiklander * defined( MBEDTLS_ECP_RESTARTABLE ) */ 13032b31808SJens Wiklander } mbedtls_psa_sign_hash_interruptible_operation_t; 13132b31808SJens Wiklander 13232b31808SJens Wiklander #if (defined(MBEDTLS_PSA_BUILTIN_ALG_ECDSA) || \ 13332b31808SJens Wiklander defined(MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA)) && \ 13432b31808SJens Wiklander defined(MBEDTLS_ECP_RESTARTABLE) 13532b31808SJens Wiklander #define MBEDTLS_PSA_SIGN_HASH_INTERRUPTIBLE_OPERATION_INIT { { 0 }, { 0 }, 0, 0, 0, 0, 0, 0 } 13632b31808SJens Wiklander #else 13732b31808SJens Wiklander #define MBEDTLS_PSA_SIGN_HASH_INTERRUPTIBLE_OPERATION_INIT { 0 } 13832b31808SJens Wiklander #endif 13932b31808SJens Wiklander 14032b31808SJens Wiklander /* Context structure for the Mbed TLS interruptible verify hash 14132b31808SJens Wiklander * implementation.*/ 14232b31808SJens Wiklander typedef struct { 14332b31808SJens Wiklander #if (defined(MBEDTLS_PSA_BUILTIN_ALG_ECDSA) || \ 14432b31808SJens Wiklander defined(MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA)) && \ 14532b31808SJens Wiklander defined(MBEDTLS_ECP_RESTARTABLE) 14632b31808SJens Wiklander 14732b31808SJens Wiklander mbedtls_ecdsa_context *MBEDTLS_PRIVATE(ctx); 14832b31808SJens Wiklander mbedtls_ecdsa_restart_ctx MBEDTLS_PRIVATE(restart_ctx); 14932b31808SJens Wiklander 15032b31808SJens Wiklander uint32_t MBEDTLS_PRIVATE(num_ops); 15132b31808SJens Wiklander 15232b31808SJens Wiklander uint8_t MBEDTLS_PRIVATE(hash)[PSA_BITS_TO_BYTES(PSA_VENDOR_ECC_MAX_CURVE_BITS)]; 15332b31808SJens Wiklander size_t MBEDTLS_PRIVATE(hash_length); 15432b31808SJens Wiklander 15532b31808SJens Wiklander mbedtls_mpi MBEDTLS_PRIVATE(r); 15632b31808SJens Wiklander mbedtls_mpi MBEDTLS_PRIVATE(s); 15732b31808SJens Wiklander 15832b31808SJens Wiklander #else 15932b31808SJens Wiklander /* Make the struct non-empty if algs not supported. */ 16032b31808SJens Wiklander unsigned MBEDTLS_PRIVATE(dummy); 16132b31808SJens Wiklander 16232b31808SJens Wiklander #endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_ECDSA) || 16332b31808SJens Wiklander * defined(MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA) && 16432b31808SJens Wiklander * defined( MBEDTLS_ECP_RESTARTABLE ) */ 16532b31808SJens Wiklander 16632b31808SJens Wiklander } mbedtls_psa_verify_hash_interruptible_operation_t; 16732b31808SJens Wiklander 16832b31808SJens Wiklander #if (defined(MBEDTLS_PSA_BUILTIN_ALG_ECDSA) || \ 16932b31808SJens Wiklander defined(MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA)) && \ 17032b31808SJens Wiklander defined(MBEDTLS_ECP_RESTARTABLE) 17132b31808SJens Wiklander #define MBEDTLS_VERIFY_SIGN_HASH_INTERRUPTIBLE_OPERATION_INIT { { 0 }, { 0 }, 0, 0, 0, 0, { 0 }, \ 17232b31808SJens Wiklander { 0 } } 17332b31808SJens Wiklander #else 17432b31808SJens Wiklander #define MBEDTLS_VERIFY_SIGN_HASH_INTERRUPTIBLE_OPERATION_INIT { 0 } 17532b31808SJens Wiklander #endif 17632b31808SJens Wiklander 17732b31808SJens Wiklander 17832b31808SJens Wiklander /* EC-JPAKE operation definitions */ 17932b31808SJens Wiklander 18032b31808SJens Wiklander #include "mbedtls/ecjpake.h" 18132b31808SJens Wiklander 18232b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_JPAKE) 18332b31808SJens Wiklander #define MBEDTLS_PSA_BUILTIN_PAKE 1 18432b31808SJens Wiklander #endif 18532b31808SJens Wiklander 18632b31808SJens Wiklander /* Note: the format for mbedtls_ecjpake_read/write function has an extra 18732b31808SJens Wiklander * length byte for each step, plus an extra 3 bytes for ECParameters in the 18832b31808SJens Wiklander * server's 2nd round. */ 18932b31808SJens Wiklander #define MBEDTLS_PSA_JPAKE_BUFFER_SIZE ((3 + 1 + 65 + 1 + 65 + 1 + 32) * 2) 19032b31808SJens Wiklander 19132b31808SJens Wiklander typedef struct { 19232b31808SJens Wiklander psa_algorithm_t MBEDTLS_PRIVATE(alg); 19332b31808SJens Wiklander 19432b31808SJens Wiklander uint8_t *MBEDTLS_PRIVATE(password); 19532b31808SJens Wiklander size_t MBEDTLS_PRIVATE(password_len); 19632b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_JPAKE) 197*b0563631STom Van Eyck mbedtls_ecjpake_role MBEDTLS_PRIVATE(role); 19832b31808SJens Wiklander uint8_t MBEDTLS_PRIVATE(buffer[MBEDTLS_PSA_JPAKE_BUFFER_SIZE]); 19932b31808SJens Wiklander size_t MBEDTLS_PRIVATE(buffer_length); 20032b31808SJens Wiklander size_t MBEDTLS_PRIVATE(buffer_offset); 20132b31808SJens Wiklander #endif 20232b31808SJens Wiklander /* Context structure for the Mbed TLS EC-JPAKE implementation. */ 20332b31808SJens Wiklander union { 20432b31808SJens Wiklander unsigned int MBEDTLS_PRIVATE(dummy); 20532b31808SJens Wiklander #if defined(MBEDTLS_PSA_BUILTIN_ALG_JPAKE) 20632b31808SJens Wiklander mbedtls_ecjpake_context MBEDTLS_PRIVATE(jpake); 20732b31808SJens Wiklander #endif 20832b31808SJens Wiklander } MBEDTLS_PRIVATE(ctx); 20932b31808SJens Wiklander 21032b31808SJens Wiklander } mbedtls_psa_pake_operation_t; 21132b31808SJens Wiklander 21232b31808SJens Wiklander #define MBEDTLS_PSA_PAKE_OPERATION_INIT { { 0 } } 21332b31808SJens Wiklander 21432b31808SJens Wiklander #endif /* PSA_CRYPTO_BUILTIN_COMPOSITES_H */ 215