diff --git a/tests/src/drivers/hash.c b/tests/src/drivers/hash.c
index b1880f7..d57ce6c 100644
--- a/tests/src/drivers/hash.c
+++ b/tests/src/drivers/hash.c
@@ -47,7 +47,7 @@
                 hash, hash_size, hash_length );
     }
 
-    return( mbedtls_test_driver_hash_hooks.driver_status );
+    return mbedtls_test_driver_hash_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_transparent_hash_setup(
@@ -67,7 +67,7 @@
             mbedtls_transparent_test_driver_hash_setup( operation, alg );
     }
 
-    return( mbedtls_test_driver_hash_hooks.driver_status );
+    return mbedtls_test_driver_hash_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_transparent_hash_clone(
@@ -88,7 +88,7 @@
                                                         target_operation );
     }
 
-    return( mbedtls_test_driver_hash_hooks.driver_status );
+    return mbedtls_test_driver_hash_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_transparent_hash_update(
@@ -110,7 +110,7 @@
                 operation, input, input_length );
     }
 
-    return( mbedtls_test_driver_hash_hooks.driver_status );
+    return mbedtls_test_driver_hash_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_transparent_hash_finish(
@@ -133,7 +133,7 @@
                 operation, hash, hash_size, hash_length );
     }
 
-    return( mbedtls_test_driver_hash_hooks.driver_status );
+    return mbedtls_test_driver_hash_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_transparent_hash_abort(
@@ -152,6 +152,6 @@
             mbedtls_transparent_test_driver_hash_abort( operation );
     }
 
-    return( mbedtls_test_driver_hash_hooks.driver_status );
+    return mbedtls_test_driver_hash_hooks.driver_status ;
 }
 #endif /* MBEDTLS_PSA_CRYPTO_DRIVERS && PSA_CRYPTO_DRIVER_TEST */
diff --git a/tests/src/drivers/platform_builtin_keys.c b/tests/src/drivers/platform_builtin_keys.c
index da5865d..6d125a0 100644
--- a/tests/src/drivers/platform_builtin_keys.c
+++ b/tests/src/drivers/platform_builtin_keys.c
@@ -85,9 +85,9 @@
         {
             *lifetime = builtin_key->lifetime;
             *slot_number = builtin_key->slot_number;
-            return( PSA_SUCCESS );
+            return PSA_SUCCESS ;
         }
     }
 
-    return( PSA_ERROR_DOES_NOT_EXIST );
+    return PSA_ERROR_DOES_NOT_EXIST ;
 }
diff --git a/tests/src/drivers/test_driver_aead.c b/tests/src/drivers/test_driver_aead.c
index ce9ce37..76afcd7 100644
--- a/tests/src/drivers/test_driver_aead.c
+++ b/tests/src/drivers/test_driver_aead.c
@@ -55,7 +55,7 @@
                 ciphertext, ciphertext_size, ciphertext_length );
     }
 
-    return( mbedtls_test_driver_aead_hooks.driver_status );
+    return mbedtls_test_driver_aead_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_transparent_aead_decrypt(
@@ -86,7 +86,7 @@
                 plaintext, plaintext_size, plaintext_length );
     }
 
-    return( mbedtls_test_driver_aead_hooks.driver_status );
+    return mbedtls_test_driver_aead_hooks.driver_status ;
 }
 
 #endif /* MBEDTLS_PSA_CRYPTO_DRIVERS && PSA_CRYPTO_DRIVER_TEST */
diff --git a/tests/src/drivers/test_driver_cipher.c b/tests/src/drivers/test_driver_cipher.c
index 89a7b59..20d79d8 100644
--- a/tests/src/drivers/test_driver_cipher.c
+++ b/tests/src/drivers/test_driver_cipher.c
@@ -51,18 +51,18 @@
     if( mbedtls_test_driver_cipher_hooks.forced_output != NULL )
     {
         if( output_size < mbedtls_test_driver_cipher_hooks.forced_output_length )
-            return( PSA_ERROR_BUFFER_TOO_SMALL );
+            return PSA_ERROR_BUFFER_TOO_SMALL ;
 
         memcpy( output,
                 mbedtls_test_driver_cipher_hooks.forced_output,
                 mbedtls_test_driver_cipher_hooks.forced_output_length );
         *output_length = mbedtls_test_driver_cipher_hooks.forced_output_length;
 
-        return( mbedtls_test_driver_cipher_hooks.forced_status );
+        return mbedtls_test_driver_cipher_hooks.forced_status ;
     }
 
     if( mbedtls_test_driver_cipher_hooks.forced_status != PSA_SUCCESS )
