/** * \file block_cipher.h * * \brief Internal abstraction layer. */ /* * Copyright The Mbed TLS Contributors * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */ #ifndef MBEDTLS_BLOCK_CIPHER_H #define MBEDTLS_BLOCK_CIPHER_H #include "mbedtls/private_access.h" #include "mbedtls/build_info.h" #if defined(MBEDTLS_AES_C) #include "mbedtls/aes.h" #endif #if defined(MBEDTLS_ARIA_C) #include "mbedtls/aria.h" #endif #if defined(MBEDTLS_CAMELLIA_C) #include "mbedtls/camellia.h" #endif #if defined(MBEDTLS_BLOCK_CIPHER_SOME_PSA) #include "psa/crypto_types.h" #endif #ifdef __cplusplus extern "C" { #endif typedef enum { MBEDTLS_BLOCK_CIPHER_ID_NONE = 0, /**< Unset. */ MBEDTLS_BLOCK_CIPHER_ID_AES, /**< The AES cipher. */ MBEDTLS_BLOCK_CIPHER_ID_CAMELLIA, /**< The Camellia cipher. */ MBEDTLS_BLOCK_CIPHER_ID_ARIA, /**< The Aria cipher. */ } mbedtls_block_cipher_id_t; /** * Used internally to indicate whether a context uses legacy or PSA. * * Internal use only. */ typedef enum { MBEDTLS_BLOCK_CIPHER_ENGINE_LEGACY = 0, MBEDTLS_BLOCK_CIPHER_ENGINE_PSA, } mbedtls_block_cipher_engine_t; typedef struct { mbedtls_block_cipher_id_t MBEDTLS_PRIVATE(id); #if defined(MBEDTLS_BLOCK_CIPHER_SOME_PSA) mbedtls_block_cipher_engine_t MBEDTLS_PRIVATE(engine); mbedtls_svc_key_id_t MBEDTLS_PRIVATE(psa_key_id); #endif union { unsigned dummy; /* Make the union non-empty even with no supported algorithms. */ #if defined(MBEDTLS_AES_C) mbedtls_aes_context MBEDTLS_PRIVATE(aes); #endif #if defined(MBEDTLS_ARIA_C) mbedtls_aria_context MBEDTLS_PRIVATE(aria); #endif #if defined(MBEDTLS_CAMELLIA_C) mbedtls_camellia_context MBEDTLS_PRIVATE(camellia); #endif } MBEDTLS_PRIVATE(ctx); } mbedtls_block_cipher_context_t; #ifdef __cplusplus } #endif #endif /* MBEDTLS_BLOCK_CIPHER_H */