diff --git a/tests/suites/test_suite_psa_crypto.function b/tests/suites/test_suite_psa_crypto.function
index 29a0077..5261ded 100644
--- a/tests/suites/test_suite_psa_crypto.function
+++ b/tests/suites/test_suite_psa_crypto.function
@@ -732,7 +732,8 @@
     size_t c_x1_pr_len, c_x2_pr_len, c_x2s_pr_len;
     size_t c_x1_pr_off, c_x2_pr_off, c_x2s_pr_off;
     psa_status_t expected_status = PSA_SUCCESS;
-    int ret;
+    psa_status_t status;
+    int ret = 0;
 
     ASSERT_ALLOC( buffer0, buffer_length );
     ASSERT_ALLOC( buffer1, buffer_length );
@@ -782,30 +783,86 @@
             if( client_input_first == 1 )
             {
                 /* Client first round Input */
-                PSA_ASSERT( psa_pake_input( client, PSA_PAKE_STEP_KEY_SHARE,
-                                            buffer0 + s_g1_off, s_g1_len ) );
-                PSA_ASSERT( psa_pake_input( client, PSA_PAKE_STEP_ZK_PUBLIC,
-                                            buffer0 + s_x1_pk_off,
-                                            s_x1_pk_len ) );
-                PSA_ASSERT( psa_pake_input( client, PSA_PAKE_STEP_ZK_PROOF,
-                                            buffer0 + s_x1_pr_off,
-                                            s_x1_pr_len ) );
-                PSA_ASSERT( psa_pake_input( client, PSA_PAKE_STEP_KEY_SHARE,
-                                            buffer0 + s_g2_off,
-                                            s_g2_len ) );
-                PSA_ASSERT( psa_pake_input( client, PSA_PAKE_STEP_ZK_PUBLIC,
-                                            buffer0 + s_x2_pk_off,
-                                            s_x2_pk_len ) );
-                TEST_EQUAL( psa_pake_input( client, PSA_PAKE_STEP_ZK_PROOF,
-                                            buffer0 + s_x2_pr_off,
-                                            s_x2_pr_len ),
-                            expected_status );
-
-                if( inject_error == 1 )
+                status = psa_pake_input( client, PSA_PAKE_STEP_KEY_SHARE,
+                                         buffer0 + s_g1_off, s_g1_len );
+                if( inject_error == 1 && status != PSA_SUCCESS )
                 {
-                    ret = 1;
-                    goto exit;
+                    TEST_EQUAL( status, expected_status );
+                    break;
                 }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                status = psa_pake_input( client, PSA_PAKE_STEP_ZK_PUBLIC,
+                                         buffer0 + s_x1_pk_off,
+                                         s_x1_pk_len );
+                if( inject_error == 1 && status != PSA_SUCCESS )
+                {
+                    TEST_EQUAL( status, expected_status );
+                    break;
+                }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                status = psa_pake_input( client, PSA_PAKE_STEP_ZK_PROOF,
+                                         buffer0 + s_x1_pr_off,
+                                         s_x1_pr_len );
+                if( inject_error == 1 && status != PSA_SUCCESS )
+                {
+                    TEST_EQUAL( status, expected_status );
+                    break;
+                }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                status = psa_pake_input( client, PSA_PAKE_STEP_KEY_SHARE,
+                                         buffer0 + s_g2_off,
+                                         s_g2_len );
+                if( inject_error == 1 && status != PSA_SUCCESS )
+                {
+                    TEST_EQUAL( status, expected_status );
+                    break;
+                }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                status = psa_pake_input( client, PSA_PAKE_STEP_ZK_PUBLIC,
+                                         buffer0 + s_x2_pk_off,
+                                         s_x2_pk_len );
+                if( inject_error == 1 && status != PSA_SUCCESS )
+                {
+                    TEST_EQUAL( status, expected_status );
+                    break;
+                }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                status = psa_pake_input( client, PSA_PAKE_STEP_ZK_PROOF,
+                                         buffer0 + s_x2_pr_off,
+                                         s_x2_pr_len );
+                if( inject_error == 1 && status != PSA_SUCCESS )
+                {
+                    TEST_EQUAL( status, expected_status );
+                    break;
+                }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                /* Error didn't trigger, exit with error */
+                if( inject_error == 1 )
+                    goto exit;
             }
 
             /* Client first round Output */