-        return( mbedtls_test_driver_cipher_hooks.forced_status );
+        return mbedtls_test_driver_cipher_hooks.forced_status ;
 
     psa_generate_random( output, PSA_CIPHER_IV_LENGTH( attributes->core.type, alg ) );
 
@@ -88,18 +88,18 @@
     if( mbedtls_test_driver_cipher_hooks.forced_output != NULL )
     {
         if( output_size < mbedtls_test_driver_cipher_hooks.forced_output_length )
-            return( PSA_ERROR_BUFFER_TOO_SMALL );
+            return PSA_ERROR_BUFFER_TOO_SMALL ;
 
         memcpy( output,
                 mbedtls_test_driver_cipher_hooks.forced_output,
                 mbedtls_test_driver_cipher_hooks.forced_output_length );
         *output_length = mbedtls_test_driver_cipher_hooks.forced_output_length;
 
-        return( mbedtls_test_driver_cipher_hooks.forced_status );
+        return mbedtls_test_driver_cipher_hooks.forced_status ;
     }
 
     if( mbedtls_test_driver_cipher_hooks.forced_status != PSA_SUCCESS )
-        return( mbedtls_test_driver_cipher_hooks.forced_status );
+        return mbedtls_test_driver_cipher_hooks.forced_status ;
 
     return( mbedtls_transparent_test_driver_cipher_decrypt(
                 attributes, key_buffer, key_buffer_size,
@@ -122,7 +122,7 @@
     memset( operation, 0, sizeof( *operation ) );
 
     if( mbedtls_test_driver_cipher_hooks.forced_status != PSA_SUCCESS )
-        return( mbedtls_test_driver_cipher_hooks.forced_status );
+        return mbedtls_test_driver_cipher_hooks.forced_status ;
 
     return ( mbedtls_transparent_test_driver_cipher_encrypt_setup(
                  operation, attributes, key, key_length, alg ) );
@@ -137,7 +137,7 @@
     mbedtls_test_driver_cipher_hooks.hits++;
 
     if( mbedtls_test_driver_cipher_hooks.forced_status != PSA_SUCCESS )
-        return( mbedtls_test_driver_cipher_hooks.forced_status );
+        return mbedtls_test_driver_cipher_hooks.forced_status ;
 
     return ( mbedtls_transparent_test_driver_cipher_decrypt_setup(
                  operation, attributes, key, key_length, alg ) );
@@ -149,7 +149,7 @@
     mbedtls_test_driver_cipher_hooks.hits++;
 
     if( operation->alg == 0 )
-        return( PSA_SUCCESS );
+        return PSA_SUCCESS ;
 
     mbedtls_transparent_test_driver_cipher_abort( operation );
 
@@ -159,7 +159,7 @@
      * our context struct. */
     memset( operation, 0, sizeof( *operation ) );
 
-    return( mbedtls_test_driver_cipher_hooks.forced_status );
+    return mbedtls_test_driver_cipher_hooks.forced_status ;
 }
 
 psa_status_t mbedtls_test_transparent_cipher_set_iv(
@@ -170,7 +170,7 @@
     mbedtls_test_driver_cipher_hooks.hits++;
 
     if( mbedtls_test_driver_cipher_hooks.forced_status != PSA_SUCCESS )
-        return( mbedtls_test_driver_cipher_hooks.forced_status );
+        return mbedtls_test_driver_cipher_hooks.forced_status ;
 
     return( mbedtls_transparent_test_driver_cipher_set_iv(
                 operation, iv, iv_length ) );
@@ -196,11 +196,11 @@
                 mbedtls_test_driver_cipher_hooks.forced_output_length );
         *output_length = mbedtls_test_driver_cipher_hooks.forced_output_length;
 
-        return( mbedtls_test_driver_cipher_hooks.forced_status );
+        return mbedtls_test_driver_cipher_hooks.forced_status ;
     }
 
     if( mbedtls_test_driver_cipher_hooks.forced_status != PSA_SUCCESS )
