diff --git a/include/mbedtls/asn1write.h b/include/mbedtls/asn1write.h
index d60ca0d..7a57f15 100644
--- a/include/mbedtls/asn1write.h
+++ b/include/mbedtls/asn1write.h
@@ -30,7 +30,7 @@
     do                                                  \
     {                                                   \
         if( ( ret = (f) ) < 0 )                         \
-            return( ret );                              \
+            return ret ;                              \
         else                                            \
             (g) += ret;                                 \
     } while( 0 )
diff --git a/include/mbedtls/error.h b/include/mbedtls/error.h
index 27420ce..b546d4d 100644
--- a/include/mbedtls/error.h
+++ b/include/mbedtls/error.h
@@ -163,7 +163,7 @@
     (void)file;
     (void)line;
 
-    return( high + low );
+    return high + low ;
 }
 
 /**
diff --git a/include/mbedtls/pk.h b/include/mbedtls/pk.h
index ded5222..15d1a39 100644
--- a/include/mbedtls/pk.h
+++ b/include/mbedtls/pk.h
@@ -390,7 +390,7 @@
  */
 static inline size_t mbedtls_pk_get_len( const mbedtls_pk_context *ctx )
 {
-    return( ( mbedtls_pk_get_bitlen( ctx ) + 7 ) / 8 );
+    return ( mbedtls_pk_get_bitlen( ctx ) + 7 ) / 8 ;
 }
 
 /**
diff --git a/include/mbedtls/psa_util.h b/include/mbedtls/psa_util.h
index f6f2e58..1584ef2 100644
--- a/include/mbedtls/psa_util.h
+++ b/include/mbedtls/psa_util.h
@@ -57,7 +57,7 @@
         case MBEDTLS_CIPHER_AES_128_CBC:
         case MBEDTLS_CIPHER_AES_192_CBC:
         case MBEDTLS_CIPHER_AES_256_CBC:
-            return( PSA_KEY_TYPE_AES );
+            return PSA_KEY_TYPE_AES ;
 
         /* ARIA not yet supported in PSA. */
         /* case MBEDTLS_CIPHER_ARIA_128_CCM:
@@ -69,10 +69,10 @@
            case MBEDTLS_CIPHER_ARIA_128_CBC:
            case MBEDTLS_CIPHER_ARIA_192_CBC:
            case MBEDTLS_CIPHER_ARIA_256_CBC:
-               return( PSA_KEY_TYPE_ARIA ); */
+               return PSA_KEY_TYPE_ARIA ; */
 
         default:
-            return( 0 );
+            return 0 ;
     }
 }
 
@@ -82,18 +82,18 @@
     switch( mode )
     {
         case MBEDTLS_MODE_ECB:
-            return( PSA_ALG_ECB_NO_PADDING );
+            return PSA_ALG_ECB_NO_PADDING ;
         case MBEDTLS_MODE_GCM:
-            return( PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_GCM, taglen ) );
+            return PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_GCM, taglen ) ;
         case MBEDTLS_MODE_CCM:
-            return( PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_CCM, taglen ) );
+            return PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_CCM, taglen ) ;
         case MBEDTLS_MODE_CBC:
             if( taglen == 0 )
-                return( PSA_ALG_CBC_NO_PADDING );
+                return PSA_ALG_CBC_NO_PADDING ;
             else
-                return( 0 );
+                return 0 ;
         default:
-            return( 0 );
+            return 0 ;
     }
 }
 
@@ -103,11 +103,11 @@
     switch( op )
     {
         case MBEDTLS_ENCRYPT:
-            return( PSA_KEY_USAGE_ENCRYPT );
+            return PSA_KEY_USAGE_ENCRYPT ;
         case MBEDTLS_DECRYPT:
-            return( PSA_KEY_USAGE_DECRYPT );
+            return PSA_KEY_USAGE_DECRYPT ;
         default:
-            return( 0 );
+            return 0 ;
     }
 }
 
