@@ -710,7 +710,7 @@ exit:
710710/* END_CASE */
711711
712712/* BEGIN_CASE */
713- void dec_empty_buf( )
713+ void dec_empty_buf( int cipher )
714714{
715715 unsigned char key[32];
716716 unsigned char iv[16];
@@ -723,6 +723,8 @@ void dec_empty_buf( )
723723
724724 size_t outlen = 0;
725725
726+ int expected_ret;
727+
726728 memset( key, 0, 32 );
727729 memset( iv , 0, 16 );
728730
@@ -732,12 +734,15 @@ void dec_empty_buf( )
732734 memset( decbuf, 0, 64 );
733735
734736 /* Initialise context */
735- cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_CBC );
737+ cipher_info = mbedtls_cipher_info_from_type( cipher );
736738 TEST_ASSERT( NULL != cipher_info);
739+ TEST_ASSERT( sizeof(key) * 8 >= cipher_info->key_bitlen );
737740
738741 TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) );
739742
740- TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, 128, MBEDTLS_DECRYPT ) );
743+ TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec,
744+ key, cipher_info->key_bitlen,
745+ MBEDTLS_DECRYPT ) );
741746
742747 TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) );
743748
@@ -750,8 +755,23 @@ void dec_empty_buf( )
750755 /* decode 0-byte string */
751756 TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, 0, decbuf, &outlen ) );
752757 TEST_ASSERT( 0 == outlen );
753- TEST_ASSERT( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED == mbedtls_cipher_finish(
754- &ctx_dec, decbuf + outlen, &outlen ) );
758+
759+ if ( cipher_info->mode == MBEDTLS_MODE_CBC ||
760+ cipher_info->mode == MBEDTLS_MODE_ECB )
761+ {
762+ /* CBC and ECB ciphers need a full block of input. */
763+ expected_ret = MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED;
764+ }
765+ else
766+ {
767+ /* Non-CBC and non-ECB ciphers are OK with decrypting empty buffers and
768+ * return success, not MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED, when
769+ * decrypting an empty buffer. */
770+ expected_ret = 0;
771+ }
772+
773+ TEST_ASSERT( expected_ret == mbedtls_cipher_finish(
774+ &ctx_dec, decbuf + outlen, &outlen ) );
755775 TEST_ASSERT( 0 == outlen );
756776
757777exit:
0 commit comments