-        return( mbedtls_test_driver_cipher_hooks.forced_status );
+        return mbedtls_test_driver_cipher_hooks.forced_status ;
 
     return( mbedtls_transparent_test_driver_cipher_update(
                 operation, input, input_length,
@@ -225,11 +225,11 @@
                 mbedtls_test_driver_cipher_hooks.forced_output_length );
         *output_length = mbedtls_test_driver_cipher_hooks.forced_output_length;
 
-        return( mbedtls_test_driver_cipher_hooks.forced_status );
+        return mbedtls_test_driver_cipher_hooks.forced_status ;
     }
 
     if( mbedtls_test_driver_cipher_hooks.forced_status != PSA_SUCCESS )
-        return( mbedtls_test_driver_cipher_hooks.forced_status );
+        return mbedtls_test_driver_cipher_hooks.forced_status ;
 
     return( mbedtls_transparent_test_driver_cipher_finish(
                 operation, output, output_size, output_length ) );
@@ -254,7 +254,7 @@
     (void) output;
     (void) output_size;
     (void) output_length;
-    return( PSA_ERROR_NOT_SUPPORTED );
+    return PSA_ERROR_NOT_SUPPORTED ;
 }
 
 psa_status_t mbedtls_test_opaque_cipher_decrypt(
@@ -273,7 +273,7 @@
     (void) output;
     (void) output_size;
     (void) output_length;
-    return( PSA_ERROR_NOT_SUPPORTED );
+    return PSA_ERROR_NOT_SUPPORTED ;
 }
 
 psa_status_t mbedtls_test_opaque_cipher_encrypt_setup(
@@ -287,7 +287,7 @@
     (void) key;
     (void) key_length;
     (void) alg;
-    return( PSA_ERROR_NOT_SUPPORTED );
+    return PSA_ERROR_NOT_SUPPORTED ;
 }
 
 psa_status_t mbedtls_test_opaque_cipher_decrypt_setup(
@@ -301,14 +301,14 @@
     (void) key;
     (void) key_length;
     (void) alg;
-    return( PSA_ERROR_NOT_SUPPORTED );
+    return PSA_ERROR_NOT_SUPPORTED ;
 }
 
 psa_status_t mbedtls_test_opaque_cipher_abort(
     mbedtls_opaque_test_driver_cipher_operation_t *operation )
 {
     (void) operation;
-    return( PSA_ERROR_NOT_SUPPORTED );
+    return PSA_ERROR_NOT_SUPPORTED ;
 }
 
 psa_status_t mbedtls_test_opaque_cipher_set_iv(
@@ -319,7 +319,7 @@
     (void) operation;
     (void) iv;
     (void) iv_length;
-    return( PSA_ERROR_NOT_SUPPORTED );
+    return PSA_ERROR_NOT_SUPPORTED ;
 }
 
 psa_status_t mbedtls_test_opaque_cipher_update(
@@ -336,7 +336,7 @@
     (void) output;
     (void) output_size;
     (void) output_length;
-    return( PSA_ERROR_NOT_SUPPORTED );
+    return PSA_ERROR_NOT_SUPPORTED ;
 }
 
 psa_status_t mbedtls_test_opaque_cipher_finish(
@@ -349,6 +349,6 @@
     (void) output;
     (void) output_size;
     (void) output_length;
-    return( PSA_ERROR_NOT_SUPPORTED );
+    return PSA_ERROR_NOT_SUPPORTED ;
 }
 #endif /* MBEDTLS_PSA_CRYPTO_DRIVERS && PSA_CRYPTO_DRIVER_TEST */
diff --git a/tests/src/drivers/test_driver_key_management.c b/tests/src/drivers/test_driver_key_management.c
index afa1fc2..d2bc9b8 100644
--- a/tests/src/drivers/test_driver_key_management.c
+++ b/tests/src/drivers/test_driver_key_management.c
@@ -63,17 +63,17 @@
     ++mbedtls_test_driver_key_management_hooks.hits;
 
     if( mbedtls_test_driver_key_management_hooks.forced_status != PSA_SUCCESS )
