diff --git a/tests/psa-client-server/psasim/src/psa_sim_crypto_client.c b/tests/psa-client-server/psasim/src/psa_sim_crypto_client.c
index 091e354..28dff38 100644
--- a/tests/psa-client-server/psasim/src/psa_sim_crypto_client.c
+++ b/tests/psa-client-server/psasim/src/psa_sim_crypto_client.c
@@ -134,8 +134,9 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_aead_operation_t_needs(*operation);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_aead_operation_t_needs(*operation);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -150,7 +151,9 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_aead_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_aead_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
@@ -170,12 +173,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -203,14 +210,15 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg) +
-                    psasim_serialise_buffer_needs(nonce, nonce_length) +
-                    psasim_serialise_buffer_needs(additional_data, additional_data_length) +
-                    psasim_serialise_buffer_needs(ciphertext, ciphertext_length) +
-                    psasim_serialise_buffer_needs(plaintext, plaintext_size) +
-                    psasim_serialise_size_t_needs(*plaintext_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg) +
+        psasim_serialise_buffer_needs(nonce, nonce_length) +
+        psasim_serialise_buffer_needs(additional_data, additional_data_length) +
+        psasim_serialise_buffer_needs(ciphertext, ciphertext_length) +
+        psasim_serialise_buffer_needs(plaintext, plaintext_size) +
+        psasim_serialise_size_t_needs(*plaintext_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -225,31 +233,45 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, nonce, nonce_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        nonce, nonce_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, additional_data, additional_data_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        additional_data, additional_data_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, ciphertext, ciphertext_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        ciphertext, ciphertext_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, plaintext, plaintext_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        plaintext, plaintext_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *plaintext_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *plaintext_length);
     if (!ok) {
         goto fail;
     }
@@ -269,17 +291,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, plaintext, plaintext_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        plaintext, plaintext_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, plaintext_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        plaintext_length);
     if (!ok) {
         goto fail;
     }
@@ -303,10 +331,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_aead_operation_t_needs(*operation) +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_aead_operation_t_needs(*operation) +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -321,15 +350,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_aead_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_aead_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
@@ -349,12 +384,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -382,14 +421,15 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg) +
-                    psasim_serialise_buffer_needs(nonce, nonce_length) +
-                    psasim_serialise_buffer_needs(additional_data, additional_data_length) +
-                    psasim_serialise_buffer_needs(plaintext, plaintext_length) +
-                    psasim_serialise_buffer_needs(ciphertext, ciphertext_size) +
-                    psasim_serialise_size_t_needs(*ciphertext_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg) +
+        psasim_serialise_buffer_needs(nonce, nonce_length) +
+        psasim_serialise_buffer_needs(additional_data, additional_data_length) +
+        psasim_serialise_buffer_needs(plaintext, plaintext_length) +
+        psasim_serialise_buffer_needs(ciphertext, ciphertext_size) +
+        psasim_serialise_size_t_needs(*ciphertext_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -404,31 +444,45 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, nonce, nonce_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        nonce, nonce_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, additional_data, additional_data_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        additional_data, additional_data_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, plaintext, plaintext_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        plaintext, plaintext_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, ciphertext, ciphertext_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        ciphertext, ciphertext_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *ciphertext_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *ciphertext_length);
     if (!ok) {
         goto fail;
     }
@@ -448,17 +502,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, ciphertext, ciphertext_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        ciphertext, ciphertext_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, ciphertext_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        ciphertext_length);
     if (!ok) {
         goto fail;
     }
@@ -482,10 +542,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_aead_operation_t_needs(*operation) +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_aead_operation_t_needs(*operation) +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -500,15 +561,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_aead_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_aead_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
@@ -528,12 +595,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -559,12 +630,13 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_aead_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(ciphertext, ciphertext_size) +
-                    psasim_serialise_size_t_needs(*ciphertext_length) +
-                    psasim_serialise_buffer_needs(tag, tag_size) +
-                    psasim_serialise_size_t_needs(*tag_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_aead_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(ciphertext, ciphertext_size) +
+        psasim_serialise_size_t_needs(*ciphertext_length) +
+        psasim_serialise_buffer_needs(tag, tag_size) +
+        psasim_serialise_size_t_needs(*tag_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -579,23 +651,33 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_aead_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_aead_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, ciphertext, ciphertext_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        ciphertext, ciphertext_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *ciphertext_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *ciphertext_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, tag, tag_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        tag, tag_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *tag_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *tag_length);
     if (!ok) {
         goto fail;
     }
@@ -615,32 +697,44 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, ciphertext, ciphertext_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        ciphertext, ciphertext_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, ciphertext_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        ciphertext_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, tag, tag_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        tag, tag_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, tag_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        tag_length);
     if (!ok) {
         goto fail;
     }
@@ -664,10 +758,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_aead_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(nonce, nonce_size) +
-                    psasim_serialise_size_t_needs(*nonce_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_aead_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(nonce, nonce_size) +
+        psasim_serialise_size_t_needs(*nonce_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -682,15 +777,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_aead_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_aead_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, nonce, nonce_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        nonce, nonce_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *nonce_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *nonce_length);
     if (!ok) {
         goto fail;
     }
@@ -710,22 +811,30 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, nonce, nonce_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        nonce, nonce_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, nonce_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        nonce_length);
     if (!ok) {
         goto fail;
     }
@@ -749,10 +858,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_aead_operation_t_needs(*operation) +
-                    psasim_serialise_size_t_needs(ad_length) +
-                    psasim_serialise_size_t_needs(plaintext_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_aead_operation_t_needs(*operation) +
+        psasim_serialise_size_t_needs(ad_length) +
+        psasim_serialise_size_t_needs(plaintext_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -767,15 +877,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_aead_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_aead_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, ad_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        ad_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, plaintext_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        plaintext_length);
     if (!ok) {
         goto fail;
     }
@@ -795,12 +911,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -823,9 +943,10 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_aead_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(nonce, nonce_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_aead_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(nonce, nonce_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -840,11 +961,15 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_aead_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_aead_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, nonce, nonce_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        nonce, nonce_length);
     if (!ok) {
         goto fail;
     }
@@ -864,12 +989,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -894,11 +1023,12 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_aead_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(input, input_length) +
-                    psasim_serialise_buffer_needs(output, output_size) +
-                    psasim_serialise_size_t_needs(*output_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_aead_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(input, input_length) +
+        psasim_serialise_buffer_needs(output, output_size) +
+        psasim_serialise_size_t_needs(*output_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -913,19 +1043,27 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_aead_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_aead_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, input, input_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        input, input_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, output, output_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *output_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *output_length);
     if (!ok) {
         goto fail;
     }
@@ -945,22 +1083,30 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, output_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        output_length);
     if (!ok) {
         goto fail;
     }
@@ -983,9 +1129,10 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_aead_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(input, input_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_aead_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(input, input_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -1000,11 +1147,15 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_aead_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_aead_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, input, input_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        input, input_length);
     if (!ok) {
         goto fail;
     }
@@ -1024,12 +1175,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -1054,11 +1209,12 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_aead_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(plaintext, plaintext_size) +
-                    psasim_serialise_size_t_needs(*plaintext_length) +
-                    psasim_serialise_buffer_needs(tag, tag_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_aead_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(plaintext, plaintext_size) +
+        psasim_serialise_size_t_needs(*plaintext_length) +
+        psasim_serialise_buffer_needs(tag, tag_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -1073,19 +1229,27 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_aead_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_aead_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, plaintext, plaintext_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        plaintext, plaintext_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *plaintext_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *plaintext_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, tag, tag_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        tag, tag_length);
     if (!ok) {
         goto fail;
     }
@@ -1105,22 +1269,30 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, plaintext, plaintext_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        plaintext, plaintext_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, plaintext_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        plaintext_length);
     if (!ok) {
         goto fail;
     }
@@ -1147,13 +1319,14 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg) +
-                    psasim_serialise_buffer_needs(input, input_length) +
-                    psasim_serialise_buffer_needs(salt, salt_length) +
-                    psasim_serialise_buffer_needs(output, output_size) +
-                    psasim_serialise_size_t_needs(*output_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg) +
+        psasim_serialise_buffer_needs(input, input_length) +
+        psasim_serialise_buffer_needs(salt, salt_length) +
+        psasim_serialise_buffer_needs(output, output_size) +
+        psasim_serialise_size_t_needs(*output_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -1168,27 +1341,39 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, input, input_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        input, input_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, salt, salt_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        salt, salt_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, output, output_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *output_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *output_length);
     if (!ok) {
         goto fail;
     }
@@ -1208,17 +1393,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, output_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        output_length);
     if (!ok) {
         goto fail;
     }
@@ -1245,13 +1436,14 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg) +
-                    psasim_serialise_buffer_needs(input, input_length) +
-                    psasim_serialise_buffer_needs(salt, salt_length) +
-                    psasim_serialise_buffer_needs(output, output_size) +
-                    psasim_serialise_size_t_needs(*output_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg) +
+        psasim_serialise_buffer_needs(input, input_length) +
+        psasim_serialise_buffer_needs(salt, salt_length) +
+        psasim_serialise_buffer_needs(output, output_size) +
+        psasim_serialise_size_t_needs(*output_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -1266,27 +1458,39 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, input, input_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        input, input_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, salt, salt_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        salt, salt_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, output, output_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *output_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *output_length);
     if (!ok) {
         goto fail;
     }
@@ -1306,17 +1510,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, output_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        output_length);
     if (!ok) {
         goto fail;
     }
@@ -1338,8 +1548,9 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_cipher_operation_t_needs(*operation);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_cipher_operation_t_needs(*operation);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -1354,7 +1565,9 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_cipher_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_cipher_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
@@ -1374,12 +1587,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_cipher_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_cipher_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -1405,12 +1622,13 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg) +
-                    psasim_serialise_buffer_needs(input, input_length) +
-                    psasim_serialise_buffer_needs(output, output_size) +
-                    psasim_serialise_size_t_needs(*output_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg) +
+        psasim_serialise_buffer_needs(input, input_length) +
+        psasim_serialise_buffer_needs(output, output_size) +
+        psasim_serialise_size_t_needs(*output_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -1425,23 +1643,33 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, input, input_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        input, input_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, output, output_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *output_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *output_length);
     if (!ok) {
         goto fail;
     }
@@ -1461,17 +1689,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, output_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        output_length);
     if (!ok) {
         goto fail;
     }
@@ -1495,10 +1729,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_cipher_operation_t_needs(*operation) +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_cipher_operation_t_needs(*operation) +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -1513,15 +1748,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_cipher_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_cipher_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
@@ -1541,12 +1782,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_cipher_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_cipher_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -1572,12 +1817,13 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg) +
-                    psasim_serialise_buffer_needs(input, input_length) +
-                    psasim_serialise_buffer_needs(output, output_size) +
-                    psasim_serialise_size_t_needs(*output_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg) +
+        psasim_serialise_buffer_needs(input, input_length) +
+        psasim_serialise_buffer_needs(output, output_size) +
+        psasim_serialise_size_t_needs(*output_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -1592,23 +1838,33 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, input, input_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        input, input_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, output, output_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *output_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *output_length);
     if (!ok) {
         goto fail;
     }
@@ -1628,17 +1884,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, output_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        output_length);
     if (!ok) {
         goto fail;
     }
@@ -1662,10 +1924,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_cipher_operation_t_needs(*operation) +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_cipher_operation_t_needs(*operation) +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -1680,15 +1943,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_cipher_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_cipher_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
@@ -1708,12 +1977,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_cipher_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_cipher_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -1737,10 +2010,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_cipher_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(output, output_size) +
-                    psasim_serialise_size_t_needs(*output_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_cipher_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(output, output_size) +
+        psasim_serialise_size_t_needs(*output_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -1755,15 +2029,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_cipher_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_cipher_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, output, output_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *output_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *output_length);
     if (!ok) {
         goto fail;
     }
@@ -1783,22 +2063,30 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_cipher_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_cipher_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, output_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        output_length);
     if (!ok) {
         goto fail;
     }
@@ -1822,10 +2110,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_cipher_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(iv, iv_size) +
-                    psasim_serialise_size_t_needs(*iv_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_cipher_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(iv, iv_size) +
+        psasim_serialise_size_t_needs(*iv_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -1840,15 +2129,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_cipher_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_cipher_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, iv, iv_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        iv, iv_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *iv_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *iv_length);
     if (!ok) {
         goto fail;
     }
@@ -1868,22 +2163,30 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_cipher_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_cipher_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, iv, iv_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        iv, iv_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, iv_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        iv_length);
     if (!ok) {
         goto fail;
     }
