1 /* 2 * Context structure declaration of the Mbed TLS software-based PSA drivers 3 * called through the PSA Crypto driver dispatch layer. 4 * This file contains the context structures of those algorithms which need to 5 * rely on other algorithms, i.e. are 'composite' algorithms. 6 * 7 * \note This file may not be included directly. Applications must 8 * include psa/crypto.h. 9 * 10 * \note This header and its content is not part of the Mbed TLS API and 11 * applications must not depend on it. Its main purpose is to define the 12 * multi-part state objects of the Mbed TLS software-based PSA drivers. The 13 * definition of these objects are then used by crypto_struct.h to define the 14 * implementation-defined types of PSA multi-part state objects. 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_BUILTIN_COMPOSITES_H 34 #define PSA_CRYPTO_BUILTIN_COMPOSITES_H 35 36 #include <psa/crypto_driver_common.h> 37 38 /* 39 * MAC multi-part operation definitions. 40 */ 41 #if defined(MBEDTLS_PSA_BUILTIN_ALG_CMAC) || \ 42 defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC) 43 #define MBEDTLS_PSA_BUILTIN_MAC 44 #endif 45 46 #if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC) || defined(PSA_CRYPTO_DRIVER_TEST) 47 typedef struct 48 { 49 /** The HMAC algorithm in use */ 50 psa_algorithm_t alg; 51 /** The hash context. */ 52 struct psa_hash_operation_s hash_ctx; 53 /** The HMAC part of the context. */ 54 uint8_t opad[PSA_HMAC_MAX_HASH_BLOCK_SIZE]; 55 } mbedtls_psa_hmac_operation_t; 56 57 #define MBEDTLS_PSA_HMAC_OPERATION_INIT {0, PSA_HASH_OPERATION_INIT, {0}} 58 #endif /* MBEDTLS_PSA_BUILTIN_ALG_HMAC */ 59 60 #include "mbedtls/cmac.h" 61 62 typedef struct 63 { 64 psa_algorithm_t alg; 65 union 66 { 67 unsigned dummy; /* Make the union non-empty even with no supported algorithms. */ 68 #if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC) || defined(PSA_CRYPTO_DRIVER_TEST) 69 mbedtls_psa_hmac_operation_t hmac; 70 #endif /* MBEDTLS_PSA_BUILTIN_ALG_HMAC */ 71 #if defined(MBEDTLS_PSA_BUILTIN_ALG_CMAC) || defined(PSA_CRYPTO_DRIVER_TEST) 72 mbedtls_cipher_context_t cmac; 73 #endif /* MBEDTLS_PSA_BUILTIN_ALG_CMAC */ 74 } ctx; 75 } mbedtls_psa_mac_operation_t; 76 77 #define MBEDTLS_PSA_MAC_OPERATION_INIT {0, {0}} 78 79 #endif /* PSA_CRYPTO_BUILTIN_COMPOSITES_H */ 80