-        return( mbedtls_test_driver_key_management_hooks.forced_status );
+        return mbedtls_test_driver_key_management_hooks.forced_status ;
 
     if( mbedtls_test_driver_key_management_hooks.forced_output != NULL )
     {
         if( mbedtls_test_driver_key_management_hooks.forced_output_length >
             key_size )
-            return( PSA_ERROR_BUFFER_TOO_SMALL );
+            return PSA_ERROR_BUFFER_TOO_SMALL ;
         memcpy( key, mbedtls_test_driver_key_management_hooks.forced_output,
                 mbedtls_test_driver_key_management_hooks.forced_output_length );
         *key_length = mbedtls_test_driver_key_management_hooks.forced_output_length;
-        return( PSA_SUCCESS );
+        return PSA_SUCCESS ;
     }
 
     /* Copied from psa_crypto.c */
@@ -95,7 +95,7 @@
 #endif /* defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_KEY_PAIR) */
     {
         (void)attributes;
-        return( PSA_ERROR_NOT_SUPPORTED );
+        return PSA_ERROR_NOT_SUPPORTED ;
     }
 }
 
@@ -107,7 +107,7 @@
     (void) key;
     (void) key_size;
     (void) key_length;
-    return( PSA_ERROR_NOT_SUPPORTED );
+    return PSA_ERROR_NOT_SUPPORTED ;
 }
 
 psa_status_t mbedtls_test_transparent_import_key(
@@ -122,7 +122,7 @@
     ++mbedtls_test_driver_key_management_hooks.hits;
 
     if( mbedtls_test_driver_key_management_hooks.forced_status != PSA_SUCCESS )
-        return( mbedtls_test_driver_key_management_hooks.forced_status );
+        return mbedtls_test_driver_key_management_hooks.forced_status ;
 
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
     psa_key_type_t type = psa_get_key_type( attributes );
@@ -162,7 +162,7 @@
         (void)type;
     }
 
-    return( status );
+    return status ;
 }
 
 psa_status_t mbedtls_test_opaque_export_key(
@@ -173,7 +173,7 @@
     if( key_length != sizeof( psa_drv_slot_number_t ) )
     {
         /* Test driver does not support generic opaque key handling yet. */
-        return( PSA_ERROR_NOT_SUPPORTED );
+        return PSA_ERROR_NOT_SUPPORTED ;
     }
 
     /* Assume this is a builtin key based on the key material length. */
@@ -186,47 +186,47 @@
              * returning the private key. */
             if( psa_get_key_type( attributes ) !=
                 PSA_KEY_TYPE_ECC_KEY_PAIR( PSA_ECC_FAMILY_SECP_R1 ) )
-                return( PSA_ERROR_CORRUPTION_DETECTED );
+                return PSA_ERROR_CORRUPTION_DETECTED ;
             if( psa_get_key_bits( attributes ) != 256 )
-                return( PSA_ERROR_CORRUPTION_DETECTED );
+                return PSA_ERROR_CORRUPTION_DETECTED ;
             if( psa_get_key_algorithm( attributes ) !=
                 PSA_ALG_ECDSA( PSA_ALG_ANY_HASH ) )
-                return( PSA_ERROR_CORRUPTION_DETECTED );
+                return PSA_ERROR_CORRUPTION_DETECTED ;
             if( ( psa_get_key_usage_flags( attributes ) &
                   PSA_KEY_USAGE_EXPORT ) == 0 )
-                return( PSA_ERROR_CORRUPTION_DETECTED );
+                return PSA_ERROR_CORRUPTION_DETECTED ;
 
             if( data_size < sizeof( mbedtls_test_driver_ecdsa_key ) )
-                return( PSA_ERROR_BUFFER_TOO_SMALL );
+                return PSA_ERROR_BUFFER_TOO_SMALL ;
 
             memcpy( data, mbedtls_test_driver_ecdsa_key,
                     sizeof( mbedtls_test_driver_ecdsa_key ) );
             *data_length = sizeof( mbedtls_test_driver_ecdsa_key );
-            return( PSA_SUCCESS );
+            return PSA_SUCCESS ;
 
         case PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT:
             /* This is the AES slot. Verify the key's attributes before
              * returning the key. */
             if( psa_get_key_type( attributes ) != PSA_KEY_TYPE_AES )
-                return( PSA_ERROR_CORRUPTION_DETECTED );
+                return PSA_ERROR_CORRUPTION_DETECTED ;
             if( psa_get_key_bits( attributes ) != 128 )
-                return( PSA_ERROR_CORRUPTION_DETECTED );
+                return PSA_ERROR_CORRUPTION_DETECTED ;
             if( psa_get_key_algorithm( attributes ) != PSA_ALG_CTR )
-                return( PSA_ERROR_CORRUPTION_DETECTED );
+                return PSA_ERROR_CORRUPTION_DETECTED ;
             if( ( psa_get_key_usage_flags( attributes ) &
                   PSA_KEY_USAGE_EXPORT ) == 0 )
-                return( PSA_ERROR_CORRUPTION_DETECTED );
+                return PSA_ERROR_CORRUPTION_DETECTED ;
 
             if( data_size < sizeof( mbedtls_test_driver_aes_key ) )
-                return( PSA_ERROR_BUFFER_TOO_SMALL );
+                return PSA_ERROR_BUFFER_TOO_SMALL ;
 
             memcpy( data, mbedtls_test_driver_aes_key,
                     sizeof( mbedtls_test_driver_aes_key ) );
             *data_length = sizeof( mbedtls_test_driver_aes_key );
-            return( PSA_SUCCESS );
+            return PSA_SUCCESS ;
 
         default:
-            return( PSA_ERROR_DOES_NOT_EXIST );
+            return PSA_ERROR_DOES_NOT_EXIST ;
     }
 }
 