@@ -1906,9 +2209,10 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_cipher_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(iv, iv_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_cipher_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(iv, iv_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -1923,11 +2227,15 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_cipher_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_cipher_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, iv, iv_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        iv, iv_length);
     if (!ok) {
         goto fail;
     }
@@ -1947,12 +2255,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_cipher_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_cipher_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -1977,11 +2289,12 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_cipher_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(input, input_length) +
-                    psasim_serialise_buffer_needs(output, output_size) +
-                    psasim_serialise_size_t_needs(*output_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_cipher_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(input, input_length) +
+        psasim_serialise_buffer_needs(output, output_size) +
+        psasim_serialise_size_t_needs(*output_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -1996,19 +2309,27 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_cipher_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_cipher_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, input, input_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        input, input_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, output, output_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *output_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *output_length);
     if (!ok) {
         goto fail;
     }
@@ -2028,22 +2349,30 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_cipher_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_cipher_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, output_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        output_length);
     if (!ok) {
         goto fail;
     }
@@ -2067,10 +2396,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(source_key) +
-                    psasim_serialise_psa_key_attributes_t_needs(*attributes) +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(*target_key);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(source_key) +
+        psasim_serialise_psa_key_attributes_t_needs(*attributes) +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(*target_key);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -2085,15 +2415,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, source_key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        source_key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_attributes_t(&pos, &remaining, *attributes);
+    ok = psasim_serialise_psa_key_attributes_t(
+        &pos, &remaining,
+        *attributes);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, *target_key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        *target_key);
     if (!ok) {
         goto fail;
     }
@@ -2113,12 +2449,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&rpos, &rremain, target_key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &rpos, &rremain,
+        target_key);
     if (!ok) {
         goto fail;
     }
@@ -2140,8 +2480,9 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -2156,7 +2497,9 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
@@ -2176,7 +2519,9 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
@@ -2200,10 +2545,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_buffer_needs(data, data_size) +
-                    psasim_serialise_size_t_needs(*data_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_buffer_needs(data, data_size) +
+        psasim_serialise_size_t_needs(*data_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -2218,15 +2564,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, data, data_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        data, data_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *data_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *data_length);
     if (!ok) {
         goto fail;
     }
@@ -2246,17 +2598,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, data, data_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        data, data_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, data_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        data_length);
     if (!ok) {
         goto fail;
     }
@@ -2280,10 +2638,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_buffer_needs(data, data_size) +
-                    psasim_serialise_size_t_needs(*data_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_buffer_needs(data, data_size) +
+        psasim_serialise_size_t_needs(*data_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -2298,15 +2657,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, data, data_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        data, data_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *data_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *data_length);
     if (!ok) {
         goto fail;
     }
@@ -2326,17 +2691,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, data, data_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        data, data_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, data_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        data_length);
     if (!ok) {
         goto fail;
     }
@@ -2359,9 +2730,10 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_key_attributes_t_needs(*attributes) +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(*key);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_key_attributes_t_needs(*attributes) +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(*key);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -2376,11 +2748,15 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_attributes_t(&pos, &remaining, *attributes);
+    ok = psasim_serialise_psa_key_attributes_t(
+        &pos, &remaining,
+        *attributes);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, *key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        *key);
     if (!ok) {
         goto fail;
     }
@@ -2400,12 +2776,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&rpos, &rremain, key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &rpos, &rremain,
+        key);
     if (!ok) {
         goto fail;
     }
@@ -2429,10 +2809,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_key_attributes_t_needs(*attributes) +
-                    psasim_serialise_psa_key_production_parameters_t_needs(params, params_data_length) +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(*key);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_key_attributes_t_needs(*attributes) +
+        psasim_serialise_psa_key_production_parameters_t_needs(params, params_data_length) +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(*key);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -2447,15 +2828,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_attributes_t(&pos, &remaining, *attributes);
+    ok = psasim_serialise_psa_key_attributes_t(
+        &pos, &remaining,
+        *attributes);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_production_parameters_t(&pos, &remaining, params, params_data_length);
+    ok = psasim_serialise_psa_key_production_parameters_t(
+        &pos, &remaining,
+        params, params_data_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, *key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        *key);
     if (!ok) {
         goto fail;
     }
@@ -2475,12 +2862,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&rpos, &rremain, key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &rpos, &rremain,
+        key);
     if (!ok) {
         goto fail;
     }
@@ -2502,8 +2893,9 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_buffer_needs(output, output_size);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_buffer_needs(output, output_size);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -2518,7 +2910,9 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, output, output_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
@@ -2538,12 +2932,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
@@ -2566,9 +2964,10 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_key_attributes_t_needs(*attributes);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_key_attributes_t_needs(*attributes);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -2583,11 +2982,15 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_attributes_t(&pos, &remaining, *attributes);
+    ok = psasim_serialise_psa_key_attributes_t(
+        &pos, &remaining,
+        *attributes);
     if (!ok) {
         goto fail;
     }
@@ -2607,12 +3010,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_attributes_t(&rpos, &rremain, attributes);
+    ok = psasim_deserialise_psa_key_attributes_t(
+        &rpos, &rremain,
+        attributes);
     if (!ok) {
         goto fail;
     }
@@ -2634,8 +3041,9 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_hash_operation_t_needs(*operation);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_hash_operation_t_needs(*operation);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -2650,7 +3058,9 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_hash_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_hash_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
@@ -2670,12 +3080,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_hash_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_hash_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -2698,9 +3112,10 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_hash_operation_t_needs(*source_operation) +
-                    psasim_serialise_psa_hash_operation_t_needs(*target_operation);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_hash_operation_t_needs(*source_operation) +
+        psasim_serialise_psa_hash_operation_t_needs(*target_operation);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -2715,11 +3130,15 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_hash_operation_t(&pos, &remaining, *source_operation);
+    ok = psasim_serialise_psa_hash_operation_t(
+        &pos, &remaining,
+        *source_operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_hash_operation_t(&pos, &remaining, *target_operation);
+    ok = psasim_serialise_psa_hash_operation_t(
+        &pos, &remaining,
+        *target_operation);
     if (!ok) {
         goto fail;
     }
@@ -2739,12 +3158,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_hash_operation_t(&rpos, &rremain, target_operation);
+    ok = psasim_deserialise_psa_hash_operation_t(
+        &rpos, &rremain,
+        target_operation);
     if (!ok) {
         goto fail;
     }
@@ -2768,10 +3191,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_algorithm_t_needs(alg) +
-                    psasim_serialise_buffer_needs(input, input_length) +
-                    psasim_serialise_buffer_needs(hash, hash_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_algorithm_t_needs(alg) +
+        psasim_serialise_buffer_needs(input, input_length) +
+        psasim_serialise_buffer_needs(hash, hash_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -2786,15 +3210,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, input, input_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        input, input_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, hash, hash_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        hash, hash_length);
     if (!ok) {
         goto fail;
     }
@@ -2814,7 +3244,9 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
@@ -2839,11 +3271,12 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_algorithm_t_needs(alg) +
-                    psasim_serialise_buffer_needs(input, input_length) +
-                    psasim_serialise_buffer_needs(hash, hash_size) +
-                    psasim_serialise_size_t_needs(*hash_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_algorithm_t_needs(alg) +
+        psasim_serialise_buffer_needs(input, input_length) +
+        psasim_serialise_buffer_needs(hash, hash_size) +
+        psasim_serialise_size_t_needs(*hash_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -2858,19 +3291,27 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, input, input_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        input, input_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, hash, hash_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        hash, hash_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *hash_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *hash_length);
     if (!ok) {
         goto fail;
     }
@@ -2890,17 +3331,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, hash, hash_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        hash, hash_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, hash_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        hash_length);
     if (!ok) {
         goto fail;
     }
@@ -2924,10 +3371,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_hash_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(hash, hash_size) +
-                    psasim_serialise_size_t_needs(*hash_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_hash_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(hash, hash_size) +
+        psasim_serialise_size_t_needs(*hash_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -2942,15 +3390,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_hash_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_hash_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, hash, hash_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        hash, hash_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *hash_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *hash_length);
     if (!ok) {
         goto fail;
     }
@@ -2970,22 +3424,30 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_hash_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_hash_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, hash, hash_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        hash, hash_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, hash_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        hash_length);
     if (!ok) {
         goto fail;
     }
@@ -3008,9 +3470,10 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_hash_operation_t_needs(*operation) +
-                    psasim_serialise_psa_algorithm_t_needs(alg);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_hash_operation_t_needs(*operation) +
+        psasim_serialise_psa_algorithm_t_needs(alg);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -3025,11 +3488,15 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_hash_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_hash_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
@@ -3049,12 +3516,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_hash_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_hash_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -3077,9 +3548,10 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_hash_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(input, input_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_hash_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(input, input_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -3094,11 +3566,15 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_hash_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_hash_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, input, input_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        input, input_length);
     if (!ok) {
         goto fail;
     }
@@ -3118,12 +3594,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_hash_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_hash_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -3146,9 +3626,10 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_hash_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(hash, hash_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_hash_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(hash, hash_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -3163,11 +3644,15 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_hash_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_hash_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, hash, hash_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        hash, hash_length);
     if (!ok) {
         goto fail;
     }
@@ -3187,12 +3672,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_hash_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_hash_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -3216,10 +3705,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_key_attributes_t_needs(*attributes) +
-                    psasim_serialise_buffer_needs(data, data_length) +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(*key);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_key_attributes_t_needs(*attributes) +
+        psasim_serialise_buffer_needs(data, data_length) +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(*key);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -3234,15 +3724,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_attributes_t(&pos, &remaining, *attributes);
+    ok = psasim_serialise_psa_key_attributes_t(
+        &pos, &remaining,
+        *attributes);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, data, data_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        data, data_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, *key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        *key);
     if (!ok) {
         goto fail;
     }
@@ -3262,12 +3758,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&rpos, &rremain, key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &rpos, &rremain,
+        key);
     if (!ok) {
         goto fail;
     }
@@ -3282,15 +3782,16 @@
 
 uint32_t psa_interruptible_get_max_ops(
     void
-)
+    )
 {
     uint8_t *ser_params = NULL;
     uint8_t *ser_result = NULL;
     size_t result_length;
     uint32_t value = 0;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    0;
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        0;
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -3321,7 +3822,9 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_uint32_t(&rpos, &rremain, &value);
+    ok = psasim_deserialise_uint32_t(
+        &rpos, &rremain,
+        &value);
     if (!ok) {
         goto fail;
     }
@@ -3342,8 +3845,9 @@
     uint8_t *ser_result = NULL;
     size_t result_length;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_uint32_t_needs(max_ops);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_uint32_t_needs(max_ops);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -3357,7 +3861,9 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_uint32_t(&pos, &remaining, max_ops);
+    ok = psasim_serialise_uint32_t(
+        &pos, &remaining,
+        max_ops);
     if (!ok) {
         goto fail;
     }
@@ -3392,8 +3898,9 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_key_derivation_operation_t_needs(*operation);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_key_derivation_operation_t_needs(*operation);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -3408,7 +3915,9 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_derivation_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
@@ -3428,12 +3937,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -3456,9 +3969,10 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
-                    psasim_serialise_size_t_needs(*capacity);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
+        psasim_serialise_size_t_needs(*capacity);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -3473,11 +3987,15 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_derivation_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *capacity);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *capacity);
     if (!ok) {
         goto fail;
     }
@@ -3497,12 +4015,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, capacity);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        capacity);
     if (!ok) {
         goto fail;
     }
