Extend psa_crypto_metadata tests to check for powers of 2

Add a check to ensure the block_size is or is not a power of 2

Add a new parameter to verify the expected pass/fail when a block_size
is or is not a power of 2.

Add new sets of input data to verify these tests

Fixes #4228

Signed-off-by: Joe Subbiani <joe.subbiani@arm.com>
diff --git a/tests/suites/test_suite_psa_crypto_metadata.data b/tests/suites/test_suite_psa_crypto_metadata.data
index a3668fc..f5f6327 100644
--- a/tests/suites/test_suite_psa_crypto_metadata.data
+++ b/tests/suites/test_suite_psa_crypto_metadata.data
@@ -293,15 +293,27 @@
 
 Block cipher key type: AES
 depends_on:PSA_WANT_KEY_TYPE_AES
-block_cipher_key_type:PSA_KEY_TYPE_AES:16
+block_cipher_key_type:PSA_KEY_TYPE_AES:16:0
 
 Block cipher key type: DES
 depends_on:PSA_WANT_KEY_TYPE_DES
-block_cipher_key_type:PSA_KEY_TYPE_DES:8
+block_cipher_key_type:PSA_KEY_TYPE_DES:8:0
 
 Block cipher key type: Camellia
 depends_on:PSA_WANT_KEY_TYPE_CAMELLIA
-block_cipher_key_type:PSA_KEY_TYPE_CAMELLIA:16
+block_cipher_key_type:PSA_KEY_TYPE_CAMELLIA:16:0
+
+Block cipher key type: AES
+depends_on:PSA_WANT_KEY_TYPE_AES
+block_cipher_key_type:PSA_KEY_TYPE_AES:24:1
+
+Block cipher key type: AES
+depends_on:PSA_WANT_KEY_TYPE_AES
+block_cipher_key_type:PSA_KEY_TYPE_AES:12:1
+
+Block cipher key type: DES
+depends_on:PSA_WANT_KEY_TYPE_DES
+block_cipher_key_type:PSA_KEY_TYPE_DES:24:1
 
 Stream cipher key type: ChaCha20
 depends_on:PSA_WANT_KEY_TYPE_CHACHA20
diff --git a/tests/suites/test_suite_psa_crypto_metadata.function b/tests/suites/test_suite_psa_crypto_metadata.function
index 4790be6..fbcc83a 100644
--- a/tests/suites/test_suite_psa_crypto_metadata.function
+++ b/tests/suites/test_suite_psa_crypto_metadata.function
@@ -619,7 +619,7 @@
 /* END_CASE */
 
 /* BEGIN_CASE */
-void block_cipher_key_type( int type_arg, int block_size_arg )
+void block_cipher_key_type( int type_arg, int block_size_arg, int expecting_power_2 )
 {
     psa_key_type_t type = type_arg;
     size_t block_size = block_size_arg;
@@ -628,7 +628,27 @@
 
     TEST_EQUAL( type & PSA_KEY_TYPE_CATEGORY_MASK,
                 PSA_KEY_TYPE_CATEGORY_SYMMETRIC );
-    TEST_EQUAL( PSA_BLOCK_CIPHER_BLOCK_LENGTH( type ), block_size );
+
+    if (expecting_power_2 == 0)
+        TEST_EQUAL( PSA_BLOCK_CIPHER_BLOCK_LENGTH( type ), block_size );
+
+    /* PSA_ROUND_UP_TO_MULTIPLE(block_size, length) in crypto_sizes.h
+     * Requires block sizes to be a power of 2. The following test ensures
+     * the block sizes are indeed powers of 2.
+     */
+    int check = 0;
+
+    while( block_size > 1)
+    {
+        if ( block_size % 2 != 0 )
+        {
+            check = 1;
+            break;
+        }
+        block_size = block_size / 2;
+    }
+    /* expecting_power_2 should be 0 if true (e.g 16, 32 etc.) or 1 otherwise */
+    TEST_EQUAL( check, expecting_power_2 );
 }
 /* END_CASE */