@@ -843,27 +900,86 @@
             if( client_input_first == 0 )
             {
                 /* Client first round Input */
-                PSA_ASSERT( psa_pake_input( client, PSA_PAKE_STEP_KEY_SHARE,
-                                            buffer0 + s_g1_off, s_g1_len ) );
-                PSA_ASSERT( psa_pake_input( client, PSA_PAKE_STEP_ZK_PUBLIC,
-                                            buffer0 + s_x1_pk_off,
-                                            s_x1_pk_len ) );
-                PSA_ASSERT( psa_pake_input( client, PSA_PAKE_STEP_ZK_PROOF,
-                                            buffer0 + s_x1_pr_off,
-                                            s_x1_pr_len ) );
-                PSA_ASSERT( psa_pake_input( client, PSA_PAKE_STEP_KEY_SHARE,
-                                            buffer0 + s_g2_off,
-                                            s_g2_len ) );
-                PSA_ASSERT( psa_pake_input( client, PSA_PAKE_STEP_ZK_PUBLIC,
-                                            buffer0 + s_x2_pk_off,
-                                            s_x2_pk_len ) );
-                TEST_EQUAL( psa_pake_input( client, PSA_PAKE_STEP_ZK_PROOF,
-                                            buffer0 + s_x2_pr_off,
-                                            s_x2_pr_len ),
-                            expected_status );
-
-                if( inject_error == 1 )
+                status = psa_pake_input( client, PSA_PAKE_STEP_KEY_SHARE,
+                                         buffer0 + s_g1_off, s_g1_len );
+                if( inject_error == 1 && status != PSA_SUCCESS )
+                {
+                    TEST_EQUAL( status, expected_status );
                     break;
+                }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                status = psa_pake_input( client, PSA_PAKE_STEP_ZK_PUBLIC,
+                                         buffer0 + s_x1_pk_off,
+                                         s_x1_pk_len );
+                if( inject_error == 1 && status != PSA_SUCCESS )
+                {
+                    TEST_EQUAL( status, expected_status );
+                    break;
+                }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                status = psa_pake_input( client, PSA_PAKE_STEP_ZK_PROOF,
+                                         buffer0 + s_x1_pr_off,
+                                         s_x1_pr_len );
+                if( inject_error == 1 && status != PSA_SUCCESS )
+                {
+                    TEST_EQUAL( status, expected_status );
+                    break;
+                }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                status = psa_pake_input( client, PSA_PAKE_STEP_KEY_SHARE,
+                                         buffer0 + s_g2_off,
+                                         s_g2_len );
+                if( inject_error == 1 && status != PSA_SUCCESS )
+                {
+                    TEST_EQUAL( status, expected_status );
+                    break;
+                }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                status = psa_pake_input( client, PSA_PAKE_STEP_ZK_PUBLIC,
+                                         buffer0 + s_x2_pk_off,
+                                         s_x2_pk_len );
+                if( inject_error == 1 && status != PSA_SUCCESS )
+                {
+                    TEST_EQUAL( status, expected_status );
+                    break;
+                }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                status = psa_pake_input( client, PSA_PAKE_STEP_ZK_PROOF,
+                                         buffer0 + s_x2_pr_off,
+                                         s_x2_pr_len );
+                if( inject_error == 1 && status != PSA_SUCCESS )
+                {
+                    TEST_EQUAL( status, expected_status );
+                    break;
+                }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                /* Error didn't trigger, exit with error */
+                if( inject_error == 1 )
+                    goto exit;
             }
 
             if( inject_error == 2 )
@@ -874,19 +990,81 @@
             }
 
             /* Server first round Input */