@@ -3526,10 +4048,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
-                    psasim_serialise_psa_key_derivation_step_t_needs(step) +
-                    psasim_serialise_buffer_needs(data, data_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
+        psasim_serialise_psa_key_derivation_step_t_needs(step) +
+        psasim_serialise_buffer_needs(data, data_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -3544,15 +4067,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_derivation_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_derivation_step_t(&pos, &remaining, step);
+    ok = psasim_serialise_psa_key_derivation_step_t(
+        &pos, &remaining,
+        step);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, data, data_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        data, data_length);
     if (!ok) {
         goto fail;
     }
@@ -3572,12 +4101,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -3601,10 +4134,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
-                    psasim_serialise_psa_key_derivation_step_t_needs(step) +
-                    psasim_serialise_uint64_t_needs(value);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
+        psasim_serialise_psa_key_derivation_step_t_needs(step) +
+        psasim_serialise_uint64_t_needs(value);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -3619,15 +4153,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_derivation_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_derivation_step_t(&pos, &remaining, step);
+    ok = psasim_serialise_psa_key_derivation_step_t(
+        &pos, &remaining,
+        step);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_uint64_t(&pos, &remaining, value);
+    ok = psasim_serialise_uint64_t(
+        &pos, &remaining,
+        value);
     if (!ok) {
         goto fail;
     }
@@ -3647,12 +4187,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -3676,10 +4220,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
-                    psasim_serialise_psa_key_derivation_step_t_needs(step) +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
+        psasim_serialise_psa_key_derivation_step_t_needs(step) +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -3694,15 +4239,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_derivation_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_derivation_step_t(&pos, &remaining, step);
+    ok = psasim_serialise_psa_key_derivation_step_t(
+        &pos, &remaining,
+        step);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
@@ -3722,12 +4273,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -3752,11 +4307,12 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
-                    psasim_serialise_psa_key_derivation_step_t_needs(step) +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(private_key) +
-                    psasim_serialise_buffer_needs(peer_key, peer_key_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
+        psasim_serialise_psa_key_derivation_step_t_needs(step) +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(private_key) +
+        psasim_serialise_buffer_needs(peer_key, peer_key_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -3771,19 +4327,27 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_derivation_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_derivation_step_t(&pos, &remaining, step);
+    ok = psasim_serialise_psa_key_derivation_step_t(
+        &pos, &remaining,
+        step);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, private_key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        private_key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, peer_key, peer_key_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        peer_key, peer_key_length);
     if (!ok) {
         goto fail;
     }
@@ -3803,12 +4367,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -3831,9 +4399,10 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(output, output_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(output, output_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -3848,11 +4417,15 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_derivation_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, output, output_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        output, output_length);
     if (!ok) {
         goto fail;
     }
@@ -3872,17 +4445,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, output, output_length);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        output, output_length);
     if (!ok) {
         goto fail;
     }
@@ -3906,10 +4485,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_key_attributes_t_needs(*attributes) +
-                    psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(*key);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_key_attributes_t_needs(*attributes) +
+        psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(*key);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -3924,15 +4504,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_attributes_t(&pos, &remaining, *attributes);
+    ok = psasim_serialise_psa_key_attributes_t(
+        &pos, &remaining,
+        *attributes);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_derivation_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, *key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        *key);
     if (!ok) {
         goto fail;
     }
@@ -3952,17 +4538,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&rpos, &rremain, key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &rpos, &rremain,
+        key);
     if (!ok) {
         goto fail;
     }
@@ -3987,11 +4579,12 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_key_attributes_t_needs(*attributes) +
-                    psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
-                    psasim_serialise_psa_key_production_parameters_t_needs(params, params_data_length) +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(*key);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_key_attributes_t_needs(*attributes) +
+        psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
+        psasim_serialise_psa_key_production_parameters_t_needs(params, params_data_length) +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(*key);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -4006,19 +4599,27 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_attributes_t(&pos, &remaining, *attributes);
+    ok = psasim_serialise_psa_key_attributes_t(
+        &pos, &remaining,
+        *attributes);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_derivation_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_production_parameters_t(&pos, &remaining, params, params_data_length);
+    ok = psasim_serialise_psa_key_production_parameters_t(
+        &pos, &remaining,
+        params, params_data_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, *key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        *key);
     if (!ok) {
         goto fail;
     }
@@ -4038,17 +4639,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&rpos, &rremain, key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &rpos, &rremain,
+        key);
     if (!ok) {
         goto fail;
     }
@@ -4071,9 +4678,10 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
-                    psasim_serialise_size_t_needs(capacity);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
+        psasim_serialise_size_t_needs(capacity);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -4088,11 +4696,15 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_derivation_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, capacity);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        capacity);
     if (!ok) {
         goto fail;
     }
@@ -4112,12 +4724,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -4140,9 +4756,10 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
-                    psasim_serialise_psa_algorithm_t_needs(alg);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_key_derivation_operation_t_needs(*operation) +
+        psasim_serialise_psa_algorithm_t_needs(alg);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -4157,11 +4774,15 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_derivation_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
@@ -4181,12 +4802,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -4208,8 +4833,9 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_mac_operation_t_needs(*operation);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_mac_operation_t_needs(*operation);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -4224,7 +4850,9 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_mac_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_mac_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
@@ -4244,12 +4872,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_mac_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_mac_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -4275,12 +4907,13 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg) +
-                    psasim_serialise_buffer_needs(input, input_length) +
-                    psasim_serialise_buffer_needs(mac, mac_size) +
-                    psasim_serialise_size_t_needs(*mac_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg) +
+        psasim_serialise_buffer_needs(input, input_length) +
+        psasim_serialise_buffer_needs(mac, mac_size) +
+        psasim_serialise_size_t_needs(*mac_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -4295,23 +4928,33 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, input, input_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        input, input_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, mac, mac_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        mac, mac_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *mac_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *mac_length);
     if (!ok) {
         goto fail;
     }
@@ -4331,17 +4974,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, mac, mac_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        mac, mac_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, mac_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        mac_length);
     if (!ok) {
         goto fail;
     }
@@ -4365,10 +5014,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_mac_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(mac, mac_size) +
-                    psasim_serialise_size_t_needs(*mac_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_mac_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(mac, mac_size) +
+        psasim_serialise_size_t_needs(*mac_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -4383,15 +5033,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_mac_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_mac_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, mac, mac_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        mac, mac_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *mac_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *mac_length);
     if (!ok) {
         goto fail;
     }
@@ -4411,22 +5067,30 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_mac_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_mac_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, mac, mac_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        mac, mac_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, mac_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        mac_length);
     if (!ok) {
         goto fail;
     }
@@ -4450,10 +5114,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_mac_operation_t_needs(*operation) +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_mac_operation_t_needs(*operation) +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -4468,15 +5133,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_mac_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_mac_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
@@ -4496,12 +5167,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_mac_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_mac_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -4524,9 +5199,10 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_mac_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(input, input_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_mac_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(input, input_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -4541,11 +5217,15 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_mac_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_mac_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, input, input_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        input, input_length);
     if (!ok) {
         goto fail;
     }
@@ -4565,12 +5245,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_mac_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_mac_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -4595,11 +5279,12 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg) +
-                    psasim_serialise_buffer_needs(input, input_length) +
-                    psasim_serialise_buffer_needs(mac, mac_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg) +
+        psasim_serialise_buffer_needs(input, input_length) +
+        psasim_serialise_buffer_needs(mac, mac_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -4614,19 +5299,27 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, input, input_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        input, input_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, mac, mac_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        mac, mac_length);
     if (!ok) {
         goto fail;
     }
@@ -4646,7 +5339,9 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
@@ -4669,9 +5364,10 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_mac_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(mac, mac_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_mac_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(mac, mac_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -4686,11 +5382,15 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_mac_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_mac_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, mac, mac_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        mac, mac_length);
     if (!ok) {
         goto fail;
     }
@@ -4710,12 +5410,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_mac_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_mac_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -4739,10 +5443,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_mac_operation_t_needs(*operation) +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_mac_operation_t_needs(*operation) +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -4757,15 +5462,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_mac_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_mac_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
@@ -4785,12 +5496,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_mac_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_mac_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -4812,8 +5527,9 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -4828,7 +5544,9 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
@@ -4848,7 +5566,9 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
@@ -4874,12 +5594,13 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_algorithm_t_needs(alg) +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(private_key) +
-                    psasim_serialise_buffer_needs(peer_key, peer_key_length) +
-                    psasim_serialise_buffer_needs(output, output_size) +
-                    psasim_serialise_size_t_needs(*output_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_algorithm_t_needs(alg) +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(private_key) +
+        psasim_serialise_buffer_needs(peer_key, peer_key_length) +
+        psasim_serialise_buffer_needs(output, output_size) +
+        psasim_serialise_size_t_needs(*output_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -4894,23 +5615,33 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, private_key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        private_key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, peer_key, peer_key_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        peer_key, peer_key_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, output, output_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *output_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *output_length);
     if (!ok) {
         goto fail;
     }
@@ -4930,17 +5661,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, output_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        output_length);
     if (!ok) {
         goto fail;
     }
@@ -4961,8 +5698,9 @@
     uint8_t *ser_result = NULL;
     size_t result_length;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_key_attributes_t_needs(*attributes);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_key_attributes_t_needs(*attributes);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -4976,7 +5714,9 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_key_attributes_t(&pos, &remaining, *attributes);
+    ok = psasim_serialise_psa_key_attributes_t(
+        &pos, &remaining,
+        *attributes);
     if (!ok) {
         goto fail;
     }
@@ -4996,7 +5736,9 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_attributes_t(&rpos, &rremain, attributes);
+    ok = psasim_deserialise_psa_key_attributes_t(
+        &rpos, &rremain,
+        attributes);
     if (!ok) {
         goto fail;
     }
@@ -5020,12 +5762,13 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg) +
-                    psasim_serialise_buffer_needs(hash, hash_length) +
-                    psasim_serialise_buffer_needs(signature, signature_size) +
-                    psasim_serialise_size_t_needs(*signature_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg) +
+        psasim_serialise_buffer_needs(hash, hash_length) +
+        psasim_serialise_buffer_needs(signature, signature_size) +
+        psasim_serialise_size_t_needs(*signature_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -5040,23 +5783,33 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, hash, hash_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        hash, hash_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, signature, signature_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        signature, signature_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *signature_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *signature_length);
     if (!ok) {
         goto fail;
     }
@@ -5076,17 +5829,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, signature, signature_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        signature, signature_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, signature_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        signature_length);
     if (!ok) {
         goto fail;
     }
@@ -5108,8 +5867,9 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_sign_hash_interruptible_operation_t_needs(*operation);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_sign_hash_interruptible_operation_t_needs(*operation);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -5124,7 +5884,9 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_sign_hash_interruptible_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_sign_hash_interruptible_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
@@ -5144,12 +5906,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_sign_hash_interruptible_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_sign_hash_interruptible_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -5173,10 +5939,11 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_sign_hash_interruptible_operation_t_needs(*operation) +
-                    psasim_serialise_buffer_needs(signature, signature_size) +
-                    psasim_serialise_size_t_needs(*signature_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_sign_hash_interruptible_operation_t_needs(*operation) +
+        psasim_serialise_buffer_needs(signature, signature_size) +
+        psasim_serialise_size_t_needs(*signature_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -5191,15 +5958,21 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_sign_hash_interruptible_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_sign_hash_interruptible_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, signature, signature_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        signature, signature_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *signature_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *signature_length);
     if (!ok) {
         goto fail;
     }
@@ -5219,22 +5992,30 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_sign_hash_interruptible_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_sign_hash_interruptible_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, signature, signature_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        signature, signature_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, signature_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        signature_length);
     if (!ok) {
         goto fail;
     }
@@ -5256,8 +6037,9 @@
     size_t result_length;
     uint32_t value = 0;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_sign_hash_interruptible_operation_t_needs(*operation);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_sign_hash_interruptible_operation_t_needs(*operation);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -5272,7 +6054,9 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_sign_hash_interruptible_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_sign_hash_interruptible_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
@@ -5292,7 +6076,9 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_uint32_t(&rpos, &rremain, &value);
+    ok = psasim_deserialise_uint32_t(
+        &rpos, &rremain,
+        &value);
     if (!ok) {
         goto fail;
     }
@@ -5317,11 +6103,12 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_sign_hash_interruptible_operation_t_needs(*operation) +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg) +
-                    psasim_serialise_buffer_needs(hash, hash_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_sign_hash_interruptible_operation_t_needs(*operation) +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg) +
+        psasim_serialise_buffer_needs(hash, hash_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -5336,19 +6123,27 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_sign_hash_interruptible_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_sign_hash_interruptible_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, hash, hash_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        hash, hash_length);
     if (!ok) {
         goto fail;
     }
@@ -5368,12 +6163,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_sign_hash_interruptible_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_sign_hash_interruptible_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -5399,12 +6198,13 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg) +
-                    psasim_serialise_buffer_needs(input, input_length) +
-                    psasim_serialise_buffer_needs(signature, signature_size) +
-                    psasim_serialise_size_t_needs(*signature_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg) +
+        psasim_serialise_buffer_needs(input, input_length) +
+        psasim_serialise_buffer_needs(signature, signature_size) +
+        psasim_serialise_size_t_needs(*signature_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -5419,23 +6219,33 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, input, input_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        input, input_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, signature, signature_size);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        signature, signature_size);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_size_t(&pos, &remaining, *signature_length);
+    ok = psasim_serialise_size_t(
+        &pos, &remaining,
+        *signature_length);
     if (!ok) {
         goto fail;
     }
@@ -5455,17 +6265,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, signature, signature_size);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        signature, signature_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&rpos, &rremain, signature_length);
+    ok = psasim_deserialise_size_t(
+        &rpos, &rremain,
+        signature_length);
     if (!ok) {
         goto fail;
     }
