cipher: keep MBEDTLS_CIPHER_HAVE symbols private

This commit also improve the usage of these new symbols in
cipher_wrap code

Signed-off-by: Valerio Setti <valerio.setti@nordicsemi.no>
This commit is contained in:
Valerio Setti 2023-10-11 12:46:16 +02:00
parent e570704f1f
commit db1ca8fc33
5 changed files with 64 additions and 61 deletions

View File

@ -33,27 +33,6 @@
#include <stddef.h> #include <stddef.h>
#include "mbedtls/platform_util.h" #include "mbedtls/platform_util.h"
/* Support for GCM either through Mbed TLS SW implementation or PSA */
#if defined(MBEDTLS_GCM_C) || \
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_GCM))
#define MBEDTLS_CIPHER_HAVE_GCM
#endif
/* Support for CCM either through Mbed TLS SW implementation or PSA */
#if defined(MBEDTLS_CCM_C) || \
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM))
#define MBEDTLS_CIPHER_HAVE_CCM
#endif
/* Support for CHACHAPOLY either through Mbed TLS SW implementation or PSA */
#if defined(MBEDTLS_CHACHAPOLY_C) || \
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CHACHA20_POLY1305))
#define MBEDTLS_CIPHER_HAVE_CHACHAPOLY
#endif
#if defined(MBEDTLS_CIPHER_HAVE_GCM) || defined(MBEDTLS_CIPHER_HAVE_CCM) || \
defined(MBEDTLS_CIPHER_HAVE_CHACHAPOLY)
#define MBEDTLS_CIPHER_MODE_AEAD
#endif
#if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_CIPHER_MODE_CBC)
#define MBEDTLS_CIPHER_MODE_WITH_PADDING #define MBEDTLS_CIPHER_MODE_WITH_PADDING
#endif #endif
@ -1097,7 +1076,7 @@ int mbedtls_cipher_crypt(mbedtls_cipher_context_t *ctx,
const unsigned char *input, size_t ilen, const unsigned char *input, size_t ilen,
unsigned char *output, size_t *olen); unsigned char *output, size_t *olen);
#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) #if defined(MBEDTLS_CIPHER_HAVE_SOME_AEAD) || defined(MBEDTLS_NIST_KW_C)
/** /**
* \brief The authenticated encryption (AEAD/NIST_KW) function. * \brief The authenticated encryption (AEAD/NIST_KW) function.
* *
@ -1204,7 +1183,7 @@ int mbedtls_cipher_auth_decrypt_ext(mbedtls_cipher_context_t *ctx,
const unsigned char *input, size_t ilen, const unsigned char *input, size_t ilen,
unsigned char *output, size_t output_len, unsigned char *output, size_t output_len,
size_t *olen, size_t tag_len); size_t *olen, size_t tag_len);
#endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */ #endif /* MBEDTLS_CIPHER_HAVE_SOME_AEAD || MBEDTLS_NIST_KW_C */
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -1390,7 +1390,7 @@ int mbedtls_cipher_crypt(mbedtls_cipher_context_t *ctx,
return 0; return 0;
} }
#if defined(MBEDTLS_CIPHER_MODE_AEAD) #if defined(MBEDTLS_CIPHER_HAVE_SOME_AEAD)
/* /*
* Packet-oriented encryption for AEAD modes: internal function used by * Packet-oriented encryption for AEAD modes: internal function used by
* mbedtls_cipher_auth_encrypt_ext(). * mbedtls_cipher_auth_encrypt_ext().
@ -1569,9 +1569,9 @@ static int mbedtls_cipher_aead_decrypt(mbedtls_cipher_context_t *ctx,
return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE;
} }
#endif /* MBEDTLS_CIPHER_MODE_AEAD */ #endif /* MBEDTLS_CIPHER_HAVE_SOME_AEAD */
#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) #if defined(MBEDTLS_CIPHER_HAVE_SOME_AEAD) || defined(MBEDTLS_NIST_KW_C)
/* /*
* Packet-oriented encryption for AEAD/NIST_KW: public function. * Packet-oriented encryption for AEAD/NIST_KW: public function.
*/ */
@ -1607,7 +1607,7 @@ int mbedtls_cipher_auth_encrypt_ext(mbedtls_cipher_context_t *ctx,
} }
#endif /* MBEDTLS_NIST_KW_C */ #endif /* MBEDTLS_NIST_KW_C */
#if defined(MBEDTLS_CIPHER_MODE_AEAD) #if defined(MBEDTLS_CIPHER_HAVE_SOME_AEAD)
/* AEAD case: check length before passing on to shared function */ /* AEAD case: check length before passing on to shared function */
if (output_len < ilen + tag_len) { if (output_len < ilen + tag_len) {
return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA; return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
@ -1620,7 +1620,7 @@ int mbedtls_cipher_auth_encrypt_ext(mbedtls_cipher_context_t *ctx,
return ret; return ret;
#else #else
return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE;
#endif /* MBEDTLS_CIPHER_MODE_AEAD */ #endif /* MBEDTLS_CIPHER_HAVE_SOME_AEAD */
} }
/* /*
@ -1658,7 +1658,7 @@ int mbedtls_cipher_auth_decrypt_ext(mbedtls_cipher_context_t *ctx,
} }
#endif /* MBEDTLS_NIST_KW_C */ #endif /* MBEDTLS_NIST_KW_C */
#if defined(MBEDTLS_CIPHER_MODE_AEAD) #if defined(MBEDTLS_CIPHER_HAVE_SOME_AEAD)
/* AEAD case: check length before passing on to shared function */ /* AEAD case: check length before passing on to shared function */
if (ilen < tag_len || output_len < ilen - tag_len) { if (ilen < tag_len || output_len < ilen - tag_len) {
return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA; return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
@ -1669,8 +1669,8 @@ int mbedtls_cipher_auth_decrypt_ext(mbedtls_cipher_context_t *ctx,
input + ilen - tag_len, tag_len); input + ilen - tag_len, tag_len);
#else #else
return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE;
#endif /* MBEDTLS_CIPHER_MODE_AEAD */ #endif /* MBEDTLS_CIPHER_HAVE_SOME_AEAD */
} }
#endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */ #endif /* MBEDTLS_CIPHER_HAVE_SOME_AEAD || MBEDTLS_NIST_KW_C */
#endif /* MBEDTLS_CIPHER_C */ #endif /* MBEDTLS_CIPHER_C */