@@ -119,36 +119,36 @@
     {
 #if defined(MBEDTLS_MD5_C)
     case MBEDTLS_MD_MD5:
-        return( PSA_ALG_MD5 );
+        return PSA_ALG_MD5 ;
 #endif
 #if defined(MBEDTLS_SHA1_C)
     case MBEDTLS_MD_SHA1:
-        return( PSA_ALG_SHA_1 );
+        return PSA_ALG_SHA_1 ;
 #endif
 #if defined(MBEDTLS_SHA224_C)
     case MBEDTLS_MD_SHA224:
-        return( PSA_ALG_SHA_224 );
+        return PSA_ALG_SHA_224 ;
 #endif
 #if defined(MBEDTLS_SHA256_C)
     case MBEDTLS_MD_SHA256:
-        return( PSA_ALG_SHA_256 );
+        return PSA_ALG_SHA_256 ;
 #endif
 #if defined(MBEDTLS_SHA384_C)
     case MBEDTLS_MD_SHA384:
-        return( PSA_ALG_SHA_384 );
+        return PSA_ALG_SHA_384 ;
 #endif
 #if defined(MBEDTLS_SHA512_C)
     case MBEDTLS_MD_SHA512:
-        return( PSA_ALG_SHA_512 );
+        return PSA_ALG_SHA_512 ;
 #endif
 #if defined(MBEDTLS_RIPEMD160_C)
     case MBEDTLS_MD_RIPEMD160:
-        return( PSA_ALG_RIPEMD160 );
+        return PSA_ALG_RIPEMD160 ;
 #endif
     case MBEDTLS_MD_NONE:
-        return( 0 );
+        return 0 ;
     default:
-        return( 0 );
+        return 0 ;
     }
 }
 
@@ -167,31 +167,31 @@
                 case 192:
                     *oid = MBEDTLS_OID_EC_GRP_SECP192R1;
                     *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP192R1 );
-                    return( 0 );
+                    return 0 ;
 #endif /* MBEDTLS_ECP_DP_SECP192R1_ENABLED */
 #if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED)
                 case 224:
                     *oid = MBEDTLS_OID_EC_GRP_SECP224R1;
                     *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP224R1 );
-                    return( 0 );
+                    return 0 ;
 #endif /* MBEDTLS_ECP_DP_SECP224R1_ENABLED */
 #if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED)
                 case 256:
                     *oid = MBEDTLS_OID_EC_GRP_SECP256R1;
                     *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP256R1 );
-                    return( 0 );
+                    return 0 ;
 #endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED */
 #if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED)
                 case 384:
                     *oid = MBEDTLS_OID_EC_GRP_SECP384R1;
                     *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP384R1 );
-                    return( 0 );
+                    return 0 ;
 #endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */
 #if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED)
                 case 521:
                     *oid = MBEDTLS_OID_EC_GRP_SECP521R1;
                     *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP521R1 );
-                    return( 0 );
+                    return 0 ;
 #endif /* MBEDTLS_ECP_DP_SECP521R1_ENABLED */
             }
             break;
@@ -202,19 +202,19 @@
                 case 192:
                     *oid = MBEDTLS_OID_EC_GRP_SECP192K1;
                     *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP192K1 );
-                    return( 0 );
+                    return 0 ;
 #endif /* MBEDTLS_ECP_DP_SECP192K1_ENABLED */
 #if defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED)
                 case 224:
                     *oid = MBEDTLS_OID_EC_GRP_SECP224K1;
                     *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP224K1 );
-                    return( 0 );
+                    return 0 ;
 #endif /* MBEDTLS_ECP_DP_SECP224K1_ENABLED */
 #if defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED)
                 case 256:
                     *oid = MBEDTLS_OID_EC_GRP_SECP256K1;
                     *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP256K1 );
-                    return( 0 );
+                    return 0 ;
 #endif /* MBEDTLS_ECP_DP_SECP256K1_ENABLED */
             }
             break;
@@ -225,26 +225,26 @@
                 case 256:
                     *oid = MBEDTLS_OID_EC_GRP_BP256R1;
                     *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_BP256R1 );
-                    return( 0 );
+                    return 0 ;
 #endif /* MBEDTLS_ECP_DP_BP256R1_ENABLED */
 #if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED)
                 case 384:
                     *oid = MBEDTLS_OID_EC_GRP_BP384R1;
                     *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_BP384R1 );