@@ -5490,11 +6306,12 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg) +
-                    psasim_serialise_buffer_needs(hash, hash_length) +
-                    psasim_serialise_buffer_needs(signature, signature_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg) +
+        psasim_serialise_buffer_needs(hash, hash_length) +
+        psasim_serialise_buffer_needs(signature, signature_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -5509,19 +6326,27 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, hash, hash_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        hash, hash_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, signature, signature_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        signature, signature_length);
     if (!ok) {
         goto fail;
     }
@@ -5541,7 +6366,9 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
@@ -5563,8 +6390,9 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_verify_hash_interruptible_operation_t_needs(*operation);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_verify_hash_interruptible_operation_t_needs(*operation);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -5579,7 +6407,9 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_verify_hash_interruptible_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_verify_hash_interruptible_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
@@ -5599,12 +6429,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_verify_hash_interruptible_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_verify_hash_interruptible_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -5626,8 +6460,9 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_verify_hash_interruptible_operation_t_needs(*operation);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_verify_hash_interruptible_operation_t_needs(*operation);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -5642,7 +6477,9 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_verify_hash_interruptible_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_verify_hash_interruptible_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
@@ -5662,12 +6499,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_verify_hash_interruptible_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_verify_hash_interruptible_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -5689,8 +6530,9 @@
     size_t result_length;
     uint32_t value = 0;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_verify_hash_interruptible_operation_t_needs(*operation);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_verify_hash_interruptible_operation_t_needs(*operation);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -5705,7 +6547,9 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_verify_hash_interruptible_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_verify_hash_interruptible_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
@@ -5725,7 +6569,9 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_uint32_t(&rpos, &rremain, &value);
+    ok = psasim_deserialise_uint32_t(
+        &rpos, &rremain,
+        &value);
     if (!ok) {
         goto fail;
     }
@@ -5751,12 +6597,13 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_psa_verify_hash_interruptible_operation_t_needs(*operation) +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg) +
-                    psasim_serialise_buffer_needs(hash, hash_length) +
-                    psasim_serialise_buffer_needs(signature, signature_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_psa_verify_hash_interruptible_operation_t_needs(*operation) +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg) +
+        psasim_serialise_buffer_needs(hash, hash_length) +
+        psasim_serialise_buffer_needs(signature, signature_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -5771,23 +6618,33 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_verify_hash_interruptible_operation_t(&pos, &remaining, *operation);
+    ok = psasim_serialise_psa_verify_hash_interruptible_operation_t(
+        &pos, &remaining,
+        *operation);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, hash, hash_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        hash, hash_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, signature, signature_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        signature, signature_length);
     if (!ok) {
         goto fail;
     }
@@ -5807,12 +6664,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_verify_hash_interruptible_operation_t(&rpos, &rremain, operation);
+    ok = psasim_deserialise_psa_verify_hash_interruptible_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -5837,11 +6698,12 @@
     size_t result_length;
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
 
-    size_t needed = psasim_serialise_begin_needs() +
-                    psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
-                    psasim_serialise_psa_algorithm_t_needs(alg) +
-                    psasim_serialise_buffer_needs(input, input_length) +
-                    psasim_serialise_buffer_needs(signature, signature_length);
+    size_t needed =
+        psasim_serialise_begin_needs() +
+        psasim_serialise_mbedtls_svc_key_id_t_needs(key) +
+        psasim_serialise_psa_algorithm_t_needs(alg) +
+        psasim_serialise_buffer_needs(input, input_length) +
+        psasim_serialise_buffer_needs(signature, signature_length);
 
     ser_params = malloc(needed);
     if (ser_params == NULL) {
@@ -5856,19 +6718,27 @@
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&pos, &remaining, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        key);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_psa_algorithm_t(&pos, &remaining, alg);
+    ok = psasim_serialise_psa_algorithm_t(
+        &pos, &remaining,
+        alg);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, input, input_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        input, input_length);
     if (!ok) {
         goto fail;
     }
-    ok = psasim_serialise_buffer(&pos, &remaining, signature, signature_length);
+    ok = psasim_serialise_buffer(
+        &pos, &remaining,
+        signature, signature_length);
     if (!ok) {
         goto fail;
     }
@@ -5888,7 +6758,9 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_status_t(&rpos, &rremain, &status);
+    ok = psasim_deserialise_psa_status_t(
+        &rpos, &rremain,
+        &status);
     if (!ok) {
         goto fail;
     }
diff --git a/tests/psa-client-server/psasim/src/psa_sim_crypto_server.c b/tests/psa-client-server/psasim/src/psa_sim_crypto_server.c
index 03e36c0..5259751 100644
--- a/tests/psa-client-server/psasim/src/psa_sim_crypto_server.c
+++ b/tests/psa-client-server/psasim/src/psa_sim_crypto_server.c
@@ -54,7 +54,9 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
@@ -88,7 +90,9 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_aead_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_aead_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
@@ -118,12 +122,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -167,37 +175,51 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &nonce, &nonce_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &nonce, &nonce_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &additional_data, &additional_data_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &additional_data, &additional_data_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &ciphertext, &ciphertext_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &ciphertext, &ciphertext_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &plaintext, &plaintext_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &plaintext, &plaintext_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &plaintext_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &plaintext_length);
     if (!ok) {
         goto fail;
     }
@@ -234,17 +256,23 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, plaintext, plaintext_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        plaintext, plaintext_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, plaintext_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        plaintext_length);
     if (!ok) {
         goto fail;
     }
@@ -290,17 +318,23 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_aead_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_aead_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
@@ -332,12 +366,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -381,37 +419,51 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &nonce, &nonce_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &nonce, &nonce_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &additional_data, &additional_data_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &additional_data, &additional_data_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &plaintext, &plaintext_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &plaintext, &plaintext_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &ciphertext, &ciphertext_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &ciphertext, &ciphertext_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &ciphertext_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &ciphertext_length);
     if (!ok) {
         goto fail;
     }
@@ -448,17 +500,23 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, ciphertext, ciphertext_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        ciphertext, ciphertext_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, ciphertext_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        ciphertext_length);
     if (!ok) {
         goto fail;
     }
@@ -504,17 +562,23 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_aead_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_aead_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
@@ -546,12 +610,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -591,27 +659,37 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_aead_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_aead_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &ciphertext, &ciphertext_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &ciphertext, &ciphertext_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &ciphertext_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &ciphertext_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &tag, &tag_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &tag, &tag_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &tag_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &tag_length);
     if (!ok) {
         goto fail;
     }
@@ -649,32 +727,44 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, ciphertext, ciphertext_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        ciphertext, ciphertext_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, ciphertext_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        ciphertext_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, tag, tag_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        tag, tag_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, tag_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        tag_length);
     if (!ok) {
         goto fail;
     }
@@ -717,17 +807,23 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_aead_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_aead_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &nonce, &nonce_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &nonce, &nonce_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &nonce_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &nonce_length);
     if (!ok) {
         goto fail;
     }
@@ -761,22 +857,30 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, nonce, nonce_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        nonce, nonce_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, nonce_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        nonce_length);
     if (!ok) {
         goto fail;
     }
@@ -816,17 +920,23 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_aead_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_aead_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &ad_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &ad_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &plaintext_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &plaintext_length);
     if (!ok) {
         goto fail;
     }
@@ -858,12 +968,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -899,12 +1013,16 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_aead_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_aead_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &nonce, &nonce_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &nonce, &nonce_length);
     if (!ok) {
         goto fail;
     }
@@ -935,12 +1053,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -983,22 +1105,30 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_aead_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_aead_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &input, &input_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &input, &input_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &output, &output_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &output, &output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &output_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &output_length);
     if (!ok) {
         goto fail;
     }
@@ -1033,22 +1163,30 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, output_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        output_length);
     if (!ok) {
         goto fail;
     }
@@ -1090,12 +1228,16 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_aead_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_aead_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &input, &input_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &input, &input_length);
     if (!ok) {
         goto fail;
     }
@@ -1126,12 +1268,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -1174,22 +1320,30 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_aead_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_aead_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &plaintext, &plaintext_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &plaintext, &plaintext_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &plaintext_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &plaintext_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &tag, &tag_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &tag, &tag_length);
     if (!ok) {
         goto fail;
     }
@@ -1224,22 +1378,30 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_aead_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_aead_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, plaintext, plaintext_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        plaintext, plaintext_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, plaintext_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        plaintext_length);
     if (!ok) {
         goto fail;
     }
@@ -1287,32 +1449,44 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &input, &input_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &input, &input_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &salt, &salt_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &salt, &salt_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &output, &output_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &output, &output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &output_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &output_length);
     if (!ok) {
         goto fail;
     }
@@ -1348,17 +1522,23 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, output_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        output_length);
     if (!ok) {
         goto fail;
     }
@@ -1408,32 +1588,44 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &input, &input_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &input, &input_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &salt, &salt_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &salt, &salt_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &output, &output_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &output, &output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &output_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &output_length);
     if (!ok) {
         goto fail;
     }
@@ -1469,17 +1661,23 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, output_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        output_length);
     if (!ok) {
         goto fail;
     }
@@ -1521,7 +1719,9 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_cipher_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_cipher_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
@@ -1551,12 +1751,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_cipher_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_cipher_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -1596,27 +1800,37 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &input, &input_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &input, &input_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &output, &output_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &output, &output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &output_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &output_length);
     if (!ok) {
         goto fail;
     }
@@ -1651,17 +1865,23 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, output_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        output_length);
     if (!ok) {
         goto fail;
     }
@@ -1703,17 +1923,23 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_cipher_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_cipher_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
@@ -1745,12 +1971,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_cipher_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_cipher_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -1790,27 +2020,37 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &input, &input_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &input, &input_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &output, &output_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &output, &output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &output_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &output_length);
     if (!ok) {
         goto fail;
     }
@@ -1845,17 +2085,23 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, output_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        output_length);
     if (!ok) {
         goto fail;
     }
@@ -1897,17 +2143,23 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_cipher_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_cipher_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
@@ -1939,12 +2191,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_cipher_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_cipher_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -1981,17 +2237,23 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_cipher_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_cipher_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &output, &output_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &output, &output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &output_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &output_length);
     if (!ok) {
         goto fail;
     }
@@ -2025,22 +2287,30 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_cipher_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_cipher_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, output_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        output_length);
     if (!ok) {
         goto fail;
     }
@@ -2081,17 +2351,23 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_cipher_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_cipher_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &iv, &iv_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &iv, &iv_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &iv_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &iv_length);
     if (!ok) {
         goto fail;
     }
@@ -2125,22 +2401,30 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_cipher_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_cipher_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, iv, iv_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        iv, iv_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, iv_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        iv_length);
     if (!ok) {
         goto fail;
     }
@@ -2180,12 +2464,16 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_cipher_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_cipher_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &iv, &iv_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &iv, &iv_length);
     if (!ok) {
         goto fail;
     }
@@ -2216,12 +2504,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_cipher_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_cipher_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -2264,22 +2556,30 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_cipher_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_cipher_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &input, &input_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &input, &input_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &output, &output_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &output, &output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &output_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &output_length);
     if (!ok) {
         goto fail;
     }
@@ -2314,22 +2614,30 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_cipher_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_cipher_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, output_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        output_length);
     if (!ok) {
         goto fail;
     }
@@ -2371,17 +2679,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &source_key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &source_key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_attributes_t(&pos, &remaining, &attributes);
+    ok = psasim_deserialise_psa_key_attributes_t(
+        &pos, &remaining,
+        &attributes);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &target_key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &target_key);
     if (!ok) {
         goto fail;
     }
@@ -2413,12 +2727,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&rpos, &rremain, target_key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &rpos, &rremain,
+        target_key);
     if (!ok) {
         goto fail;
     }
@@ -2452,7 +2770,9 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
@@ -2481,7 +2801,9 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
@@ -2518,17 +2840,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &data, &data_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &data, &data_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &data_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &data_length);
     if (!ok) {
         goto fail;
     }
@@ -2561,17 +2889,23 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, data, data_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        data, data_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, data_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        data_length);
     if (!ok) {
         goto fail;
     }
@@ -2612,17 +2946,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &data, &data_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &data, &data_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &data_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &data_length);
     if (!ok) {
         goto fail;
     }
@@ -2655,17 +2995,23 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, data, data_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        data, data_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, data_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        data_length);
     if (!ok) {
         goto fail;
     }
@@ -2704,12 +3050,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_attributes_t(&pos, &remaining, &attributes);
+    ok = psasim_deserialise_psa_key_attributes_t(
+        &pos, &remaining,
+        &attributes);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
@@ -2740,12 +3090,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&rpos, &rremain, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &rpos, &rremain,
+        key);
     if (!ok) {
         goto fail;
     }
