Updated mbedtls_ccm_finish_boundary to handle zero len tags

Signed-off-by: Minos Galanakis <[email protected]>
This commit is contained in:
Minos Galanakis
2026-03-12 12:00:23 +00:00
parent e8a2499d4e
commit 5311a6e220
2 changed files with 22 additions and 4 deletions
+8
View File
@@ -1762,6 +1762,14 @@ CCM finish check-boundary decrypt tag_len=8, finish_tag_len=8
depends_on:MBEDTLS_CCM_GCM_CAN_AES
mbedtls_ccm_finish_boundary:MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_DECRYPT:8:8:0
CCM finish check-boundary encrypt tag_len=0, finish_tag_len=0
depends_on:MBEDTLS_CCM_GCM_CAN_AES
mbedtls_ccm_finish_boundary:MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_ENCRYPT:0:0:MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED
CCM finish check-boundary decrypt tag_len=0, finish_tag_len=0
depends_on:MBEDTLS_CCM_GCM_CAN_AES
mbedtls_ccm_finish_boundary:MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_DECRYPT:0:0:MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED
# CCM finish boundary matrix (encrypt)
CCM finish check-boundary encrypt tag_len=16, finish_tag_len=16
depends_on:MBEDTLS_CCM_GCM_CAN_AES
+14 -4
View File
@@ -925,11 +925,21 @@ void mbedtls_ccm_finish_boundary(int cipher_id, int mode,
BLOCK_CIPHER_PSA_INIT();
TEST_EQUAL(mbedtls_ccm_setkey(&ctx, cipher_id, key, sizeof(key) * 8), 0);
TEST_EQUAL(0, mbedtls_ccm_starts(&ctx, mode, iv, sizeof(iv)));
/* Use the caller-provided tag length during setup, then finish with a
* different tag length to exercise boundary handling/API compliance */
TEST_EQUAL(0, mbedtls_ccm_set_lengths(&ctx, 0, 0, (size_t) start_tag_len));
/* For non-CCM* with tag_len=0, validate the mbedtls_ccm_set_lengths path
* when ccm_calculate_first_block_if_ready() fails. */
if (start_tag_len == 0) {
TEST_EQUAL(0, mbedtls_ccm_set_lengths(&ctx, 0, 0, (size_t) start_tag_len));
TEST_EQUAL(MBEDTLS_ERR_CCM_BAD_INPUT,
mbedtls_ccm_starts(&ctx, mode, iv, sizeof(iv)));
/* Use the caller-provided tag length during setup, then finish with a
* different tag length to exercise boundary handling/API compliance */
} else {
TEST_EQUAL(0, mbedtls_ccm_starts(&ctx, mode, iv, sizeof(iv)));
TEST_EQUAL(0, mbedtls_ccm_set_lengths(&ctx, 0, 0, (size_t) start_tag_len));
}
TEST_CALLOC(tag, finish_tag_len);
TEST_EQUAL(expected_finish_ret,