View File

@ -80,8 +80,7 @@ enum mbedtls_cipher_base_index {
#if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CAMELLIA_C)
MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA, MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
#endif #endif
#if (defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)) || \ #if defined(MBEDTLS_CIPHER_HAVE_CCM_AES)
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM))
MBEDTLS_CIPHER_BASE_INDEX_CCM_AES, MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
#endif #endif
#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C) #if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
@ -105,8 +104,7 @@ enum mbedtls_cipher_base_index {
#if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_DES_C)
MBEDTLS_CIPHER_BASE_INDEX_DES, MBEDTLS_CIPHER_BASE_INDEX_DES,
#endif #endif
#if (defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)) || \ #if defined(MBEDTLS_CIPHER_HAVE_GCM_AES)
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_GCM))
MBEDTLS_CIPHER_BASE_INDEX_GCM_AES, MBEDTLS_CIPHER_BASE_INDEX_GCM_AES,
#endif #endif
#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C) #if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
@ -580,8 +578,7 @@ static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
} }
#endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_GCM_C */
#if defined(MBEDTLS_GCM_C) || \ #if defined(MBEDTLS_CIPHER_HAVE_GCM)
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_GCM))
static const mbedtls_cipher_base_t gcm_aes_info = { static const mbedtls_cipher_base_t gcm_aes_info = {
MBEDTLS_CIPHER_ID_AES, MBEDTLS_CIPHER_ID_AES,
NULL, NULL,
@ -615,10 +612,9 @@ static const mbedtls_cipher_base_t gcm_aes_info = {
NULL, NULL,
#endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_GCM_C */
}; };
#endif /* MBEDTLS_GCM_C || (MBEDTLS_USE_PSA_CRYPTO && PSA_WANT_ALG_GCM) */ #endif /* MBEDTLS_CIPHER_HAVE_GCM */
#if defined(MBEDTLS_GCM_C) || \ #if defined(MBEDTLS_CIPHER_HAVE_GCM)
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_GCM))
static const mbedtls_cipher_info_t aes_128_gcm_info = { static const mbedtls_cipher_info_t aes_128_gcm_info = {
"AES-128-GCM", "AES-128-GCM",
16, 16,
@ -653,7 +649,7 @@ static const mbedtls_cipher_info_t aes_256_gcm_info = {
MBEDTLS_CIPHER_BASE_INDEX_GCM_AES MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
}; };
#endif #endif
#endif /* MBEDTLS_GCM_C || PSA_WANT_ALG_GCM */ #endif /* MBEDTLS_CIPHER_HAVE_GCM */
#if defined(MBEDTLS_CCM_C) #if defined(MBEDTLS_CCM_C)
static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key, static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
@ -664,8 +660,7 @@ static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
} }
#endif /* MBEDTLS_CCM_C */ #endif /* MBEDTLS_CCM_C */
#if defined(MBEDTLS_CCM_C) || \ #if defined(MBEDTLS_CIPHER_HAVE_CCM)
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM))
static const mbedtls_cipher_base_t ccm_aes_info = { static const mbedtls_cipher_base_t ccm_aes_info = {
MBEDTLS_CIPHER_ID_AES, MBEDTLS_CIPHER_ID_AES,
NULL, NULL,
@ -699,10 +694,9 @@ static const mbedtls_cipher_base_t ccm_aes_info = {
NULL, NULL,
#endif #endif
}; };
#endif /* MBEDTLS_CCM_C || (MBEDTLS_USE_PSA_CRYPTO && PSA_WANT_ALG_CCM) */ #endif /* MBEDTLS_CIPHER_HAVE_CCM */
#if defined(MBEDTLS_CCM_C) || \ #if defined(MBEDTLS_CIPHER_HAVE_CCM)
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM))
static const mbedtls_cipher_info_t aes_128_ccm_info = { static const mbedtls_cipher_info_t aes_128_ccm_info = {
"AES-128-CCM", "AES-128-CCM",
16, 16,
@ -737,10 +731,9 @@ static const mbedtls_cipher_info_t aes_256_ccm_info = {
MBEDTLS_CIPHER_BASE_INDEX_CCM_AES MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
}; };
#endif #endif
#endif /* MBEDTLS_CCM_C || PSA_WANT_ALG_CCM */ #endif /* MBEDTLS_CIPHER_HAVE_CCM */
#if defined(MBEDTLS_CCM_C) || \ #if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG)
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM_STAR_NO_TAG))
static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = { static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
"AES-128-CCM*-NO-TAG", "AES-128-CCM*-NO-TAG",
16, 16,
@ -775,7 +768,7 @@ static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
MBEDTLS_CIPHER_BASE_INDEX_CCM_AES MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
}; };
#endif #endif
#endif /* MBEDTLS_CCM_C || PSA_WANT_ALG_CCM_STAR_NO_TAG */ #endif /* MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG */
#endif /* MBEDTLS_AES_C */ #endif /* MBEDTLS_AES_C */
@ -2276,24 +2269,21 @@ const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
{ MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info }, { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
#endif #endif
#endif #endif
#if defined(MBEDTLS_GCM_C) || \ #if defined(MBEDTLS_CIPHER_HAVE_GCM)
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_GCM))
{ MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info }, { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH) #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
{ MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info }, { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
{ MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info }, { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
#endif #endif
#endif #endif
#if defined(MBEDTLS_CCM_C) || \ #if defined(MBEDTLS_CIPHER_HAVE_CCM)
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM))
{ MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info }, { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH) #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
{ MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info }, { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
{ MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info }, { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
#endif #endif
#endif #endif
#if defined(MBEDTLS_CCM_C) || \ #if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG)
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM_STAR_NO_TAG))
{ MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info }, { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH) #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
{ MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info }, { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
@ -2423,8 +2413,7 @@ const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
#if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CAMELLIA_C)
[MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info, [MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info,
#endif #endif
#if (defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)) || \ #if defined(MBEDTLS_CIPHER_HAVE_CCM_AES)
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM) && defined(PSA_WANT_KEY_TYPE_AES))
[MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info, [MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info,
#endif #endif
#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C) #if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
@ -2448,8 +2437,7 @@ const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
#if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_DES_C)
[MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info, [MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info,
#endif #endif
#if (defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)) || \ #if defined(MBEDTLS_CIPHER_HAVE_GCM_AES)
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_GCM) && defined(PSA_WANT_KEY_TYPE_AES))
[MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info, [MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info,
#endif #endif
#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C) #if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)

View File

@ -36,6 +36,42 @@
extern "C" { extern "C" {
#endif #endif
/* Support for GCM either through Mbed TLS SW implementation or PSA */
#if defined(MBEDTLS_GCM_C) || \
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_GCM))
#define MBEDTLS_CIPHER_HAVE_GCM
#endif
#if (defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)) || \
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_GCM) && defined(PSA_WANT_KEY_TYPE_AES))
#define MBEDTLS_CIPHER_HAVE_GCM_AES
#endif
#if defined(MBEDTLS_CCM_C) || \
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM))
#define MBEDTLS_CIPHER_HAVE_CCM
#endif
#if (defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)) || \
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM) && defined(PSA_WANT_KEY_TYPE_AES))
#define MBEDTLS_CIPHER_HAVE_CCM_AES
#endif
#if defined(MBEDTLS_CCM_C) || \
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM_STAR_NO_TAG))
#define MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG
#endif
#if defined(MBEDTLS_CHACHAPOLY_C) || \
(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CHACHA20_POLY1305))
#define MBEDTLS_CIPHER_HAVE_CHACHAPOLY
#endif
#if defined(MBEDTLS_CIPHER_HAVE_GCM) || defined(MBEDTLS_CIPHER_HAVE_CCM) || \
defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG) || defined(MBEDTLS_CIPHER_HAVE_CHACHAPOLY)
#define MBEDTLS_CIPHER_HAVE_SOME_AEAD
#endif
/** /**
* Base cipher information. The non-mode specific functions and values. * Base cipher information. The non-mode specific functions and values.
*/ */

View File

@ -6,7 +6,7 @@
#include "mbedtls/gcm.h" #include "mbedtls/gcm.h"
#endif #endif
#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) #if defined(MBEDTLS_CIPHER_HAVE_SOME_AEAD) || defined(MBEDTLS_NIST_KW_C)
#define MBEDTLS_CIPHER_AUTH_CRYPT #define MBEDTLS_CIPHER_AUTH_CRYPT
#endif #endif