@@ -238,17 +238,17 @@
     ++mbedtls_test_driver_key_management_hooks.hits;
 
     if( mbedtls_test_driver_key_management_hooks.forced_status != PSA_SUCCESS )
-        return( mbedtls_test_driver_key_management_hooks.forced_status );
+        return mbedtls_test_driver_key_management_hooks.forced_status ;
 
     if( mbedtls_test_driver_key_management_hooks.forced_output != NULL )
     {
         if( mbedtls_test_driver_key_management_hooks.forced_output_length >
             data_size )
-            return( PSA_ERROR_BUFFER_TOO_SMALL );
+            return PSA_ERROR_BUFFER_TOO_SMALL ;
         memcpy( data, mbedtls_test_driver_key_management_hooks.forced_output,
                 mbedtls_test_driver_key_management_hooks.forced_output_length );
         *data_length = mbedtls_test_driver_key_management_hooks.forced_output_length;
-        return( PSA_SUCCESS );
+        return PSA_SUCCESS ;
     }
 
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
@@ -283,7 +283,7 @@
         (void)key_type;
     }
 
-    return( status );
+    return status ;
 }
 
 psa_status_t mbedtls_test_opaque_export_public_key(
@@ -294,7 +294,7 @@
     if( key_length != sizeof( psa_drv_slot_number_t ) )
     {
         /* Test driver does not support generic opaque key handling yet. */
-        return( PSA_ERROR_NOT_SUPPORTED );
+        return PSA_ERROR_NOT_SUPPORTED ;
     }
 
     /* Assume this is a builtin key based on the key material length. */
@@ -306,23 +306,23 @@
              * returning the public key. */
             if( psa_get_key_type( attributes ) !=
                 PSA_KEY_TYPE_ECC_KEY_PAIR( PSA_ECC_FAMILY_SECP_R1 ) )
-                return( PSA_ERROR_CORRUPTION_DETECTED );
+                return PSA_ERROR_CORRUPTION_DETECTED ;
             if( psa_get_key_bits( attributes ) != 256 )
-                return( PSA_ERROR_CORRUPTION_DETECTED );
+                return PSA_ERROR_CORRUPTION_DETECTED ;
             if( psa_get_key_algorithm( attributes ) !=
                 PSA_ALG_ECDSA( PSA_ALG_ANY_HASH ) )
-                return( PSA_ERROR_CORRUPTION_DETECTED );
+                return PSA_ERROR_CORRUPTION_DETECTED ;
 
             if( data_size < sizeof( mbedtls_test_driver_ecdsa_pubkey ) )
-                return( PSA_ERROR_BUFFER_TOO_SMALL );
+                return PSA_ERROR_BUFFER_TOO_SMALL ;
 
             memcpy( data, mbedtls_test_driver_ecdsa_pubkey,
                     sizeof( mbedtls_test_driver_ecdsa_pubkey ) );
             *data_length = sizeof( mbedtls_test_driver_ecdsa_pubkey );
-            return( PSA_SUCCESS );
+            return PSA_SUCCESS ;
 
         default:
-            return( PSA_ERROR_DOES_NOT_EXIST );
+            return PSA_ERROR_DOES_NOT_EXIST ;
     }
 }
 