-                    return( 0 );
+                    return 0 ;
 #endif /* MBEDTLS_ECP_DP_BP384R1_ENABLED */
 #if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED)
                 case 512:
                     *oid = MBEDTLS_OID_EC_GRP_BP512R1;
                     *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_BP512R1 );
-                    return( 0 );
+                    return 0 ;
 #endif /* MBEDTLS_ECP_DP_BP512R1_ENABLED */
             }
             break;
     }
     (void) oid;
     (void) oid_len;
-    return( -1 );
+    return -1 ;
 }
 
 #define MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH 1
@@ -334,24 +334,24 @@
     switch( status )
     {
         case PSA_SUCCESS:
-            return( 0 );
+            return 0 ;
         case PSA_ERROR_NOT_SUPPORTED:
-            return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE );
+            return MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ;
         case PSA_ERROR_INSUFFICIENT_MEMORY:
-            return( MBEDTLS_ERR_PK_ALLOC_FAILED );
+            return MBEDTLS_ERR_PK_ALLOC_FAILED ;
         case PSA_ERROR_INSUFFICIENT_ENTROPY:
-            return( MBEDTLS_ERR_ECP_RANDOM_FAILED );
+            return MBEDTLS_ERR_ECP_RANDOM_FAILED ;
         case PSA_ERROR_BAD_STATE:
-            return( MBEDTLS_ERR_PK_BAD_INPUT_DATA );
+            return MBEDTLS_ERR_PK_BAD_INPUT_DATA ;
         /* All other failures */
         case PSA_ERROR_COMMUNICATION_FAILURE:
         case PSA_ERROR_HARDWARE_FAILURE:
         case PSA_ERROR_CORRUPTION_DETECTED:
-            return( MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED );
+            return MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED ;
         default: /* We return the same as for the 'other failures',
                   * but list them separately nonetheless to indicate
                   * which failure conditions we have considered. */
-            return( MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED );
+            return MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED ;
     }
 }
 
@@ -367,7 +367,7 @@
     const mbedtls_ecp_curve_info *curve_info =
         mbedtls_ecp_curve_info_from_tls_id( tls_ecc_grp_reg_id );
     if( curve_info == NULL )
-        return( 0 );
+        return 0 ;
     return( PSA_KEY_TYPE_ECC_KEY_PAIR(
                 mbedtls_ecc_group_to_psa( curve_info->MBEDTLS_PRIVATE(grp_id), bits ) ) );
 }
@@ -390,7 +390,7 @@
 {
     *dst = src;
     *dstlen = srclen;
-    return( 0 );
+    return 0 ;
 }
 
 /* This function takes a buffer holding an ECPoint structure
@@ -405,11 +405,11 @@
                                                      size_t *olen )
 {
     if( srclen > dstlen )
-        return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL );
+        return MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ;
 
     memcpy( dst, src, srclen );
     *olen = srclen;
-    return( 0 );
+    return 0 ;
 }
 
 #endif /* MBEDTLS_USE_PSA_CRYPTO */
diff --git a/include/mbedtls/ssl.h b/include/mbedtls/ssl.h
index 221cee3..c0f2529 100644
--- a/include/mbedtls/ssl.h
+++ b/include/mbedtls/ssl.h
@@ -3146,16 +3146,16 @@
     switch( profile )
     {
         case MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_80:
-            return( "MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_80" );
+            return "MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_80" ;
         case MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_32:
-            return( "MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_32" );
+            return "MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_32" ;
         case MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_80:
-            return( "MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_80" );
+            return "MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_80" ;
         case MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_32:
-            return( "MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_32" );
+            return "MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_32" ;
         default: break;
     }
-    return( "" );
+    return "" ;
 }
 #endif /* MBEDTLS_DEBUG_C */
 /**
diff --git a/include/mbedtls/ssl_ciphersuites.h b/include/mbedtls/ssl_ciphersuites.h
index 812560c..abaa642 100644
--- a/include/mbedtls/ssl_ciphersuites.h
+++ b/include/mbedtls/ssl_ciphersuites.h
@@ -398,10 +398,10 @@
         case MBEDTLS_KEY_EXCHANGE_ECDHE_PSK:
         case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA:
         case MBEDTLS_KEY_EXCHANGE_ECJPAKE:
-            return( 1 );
+            return 1 ;
 
         default:
-            return( 0 );
+            return 0 ;
     }
 }
 #endif /* MBEDTLS_KEY_EXCHANGE_SOME_PFS_ENABLED */