@@ -2782,17 +3136,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_attributes_t(&pos, &remaining, &attributes);
+    ok = psasim_deserialise_psa_key_attributes_t(
+        &pos, &remaining,
+        &attributes);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_production_parameters_t(&pos, &remaining, &params, &params_data_length);
+    ok = psasim_deserialise_psa_key_production_parameters_t(
+        &pos, &remaining,
+        &params, &params_data_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
@@ -2824,12 +3184,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&rpos, &rremain, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &rpos, &rremain,
+        key);
     if (!ok) {
         goto fail;
     }
@@ -2868,7 +3232,9 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &output, &output_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &output, &output_size);
     if (!ok) {
         goto fail;
     }
@@ -2898,12 +3264,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
@@ -2942,12 +3312,16 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_attributes_t(&pos, &remaining, &attributes);
+    ok = psasim_deserialise_psa_key_attributes_t(
+        &pos, &remaining,
+        &attributes);
     if (!ok) {
         goto fail;
     }
@@ -2978,12 +3352,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_psa_key_attributes_t(&rpos, &rremain, attributes);
+    ok = psasim_serialise_psa_key_attributes_t(
+        &rpos, &rremain,
+        attributes);
     if (!ok) {
         goto fail;
     }
@@ -3017,7 +3395,9 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_hash_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_hash_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
@@ -3047,12 +3427,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_hash_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_hash_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -3087,12 +3471,16 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_hash_operation_t(&pos, &remaining, &source_operation);
+    ok = psasim_server_deserialise_psa_hash_operation_t(
+        &pos, &remaining,
+        &source_operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_hash_operation_t(&pos, &remaining, &target_operation);
+    ok = psasim_server_deserialise_psa_hash_operation_t(
+        &pos, &remaining,
+        &target_operation);
     if (!ok) {
         goto fail;
     }
@@ -3123,12 +3511,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_hash_operation_t(&rpos, &rremain, target_operation);
+    ok = psasim_server_serialise_psa_hash_operation_t(
+        &rpos, &rremain,
+        target_operation);
     if (!ok) {
         goto fail;
     }
@@ -3166,17 +3558,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &input, &input_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &input, &input_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &hash, &hash_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &hash, &hash_length);
     if (!ok) {
         goto fail;
     }
@@ -3207,7 +3605,9 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
@@ -3252,22 +3652,30 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &input, &input_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &input, &input_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &hash, &hash_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &hash, &hash_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &hash_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &hash_length);
     if (!ok) {
         goto fail;
     }
@@ -3301,17 +3709,23 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, hash, hash_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        hash, hash_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, hash_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        hash_length);
     if (!ok) {
         goto fail;
     }
@@ -3354,17 +3768,23 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_hash_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_hash_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &hash, &hash_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &hash, &hash_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &hash_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &hash_length);
     if (!ok) {
         goto fail;
     }
@@ -3398,22 +3818,30 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_hash_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_hash_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, hash, hash_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        hash, hash_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, hash_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        hash_length);
     if (!ok) {
         goto fail;
     }
@@ -3452,12 +3880,16 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_hash_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_hash_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
@@ -3488,12 +3920,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_hash_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_hash_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -3529,12 +3965,16 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_hash_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_hash_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &input, &input_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &input, &input_length);
     if (!ok) {
         goto fail;
     }
@@ -3565,12 +4005,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_hash_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_hash_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -3610,12 +4054,16 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_hash_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_hash_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &hash, &hash_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &hash, &hash_length);
     if (!ok) {
         goto fail;
     }
@@ -3646,12 +4094,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_hash_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_hash_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -3692,17 +4144,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_attributes_t(&pos, &remaining, &attributes);
+    ok = psasim_deserialise_psa_key_attributes_t(
+        &pos, &remaining,
+        &attributes);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &data, &data_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &data, &data_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
@@ -3734,12 +4192,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&rpos, &rremain, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &rpos, &rremain,
+        key);
     if (!ok) {
         goto fail;
     }
@@ -3792,7 +4254,9 @@
         goto fail;
     }
 
-    ok = psasim_serialise_uint32_t(&rpos, &rremain, value);
+    ok = psasim_serialise_uint32_t(
+        &rpos, &rremain,
+        value);
     if (!ok) {
         goto fail;
     }
@@ -3825,7 +4289,9 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_uint32_t(&pos, &remaining, &max_ops);
+    ok = psasim_deserialise_uint32_t(
+        &pos, &remaining,
+        &max_ops);
     if (!ok) {
         goto fail;
     }
@@ -3882,7 +4348,9 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_key_derivation_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
@@ -3912,12 +4380,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -3952,12 +4424,16 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_key_derivation_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &capacity);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &capacity);
     if (!ok) {
         goto fail;
     }
@@ -3988,12 +4464,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, capacity);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        capacity);
     if (!ok) {
         goto fail;
     }
@@ -4030,17 +4510,23 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_key_derivation_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_derivation_step_t(&pos, &remaining, &step);
+    ok = psasim_deserialise_psa_key_derivation_step_t(
+        &pos, &remaining,
+        &step);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &data, &data_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &data, &data_length);
     if (!ok) {
         goto fail;
     }
@@ -4072,12 +4558,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -4117,17 +4607,23 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_key_derivation_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_derivation_step_t(&pos, &remaining, &step);
+    ok = psasim_deserialise_psa_key_derivation_step_t(
+        &pos, &remaining,
+        &step);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_uint64_t(&pos, &remaining, &value);
+    ok = psasim_deserialise_uint64_t(
+        &pos, &remaining,
+        &value);
     if (!ok) {
         goto fail;
     }
@@ -4159,12 +4655,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -4200,17 +4700,23 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_key_derivation_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_derivation_step_t(&pos, &remaining, &step);
+    ok = psasim_deserialise_psa_key_derivation_step_t(
+        &pos, &remaining,
+        &step);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
@@ -4242,12 +4748,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -4285,22 +4795,30 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_key_derivation_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_derivation_step_t(&pos, &remaining, &step);
+    ok = psasim_deserialise_psa_key_derivation_step_t(
+        &pos, &remaining,
+        &step);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &private_key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &private_key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &peer_key, &peer_key_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &peer_key, &peer_key_length);
     if (!ok) {
         goto fail;
     }
@@ -4333,12 +4851,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -4378,12 +4900,16 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_key_derivation_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &output, &output_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &output, &output_length);
     if (!ok) {
         goto fail;
     }
@@ -4415,17 +4941,23 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, output, output_length);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        output, output_length);
     if (!ok) {
         goto fail;
     }
@@ -4465,17 +4997,23 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_attributes_t(&pos, &remaining, &attributes);
+    ok = psasim_deserialise_psa_key_attributes_t(
+        &pos, &remaining,
+        &attributes);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_key_derivation_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
@@ -4508,17 +5046,23 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&rpos, &rremain, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &rpos, &rremain,
+        key);
     if (!ok) {
         goto fail;
     }
@@ -4556,22 +5100,30 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_attributes_t(&pos, &remaining, &attributes);
+    ok = psasim_deserialise_psa_key_attributes_t(
+        &pos, &remaining,
+        &attributes);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_key_derivation_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_production_parameters_t(&pos, &remaining, &params, &params_data_length);
+    ok = psasim_deserialise_psa_key_production_parameters_t(
+        &pos, &remaining,
+        &params, &params_data_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
@@ -4605,17 +5157,23 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_mbedtls_svc_key_id_t(&rpos, &rremain, key);
+    ok = psasim_serialise_mbedtls_svc_key_id_t(
+        &rpos, &rremain,
+        key);
     if (!ok) {
         goto fail;
     }
@@ -4654,12 +5212,16 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_key_derivation_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &capacity);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &capacity);
     if (!ok) {
         goto fail;
     }
@@ -4690,12 +5252,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -4730,12 +5296,16 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_key_derivation_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_key_derivation_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
@@ -4766,12 +5336,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_key_derivation_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_key_derivation_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -4805,7 +5379,9 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_mac_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_mac_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
@@ -4835,12 +5411,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_mac_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_mac_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -4880,27 +5460,37 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &input, &input_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &input, &input_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &mac, &mac_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &mac, &mac_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &mac_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &mac_length);
     if (!ok) {
         goto fail;
     }
@@ -4935,17 +5525,23 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, mac, mac_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        mac, mac_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, mac_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        mac_length);
     if (!ok) {
         goto fail;
     }
@@ -4988,17 +5584,23 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_mac_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_mac_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &mac, &mac_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &mac, &mac_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &mac_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &mac_length);
     if (!ok) {
         goto fail;
     }
@@ -5032,22 +5634,30 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_mac_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_mac_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, mac, mac_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        mac, mac_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, mac_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        mac_length);
     if (!ok) {
         goto fail;
     }
@@ -5087,17 +5697,23 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_mac_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_mac_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
@@ -5129,12 +5745,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_mac_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_mac_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -5170,12 +5790,16 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_mac_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_mac_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &input, &input_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &input, &input_length);
     if (!ok) {
         goto fail;
     }
@@ -5206,12 +5830,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_mac_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_mac_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -5254,22 +5882,30 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &input, &input_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &input, &input_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &mac, &mac_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &mac, &mac_length);
     if (!ok) {
         goto fail;
     }
@@ -5301,7 +5937,9 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
@@ -5343,12 +5981,16 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_mac_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_mac_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &mac, &mac_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &mac, &mac_length);
     if (!ok) {
         goto fail;
     }
@@ -5379,12 +6021,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_mac_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_mac_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -5424,17 +6070,23 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_mac_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_mac_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
@@ -5466,12 +6118,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_mac_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_mac_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -5505,7 +6161,9 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
@@ -5534,7 +6192,9 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
@@ -5574,27 +6234,37 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &private_key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &private_key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &peer_key, &peer_key_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &peer_key, &peer_key_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &output, &output_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &output, &output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &output_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &output_length);
     if (!ok) {
         goto fail;
     }
@@ -5629,17 +6299,23 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, output, output_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        output, output_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, output_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        output_length);
     if (!ok) {
         goto fail;
     }
@@ -5678,7 +6354,9 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_key_attributes_t(&pos, &remaining, &attributes);
+    ok = psasim_deserialise_psa_key_attributes_t(
+        &pos, &remaining,
+        &attributes);
     if (!ok) {
         goto fail;
     }
@@ -5691,7 +6369,7 @@
 
     // NOTE: Should really check there is no overflow as we go along.
     size_t result_size =
-        psasim_serialise_begin_needs();
+        psasim_serialise_begin_needs() +
         psasim_serialise_psa_key_attributes_t_needs(attributes);
 
     result = malloc(result_size);
@@ -5707,7 +6385,9 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_key_attributes_t(&rpos, &rremain, attributes);
+    ok = psasim_serialise_psa_key_attributes_t(
+        &rpos, &rremain,
+        attributes);
     if (!ok) {
         goto fail;
     }
@@ -5747,27 +6427,37 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &hash, &hash_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &hash, &hash_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &signature, &signature_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &signature, &signature_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &signature_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &signature_length);
     if (!ok) {
         goto fail;
     }
@@ -5802,17 +6492,23 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, signature, signature_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        signature, signature_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, signature_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        signature_length);
     if (!ok) {
         goto fail;
     }
@@ -5852,7 +6548,9 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_sign_hash_interruptible_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_sign_hash_interruptible_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
@@ -5882,12 +6580,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_sign_hash_interruptible_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_sign_hash_interruptible_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -5924,17 +6626,23 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_sign_hash_interruptible_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_sign_hash_interruptible_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &signature, &signature_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &signature, &signature_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &signature_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &signature_length);
     if (!ok) {
         goto fail;
     }
@@ -5968,22 +6676,30 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_sign_hash_interruptible_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_sign_hash_interruptible_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, signature, signature_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        signature, signature_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, signature_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        signature_length);
     if (!ok) {
         goto fail;
     }
@@ -6021,7 +6737,9 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_sign_hash_interruptible_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_sign_hash_interruptible_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
@@ -6050,7 +6768,9 @@
         goto fail;
     }
 
-    ok = psasim_serialise_uint32_t(&rpos, &rremain, value);
+    ok = psasim_serialise_uint32_t(
+        &rpos, &rremain,
+        value);
     if (!ok) {
         goto fail;
     }
@@ -6088,22 +6808,30 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_sign_hash_interruptible_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_sign_hash_interruptible_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &hash, &hash_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &hash, &hash_length);
     if (!ok) {
         goto fail;
     }
@@ -6136,12 +6864,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_sign_hash_interruptible_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_sign_hash_interruptible_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -6185,27 +6917,37 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &input, &input_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &input, &input_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &signature, &signature_size);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &signature, &signature_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_size_t(&pos, &remaining, &signature_length);
+    ok = psasim_deserialise_size_t(
+        &pos, &remaining,
+        &signature_length);
     if (!ok) {
         goto fail;
     }