@@ -354,12 +354,12 @@
             psa_set_key_algorithm( attributes, PSA_ALG_CTR );
 
             if( key_buffer_size < sizeof( psa_drv_slot_number_t ) )
-                return( PSA_ERROR_BUFFER_TOO_SMALL );
+                return PSA_ERROR_BUFFER_TOO_SMALL ;
 
             *( (psa_drv_slot_number_t*) key_buffer ) =
                 PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT;
             *key_buffer_length = sizeof( psa_drv_slot_number_t );
-            return( PSA_SUCCESS );
+            return PSA_SUCCESS ;
         case PSA_CRYPTO_TEST_DRIVER_BUILTIN_ECDSA_KEY_SLOT:
             psa_set_key_type(
                 attributes,
@@ -374,14 +374,14 @@
                 attributes, PSA_ALG_ECDSA( PSA_ALG_ANY_HASH ) );
 
             if( key_buffer_size < sizeof( psa_drv_slot_number_t ) )
-                return( PSA_ERROR_BUFFER_TOO_SMALL );
+                return PSA_ERROR_BUFFER_TOO_SMALL ;
 
             *( (psa_drv_slot_number_t*) key_buffer ) =
                 PSA_CRYPTO_TEST_DRIVER_BUILTIN_ECDSA_KEY_SLOT;
             *key_buffer_length = sizeof( psa_drv_slot_number_t );
-            return( PSA_SUCCESS );
+            return PSA_SUCCESS ;
         default:
-            return( PSA_ERROR_DOES_NOT_EXIST );
+            return PSA_ERROR_DOES_NOT_EXIST ;
     }
 }
 
diff --git a/tests/src/drivers/test_driver_mac.c b/tests/src/drivers/test_driver_mac.c
index 3b766dc..cfcf162 100644
--- a/tests/src/drivers/test_driver_mac.c
+++ b/tests/src/drivers/test_driver_mac.c
@@ -54,7 +54,7 @@
                 mac, mac_size, mac_length );
     }
 
-    return( mbedtls_test_driver_mac_hooks.driver_status );
+    return mbedtls_test_driver_mac_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_transparent_mac_sign_setup(
@@ -78,7 +78,7 @@
                 operation, attributes, key_buffer, key_buffer_size, alg );
     }
 
-    return( mbedtls_test_driver_mac_hooks.driver_status );
+    return mbedtls_test_driver_mac_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_transparent_mac_verify_setup(
@@ -102,7 +102,7 @@
                 operation, attributes, key_buffer, key_buffer_size, alg );
     }
 
-    return( mbedtls_test_driver_mac_hooks.driver_status );
+    return mbedtls_test_driver_mac_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_transparent_mac_update(
@@ -124,7 +124,7 @@
                 operation, input, input_length );
     }
 
-    return( mbedtls_test_driver_mac_hooks.driver_status );
+    return mbedtls_test_driver_mac_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_transparent_mac_sign_finish(
@@ -147,7 +147,7 @@
                 operation, mac, mac_size, mac_length );
     }
 
-    return( mbedtls_test_driver_mac_hooks.driver_status );
+    return mbedtls_test_driver_mac_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_transparent_mac_verify_finish(
@@ -169,7 +169,7 @@
                 operation, mac, mac_length );
     }
 
-    return( mbedtls_test_driver_mac_hooks.driver_status );
+    return mbedtls_test_driver_mac_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_transparent_mac_abort(
@@ -188,7 +188,7 @@
             mbedtls_transparent_test_driver_mac_abort( operation );
     }
 
-    return( mbedtls_test_driver_mac_hooks.driver_status );
+    return mbedtls_test_driver_mac_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_opaque_mac_compute(
@@ -218,7 +218,7 @@
                 mac, mac_size, mac_length );
     }
 
-    return( mbedtls_test_driver_mac_hooks.driver_status );
+    return mbedtls_test_driver_mac_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_opaque_mac_sign_setup(
@@ -242,7 +242,7 @@
                 operation, attributes, key_buffer, key_buffer_size, alg );
     }
 
-    return( mbedtls_test_driver_mac_hooks.driver_status );
+    return mbedtls_test_driver_mac_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_opaque_mac_verify_setup(
@@ -266,7 +266,7 @@
                 operation, attributes, key_buffer, key_buffer_size, alg );
     }
 
-    return( mbedtls_test_driver_mac_hooks.driver_status );
+    return mbedtls_test_driver_mac_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_opaque_mac_update(
@@ -288,7 +288,7 @@
                 operation, input, input_length );
     }
 
-    return( mbedtls_test_driver_mac_hooks.driver_status );
+    return mbedtls_test_driver_mac_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_opaque_mac_sign_finish(
@@ -311,7 +311,7 @@
                 operation, mac, mac_size, mac_length );
     }
 
-    return( mbedtls_test_driver_mac_hooks.driver_status );
+    return mbedtls_test_driver_mac_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_opaque_mac_verify_finish(
@@ -333,7 +333,7 @@
                 operation, mac, mac_length );
     }
 
-    return( mbedtls_test_driver_mac_hooks.driver_status );
+    return mbedtls_test_driver_mac_hooks.driver_status ;
 }
 
 psa_status_t mbedtls_test_opaque_mac_abort(
@@ -352,7 +352,7 @@
             mbedtls_opaque_test_driver_mac_abort( operation );
     }
 
-    return( mbedtls_test_driver_mac_hooks.driver_status );
+    return mbedtls_test_driver_mac_hooks.driver_status ;
 }
 
 #endif /* MBEDTLS_PSA_CRYPTO_DRIVERS && PSA_CRYPTO_DRIVER_TEST */
diff --git a/tests/src/drivers/test_driver_signature.c b/tests/src/drivers/test_driver_signature.c
index 2d58756..e573b72 100644
--- a/tests/src/drivers/test_driver_signature.c
+++ b/tests/src/drivers/test_driver_signature.c
@@ -88,7 +88,7 @@
         }
         else
         {
-            return( PSA_ERROR_INVALID_ARGUMENT );
+            return PSA_ERROR_INVALID_ARGUMENT ;
         }
     }
     else
@@ -104,7 +104,7 @@
         (void)signature;
         (void)signature_size;
         (void)signature_length;
-        return( PSA_ERROR_NOT_SUPPORTED );
+        return PSA_ERROR_NOT_SUPPORTED ;
     }
 }
 
@@ -146,7 +146,7 @@
         }
         else
         {
-            return( PSA_ERROR_INVALID_ARGUMENT );
+            return PSA_ERROR_INVALID_ARGUMENT ;
         }
     }
     else
@@ -162,7 +162,7 @@
         (void)signature;
         (void)signature_length;
 
-        return( PSA_ERROR_NOT_SUPPORTED );
+        return PSA_ERROR_NOT_SUPPORTED ;
     }
 }
 
@@ -184,18 +184,18 @@
     ++mbedtls_test_driver_signature_sign_hooks.hits;
 
     if( mbedtls_test_driver_signature_sign_hooks.forced_status != PSA_SUCCESS )