-            PSA_ASSERT( psa_pake_input( server, PSA_PAKE_STEP_KEY_SHARE,
-                                        buffer1 + c_g1_off, c_g1_len ) );
-            PSA_ASSERT( psa_pake_input( server, PSA_PAKE_STEP_ZK_PUBLIC,
-                                        buffer1 + c_x1_pk_off, c_x1_pk_len ) );
-            PSA_ASSERT( psa_pake_input( server, PSA_PAKE_STEP_ZK_PROOF,
-                                        buffer1 + c_x1_pr_off, c_x1_pr_len ) );
-            PSA_ASSERT( psa_pake_input( server, PSA_PAKE_STEP_KEY_SHARE,
-                                        buffer1 + c_g2_off, c_g2_len ) );
-            PSA_ASSERT( psa_pake_input( server, PSA_PAKE_STEP_ZK_PUBLIC,
-                                        buffer1 + c_x2_pk_off, c_x2_pk_len ) );
-            TEST_EQUAL( psa_pake_input( server, PSA_PAKE_STEP_ZK_PROOF,
-                                        buffer1 + c_x2_pr_off, c_x2_pr_len ),
-                        expected_status );
+            status = psa_pake_input( server, PSA_PAKE_STEP_KEY_SHARE,
+                                     buffer1 + c_g1_off, c_g1_len );
+            if( inject_error == 2 && status != PSA_SUCCESS )
+            {
+                TEST_EQUAL( status, expected_status );
+                break;
+            }
+            else
+            {
+                TEST_EQUAL( status, PSA_SUCCESS );
+            }
+
+            status = psa_pake_input( server, PSA_PAKE_STEP_ZK_PUBLIC,
+                                     buffer1 + c_x1_pk_off, c_x1_pk_len );
+            if( inject_error == 2 && status != PSA_SUCCESS )
+            {
+                TEST_EQUAL( status, expected_status );
+                break;
+            }
+            else
+            {
+                TEST_EQUAL( status, PSA_SUCCESS );
+            }
+
+            status = psa_pake_input( server, PSA_PAKE_STEP_ZK_PROOF,
+                                     buffer1 + c_x1_pr_off, c_x1_pr_len );
+            if( inject_error == 2 && status != PSA_SUCCESS )
+            {
+                TEST_EQUAL( status, expected_status );
+                break;
+            }
+            else
+            {
+                TEST_EQUAL( status, PSA_SUCCESS );
+            }
+
+            status = psa_pake_input( server, PSA_PAKE_STEP_KEY_SHARE,
+                                     buffer1 + c_g2_off, c_g2_len );
+            if( inject_error == 2 && status != PSA_SUCCESS )
+            {
+                TEST_EQUAL( status, expected_status );
+                break;
+            }
+            else
+            {
+                TEST_EQUAL( status, PSA_SUCCESS );
+            }
+
+            status = psa_pake_input( server, PSA_PAKE_STEP_ZK_PUBLIC,
+                                     buffer1 + c_x2_pk_off, c_x2_pk_len );
+            if( inject_error == 2 && status != PSA_SUCCESS )
+            {
+                TEST_EQUAL( status, expected_status );
+                break;
+            }
+            else
+            {
+                TEST_EQUAL( status, PSA_SUCCESS );
+            }
+
+            status = psa_pake_input( server, PSA_PAKE_STEP_ZK_PROOF,
+                                     buffer1 + c_x2_pr_off, c_x2_pr_len );
+            if( inject_error == 2 && status != PSA_SUCCESS )
+            {
+                TEST_EQUAL( status, expected_status );
+                break;
+            }
+            else
+            {
+                TEST_EQUAL( status, PSA_SUCCESS );
+            }
+
+            /* Error didn't trigger, exit with error */
+            if( inject_error == 2 )
+                goto exit;
 
             break;
 
@@ -919,18 +1097,47 @@
             if( client_input_first == 1 )
             {
                 /* Client second round Input */
-                PSA_ASSERT( psa_pake_input( client, PSA_PAKE_STEP_KEY_SHARE,
-                                            buffer0 + s_a_off, s_a_len ) );
-                PSA_ASSERT( psa_pake_input( client, PSA_PAKE_STEP_ZK_PUBLIC,
-                                            buffer0 + s_x2s_pk_off,
-                                            s_x2s_pk_len ) );
-                TEST_EQUAL( psa_pake_input( client, PSA_PAKE_STEP_ZK_PROOF,
-                                            buffer0 + s_x2s_pr_off,
-                                            s_x2s_pr_len ),
-                            expected_status );
-
-                if( inject_error == 3 )
+                status = psa_pake_input( client, PSA_PAKE_STEP_KEY_SHARE,
+                                         buffer0 + s_a_off, s_a_len );
+                if( inject_error == 3 && status != PSA_SUCCESS )
+                {
+                    TEST_EQUAL( status, expected_status );
                     break;
+                }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                status = psa_pake_input( client, PSA_PAKE_STEP_ZK_PUBLIC,
+                                         buffer0 + s_x2s_pk_off,
+                                         s_x2s_pk_len );
+                if( inject_error == 3 && status != PSA_SUCCESS )
+                {
+                    TEST_EQUAL( status, expected_status );
+                    break;
+                }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                status = psa_pake_input( client, PSA_PAKE_STEP_ZK_PROOF,
+                                         buffer0 + s_x2s_pr_off,
+                                         s_x2s_pr_len );
+                if( inject_error == 3 && status != PSA_SUCCESS )
+                {
+                    TEST_EQUAL( status, expected_status );
+                    break;
+                }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                /* Error didn't trigger, exit with error */
+                if( inject_error == 3 )
+                    goto exit;
             }
 
             /* Client second round Output */