@@ -6240,17 +6982,23 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, signature, signature_size);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        signature, signature_size);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_serialise_size_t(&rpos, &rremain, signature_length);
+    ok = psasim_serialise_size_t(
+        &rpos, &rremain,
+        signature_length);
     if (!ok) {
         goto fail;
     }
@@ -6295,22 +7043,30 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &hash, &hash_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &hash, &hash_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &signature, &signature_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &signature, &signature_length);
     if (!ok) {
         goto fail;
     }
@@ -6342,7 +7098,9 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
@@ -6382,7 +7140,9 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_verify_hash_interruptible_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_verify_hash_interruptible_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
@@ -6412,12 +7172,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_verify_hash_interruptible_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_verify_hash_interruptible_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -6451,7 +7215,9 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_verify_hash_interruptible_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_verify_hash_interruptible_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
@@ -6481,12 +7247,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_verify_hash_interruptible_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_verify_hash_interruptible_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -6520,7 +7290,9 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_verify_hash_interruptible_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_verify_hash_interruptible_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
@@ -6549,7 +7321,9 @@
         goto fail;
     }
 
-    ok = psasim_serialise_uint32_t(&rpos, &rremain, value);
+    ok = psasim_serialise_uint32_t(
+        &rpos, &rremain,
+        value);
     if (!ok) {
         goto fail;
     }
@@ -6589,27 +7363,37 @@
         goto fail;
     }
 
-    ok = psasim_server_deserialise_psa_verify_hash_interruptible_operation_t(&pos, &remaining, &operation);
+    ok = psasim_server_deserialise_psa_verify_hash_interruptible_operation_t(
+        &pos, &remaining,
+        &operation);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &hash, &hash_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &hash, &hash_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &signature, &signature_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &signature, &signature_length);
     if (!ok) {
         goto fail;
     }
@@ -6643,12 +7427,16 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_server_serialise_psa_verify_hash_interruptible_operation_t(&rpos, &rremain, operation);
+    ok = psasim_server_serialise_psa_verify_hash_interruptible_operation_t(
+        &rpos, &rremain,
+        operation);
     if (!ok) {
         goto fail;
     }
@@ -6693,22 +7481,30 @@
         goto fail;
     }
 
-    ok = psasim_deserialise_mbedtls_svc_key_id_t(&pos, &remaining, &key);
+    ok = psasim_deserialise_mbedtls_svc_key_id_t(
+        &pos, &remaining,
+        &key);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_psa_algorithm_t(&pos, &remaining, &alg);
+    ok = psasim_deserialise_psa_algorithm_t(
+        &pos, &remaining,
+        &alg);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &input, &input_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &input, &input_length);
     if (!ok) {
         goto fail;
     }
 
-    ok = psasim_deserialise_buffer(&pos, &remaining, &signature, &signature_length);
+    ok = psasim_deserialise_buffer(
+        &pos, &remaining,
+        &signature, &signature_length);
     if (!ok) {
         goto fail;
     }
@@ -6740,7 +7536,9 @@
         goto fail;
     }
 
-    ok = psasim_serialise_psa_status_t(&rpos, &rremain, status);
+    ok = psasim_serialise_psa_status_t(
+        &rpos, &rremain,
+        status);
     if (!ok) {
         goto fail;
     }
diff --git a/tests/psa-client-server/psasim/src/psa_sim_generate.pl b/tests/psa-client-server/psasim/src/psa_sim_generate.pl
index a0ee76a..ac23807 100755
--- a/tests/psa-client-server/psasim/src/psa_sim_generate.pl
+++ b/tests/psa-client-server/psasim/src/psa_sim_generate.pl
@@ -606,7 +606,9 @@
             my ($n1, $n2) = split(/,\s*/, $argname);
             print $fh <<EOF;
 
-    ok = psasim_deserialise_${argtype}(&pos, &remaining, &$n1, &$n2);
+    ok = psasim_deserialise_${argtype}(
+        &pos, &remaining,
+        &$n1, &$n2);
     if (!ok) {
         goto fail;
     }
@@ -615,7 +617,9 @@
             my ($n1, $n2) = split(/,\s*/, $argname);
             print $fh <<EOF;
 
-    ok = psasim_deserialise_${argtype}(&pos, &remaining, &$n1, &$n2);
+    ok = psasim_deserialise_${argtype}(
+        &pos, &remaining,
+        &$n1, &$n2);
     if (!ok) {
         goto fail;
     }
@@ -625,7 +629,9 @@
             my $server_specific = ($argtype =~ /^psa_\w+_operation_t/) ? "server_" : "";
             print $fh <<EOF;
 
-    ok = psasim_${server_specific}deserialise_${argtype}(&pos, &remaining, &$argname);
+    ok = psasim_${server_specific}deserialise_${argtype}(
+        &pos, &remaining,
+        &$argname);
     if (!ok) {
         goto fail;
     }
@@ -641,7 +647,7 @@
 
     my @outputs = grep($_->{is_output}, @$args);
 
-    my $sep1 = ($ret_type eq "void") ? ";" : " +";
+    my $sep1 = (($ret_type eq "void") and ($#outputs < 0)) ? ";" : " +";
 
     print $fh <<EOF;
 
@@ -691,7 +697,9 @@
     if ($ret_type ne "void") {
         print $fh <<EOF;
 
-    ok = psasim_serialise_${ret_type}(&rpos, &rremain, $ret_name);
+    ok = psasim_serialise_${ret_type}(
+        &rpos, &rremain,
+        $ret_name);
     if (!ok) {
         goto fail;
     }
@@ -711,7 +719,9 @@
         if ($argtype eq "buffer") {
             print $fh <<EOF;
 
-    ok = psasim_serialise_buffer(&rpos, &rremain, $argname);
+    ok = psasim_serialise_buffer(
+        &rpos, &rremain,
+        $argname);
     if (!ok) {
         goto fail;
     }
@@ -719,7 +729,9 @@
         } elsif ($argtype eq "psa_key_production_parameters_t") {
             print $fh <<EOF;
 
-    ok = psasim_serialise_psa_key_production_parameters_t(&rpos, &rremain, $argname);
+    ok = psasim_serialise_psa_key_production_parameters_t(
+        &rpos, &rremain,
+        $argname);
     if (!ok) {
         goto fail;
     }
@@ -735,7 +747,9 @@
 
             print $fh <<EOF;
 
-    ok = psasim_${server_specific}serialise_${argtype}(&rpos, &rremain, $argname);
+    ok = psasim_${server_specific}serialise_${argtype}(
+        &rpos, &rremain,
+        $argname);
     if (!ok) {
         goto fail;
     }
@@ -790,7 +804,8 @@
 
     print $fh <<EOF;
 
-    size_t needed = psasim_serialise_begin_needs() +
+    size_t needed =
+        psasim_serialise_begin_needs() +
 EOF
 
     my $args = $f->{args};
@@ -803,12 +818,12 @@
         $argtype =~ s/^const //;
 
         print $fh <<EOF;
-                    psasim_serialise_${argtype}_needs($argname)$sep
+        psasim_serialise_${argtype}_needs($argname)$sep
 EOF
     }
 
     print $fh <<EOF if $#$args < 0;
-                    0;
+        0;
 EOF
 
     print $fh <<EOF;
@@ -848,7 +863,9 @@
         $argtype =~ s/^const //;
 
         print $fh <<EOF;
-    ok = psasim_serialise_${argtype}(&pos, &remaining, $argname);
+    ok = psasim_serialise_${argtype}(
+        &pos, &remaining,
+        $argname);
     if (!ok) {
         goto fail;
     }
@@ -892,7 +909,9 @@
 
     print $fh <<EOF if $ret_type ne "void";
 
-    ok = psasim_deserialise_$ret_type(&rpos, &rremain, &$ret_name);
+    ok = psasim_deserialise_$ret_type(
+        &rpos, &rremain,
+        &$ret_name);
     if (!ok) {
         goto fail;
     }
@@ -911,7 +930,9 @@
         if ($argtype eq "buffer") {
             print $fh <<EOF;
 
-    ok = psasim_deserialise_return_buffer(&rpos, &rremain, $argname);
+    ok = psasim_deserialise_return_buffer(
+        &rpos, &rremain,
+        $argname);
     if (!ok) {
         goto fail;
     }
@@ -925,7 +946,9 @@
 
             print $fh <<EOF;
 
-    ok = psasim_deserialise_${argtype}(&rpos, &rremain, $argname);
+    ok = psasim_deserialise_${argtype}(
+        &rpos, &rremain,
+        $argname);
     if (!ok) {
         goto fail;
     }
@@ -1013,7 +1036,7 @@
 
     print $fh "\n$ret_type $name(\n";
 
-    print $fh "    void\n)\n" if $#$args < 0;   # No arguments
+    print $fh "    void\n    )\n" if $#$args < 0;   # No arguments
 
     for my $i (0 .. $#$args) {
         my $arg = $args->[$i];
diff --git a/tests/psa-client-server/psasim/src/psa_sim_serialise.c b/tests/psa-client-server/psasim/src/psa_sim_serialise.c
index 84e2339..e655e07 100644
--- a/tests/psa-client-server/psasim/src/psa_sim_serialise.c
+++ b/tests/psa-client-server/psasim/src/psa_sim_serialise.c
@@ -63,8 +63,10 @@
 
 #define MAX_LIVE_HANDLES_PER_CLASS   100        /* this many slots */
 
-static psa_hash_operation_t hash_operations[MAX_LIVE_HANDLES_PER_CLASS];
-static psasim_client_handle_t hash_operation_handles[MAX_LIVE_HANDLES_PER_CLASS];
+static psa_hash_operation_t hash_operations[
+    MAX_LIVE_HANDLES_PER_CLASS];
+static psasim_client_handle_t hash_operation_handles[
+    MAX_LIVE_HANDLES_PER_CLASS];
 static psasim_client_handle_t next_hash_operation_handle = 1;
 
 /* Get a free slot */
@@ -101,8 +103,10 @@
     return -1;  /* not found */
 }
 
-static psa_aead_operation_t aead_operations[MAX_LIVE_HANDLES_PER_CLASS];
-static psasim_client_handle_t aead_operation_handles[MAX_LIVE_HANDLES_PER_CLASS];
+static psa_aead_operation_t aead_operations[
+    MAX_LIVE_HANDLES_PER_CLASS];
+static psasim_client_handle_t aead_operation_handles[
+    MAX_LIVE_HANDLES_PER_CLASS];
 static psasim_client_handle_t next_aead_operation_handle = 1;
 
 /* Get a free slot */
@@ -139,8 +143,10 @@
     return -1;  /* not found */
 }
 
-static psa_mac_operation_t mac_operations[MAX_LIVE_HANDLES_PER_CLASS];
-static psasim_client_handle_t mac_operation_handles[MAX_LIVE_HANDLES_PER_CLASS];
+static psa_mac_operation_t mac_operations[
+    MAX_LIVE_HANDLES_PER_CLASS];
+static psasim_client_handle_t mac_operation_handles[
+    MAX_LIVE_HANDLES_PER_CLASS];
 static psasim_client_handle_t next_mac_operation_handle = 1;
 
 /* Get a free slot */
@@ -177,8 +183,10 @@
     return -1;  /* not found */
 }
 
-static psa_cipher_operation_t cipher_operations[MAX_LIVE_HANDLES_PER_CLASS];
-static psasim_client_handle_t cipher_operation_handles[MAX_LIVE_HANDLES_PER_CLASS];
+static psa_cipher_operation_t cipher_operations[
+    MAX_LIVE_HANDLES_PER_CLASS];
+static psasim_client_handle_t cipher_operation_handles[
+    MAX_LIVE_HANDLES_PER_CLASS];
 static psasim_client_handle_t next_cipher_operation_handle = 1;
 
 /* Get a free slot */
@@ -215,8 +223,10 @@
     return -1;  /* not found */
 }
 
-static psa_key_derivation_operation_t key_derivation_operations[MAX_LIVE_HANDLES_PER_CLASS];
-static psasim_client_handle_t key_derivation_operation_handles[MAX_LIVE_HANDLES_PER_CLASS];
+static psa_key_derivation_operation_t key_derivation_operations[
+    MAX_LIVE_HANDLES_PER_CLASS];
+static psasim_client_handle_t key_derivation_operation_handles[
+    MAX_LIVE_HANDLES_PER_CLASS];
 static psasim_client_handle_t next_key_derivation_operation_handle = 1;
 
 /* Get a free slot */
@@ -253,8 +263,10 @@
     return -1;  /* not found */
 }
 
-static psa_sign_hash_interruptible_operation_t sign_hash_interruptible_operations[MAX_LIVE_HANDLES_PER_CLASS];
-static psasim_client_handle_t sign_hash_interruptible_operation_handles[MAX_LIVE_HANDLES_PER_CLASS];
+static psa_sign_hash_interruptible_operation_t sign_hash_interruptible_operations[
+    MAX_LIVE_HANDLES_PER_CLASS];
+static psasim_client_handle_t sign_hash_interruptible_operation_handles[
+    MAX_LIVE_HANDLES_PER_CLASS];
 static psasim_client_handle_t next_sign_hash_interruptible_operation_handle = 1;
 
 /* Get a free slot */
@@ -291,8 +303,10 @@
     return -1;  /* not found */
 }
 
-static psa_verify_hash_interruptible_operation_t verify_hash_interruptible_operations[MAX_LIVE_HANDLES_PER_CLASS];
-static psasim_client_handle_t verify_hash_interruptible_operation_handles[MAX_LIVE_HANDLES_PER_CLASS];
+static psa_verify_hash_interruptible_operation_t verify_hash_interruptible_operations[
+    MAX_LIVE_HANDLES_PER_CLASS];
+static psasim_client_handle_t verify_hash_interruptible_operation_handles[
+    MAX_LIVE_HANDLES_PER_CLASS];
 static psasim_client_handle_t next_verify_hash_interruptible_operation_handle = 1;
 
 /* Get a free slot */
@@ -403,7 +417,8 @@
     return 1;
 }
 
-size_t psasim_serialise_unsigned_int_needs(unsigned int value)
+size_t psasim_serialise_unsigned_int_needs(
+    unsigned int value)
 {
     return sizeof(value);
 }
@@ -438,7 +453,8 @@
     return 1;
 }
 
-size_t psasim_serialise_int_needs(int value)
+size_t psasim_serialise_int_needs(
+    int value)
 {
     return sizeof(value);
 }
@@ -473,7 +489,8 @@
     return 1;
 }
 
-size_t psasim_serialise_size_t_needs(size_t value)
+size_t psasim_serialise_size_t_needs(
+    size_t value)
 {
     return sizeof(value);
 }
@@ -508,7 +525,8 @@
     return 1;
 }
 
-size_t psasim_serialise_uint16_t_needs(uint16_t value)
+size_t psasim_serialise_uint16_t_needs(
+    uint16_t value)
 {
     return sizeof(value);
 }
@@ -543,7 +561,8 @@
     return 1;
 }
 
-size_t psasim_serialise_uint32_t_needs(uint32_t value)
+size_t psasim_serialise_uint32_t_needs(
+    uint32_t value)
 {
     return sizeof(value);
 }
@@ -578,7 +597,8 @@
     return 1;
 }
 
-size_t psasim_serialise_uint64_t_needs(uint64_t value)
+size_t psasim_serialise_uint64_t_needs(
+    uint64_t value)
 {
     return sizeof(value);
 }
@@ -784,7 +804,7 @@
     }
     memcpy(data_length, *pos, sizeof(*data_length));
 
-    if ((size_t)len != (sizeof(data_length) + sizeof(**params) + *data_length)) {
+    if ((size_t) len != (sizeof(data_length) + sizeof(**params) + *data_length)) {
         return 0;       /* wrong length */
     }
 
@@ -809,7 +829,8 @@
     return 1;
 }
 
-size_t psasim_serialise_psa_status_t_needs(psa_status_t value)
+size_t psasim_serialise_psa_status_t_needs(
+    psa_status_t value)
 {
     return psasim_serialise_int_needs(value);
 }
@@ -828,7 +849,8 @@
     return psasim_deserialise_int(pos, remaining, value);
 }
 
-size_t psasim_serialise_psa_algorithm_t_needs(psa_algorithm_t value)
+size_t psasim_serialise_psa_algorithm_t_needs(
+    psa_algorithm_t value)
 {
     return psasim_serialise_unsigned_int_needs(value);
 }
@@ -847,7 +869,8 @@
     return psasim_deserialise_unsigned_int(pos, remaining, value);
 }
 
-size_t psasim_serialise_psa_key_derivation_step_t_needs(psa_key_derivation_step_t value)
+size_t psasim_serialise_psa_key_derivation_step_t_needs(
+    psa_key_derivation_step_t value)
 {
     return psasim_serialise_uint16_t_needs(value);
 }
@@ -866,7 +889,8 @@
     return psasim_deserialise_uint16_t(pos, remaining, value);
 }
 
-size_t psasim_serialise_psa_hash_operation_t_needs(psa_hash_operation_t value)
+size_t psasim_serialise_psa_hash_operation_t_needs(
+    psa_hash_operation_t value)
 {
     return sizeof(value);
 }
@@ -901,7 +925,8 @@
     return 1;
 }
 
-size_t psasim_server_serialise_psa_hash_operation_t_needs(psa_hash_operation_t *operation)
+size_t psasim_server_serialise_psa_hash_operation_t_needs(
+    psa_hash_operation_t *operation)
 {
     (void) operation;
 
@@ -959,7 +984,8 @@
     return 1;
 }
 
-size_t psasim_serialise_psa_aead_operation_t_needs(psa_aead_operation_t value)
+size_t psasim_serialise_psa_aead_operation_t_needs(
+    psa_aead_operation_t value)
 {
     return sizeof(value);
 }
@@ -994,7 +1020,8 @@
     return 1;
 }
 
-size_t psasim_server_serialise_psa_aead_operation_t_needs(psa_aead_operation_t *operation)
+size_t psasim_server_serialise_psa_aead_operation_t_needs(
+    psa_aead_operation_t *operation)
 {
     (void) operation;
 
@@ -1052,7 +1079,8 @@
     return 1;
 }
 
-size_t psasim_serialise_psa_key_attributes_t_needs(psa_key_attributes_t value)
+size_t psasim_serialise_psa_key_attributes_t_needs(
+    psa_key_attributes_t value)
 {
     return sizeof(value);
 }
@@ -1087,7 +1115,8 @@
     return 1;
 }
 
-size_t psasim_serialise_psa_mac_operation_t_needs(psa_mac_operation_t value)
+size_t psasim_serialise_psa_mac_operation_t_needs(
+    psa_mac_operation_t value)
 {
     return sizeof(value);
 }
@@ -1122,7 +1151,8 @@
     return 1;
 }
 
-size_t psasim_server_serialise_psa_mac_operation_t_needs(psa_mac_operation_t *operation)
+size_t psasim_server_serialise_psa_mac_operation_t_needs(
+    psa_mac_operation_t *operation)
 {
     (void) operation;
 
@@ -1180,7 +1210,8 @@
     return 1;
 }
 
-size_t psasim_serialise_psa_cipher_operation_t_needs(psa_cipher_operation_t value)
+size_t psasim_serialise_psa_cipher_operation_t_needs(
+    psa_cipher_operation_t value)
 {
     return sizeof(value);
 }
@@ -1215,7 +1246,8 @@
     return 1;
 }
 
-size_t psasim_server_serialise_psa_cipher_operation_t_needs(psa_cipher_operation_t *operation)
+size_t psasim_server_serialise_psa_cipher_operation_t_needs(
+    psa_cipher_operation_t *operation)
 {
     (void) operation;
 
@@ -1273,7 +1305,8 @@
     return 1;
 }
 
-size_t psasim_serialise_psa_key_derivation_operation_t_needs(psa_key_derivation_operation_t value)
+size_t psasim_serialise_psa_key_derivation_operation_t_needs(
+    psa_key_derivation_operation_t value)
 {
     return sizeof(value);
 }
@@ -1308,7 +1341,8 @@
     return 1;
 }
 
-size_t psasim_server_serialise_psa_key_derivation_operation_t_needs(psa_key_derivation_operation_t *operation)
+size_t psasim_server_serialise_psa_key_derivation_operation_t_needs(
+    psa_key_derivation_operation_t *operation)
 {
     (void) operation;
 
@@ -1366,7 +1400,8 @@
     return 1;
 }
 
-size_t psasim_serialise_psa_sign_hash_interruptible_operation_t_needs(psa_sign_hash_interruptible_operation_t value)
+size_t psasim_serialise_psa_sign_hash_interruptible_operation_t_needs(
+    psa_sign_hash_interruptible_operation_t value)
 {
     return sizeof(value);
 }
@@ -1401,7 +1436,8 @@
     return 1;
 }
 
-size_t psasim_server_serialise_psa_sign_hash_interruptible_operation_t_needs(psa_sign_hash_interruptible_operation_t *operation)
+size_t psasim_server_serialise_psa_sign_hash_interruptible_operation_t_needs(
+    psa_sign_hash_interruptible_operation_t *operation)
 {
     (void) operation;
 
@@ -1459,7 +1495,8 @@
     return 1;
 }
 
-size_t psasim_serialise_psa_verify_hash_interruptible_operation_t_needs(psa_verify_hash_interruptible_operation_t value)
+size_t psasim_serialise_psa_verify_hash_interruptible_operation_t_needs(
+    psa_verify_hash_interruptible_operation_t value)
 {
     return sizeof(value);
 }
@@ -1494,7 +1531,8 @@
     return 1;
 }
 
-size_t psasim_server_serialise_psa_verify_hash_interruptible_operation_t_needs(psa_verify_hash_interruptible_operation_t *operation)
+size_t psasim_server_serialise_psa_verify_hash_interruptible_operation_t_needs(
+    psa_verify_hash_interruptible_operation_t *operation)
 {
     (void) operation;
 
@@ -1552,7 +1590,8 @@
     return 1;
 }
 
-size_t psasim_serialise_mbedtls_svc_key_id_t_needs(mbedtls_svc_key_id_t value)
+size_t psasim_serialise_mbedtls_svc_key_id_t_needs(
+    mbedtls_svc_key_id_t value)
 {
     return sizeof(value);
 }
@@ -1589,18 +1628,32 @@
 
 void psa_sim_serialize_reset(void)
 {
-    memset(hash_operation_handles, 0, sizeof(hash_operation_handles));
-    memset(hash_operations, 0, sizeof(hash_operations));
-    memset(aead_operation_handles, 0, sizeof(aead_operation_handles));
-    memset(aead_operations, 0, sizeof(aead_operations));
-    memset(mac_operation_handles, 0, sizeof(mac_operation_handles));
-    memset(mac_operations, 0, sizeof(mac_operations));
-    memset(cipher_operation_handles, 0, sizeof(cipher_operation_handles));
-    memset(cipher_operations, 0, sizeof(cipher_operations));
-    memset(key_derivation_operation_handles, 0, sizeof(key_derivation_operation_handles));
-    memset(key_derivation_operations, 0, sizeof(key_derivation_operations));
-    memset(sign_hash_interruptible_operation_handles, 0, sizeof(sign_hash_interruptible_operation_handles));
-    memset(sign_hash_interruptible_operations, 0, sizeof(sign_hash_interruptible_operations));
-    memset(verify_hash_interruptible_operation_handles, 0, sizeof(verify_hash_interruptible_operation_handles));
-    memset(verify_hash_interruptible_operations, 0, sizeof(verify_hash_interruptible_operations));
+    memset(hash_operation_handles, 0,
+           sizeof(hash_operation_handles));
+    memset(hash_operations, 0,
+           sizeof(hash_operations));
+    memset(aead_operation_handles, 0,
+           sizeof(aead_operation_handles));
+    memset(aead_operations, 0,
+           sizeof(aead_operations));
+    memset(mac_operation_handles, 0,
+           sizeof(mac_operation_handles));
+    memset(mac_operations, 0,
+           sizeof(mac_operations));
+    memset(cipher_operation_handles, 0,
+           sizeof(cipher_operation_handles));
+    memset(cipher_operations, 0,
+           sizeof(cipher_operations));
+    memset(key_derivation_operation_handles, 0,
+           sizeof(key_derivation_operation_handles));
+    memset(key_derivation_operations, 0,
+           sizeof(key_derivation_operations));
+    memset(sign_hash_interruptible_operation_handles, 0,
+           sizeof(sign_hash_interruptible_operation_handles));
+    memset(sign_hash_interruptible_operations, 0,
+           sizeof(sign_hash_interruptible_operations));
+    memset(verify_hash_interruptible_operation_handles, 0,
+           sizeof(verify_hash_interruptible_operation_handles));
+    memset(verify_hash_interruptible_operations, 0,
+           sizeof(verify_hash_interruptible_operations));
 }
