Implement cleanup label
Signed-off-by: Thomas Daubney <thomas.daubney@arm.com>
diff --git a/programs/psa/psa_hash.c b/programs/psa/psa_hash.c
index 1353fb9..ca9a8b3 100644
--- a/programs/psa/psa_hash.c
+++ b/programs/psa/psa_hash.c
@@ -90,33 +90,25 @@
status = psa_hash_update(&hash_operation, sample_message, sizeof(sample_message) - 1);
if (status != PSA_SUCCESS) {
mbedtls_printf("psa_hash_update failed\n");
- psa_hash_abort(&hash_operation);
- psa_hash_abort(&cloned_hash_operation);
- return EXIT_FAILURE;
+ goto cleanup;
}
status = psa_hash_clone(&hash_operation, &cloned_hash_operation);
if (status != PSA_SUCCESS) {
mbedtls_printf("PSA hash clone failed");
- psa_hash_abort(&hash_operation);
- psa_hash_abort(&cloned_hash_operation);
- return EXIT_FAILURE;
+ goto cleanup;
}
status = psa_hash_finish(&hash_operation, hash, sizeof(hash), &hash_length);
if (status != PSA_SUCCESS) {
mbedtls_printf("psa_hash_finish failed\n");
- psa_hash_abort(&hash_operation);
- psa_hash_abort(&cloned_hash_operation);
- return EXIT_FAILURE;
+ goto cleanup;
}
/* Check the result of the operation against the sample */
if ((memcmp(hash, sample_hash, sample_hash_len) != 0) || hash_length != sample_hash_len) {
mbedtls_printf("Multi-part hash operation gave the wrong result!\n\n");
- psa_hash_abort(&hash_operation);
- psa_hash_abort(&cloned_hash_operation);
- return EXIT_FAILURE;
+ goto cleanup;
}
status =
@@ -124,9 +116,7 @@
sample_hash_len);
if (status != PSA_SUCCESS) {
mbedtls_printf("psa_hash_verify failed\n");
- psa_hash_abort(&hash_operation);
- psa_hash_abort(&cloned_hash_operation);
- return EXIT_FAILURE;
+ goto cleanup;
} else {
mbedtls_printf("Multi-part hash operation successful!\n");
}
@@ -142,16 +132,12 @@
&hash_length);
if (status != PSA_SUCCESS) {
mbedtls_printf("psa_hash_compute failed\n");
- psa_hash_abort(&hash_operation);
- psa_hash_abort(&cloned_hash_operation);
- return EXIT_FAILURE;
+ goto cleanup;
}
if (memcmp(hash, sample_hash, sample_hash_len) != 0 || hash_length != sample_hash_len) {
mbedtls_printf("One-shot hash operation gave the wrong result!\n\n");
- psa_hash_abort(&hash_operation);
- psa_hash_abort(&cloned_hash_operation);
- return EXIT_FAILURE;
+ goto cleanup;
}
mbedtls_printf("One-shot hash operation successful!\n\n");
@@ -167,5 +153,10 @@
mbedtls_psa_crypto_free();
return EXIT_SUCCESS;
+
+cleanup:
+ psa_hash_abort(&hash_operation);
+ psa_hash_abort(&cloned_hash_operation);
+ return EXIT_FAILURE;
}
-#endif /* MBEDTLS_PSA_CRYPTO_C && PSA_WANT_ALG_SHA_256 */
+#endif /* MBEDTLS_PSA_CRYPTO_C && PSA_WANT_ALG_SHA_256 */
\ No newline at end of file