-        return( mbedtls_test_driver_signature_sign_hooks.forced_status );
+        return mbedtls_test_driver_signature_sign_hooks.forced_status ;
 
     if( mbedtls_test_driver_signature_sign_hooks.forced_output != NULL )
     {
         if( mbedtls_test_driver_signature_sign_hooks.forced_output_length > signature_size )
-            return( PSA_ERROR_BUFFER_TOO_SMALL );
+            return PSA_ERROR_BUFFER_TOO_SMALL ;
 
         memcpy( signature, mbedtls_test_driver_signature_sign_hooks.forced_output,
                 mbedtls_test_driver_signature_sign_hooks.forced_output_length );
         *signature_length = mbedtls_test_driver_signature_sign_hooks.forced_output_length;
 
-        return( PSA_SUCCESS );
+        return PSA_SUCCESS ;
     }
 
     status = mbedtls_transparent_test_driver_hash_compute(
@@ -231,7 +231,7 @@
     (void) signature_size;
     (void) signature_length;
 
-    return( PSA_ERROR_NOT_SUPPORTED );
+    return PSA_ERROR_NOT_SUPPORTED ;
 }
 
 psa_status_t mbedtls_test_transparent_signature_verify_message(
@@ -251,7 +251,7 @@
     ++mbedtls_test_driver_signature_verify_hooks.hits;
 
     if( mbedtls_test_driver_signature_verify_hooks.forced_status != PSA_SUCCESS )
-        return( mbedtls_test_driver_signature_verify_hooks.forced_status );
+        return mbedtls_test_driver_signature_verify_hooks.forced_status ;
 
     status = mbedtls_transparent_test_driver_hash_compute(
                 PSA_ALG_SIGN_GET_HASH( alg ), input, input_length,
@@ -284,7 +284,7 @@
     (void) signature;
     (void) signature_length;
 
-    return( PSA_ERROR_NOT_SUPPORTED );
+    return PSA_ERROR_NOT_SUPPORTED ;
 }
 
 psa_status_t mbedtls_test_transparent_signature_sign_hash(
@@ -297,16 +297,16 @@
     ++mbedtls_test_driver_signature_sign_hooks.hits;
 
     if( mbedtls_test_driver_signature_sign_hooks.forced_status != PSA_SUCCESS )
-        return( mbedtls_test_driver_signature_sign_hooks.forced_status );
+        return mbedtls_test_driver_signature_sign_hooks.forced_status ;
 
     if( mbedtls_test_driver_signature_sign_hooks.forced_output != NULL )
     {
         if( mbedtls_test_driver_signature_sign_hooks.forced_output_length > signature_size )
-            return( PSA_ERROR_BUFFER_TOO_SMALL );
+            return PSA_ERROR_BUFFER_TOO_SMALL ;
         memcpy( signature, mbedtls_test_driver_signature_sign_hooks.forced_output,
                 mbedtls_test_driver_signature_sign_hooks.forced_output_length );
         *signature_length = mbedtls_test_driver_signature_sign_hooks.forced_output_length;
-        return( PSA_SUCCESS );
+        return PSA_SUCCESS ;
     }
 
     return sign_hash( attributes, key_buffer, key_buffer_size,
@@ -331,7 +331,7 @@
     (void) signature_size;
     (void) signature_length;
 
-    return( PSA_ERROR_NOT_SUPPORTED );
+    return PSA_ERROR_NOT_SUPPORTED ;
 }
 
 psa_status_t mbedtls_test_transparent_signature_verify_hash(
@@ -344,7 +344,7 @@
     ++mbedtls_test_driver_signature_verify_hooks.hits;
 
     if( mbedtls_test_driver_signature_verify_hooks.forced_status != PSA_SUCCESS )
-        return( mbedtls_test_driver_signature_verify_hooks.forced_status );
+        return mbedtls_test_driver_signature_verify_hooks.forced_status ;
 
     return verify_hash( attributes, key_buffer, key_buffer_size,
                         alg, hash, hash_length,
@@ -366,7 +366,7 @@
     (void) hash_length;
     (void) signature;
     (void) signature_length;
-    return( PSA_ERROR_NOT_SUPPORTED );
+    return PSA_ERROR_NOT_SUPPORTED ;
 }
 
 #endif /* MBEDTLS_PSA_CRYPTO_DRIVERS && PSA_CRYPTO_DRIVER_TEST */
diff --git a/tests/src/drivers/test_driver_size.c b/tests/src/drivers/test_driver_size.c
index 033cf32..837d82a 100644
--- a/tests/src/drivers/test_driver_size.c
+++ b/tests/src/drivers/test_driver_size.c
@@ -92,6 +92,6 @@
                             ( ( key_bits + 7 ) / 8 ) );
     }
 
-    return( key_buffer_size );
+    return key_buffer_size ;
 }
 #endif /* MBEDTLS_PSA_CRYPTO_DRIVERS && PSA_CRYPTO_DRIVER_TEST */