diff --git a/tests/psa-client-server/psasim/src/psa_sim_serialise.h b/tests/psa-client-server/psasim/src/psa_sim_serialise.h
index 4bd7fe9..f85faad 100644
--- a/tests/psa-client-server/psasim/src/psa_sim_serialise.h
+++ b/tests/psa-client-server/psasim/src/psa_sim_serialise.h
@@ -107,7 +107,8 @@
  *                           \c psasim_serialise_unsigned_int() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_unsigned_int_needs(unsigned int value);
+size_t psasim_serialise_unsigned_int_needs(
+    unsigned int value);
 
 /** Serialise an `unsigned int` into a buffer.
  *
@@ -149,7 +150,8 @@
  *                           \c psasim_serialise_int() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_int_needs(int value);
+size_t psasim_serialise_int_needs(
+    int value);
 
 /** Serialise an `int` into a buffer.
  *
@@ -191,7 +193,8 @@
  *                           \c psasim_serialise_size_t() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_size_t_needs(size_t value);
+size_t psasim_serialise_size_t_needs(
+    size_t value);
 
 /** Serialise a `size_t` into a buffer.
  *
@@ -233,7 +236,8 @@
  *                           \c psasim_serialise_uint16_t() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_uint16_t_needs(uint16_t value);
+size_t psasim_serialise_uint16_t_needs(
+    uint16_t value);
 
 /** Serialise an `uint16_t` into a buffer.
  *
@@ -275,7 +279,8 @@
  *                           \c psasim_serialise_uint32_t() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_uint32_t_needs(uint32_t value);
+size_t psasim_serialise_uint32_t_needs(
+    uint32_t value);
 
 /** Serialise an `uint32_t` into a buffer.
  *
@@ -317,7 +322,8 @@
  *                           \c psasim_serialise_uint64_t() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_uint64_t_needs(uint64_t value);
+size_t psasim_serialise_uint64_t_needs(
+    uint64_t value);
 
 /** Serialise an `uint64_t` into a buffer.
  *
@@ -476,7 +482,8 @@
  *                           \c psasim_serialise_psa_status_t() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_psa_status_t_needs(psa_status_t value);
+size_t psasim_serialise_psa_status_t_needs(
+    psa_status_t value);
 
 /** Serialise a `psa_status_t` into a buffer.
  *
@@ -518,7 +525,8 @@
  *                           \c psasim_serialise_psa_algorithm_t() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_psa_algorithm_t_needs(psa_algorithm_t value);
+size_t psasim_serialise_psa_algorithm_t_needs(
+    psa_algorithm_t value);
 
 /** Serialise a `psa_algorithm_t` into a buffer.
  *
@@ -560,7 +568,8 @@
  *                           \c psasim_serialise_psa_key_derivation_step_t() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_psa_key_derivation_step_t_needs(psa_key_derivation_step_t value);
+size_t psasim_serialise_psa_key_derivation_step_t_needs(
+    psa_key_derivation_step_t value);
 
 /** Serialise a `psa_key_derivation_step_t` into a buffer.
  *
@@ -602,7 +611,8 @@
  *                           \c psasim_serialise_psa_hash_operation_t() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_psa_hash_operation_t_needs(psa_hash_operation_t value);
+size_t psasim_serialise_psa_hash_operation_t_needs(
+    psa_hash_operation_t value);
 
 /** Serialise a `psa_hash_operation_t` into a buffer.
  *
@@ -644,7 +654,8 @@
  *                           \c psasim_serialise_psa_hash_operation_t() to serialise
  *                           the given value.
  */
-size_t psasim_server_serialise_psa_hash_operation_t_needs(psa_hash_operation_t *value);
+size_t psasim_server_serialise_psa_hash_operation_t_needs(
+    psa_hash_operation_t *value);
 
 /** Serialise a `psa_hash_operation_t` into a buffer on the server side.
  *
@@ -686,7 +697,8 @@
  *                           \c psasim_serialise_psa_aead_operation_t() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_psa_aead_operation_t_needs(psa_aead_operation_t value);
+size_t psasim_serialise_psa_aead_operation_t_needs(
+    psa_aead_operation_t value);
 
 /** Serialise a `psa_aead_operation_t` into a buffer.
  *
@@ -728,7 +740,8 @@
  *                           \c psasim_serialise_psa_aead_operation_t() to serialise
  *                           the given value.
  */
-size_t psasim_server_serialise_psa_aead_operation_t_needs(psa_aead_operation_t *value);
+size_t psasim_server_serialise_psa_aead_operation_t_needs(
+    psa_aead_operation_t *value);
 
 /** Serialise a `psa_aead_operation_t` into a buffer on the server side.
  *
@@ -770,7 +783,8 @@
  *                           \c psasim_serialise_psa_key_attributes_t() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_psa_key_attributes_t_needs(psa_key_attributes_t value);
+size_t psasim_serialise_psa_key_attributes_t_needs(
+    psa_key_attributes_t value);
 
 /** Serialise a `psa_key_attributes_t` into a buffer.
  *
@@ -812,7 +826,8 @@
  *                           \c psasim_serialise_psa_mac_operation_t() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_psa_mac_operation_t_needs(psa_mac_operation_t value);
+size_t psasim_serialise_psa_mac_operation_t_needs(
+    psa_mac_operation_t value);
 
 /** Serialise a `psa_mac_operation_t` into a buffer.
  *
@@ -854,7 +869,8 @@
  *                           \c psasim_serialise_psa_mac_operation_t() to serialise
  *                           the given value.
  */
-size_t psasim_server_serialise_psa_mac_operation_t_needs(psa_mac_operation_t *value);
+size_t psasim_server_serialise_psa_mac_operation_t_needs(
+    psa_mac_operation_t *value);
 
 /** Serialise a `psa_mac_operation_t` into a buffer on the server side.
  *
@@ -896,7 +912,8 @@
  *                           \c psasim_serialise_psa_cipher_operation_t() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_psa_cipher_operation_t_needs(psa_cipher_operation_t value);
+size_t psasim_serialise_psa_cipher_operation_t_needs(
+    psa_cipher_operation_t value);
 
 /** Serialise a `psa_cipher_operation_t` into a buffer.
  *
@@ -938,7 +955,8 @@
  *                           \c psasim_serialise_psa_cipher_operation_t() to serialise
  *                           the given value.
  */
-size_t psasim_server_serialise_psa_cipher_operation_t_needs(psa_cipher_operation_t *value);
+size_t psasim_server_serialise_psa_cipher_operation_t_needs(
+    psa_cipher_operation_t *value);
 
 /** Serialise a `psa_cipher_operation_t` into a buffer on the server side.
  *
@@ -980,7 +998,8 @@
  *                           \c psasim_serialise_psa_key_derivation_operation_t() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_psa_key_derivation_operation_t_needs(psa_key_derivation_operation_t value);
+size_t psasim_serialise_psa_key_derivation_operation_t_needs(
+    psa_key_derivation_operation_t value);
 
 /** Serialise a `psa_key_derivation_operation_t` into a buffer.
  *
@@ -1022,7 +1041,8 @@
  *                           \c psasim_serialise_psa_key_derivation_operation_t() to serialise
  *                           the given value.
  */
-size_t psasim_server_serialise_psa_key_derivation_operation_t_needs(psa_key_derivation_operation_t *value);
+size_t psasim_server_serialise_psa_key_derivation_operation_t_needs(
+    psa_key_derivation_operation_t *value);
 
 /** Serialise a `psa_key_derivation_operation_t` into a buffer on the server side.
  *
@@ -1064,7 +1084,8 @@
  *                           \c psasim_serialise_psa_sign_hash_interruptible_operation_t() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_psa_sign_hash_interruptible_operation_t_needs(psa_sign_hash_interruptible_operation_t value);
+size_t psasim_serialise_psa_sign_hash_interruptible_operation_t_needs(
+    psa_sign_hash_interruptible_operation_t value);
 
 /** Serialise a `psa_sign_hash_interruptible_operation_t` into a buffer.
  *
@@ -1106,7 +1127,8 @@
  *                           \c psasim_serialise_psa_sign_hash_interruptible_operation_t() to serialise
  *                           the given value.
  */
-size_t psasim_server_serialise_psa_sign_hash_interruptible_operation_t_needs(psa_sign_hash_interruptible_operation_t *value);
+size_t psasim_server_serialise_psa_sign_hash_interruptible_operation_t_needs(
+    psa_sign_hash_interruptible_operation_t *value);
 
 /** Serialise a `psa_sign_hash_interruptible_operation_t` into a buffer on the server side.
  *
@@ -1148,7 +1170,8 @@
  *                           \c psasim_serialise_psa_verify_hash_interruptible_operation_t() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_psa_verify_hash_interruptible_operation_t_needs(psa_verify_hash_interruptible_operation_t value);
+size_t psasim_serialise_psa_verify_hash_interruptible_operation_t_needs(
+    psa_verify_hash_interruptible_operation_t value);
 
 /** Serialise a `psa_verify_hash_interruptible_operation_t` into a buffer.
  *
@@ -1190,7 +1213,8 @@
  *                           \c psasim_serialise_psa_verify_hash_interruptible_operation_t() to serialise
  *                           the given value.
  */
-size_t psasim_server_serialise_psa_verify_hash_interruptible_operation_t_needs(psa_verify_hash_interruptible_operation_t *value);
+size_t psasim_server_serialise_psa_verify_hash_interruptible_operation_t_needs(
+    psa_verify_hash_interruptible_operation_t *value);
 
 /** Serialise a `psa_verify_hash_interruptible_operation_t` into a buffer on the server side.
  *
@@ -1232,7 +1256,8 @@
  *                           \c psasim_serialise_mbedtls_svc_key_id_t() to serialise
  *                           the given value.
  */
-size_t psasim_serialise_mbedtls_svc_key_id_t_needs(mbedtls_svc_key_id_t value);
+size_t psasim_serialise_mbedtls_svc_key_id_t_needs(
+    mbedtls_svc_key_id_t value);
 
 /** Serialise a `mbedtls_svc_key_id_t` into a buffer.
  *
diff --git a/tests/psa-client-server/psasim/src/psa_sim_serialise.pl b/tests/psa-client-server/psasim/src/psa_sim_serialise.pl
index ed5dd9a..81808ca 100755
--- a/tests/psa-client-server/psasim/src/psa_sim_serialise.pl
+++ b/tests/psa-client-server/psasim/src/psa_sim_serialise.pl
@@ -145,7 +145,8 @@
  *                           \\c psasim_serialise_$type_d() to serialise
  *                           the given value.
  */
-size_t psasim_${server}serialise_${type_d}_needs($type ${ptr}value);
+size_t psasim_${server}serialise_${type_d}_needs(
+    $type ${ptr}value);
 EOF
 }
 
@@ -451,7 +452,8 @@
 
     return <<EOF;
 
-size_t psasim_serialise_${type_d}_needs($type value)
+size_t psasim_serialise_${type_d}_needs(
+    $type value)
 {
     return sizeof(value);
 }
@@ -467,7 +469,8 @@
 
     return <<EOF;
 
-size_t psasim_server_serialise_${type_d}_needs($type *operation)
+size_t psasim_server_serialise_${type_d}_needs(
+    $type *operation)
 {
     (void) operation;
 
@@ -489,7 +492,8 @@
 
     return <<EOF;
 
-size_t psasim_serialise_${type_d}_needs($type value)
+size_t psasim_serialise_${type_d}_needs(
+    $type value)
 {
     return psasim_serialise_${isa_d}_needs(value);
 }
@@ -857,7 +861,7 @@
     }
     memcpy(data_length, *pos, sizeof(*data_length));
 
-    if ((size_t)len != (sizeof(data_length) + sizeof(**params) + *data_length)) {
+    if ((size_t) len != (sizeof(data_length) + sizeof(**params) + *data_length)) {
         return 0;       /* wrong length */
     }
 
@@ -968,8 +972,10 @@
 
     return <<EOF;
 
-static psa_${type}_operation_t ${type}_operations[MAX_LIVE_HANDLES_PER_CLASS];
-static psasim_client_handle_t ${type}_operation_handles[MAX_LIVE_HANDLES_PER_CLASS];
+static psa_${type}_operation_t ${type}_operations[
+    MAX_LIVE_HANDLES_PER_CLASS];
+static psasim_client_handle_t ${type}_operation_handles[
+    MAX_LIVE_HANDLES_PER_CLASS];
 static psasim_client_handle_t next_${type}_operation_handle = 1;
 
 /* Get a free slot */
@@ -1105,8 +1111,10 @@
         my $what = $1;  # e.g. "hash_operation"
 
         $code .= <<EOF;
-    memset(${what}_handles, 0, sizeof(${what}_handles));
-    memset(${what}s, 0, sizeof(${what}s));
+    memset(${what}_handles, 0,
+           sizeof(${what}_handles));
+    memset(${what}s, 0,
+           sizeof(${what}s));
 EOF
     }
 