@@ -416,10 +416,10 @@
         case MBEDTLS_KEY_EXCHANGE_RSA:
         case MBEDTLS_KEY_EXCHANGE_PSK:
         case MBEDTLS_KEY_EXCHANGE_RSA_PSK:
-            return( 1 );
+            return 1 ;
 
         default:
-            return( 0 );
+            return 0 ;
     }
 }
 #endif /* MBEDTLS_KEY_EXCHANGE_SOME_NON_PFS_ENABLED */
@@ -431,10 +431,10 @@
     {
         case MBEDTLS_KEY_EXCHANGE_ECDH_RSA:
         case MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA:
-            return( 1 );
+            return 1 ;
 
         default:
-            return( 0 );
+            return 0 ;
     }
 }
 #endif /* MBEDTLS_KEY_EXCHANGE_SOME_ECDH_ENABLED */
@@ -449,10 +449,10 @@
         case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA:
         case MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA:
         case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA:
-            return( 1 );
+            return 1 ;
 
         default:
-            return( 0 );
+            return 0 ;
     }
 }
 
@@ -467,10 +467,10 @@
         case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA:
         case MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA:
         case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA:
-            return( 1 );
+            return 1 ;
 
         default:
-            return( 0 );
+            return 0 ;
     }
 }
 
@@ -481,10 +481,10 @@
     {
         case MBEDTLS_KEY_EXCHANGE_DHE_RSA:
         case MBEDTLS_KEY_EXCHANGE_DHE_PSK:
-            return( 1 );
+            return 1 ;
 
         default:
-            return( 0 );
+            return 0 ;
     }
 }
 #endif /* MBEDTLS_KEY_EXCHANGE_SOME_DHE_ENABLED) */
@@ -497,10 +497,10 @@
         case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA:
         case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA:
         case MBEDTLS_KEY_EXCHANGE_ECDHE_PSK:
-            return( 1 );
+            return 1 ;
 
         default:
-            return( 0 );
+            return 0 ;
     }
 }
 #endif /* MBEDTLS_KEY_EXCHANGE_SOME_ECDHE_ENABLED) */
@@ -513,10 +513,10 @@
         case MBEDTLS_KEY_EXCHANGE_DHE_RSA:
         case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA:
         case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA:
-            return( 1 );
+            return 1 ;
 
         default:
-            return( 0 );
+            return 0 ;
     }
 }
 #endif /* MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED */
diff --git a/include/mbedtls/x509.h b/include/mbedtls/x509.h
index df187cb..233cc85 100644
--- a/include/mbedtls/x509.h
+++ b/include/mbedtls/x509.h
@@ -354,7 +354,7 @@
 #define MBEDTLS_X509_SAFE_SNPRINTF                          \
     do {                                                    \
         if( ret < 0 || (size_t) ret >= n )                  \
-            return( MBEDTLS_ERR_X509_BUFFER_TOO_SMALL );    \
+            return MBEDTLS_ERR_X509_BUFFER_TOO_SMALL ;    \
                                                             \
         n -= (size_t) ret;                                  \
         p += (size_t) ret;                                  \
diff --git a/include/psa/crypto_compat.h b/include/psa/crypto_compat.h
index 1d3253c..ca35a2f 100644
--- a/include/psa/crypto_compat.h
+++ b/include/psa/crypto_compat.h
@@ -52,7 +52,7 @@
  */
 static inline int psa_key_handle_is_null( psa_key_handle_t handle )
 {
-    return( mbedtls_svc_key_id_is_null( handle ) );
+    return mbedtls_svc_key_id_is_null( handle ) ;
 }
 
 /** Open a handle to an existing persistent key.
diff --git a/include/psa/crypto_extra.h b/include/psa/crypto_extra.h
index 2c0b106..aa50dc9 100644
--- a/include/psa/crypto_extra.h
+++ b/include/psa/crypto_extra.h
@@ -596,46 +596,46 @@
     {
         case MBEDTLS_ECP_DP_SECP192R1:
             *bits = 192;
-            return( PSA_ECC_FAMILY_SECP_R1 );
+            return PSA_ECC_FAMILY_SECP_R1 ;
         case MBEDTLS_ECP_DP_SECP224R1:
             *bits = 224;
-            return( PSA_ECC_FAMILY_SECP_R1 );
+            return PSA_ECC_FAMILY_SECP_R1 ;
         case MBEDTLS_ECP_DP_SECP256R1:
             *bits = 256;
-            return( PSA_ECC_FAMILY_SECP_R1 );
+            return PSA_ECC_FAMILY_SECP_R1 ;
         case MBEDTLS_ECP_DP_SECP384R1:
             *bits = 384;
-            return( PSA_ECC_FAMILY_SECP_R1 );
+            return PSA_ECC_FAMILY_SECP_R1 ;
         case MBEDTLS_ECP_DP_SECP521R1:
             *bits = 521;
-            return( PSA_ECC_FAMILY_SECP_R1 );
+            return PSA_ECC_FAMILY_SECP_R1 ;
         case MBEDTLS_ECP_DP_BP256R1:
             *bits = 256;
-            return( PSA_ECC_FAMILY_BRAINPOOL_P_R1 );
+            return PSA_ECC_FAMILY_BRAINPOOL_P_R1 ;
         case MBEDTLS_ECP_DP_BP384R1:
             *bits = 384;
-            return( PSA_ECC_FAMILY_BRAINPOOL_P_R1 );
+            return PSA_ECC_FAMILY_BRAINPOOL_P_R1 ;
         case MBEDTLS_ECP_DP_BP512R1:
             *bits = 512;
-            return( PSA_ECC_FAMILY_BRAINPOOL_P_R1 );
+            return PSA_ECC_FAMILY_BRAINPOOL_P_R1 ;
         case MBEDTLS_ECP_DP_CURVE25519:
             *bits = 255;
-            return( PSA_ECC_FAMILY_MONTGOMERY );
+            return PSA_ECC_FAMILY_MONTGOMERY ;
         case MBEDTLS_ECP_DP_SECP192K1:
             *bits = 192;
-            return( PSA_ECC_FAMILY_SECP_K1 );
+            return PSA_ECC_FAMILY_SECP_K1 ;
         case MBEDTLS_ECP_DP_SECP224K1:
             *bits = 224;
-            return( PSA_ECC_FAMILY_SECP_K1 );
+            return PSA_ECC_FAMILY_SECP_K1 ;
         case MBEDTLS_ECP_DP_SECP256K1:
             *bits = 256;
-            return( PSA_ECC_FAMILY_SECP_K1 );
+            return PSA_ECC_FAMILY_SECP_K1 ;
         case MBEDTLS_ECP_DP_CURVE448:
             *bits = 448;
-            return( PSA_ECC_FAMILY_MONTGOMERY );
+            return PSA_ECC_FAMILY_MONTGOMERY ;
         default:
             *bits = 0;
-            return( 0 );
+            return 0 ;
     }
 }
 
@@ -1754,7 +1754,7 @@
 static inline psa_algorithm_t psa_pake_cs_get_algorithm(
     const psa_pake_cipher_suite_t *cipher_suite)
 {
-    return(cipher_suite->algorithm);
+    return cipher_suite->algorithm;
 }
 
 static inline void psa_pake_cs_set_algorithm(
@@ -1786,7 +1786,7 @@
 static inline psa_algorithm_t psa_pake_cs_get_hash(
     const psa_pake_cipher_suite_t *cipher_suite)
 {
-    return(cipher_suite->hash);
+    return cipher_suite->hash;
 }
 
 static inline void psa_pake_cs_set_hash(
@@ -1814,7 +1814,7 @@
 static inline struct psa_pake_operation_s psa_pake_operation_init(void)
 {
     const struct psa_pake_operation_s v = PSA_PAKE_OPERATION_INIT;
-    return(v);
+    return v;
 }
 
 #ifdef __cplusplus
diff --git a/include/psa/crypto_platform.h b/include/psa/crypto_platform.h
index 4787e44..5f1e5c0 100644
--- a/include/psa/crypto_platform.h
+++ b/include/psa/crypto_platform.h
@@ -73,7 +73,7 @@
 static inline int mbedtls_key_owner_id_equal( mbedtls_key_owner_id_t id1,
                                               mbedtls_key_owner_id_t id2 )
 {
-    return( id1 == id2 );
+    return id1 == id2 ;
 }
 
 #endif /* MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER */
diff --git a/include/psa/crypto_struct.h b/include/psa/crypto_struct.h
index 381abf9..ae732c3 100644
--- a/include/psa/crypto_struct.h
+++ b/include/psa/crypto_struct.h
@@ -93,7 +93,7 @@
 static inline struct psa_hash_operation_s psa_hash_operation_init( void )
 {
     const struct psa_hash_operation_s v = PSA_HASH_OPERATION_INIT;
-    return( v );
+    return v ;
 }
 
 struct psa_cipher_operation_s
@@ -118,7 +118,7 @@
 static inline struct psa_cipher_operation_s psa_cipher_operation_init( void )
 {
     const struct psa_cipher_operation_s v = PSA_CIPHER_OPERATION_INIT;
-    return( v );
+    return v ;
 }
 
 /* Include the context definition for the compiled-in drivers for the composite
@@ -143,7 +143,7 @@
 static inline struct psa_mac_operation_s psa_mac_operation_init( void )
 {
     const struct psa_mac_operation_s v = PSA_MAC_OPERATION_INIT;
-    return( v );
+    return v ;
 }
 
 struct psa_aead_operation_s
@@ -164,7 +164,7 @@
 static inline struct psa_aead_operation_s psa_aead_operation_init( void )
 {
     const struct psa_aead_operation_s v = PSA_AEAD_OPERATION_INIT;
-    return( v );
+    return v ;
 }
 
 #if defined(MBEDTLS_PSA_BUILTIN_ALG_HKDF)
@@ -251,7 +251,7 @@
         void )
 {
     const struct psa_key_derivation_s v = PSA_KEY_DERIVATION_OPERATION_INIT;
-    return( v );
+    return v ;
 }
 
 struct psa_key_policy_s
@@ -266,7 +266,7 @@
 static inline struct psa_key_policy_s psa_key_policy_init( void )
 {
     const struct psa_key_policy_s v = PSA_KEY_POLICY_INIT;
-    return( v );
+    return v ;
 }
 
 /* The type used internally for key sizes.
@@ -339,7 +339,7 @@
 static inline struct psa_key_attributes_s psa_key_attributes_init( void )
 {
     const struct psa_key_attributes_s v = PSA_KEY_ATTRIBUTES_INIT;
-    return( v );
+    return v ;
 }
 
 static inline void psa_set_key_id( psa_key_attributes_t *attributes,
diff --git a/include/psa/crypto_values.h b/include/psa/crypto_values.h
index daef941..0bf9098 100644
--- a/include/psa/crypto_values.h
+++ b/include/psa/crypto_values.h
@@ -2094,7 +2094,7 @@
 {
     (void)unused;
 
-    return( key_id );
+    return key_id ;
 }
 
 /** Compare two key identifiers.
@@ -2107,7 +2107,7 @@
 static inline int mbedtls_svc_key_id_equal( mbedtls_svc_key_id_t id1,
                                             mbedtls_svc_key_id_t id2 )
 {
-    return( id1 == id2 );
+    return id1 == id2 ;
 }
 
 /** Check whether a key identifier is null.
@@ -2118,7 +2118,7 @@
  */
 static inline int mbedtls_svc_key_id_is_null( mbedtls_svc_key_id_t key )
 {
-    return( key == 0 );
+    return key == 0 ;
 }
 
 #else /* MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER */
@@ -2161,7 +2161,7 @@
  */
 static inline int mbedtls_svc_key_id_is_null( mbedtls_svc_key_id_t key )
 {
-    return( key.MBEDTLS_PRIVATE(key_id) == 0 );
+    return key.MBEDTLS_PRIVATE(key_id) == 0 ;
 }
 
 #endif /* !MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER */
