diff --git a/tests/src/drivers/key_management.c b/tests/src/drivers/key_management.c
index 77a217f..ca00fe0 100644
--- a/tests/src/drivers/key_management.c
+++ b/tests/src/drivers/key_management.c
@@ -61,8 +61,10 @@
       0xbc, 0x25, 0x16, 0xc3, 0xd2, 0x70, 0x2d, 0x79,
       0x2f, 0x13, 0x1a, 0x92, 0x20, 0x95, 0xfd, 0x6c };
 
-static const psa_drv_slot_number_t aes_slot = PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT;
-static const psa_drv_slot_number_t ecdsa_slot = PSA_CRYPTO_TEST_DRIVER_BUILTIN_ECDSA_KEY_SLOT;
+static const psa_drv_slot_number_t aes_slot =
+    PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT;
+static const psa_drv_slot_number_t ecdsa_slot =
+    PSA_CRYPTO_TEST_DRIVER_BUILTIN_ECDSA_KEY_SLOT;
 #endif /* MBEDTLS_PSA_CRYPTO_BUILTIN_KEYS */
 
 psa_status_t test_transparent_generate_key(
@@ -179,41 +181,49 @@
     uint8_t *data, size_t data_size, size_t *data_length )
 {
 #if defined(MBEDTLS_PSA_CRYPTO_BUILTIN_KEYS)
-    if( psa_key_id_is_builtin( MBEDTLS_SVC_KEY_ID_GET_KEY_ID( psa_get_key_id( attributes ) ) ) )
+    if( psa_key_id_is_builtin(
+            MBEDTLS_SVC_KEY_ID_GET_KEY_ID( psa_get_key_id( attributes ) ) ) )
     {
         if( key_length != sizeof( psa_drv_slot_number_t ) )
             return( PSA_ERROR_INVALID_ARGUMENT );
 
         if( memcmp( key, &ecdsa_slot, sizeof( psa_drv_slot_number_t ) ) == 0 )
         {
-            /* This is the ECDSA slot. Verify key attributes before returning pubkey. */
-            if( psa_get_key_type( attributes ) != PSA_KEY_TYPE_ECC_KEY_PAIR( PSA_ECC_FAMILY_SECP_R1 ) )
+            /* This is the ECDSA slot. Verify key attributes before 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 );
             if( psa_get_key_bits( attributes ) != 256 )
                 return( PSA_ERROR_CORRUPTION_DETECTED );
-            if( psa_get_key_algorithm( attributes ) != PSA_ALG_ECDSA( PSA_ALG_ANY_HASH ) )
+            if( psa_get_key_algorithm( attributes ) !=
+                PSA_ALG_ECDSA( PSA_ALG_ANY_HASH ) )
                 return( PSA_ERROR_CORRUPTION_DETECTED );
-            if( (psa_get_key_usage_flags( attributes ) & PSA_KEY_USAGE_EXPORT) == 0 )
+            if( ( psa_get_key_usage_flags( attributes ) &
+                  PSA_KEY_USAGE_EXPORT ) == 0 )
                 return( PSA_ERROR_CORRUPTION_DETECTED );
 
             if( data_size < sizeof( test_driver_ecdsa_key ) )
                 return( PSA_ERROR_BUFFER_TOO_SMALL );
 
-            memcpy( data, test_driver_ecdsa_key, sizeof( test_driver_ecdsa_key ) );
+            memcpy( data, test_driver_ecdsa_key,
+                    sizeof( test_driver_ecdsa_key ) );
             *data_length = sizeof( test_driver_ecdsa_key );
             return( PSA_SUCCESS );
         }
 
         if( memcmp( key, &aes_slot, sizeof( psa_drv_slot_number_t ) ) == 0 )
         {
-            /* This is the ECDSA slot. Verify key attributes before returning pubkey. */
+            /* This is the AES slot. Verify key attributes before returning
+             * the key. */
             if( psa_get_key_type( attributes ) != PSA_KEY_TYPE_AES )
                 return( PSA_ERROR_CORRUPTION_DETECTED );
             if( psa_get_key_bits( attributes ) != 128 )
                 return( PSA_ERROR_CORRUPTION_DETECTED );
             if( psa_get_key_algorithm( attributes ) != PSA_ALG_CTR )
                 return( PSA_ERROR_CORRUPTION_DETECTED );
-            if( (psa_get_key_usage_flags( attributes ) & PSA_KEY_USAGE_EXPORT) == 0 )
+            if( ( psa_get_key_usage_flags( attributes ) &
+                  PSA_KEY_USAGE_EXPORT ) == 0 )
                 return( PSA_ERROR_CORRUPTION_DETECTED );
 
             if( data_size < sizeof( test_driver_aes_key ) )
@@ -299,25 +309,30 @@
     uint8_t *data, size_t data_size, size_t *data_length )
 {
 #if defined(MBEDTLS_PSA_CRYPTO_BUILTIN_KEYS)
-    if( psa_key_id_is_builtin( MBEDTLS_SVC_KEY_ID_GET_KEY_ID( psa_get_key_id( attributes ) ) ) )
+    if( psa_key_id_is_builtin(
+            MBEDTLS_SVC_KEY_ID_GET_KEY_ID( psa_get_key_id( attributes ) ) ) )
     {
         if( key_length != sizeof( psa_drv_slot_number_t ) )
             return( PSA_ERROR_INVALID_ARGUMENT );
 
         if( memcmp( key, &ecdsa_slot, sizeof( psa_drv_slot_number_t ) ) == 0 )
         {
-            /* This is the ECDSA slot. Verify key attributes before returning pubkey. */
-            if( psa_get_key_type( attributes ) != PSA_KEY_TYPE_ECC_KEY_PAIR( PSA_ECC_FAMILY_SECP_R1 ) )
+            /* This is the ECDSA slot. Verify key attributes before 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 );
             if( psa_get_key_bits( attributes ) != 256 )
                 return( PSA_ERROR_CORRUPTION_DETECTED );
-            if( psa_get_key_algorithm( attributes ) != PSA_ALG_ECDSA( PSA_ALG_ANY_HASH ) )
+            if( psa_get_key_algorithm( attributes ) !=
+                PSA_ALG_ECDSA( PSA_ALG_ANY_HASH ) )
                 return( PSA_ERROR_CORRUPTION_DETECTED );
 
             if( data_size < sizeof( test_driver_ecdsa_pubkey ) )
                 return( PSA_ERROR_BUFFER_TOO_SMALL );
 
-            memcpy(data, test_driver_ecdsa_pubkey, sizeof( test_driver_ecdsa_pubkey ) );
+            memcpy( data, test_driver_ecdsa_pubkey,
+                    sizeof( test_driver_ecdsa_pubkey ) );
             *data_length = sizeof( test_driver_ecdsa_pubkey );
             return( PSA_SUCCESS );
         }
@@ -338,10 +353,13 @@
 
 /* The opaque test driver exposes two built-in keys when builtin key support is
  * compiled in.
- * The key in slot #PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT is an AES-128 key which allows CTR mode
- * The key in slot #PSA_CRYPTO_TEST_DRIVER_BUILTIN_ECDSA_KEY_SLOT is a secp256r1 private key which allows ECDSA sign & verify
+ * The key in slot #PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT is an AES-128
+ * key which allows CTR mode.
+ * The key in slot #PSA_CRYPTO_TEST_DRIVER_BUILTIN_ECDSA_KEY_SLOT is a secp256r1
+ * private key which allows ECDSA sign & verify.
  * The key buffer format for these is the raw format of psa_drv_slot_number_t
- * (i.e. for an actual driver this would mean 'builtin_key_size' = sizeof(psa_drv_slot_number_t))
+ * (i.e. for an actual driver this would mean 'builtin_key_size' =
+ * sizeof(psa_drv_slot_number_t)).
  */
 psa_status_t test_opaque_get_builtin_key(
     psa_drv_slot_number_t slot_number,
@@ -357,7 +375,11 @@
 
             psa_set_key_type( attributes, PSA_KEY_TYPE_AES );
             psa_set_key_bits( attributes, 128 );
-            psa_set_key_usage_flags( attributes, PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT | PSA_KEY_USAGE_EXPORT );
+            psa_set_key_usage_flags(
+                attributes,
+                PSA_KEY_USAGE_ENCRYPT |
+                PSA_KEY_USAGE_DECRYPT |
+                PSA_KEY_USAGE_EXPORT );
             psa_set_key_algorithm( attributes, PSA_ALG_CTR );
 
             *( (psa_drv_slot_number_t*) key_buffer ) =
@@ -368,12 +390,19 @@
             if( key_buffer_size < sizeof( psa_drv_slot_number_t ) )
                 return( PSA_ERROR_BUFFER_TOO_SMALL );
 
-            psa_set_key_type( attributes, PSA_KEY_TYPE_ECC_KEY_PAIR( PSA_ECC_FAMILY_SECP_R1 ) );
+            psa_set_key_type(
+                attributes,
+                PSA_KEY_TYPE_ECC_KEY_PAIR( PSA_ECC_FAMILY_SECP_R1 ) );
             psa_set_key_bits( attributes, 256 );
-            psa_set_key_usage_flags( attributes, PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH | PSA_KEY_USAGE_EXPORT );
-            psa_set_key_algorithm( attributes, PSA_ALG_ECDSA( PSA_ALG_ANY_HASH ) );
+            psa_set_key_usage_flags(
+                attributes,
+                PSA_KEY_USAGE_SIGN_HASH |
+                PSA_KEY_USAGE_VERIFY_HASH |
+                PSA_KEY_USAGE_EXPORT );
+            psa_set_key_algorithm(
+                attributes, PSA_ALG_ECDSA( PSA_ALG_ANY_HASH ) );
 
-            *( (psa_drv_slot_number_t*) key_buffer) =
+            *( (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 );
diff --git a/tests/src/helpers.c b/tests/src/helpers.c
index ee7fa20..75f55e3 100644
--- a/tests/src/helpers.c
+++ b/tests/src/helpers.c
@@ -301,12 +301,18 @@
 #if defined(PSA_CRYPTO_DRIVER_TEST)
     /* For testing, assign the AES builtin key slot to the boundary values.
      * ECDSA can be exercised on key ID MBEDTLS_PSA_KEY_ID_BUILTIN_MIN + 1. */
-    {MBEDTLS_PSA_KEY_ID_BUILTIN_MIN - 1, PSA_CRYPTO_TEST_DRIVER_LIFETIME, PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT},
-    {MBEDTLS_PSA_KEY_ID_BUILTIN_MIN, PSA_CRYPTO_TEST_DRIVER_LIFETIME, PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT},
-    {MBEDTLS_PSA_KEY_ID_BUILTIN_MIN + 1, PSA_CRYPTO_TEST_DRIVER_LIFETIME, PSA_CRYPTO_TEST_DRIVER_BUILTIN_ECDSA_KEY_SLOT},
-    {MBEDTLS_PSA_KEY_ID_BUILTIN_MAX - 1, PSA_CRYPTO_TEST_DRIVER_LIFETIME, PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT},
-    {MBEDTLS_PSA_KEY_ID_BUILTIN_MAX, PSA_CRYPTO_TEST_DRIVER_LIFETIME, PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT},
-    {MBEDTLS_PSA_KEY_ID_BUILTIN_MAX + 1, PSA_CRYPTO_TEST_DRIVER_LIFETIME, PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT},
+    { MBEDTLS_PSA_KEY_ID_BUILTIN_MIN - 1, PSA_CRYPTO_TEST_DRIVER_LIFETIME,
+        PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT },
+    { MBEDTLS_PSA_KEY_ID_BUILTIN_MIN, PSA_CRYPTO_TEST_DRIVER_LIFETIME,
+        PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT },
+    { MBEDTLS_PSA_KEY_ID_BUILTIN_MIN + 1, PSA_CRYPTO_TEST_DRIVER_LIFETIME,
+        PSA_CRYPTO_TEST_DRIVER_BUILTIN_ECDSA_KEY_SLOT},
+    { MBEDTLS_PSA_KEY_ID_BUILTIN_MAX - 1, PSA_CRYPTO_TEST_DRIVER_LIFETIME,
+        PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT},
+    { MBEDTLS_PSA_KEY_ID_BUILTIN_MAX, PSA_CRYPTO_TEST_DRIVER_LIFETIME,
+        PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT},
+    { MBEDTLS_PSA_KEY_ID_BUILTIN_MAX + 1, PSA_CRYPTO_TEST_DRIVER_LIFETIME,
+        PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT},
 #else
     {0, 0, 0}
 #endif
@@ -318,7 +324,8 @@
     mbedtls_svc_key_id_t svc_key_id = psa_get_key_id( attributes );
     psa_key_id_t app_key_id = MBEDTLS_SVC_KEY_ID_GET_KEY_ID( svc_key_id );
 
-    for( size_t i = 0; i < ( sizeof( builtin_keys ) / sizeof( builtin_keys[0] ) ); i++ )
+    for( size_t i = 0;
+         i < ( sizeof( builtin_keys ) / sizeof( builtin_keys[0] ) ); i++ )
     {
         if( builtin_keys[i].builtin_key_id == app_key_id )
         {
