@@ -710,7 +710,7 @@ exit:
710
710
/* END_CASE */
711
711
712
712
/* BEGIN_CASE */
713
- void dec_empty_buf( )
713
+ void dec_empty_buf( int cipher )
714
714
{
715
715
unsigned char key[32];
716
716
unsigned char iv[16];
@@ -723,6 +723,8 @@ void dec_empty_buf( )
723
723
724
724
size_t outlen = 0;
725
725
726
+ int expected_ret;
727
+
726
728
memset( key, 0, 32 );
727
729
memset( iv , 0, 16 );
728
730
@@ -732,12 +734,15 @@ void dec_empty_buf( )
732
734
memset( decbuf, 0, 64 );
733
735
734
736
/* Initialise context */
735
- cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_CBC );
737
+ cipher_info = mbedtls_cipher_info_from_type( cipher );
736
738
TEST_ASSERT( NULL != cipher_info);
739
+ TEST_ASSERT( sizeof(key) * 8 >= cipher_info->key_bitlen );
737
740
738
741
TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) );
739
742
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 ) );
741
746
742
747
TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) );
743
748
@@ -750,8 +755,23 @@ void dec_empty_buf( )
750
755
/* decode 0-byte string */
751
756
TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, 0, decbuf, &outlen ) );
752
757
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 ) );
755
775
TEST_ASSERT( 0 == outlen );
756
776
757
777
exit:
0 commit comments