From d6f635e3f33a3776b011f0ea00759cd172548092 Mon Sep 17 00:00:00 2001 From: Minos Galanakis Date: Wed, 25 Feb 2026 16:12:16 +0000 Subject: [PATCH] test_suite_ccm: Added a test for invalid tag_len inputs. Signed-off-by: Minos Galanakis --- tests/suites/test_suite_ccm.data | 58 ++++++++++++++++++++++++++++ tests/suites/test_suite_ccm.function | 29 ++++++++++++++ 2 files changed, 87 insertions(+) diff --git a/tests/suites/test_suite_ccm.data b/tests/suites/test_suite_ccm.data index 22150f7a71..f3dfe0f41f 100644 --- a/tests/suites/test_suite_ccm.data +++ b/tests/suites/test_suite_ccm.data @@ -1746,6 +1746,64 @@ CCM* decrypt, instant finish AES-128 (P=0, N=13, A=0, T=16) depends_on:MBEDTLS_CCM_GCM_CAN_AES mbedtls_ccm_instant_finish:MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_STAR_DECRYPT:"54caf96ef6d448734700aadab50faf7a":"a3803e752ae849c910d8da36af" +CCM finish check-boundary encrypt tag_len=8, finish_tag_len=32 +depends_on:MBEDTLS_CCM_GCM_CAN_AES +mbedtls_ccm_finish_boundary:MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_ENCRYPT:8:32:MBEDTLS_ERR_CCM_BAD_INPUT:"54caf96ef6d448734700aadab50faf7a":"a3803e752ae849c910d8da36af" + +CCM finish check-boundary encrypt tag_len=8, finish_tag_len=8 +depends_on:MBEDTLS_CCM_GCM_CAN_AES +mbedtls_ccm_finish_boundary:MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_ENCRYPT:8:8:0:"54caf96ef6d448734700aadab50faf7a":"a3803e752ae849c910d8da36af" + +CCM finish check-boundary decrypt tag_len=8, finish_tag_len=32 +depends_on:MBEDTLS_CCM_GCM_CAN_AES +mbedtls_ccm_finish_boundary:MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_DECRYPT:8:32:MBEDTLS_ERR_CCM_BAD_INPUT:"54caf96ef6d448734700aadab50faf7a":"a3803e752ae849c910d8da36af" + +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:"54caf96ef6d448734700aadab50faf7a":"a3803e752ae849c910d8da36af" + +# CCM finish boundary matrix (encrypt) +CCM finish check-boundary encrypt tag_len=16, finish_tag_len=16 +depends_on:MBEDTLS_CCM_GCM_CAN_AES +mbedtls_ccm_finish_boundary:MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_ENCRYPT:16:16:0:"54caf96ef6d448734700aadab50faf7a":"a3803e752ae849c910d8da36af" + +CCM finish check-boundary encrypt tag_len=8, finish_tag_len=16 +depends_on:MBEDTLS_CCM_GCM_CAN_AES +mbedtls_ccm_finish_boundary:MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_ENCRYPT:8:16:MBEDTLS_ERR_CCM_BAD_INPUT:"54caf96ef6d448734700aadab50faf7a":"a3803e752ae849c910d8da36af" + +CCM finish check-boundary encrypt tag_len=16, finish_tag_len=17 +depends_on:MBEDTLS_CCM_GCM_CAN_AES +mbedtls_ccm_finish_boundary:MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_ENCRYPT:16:17:MBEDTLS_ERR_CCM_BAD_INPUT:"54caf96ef6d448734700aadab50faf7a":"a3803e752ae849c910d8da36af" + +CCM finish check-boundary encrypt tag_len=16, finish_tag_len=4000 +depends_on:MBEDTLS_CCM_GCM_CAN_AES +mbedtls_ccm_finish_boundary:MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_ENCRYPT:16:4000:MBEDTLS_ERR_CCM_BAD_INPUT:"54caf96ef6d448734700aadab50faf7a":"a3803e752ae849c910d8da36af" + +CCM finish check-boundary encrypt tag_len=16, finish_tag_len=8 +depends_on:MBEDTLS_CCM_GCM_CAN_AES +mbedtls_ccm_finish_boundary:MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_ENCRYPT:16:8:MBEDTLS_ERR_CCM_BAD_INPUT:"54caf96ef6d448734700aadab50faf7a":"a3803e752ae849c910d8da36af" + +# CCM finish boundary matrix (decrypt) +CCM finish check-boundary decrypt tag_len=16, finish_tag_len=16 +depends_on:MBEDTLS_CCM_GCM_CAN_AES +mbedtls_ccm_finish_boundary:MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_DECRYPT:16:16:0:"54caf96ef6d448734700aadab50faf7a":"a3803e752ae849c910d8da36af" + +CCM finish check-boundary decrypt tag_len=8, finish_tag_len=16 +depends_on:MBEDTLS_CCM_GCM_CAN_AES +mbedtls_ccm_finish_boundary:MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_DECRYPT:8:16:MBEDTLS_ERR_CCM_BAD_INPUT:"54caf96ef6d448734700aadab50faf7a":"a3803e752ae849c910d8da36af" + +CCM finish check-boundary decrypt tag_len=16, finish_tag_len=17 +depends_on:MBEDTLS_CCM_GCM_CAN_AES +mbedtls_ccm_finish_boundary:MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_DECRYPT:16:17:MBEDTLS_ERR_CCM_BAD_INPUT:"54caf96ef6d448734700aadab50faf7a":"a3803e752ae849c910d8da36af" + +CCM finish check-boundary decrypt tag_len=16, finish_tag_len=4000 +depends_on:MBEDTLS_CCM_GCM_CAN_AES +mbedtls_ccm_finish_boundary:MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_DECRYPT:16:4000:MBEDTLS_ERR_CCM_BAD_INPUT:"54caf96ef6d448734700aadab50faf7a":"a3803e752ae849c910d8da36af" + +CCM finish check-boundary decrypt tag_len=16, finish_tag_len=8 +depends_on:MBEDTLS_CCM_GCM_CAN_AES +mbedtls_ccm_finish_boundary:MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_DECRYPT:16:8:MBEDTLS_ERR_CCM_BAD_INPUT:"54caf96ef6d448734700aadab50faf7a":"a3803e752ae849c910d8da36af" + CCM pass unexpected auth data, NIST VPT AES-128 #14 (P=13, N=13, A=32, T=16) depends_on:MBEDTLS_CCM_GCM_CAN_AES mbedtls_ccm_unexpected_ad::MBEDTLS_CIPHER_ID_AES:MBEDTLS_CCM_ENCRYPT:"d32088d50df9aba14d9022c870a0cb85":"e16c69861efc206e85aab1255e":"0eff7d7bcceb873c3203a8df74f4e91b04bd607ec11202f96cfeb99f5bcdb7aa" diff --git a/tests/suites/test_suite_ccm.function b/tests/suites/test_suite_ccm.function index 798be77013..cf54d2d591 100644 --- a/tests/suites/test_suite_ccm.function +++ b/tests/suites/test_suite_ccm.function @@ -906,3 +906,32 @@ exit: BLOCK_CIPHER_PSA_DONE(); } /* END_CASE */ + +/* BEGIN_CASE */ +void mbedtls_ccm_finish_boundary(int cipher_id, int mode, + int start_tag_len, int finish_tag_len, + int expected_finish_ret, + data_t *key, data_t *iv) +{ + mbedtls_ccm_context ctx; + unsigned char *tag = NULL; + + mbedtls_ccm_init(&ctx); + + BLOCK_CIPHER_PSA_INIT(); + TEST_EQUAL(mbedtls_ccm_setkey(&ctx, cipher_id, key->x, key->len * 8), 0); + TEST_EQUAL(0, mbedtls_ccm_starts(&ctx, mode, iv->x, iv->len)); + + /* Use the caller-provided tag length during setup, then finish with a + * different tag length to exercise boundary handling/API complianece */ + 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, + mbedtls_ccm_finish(&ctx, tag, finish_tag_len)); +exit: + mbedtls_free(tag); + mbedtls_ccm_free(&ctx); + BLOCK_CIPHER_PSA_DONE(); +} +/* END_CASE */