@@ -955,18 +1162,47 @@
             if( client_input_first == 0 )
             {
                 /* Client second round Input */
-                PSA_ASSERT( psa_pake_input( client, PSA_PAKE_STEP_KEY_SHARE,
-                                            buffer0 + s_a_off, s_a_len ) );
-                PSA_ASSERT( psa_pake_input( client, PSA_PAKE_STEP_ZK_PUBLIC,
-                                            buffer0 + s_x2s_pk_off,
-                                            s_x2s_pk_len ) );
-                TEST_EQUAL( psa_pake_input( client, PSA_PAKE_STEP_ZK_PROOF,
-                                            buffer0 + s_x2s_pr_off,
-                                            s_x2s_pr_len ),
-                            expected_status );
-
-                if( inject_error == 3 )
+                status = psa_pake_input( client, PSA_PAKE_STEP_KEY_SHARE,
+                                         buffer0 + s_a_off, s_a_len );
+                if( inject_error == 3 && status != PSA_SUCCESS )
+                {
+                    TEST_EQUAL( status, expected_status );
                     break;
+                }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                status = psa_pake_input( client, PSA_PAKE_STEP_ZK_PUBLIC,
+                                         buffer0 + s_x2s_pk_off,
+                                         s_x2s_pk_len );
+                if( inject_error == 3 && status != PSA_SUCCESS )
+                {
+                    TEST_EQUAL( status, expected_status );
+                    break;
+                }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                status = psa_pake_input( client, PSA_PAKE_STEP_ZK_PROOF,
+                                         buffer0 + s_x2s_pr_off,
+                                         s_x2s_pr_len );
+                if( inject_error == 3 && status != PSA_SUCCESS )
+                {
+                    TEST_EQUAL( status, expected_status );
+                    break;
+                }
+                else
+                {
+                    TEST_EQUAL( status, PSA_SUCCESS );
+                }
+
+                /* Error didn't trigger, exit with error */
+                if( inject_error == 3 )
+                    goto exit;
             }
 
             if( inject_error == 4 )
@@ -976,13 +1212,45 @@
             }
 
             /* Server second round Input */
-            PSA_ASSERT( psa_pake_input( server, PSA_PAKE_STEP_KEY_SHARE,
-                                        buffer1 + c_a_off, c_a_len ) );
-            PSA_ASSERT( psa_pake_input( server, PSA_PAKE_STEP_ZK_PUBLIC,
-                                        buffer1 + c_x2s_pk_off, c_x2s_pk_len ) );
-            TEST_EQUAL( psa_pake_input( server, PSA_PAKE_STEP_ZK_PROOF,
-                                        buffer1 + c_x2s_pr_off, c_x2s_pr_len ),
-                        expected_status );
+            status = psa_pake_input( server, PSA_PAKE_STEP_KEY_SHARE,
+                                     buffer1 + c_a_off, c_a_len );
+            if( inject_error == 4 && status != PSA_SUCCESS )
+            {
+                TEST_EQUAL( status, expected_status );
+                break;
+            }
+            else
+            {
+                TEST_EQUAL( status, PSA_SUCCESS );
+            }
+
+            status = psa_pake_input( server, PSA_PAKE_STEP_ZK_PUBLIC,
+                                     buffer1 + c_x2s_pk_off, c_x2s_pk_len );
+            if( inject_error == 4 && status != PSA_SUCCESS )
+            {
+                TEST_EQUAL( status, expected_status );
+                break;
+            }
+            else
+            {
+                TEST_EQUAL( status, PSA_SUCCESS );
+            }
+
+            status = psa_pake_input( server, PSA_PAKE_STEP_ZK_PROOF,
+                                     buffer1 + c_x2s_pr_off, c_x2s_pr_len );
+            if( inject_error == 4 && status != PSA_SUCCESS )
+            {
+                TEST_EQUAL( status, expected_status );
+                break;
+            }
+            else
+            {
+                TEST_EQUAL( status, PSA_SUCCESS );
+            }
+
+            /* Error didn't trigger, exit with error */
+            if( inject_error == 4 )
+                goto exit;
 
             break;
 
