diff --git a/tests/suites/test_suite_mpi.data b/tests/suites/test_suite_mpi.data
index 124c851..a4cd07a 100644
--- a/tests/suites/test_suite_mpi.data
+++ b/tests/suites/test_suite_mpi.data
@@ -682,106 +682,40 @@
 mpi_core_lt_ct:"FF1111111111111111":"11FFFFFFFFFFFFFFFF":0
 
 mbedtls_mpi_core_cond_assign: same size, true condition
-mpi_core_cond_assign:"FFFFFFFF":"11111111":1:0
+mpi_core_cond_assign:"FFFFFFFF":"11111111":1
 
 mbedtls_mpi_core_cond_assign: same size, false condition
-mpi_core_cond_assign:"FFFFFFFF":"11111111":0:0
+mpi_core_cond_assign:"FFFFFFFF":"11111111":0
 
 mbedtls_mpi_core_cond_assign: target larger, true condition
-mpi_core_cond_assign:"FFFFFFFFEEEEEEEEDDDDDDDD":"11111111":1:0
+mpi_core_cond_assign:"FFFFFFFFEEEEEEEEDDDDDDDD":"11111111":1
 
 mbedtls_mpi_core_cond_assign: target larger, false condition
-mpi_core_cond_assign:"FFFFFFFFEEEEEEEEDDDDDDDD":"11111111":0:0
-
-#mbedtls_mpi_core_cond_assign: target smaller, true condition
-#mpi_core_cond_assign:"FFFFFFFF":"111111112222222233333333":1:MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL
-
-#mbedtls_mpi_core_cond_assign: target smaller, false condition
-#mpi_core_cond_assign:"FFFFFFFF":"111111112222222233333333":0:MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL
-
-#mbedtls_mpi_core_cond_assign: target invalid, true condition
-#mpi_core_cond_assign:"":"11111111":1:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
-
-#mbedtls_mpi_core_cond_assign: target invalid, false condition
-#mpi_core_cond_assign:"":"11111111":0:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
-
-#mbedtls_mpi_core_cond_assign: source invalid, true condition
-#mpi_core_cond_assign:"FFFFFFFF":"":1:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
-
-#mbedtls_mpi_core_cond_assign: source invalid, false condition
-#mpi_core_cond_assign:"FFFFFFFF":"":0:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
+mpi_core_cond_assign:"FFFFFFFFEEEEEEEEDDDDDDDD":"11111111":0
 
 mbedtls_mpi_core_cond_swap: same value, true condition
-mpi_core_cond_swap:"FFFFFFFF":"FFFFFFFF":1:0
+mpi_core_cond_swap:"FFFFFFFF":"FFFFFFFF":1
 
 mbedtls_mpi_core_cond_swap: same size, true condition
-mpi_core_cond_swap:"FFFFFFFF":"11111111":1:0
+mpi_core_cond_swap:"FFFFFFFF":"11111111":1
 
 mbedtls_mpi_core_cond_swap: same size, false condition
-mpi_core_cond_swap:"FFFFFFFF":"11111111":0:0
-
-#mbedtls_mpi_core_cond_swap: first larger, true condition
-#mpi_core_cond_swap:"FFFFFFFFEEEEEEEEDDDDDDDD":"11111111":1:MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL
-
-#mbedtls_mpi_core_cond_swap: first larger, false condition
-#mpi_core_cond_swap:"FFFFFFFFEEEEEEEEDDDDDDDD":"11111111":0:MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL
-
-#mbedtls_mpi_core_cond_swap: first smaller, true condition
-#mpi_core_cond_swap:"FFFFFFFF":"111111112222222233333333":1:MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL
-
-#mbedtls_mpi_core_cond_swap: first smaller, false condition
-#mpi_core_cond_swap:"FFFFFFFF":"111111112222222233333333":0:MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL
-
-#mbedtls_mpi_core_cond_swap: first invalid, true condition
-#mpi_core_cond_swap:"":"11111111":1:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
-
-#mbedtls_mpi_core_cond_swap: first invalid, false condition
-#mpi_core_cond_swap:"":"11111111":0:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
-
-#mbedtls_mpi_core_cond_swap: second invalid, true condition
-#mpi_core_cond_swap:"FFFFFFFF":"":1:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
-
-#mbedtls_mpi_core_cond_swap: second invalid, false condition
-#mpi_core_cond_swap:"FFFFFFFF":"":0:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
+mpi_core_cond_swap:"FFFFFFFF":"11111111":0
 
 mbedtls_mpi_mod_raw_cond_assign: same size, true condition
-mpi_mod_raw_cond_assign:"FFFFFFFF":"11111111":1:0
+mpi_mod_raw_cond_assign:"FFFFFFFF":"11111111":1
 
 mbedtls_mpi_mod_raw_cond_assign: same size, false condition
-mpi_mod_raw_cond_assign:"FFFFFFFF":"11111111":0:0
-
-#mbedtls_mpi_mod_raw_cond_assign: target invalid, true condition
-#mpi_mod_raw_cond_assign:"":"11111111":1:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
-
-#mbedtls_mpi_mod_raw_cond_assign: target invalid, false condition
-#mpi_mod_raw_cond_assign:"":"11111111":0:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
-
-#mbedtls_mpi_mod_raw_cond_assign: source invalid, true condition
-#mpi_mod_raw_cond_assign:"FFFFFFFF":"":1:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
-
-#mbedtls_mpi_mod_raw_cond_assign: source invalid, false condition
-#mpi_mod_raw_cond_assign:"FFFFFFFF":"":0:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
+mpi_mod_raw_cond_assign:"FFFFFFFF":"11111111":0
 
 mbedtls_mpi_mod_raw_cond_swap: same value, true condition
-mpi_mod_raw_cond_swap:"FFFFFFFF":"FFFFFFFF":1:0
+mpi_mod_raw_cond_swap:"FFFFFFFF":"FFFFFFFF":1
 
 mbedtls_mpi_mod_raw_cond_swap: same size, true condition
-mpi_mod_raw_cond_swap:"FFFFFFFF":"11111111":1:0
+mpi_mod_raw_cond_swap:"FFFFFFFF":"11111111":1
 
 mbedtls_mpi_mod_raw_cond_swap: same size, false condition
-mpi_mod_raw_cond_swap:"FFFFFFFF":"11111111":0:0
-
-#mbedtls_mpi_mod_raw_cond_swap: first invalid, true condition
-#mpi_mod_raw_cond_swap:"":"11111111":1:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
-
-#mbedtls_mpi_mod_raw_cond_swap: first invalid, false condition
-#mpi_mod_raw_cond_swap:"":"11111111":0:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
-
-#mbedtls_mpi_mod_raw_cond_swap: second invalid, true condition
-#mpi_mod_raw_cond_swap:"FFFFFFFF":"":1:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
-
-#mbedtls_mpi_mod_raw_cond_swap: second invalid, false condition
-#mpi_mod_raw_cond_swap:"FFFFFFFF":"":0:MBEDTLS_ERR_MPI_BAD_INPUT_DATA
+mpi_mod_raw_cond_swap:"FFFFFFFF":"11111111":0
 
 Base test mbedtls_mpi_lt_mpi_ct #1
 mpi_lt_mpi_ct:1:"2B5":1:"2B5":0:0
diff --git a/tests/suites/test_suite_mpi.function b/tests/suites/test_suite_mpi.function
index b8c7864..d6769de 100644
--- a/tests/suites/test_suite_mpi.function
+++ b/tests/suites/test_suite_mpi.function
@@ -766,16 +766,13 @@
 /* BEGIN_CASE */
 void mpi_core_cond_assign( data_t * input_X,
                            data_t * input_Y,
-                           int cond,
-                           int input_ret )
+                           int cond )
 {
     #define MAX_LEN 64
     mbedtls_mpi_uint buff_X[MAX_LEN];
     mbedtls_mpi_uint buff_Y[MAX_LEN];
     mbedtls_mpi_uint *X = buff_X;
     mbedtls_mpi_uint *Y = buff_Y;
-    unsigned exp_ret = input_ret;
-    unsigned ret;
     size_t len_X = CHARS_TO_LIMBS( input_X->len );
     size_t len_Y = CHARS_TO_LIMBS( input_Y->len );
 
@@ -803,23 +800,17 @@
     TEST_CF_SECRET( X, len_X * sizeof( mbedtls_mpi_uint ) );
     TEST_CF_SECRET( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
 
-    ret = mbedtls_mpi_core_cond_assign( X, len_X, Y, len_Y, cond );
+    mbedtls_mpi_core_cond_assign( X, len_X, Y, len_Y, cond );
 
     TEST_CF_PUBLIC( X, len_X * sizeof( mbedtls_mpi_uint ) );
     TEST_CF_PUBLIC( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_PUBLIC( &ret, sizeof( ret ) );
 
-    TEST_EQUAL( ret, exp_ret );
+    if( cond )
+        ASSERT_COMPARE( X, len_Y * sizeof( mbedtls_mpi_uint ),
+                        Y, len_Y * sizeof( mbedtls_mpi_uint ) );
 
-    if( !ret )
-    {
-        if( cond )
-            ASSERT_COMPARE( X, len_Y * sizeof( mbedtls_mpi_uint ),
-                            Y, len_Y * sizeof( mbedtls_mpi_uint ) );
-
-        else
-            TEST_ASSERT( memcmp( X, Y, len_X * sizeof( mbedtls_mpi_uint ) ) != 0 );
-    }
+    else
+        TEST_ASSERT( memcmp( X, Y, len_X * sizeof( mbedtls_mpi_uint ) ) != 0 );
 
 exit:
     ;
@@ -831,8 +822,7 @@
 /* BEGIN_CASE */
 void mpi_core_cond_swap( data_t * input_X,
                          data_t * input_Y,
-                         int cond,
-                         int input_ret )
+                         int cond )
 {
     #define MAX_LEN 64
     mbedtls_mpi_uint tmp_X[MAX_LEN];
@@ -841,8 +831,6 @@
     mbedtls_mpi_uint buff_Y[MAX_LEN];
     mbedtls_mpi_uint *X = buff_X;
     mbedtls_mpi_uint *Y = buff_Y;
-    unsigned exp_ret = input_ret;
-    unsigned ret;
     size_t len_X = CHARS_TO_LIMBS( input_X->len );
     size_t len_Y = CHARS_TO_LIMBS( input_Y->len );
 
@@ -878,31 +866,25 @@
     TEST_CF_SECRET( X, len_X * sizeof( mbedtls_mpi_uint ) );
     TEST_CF_SECRET( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
 
-    ret = mbedtls_mpi_core_cond_swap( X, len_X, Y, len_Y, cond );
+    mbedtls_mpi_core_cond_swap( X, len_X, Y, len_Y, cond );
 
     TEST_CF_PUBLIC( X, len_X * sizeof( mbedtls_mpi_uint ) );
     TEST_CF_PUBLIC( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_PUBLIC( &ret, sizeof( ret ) );
 
-    TEST_EQUAL( ret, exp_ret );
-
-    if( !ret )
+    if( cond )
     {
-        if( cond )
-        {
-            ASSERT_COMPARE( X,     len_Y * sizeof( mbedtls_mpi_uint ),
-                            tmp_Y, len_Y * sizeof( mbedtls_mpi_uint ) );
-            ASSERT_COMPARE( Y,     len_X * sizeof( mbedtls_mpi_uint ),
-                            tmp_X, len_X * sizeof( mbedtls_mpi_uint ) );
-        }
+        ASSERT_COMPARE( X,     len_Y * sizeof( mbedtls_mpi_uint ),
+                        tmp_Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+        ASSERT_COMPARE( Y,     len_X * sizeof( mbedtls_mpi_uint ),
+                        tmp_X, len_X * sizeof( mbedtls_mpi_uint ) );
+    }
 
-        else
-        {
-            ASSERT_COMPARE( X,     len_X * sizeof( mbedtls_mpi_uint ),
-                            tmp_X, len_X * sizeof( mbedtls_mpi_uint ) );
-            ASSERT_COMPARE( Y,     len_Y * sizeof( mbedtls_mpi_uint ),
-                            tmp_Y, len_Y * sizeof( mbedtls_mpi_uint ) );
-        }
+    else
+    {
+        ASSERT_COMPARE( X,     len_X * sizeof( mbedtls_mpi_uint ),
+                        tmp_X, len_X * sizeof( mbedtls_mpi_uint ) );
+        ASSERT_COMPARE( Y,     len_Y * sizeof( mbedtls_mpi_uint ),
+                        tmp_Y, len_Y * sizeof( mbedtls_mpi_uint ) );
     }
 
 exit:
@@ -915,8 +897,7 @@
 /* BEGIN_CASE */
 void mpi_mod_raw_cond_assign( data_t * input_X,
                               data_t * input_Y,
-                              int cond,
-                              int input_ret )
+                              int cond )
 {
     #define MAX_LEN 64
     mbedtls_mpi_uint buff_X[MAX_LEN];
@@ -925,8 +906,6 @@
     mbedtls_mpi_uint *X = buff_X;
     mbedtls_mpi_uint *Y = buff_Y;
     mbedtls_mpi_mod_modulus m;
-    unsigned exp_ret = input_ret;
-    unsigned ret;
     size_t len_X = CHARS_TO_LIMBS( input_X->len );
     size_t len_Y = CHARS_TO_LIMBS( input_Y->len );
 
@@ -965,23 +944,17 @@
     TEST_CF_SECRET( X, len_X * sizeof( mbedtls_mpi_uint ) );
     TEST_CF_SECRET( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
 
-    ret = mbedtls_mpi_mod_raw_cond_assign( X, Y, &m, cond );
+    mbedtls_mpi_mod_raw_cond_assign( X, Y, &m, cond );
 
     TEST_CF_PUBLIC( X, len_X * sizeof( mbedtls_mpi_uint ) );
     TEST_CF_PUBLIC( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_PUBLIC( &ret, sizeof( ret ) );
 
-    TEST_EQUAL( ret, exp_ret );
+    if( cond )
+        ASSERT_COMPARE( X, len_Y * sizeof( mbedtls_mpi_uint ),
+                        Y, len_Y * sizeof( mbedtls_mpi_uint ) );
 
-    if( !ret )
-    {
-        if( cond )
-            ASSERT_COMPARE( X, len_Y * sizeof( mbedtls_mpi_uint ),
-                            Y, len_Y * sizeof( mbedtls_mpi_uint ) );
-
-        else
-            TEST_ASSERT( memcmp( X, Y, m.limbs * sizeof( mbedtls_mpi_uint ) ) != 0 );
-    }
+    else
+        TEST_ASSERT( memcmp( X, Y, m.limbs * sizeof( mbedtls_mpi_uint ) ) != 0 );
 
 exit:
     ;
@@ -993,8 +966,7 @@
 /* BEGIN_CASE */
 void mpi_mod_raw_cond_swap( data_t * input_X,
                             data_t * input_Y,
-                            int cond,
-                            int input_ret )
+                            int cond )
 {
     #define MAX_LEN 64
     mbedtls_mpi_uint tmp_X[MAX_LEN];
@@ -1005,8 +977,6 @@
     mbedtls_mpi_uint *X = buff_X;
     mbedtls_mpi_uint *Y = buff_Y;
     mbedtls_mpi_mod_modulus m;
-    unsigned exp_ret = input_ret;
-    unsigned ret;
     size_t len_X = CHARS_TO_LIMBS( input_X->len );
     size_t len_Y = CHARS_TO_LIMBS( input_Y->len );
 
@@ -1049,31 +1019,25 @@
     TEST_CF_SECRET( X, len_X * sizeof( mbedtls_mpi_uint ) );
     TEST_CF_SECRET( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
 
-    ret = mbedtls_mpi_mod_raw_cond_swap( X, Y, &m, cond );
+    mbedtls_mpi_mod_raw_cond_swap( X, Y, &m, cond );
 
     TEST_CF_PUBLIC( X, len_X * sizeof( mbedtls_mpi_uint ) );
     TEST_CF_PUBLIC( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_PUBLIC( &ret, sizeof( ret ) );
 
-    TEST_EQUAL( ret, exp_ret );
-
-    if( !ret )
+    if( cond )
     {
-        if( cond )
-        {
-            ASSERT_COMPARE( X,     m.limbs * sizeof( mbedtls_mpi_uint ),
-                            tmp_Y, len_Y   * sizeof( mbedtls_mpi_uint ) );
-            ASSERT_COMPARE( Y,     m.limbs * sizeof( mbedtls_mpi_uint ),
-                            tmp_X, len_X   * sizeof( mbedtls_mpi_uint ) );
-        }
+        ASSERT_COMPARE( X,     m.limbs * sizeof( mbedtls_mpi_uint ),
+                        tmp_Y, len_Y   * sizeof( mbedtls_mpi_uint ) );
+        ASSERT_COMPARE( Y,     m.limbs * sizeof( mbedtls_mpi_uint ),
+                        tmp_X, len_X   * sizeof( mbedtls_mpi_uint ) );
+    }
 
-        else
-        {
-            ASSERT_COMPARE( X,     len_X   * sizeof( mbedtls_mpi_uint ),
-                            tmp_X, m.limbs * sizeof( mbedtls_mpi_uint ) );
-            ASSERT_COMPARE( Y,     len_Y   * sizeof( mbedtls_mpi_uint ),
-                            tmp_Y, m.limbs * sizeof( mbedtls_mpi_uint ) );
-        }
+    else
+    {
+        ASSERT_COMPARE( X,     len_X   * sizeof( mbedtls_mpi_uint ),
+                        tmp_X, m.limbs * sizeof( mbedtls_mpi_uint ) );
+        ASSERT_COMPARE( Y,     len_Y   * sizeof( mbedtls_mpi_uint ),
+                        tmp_Y, m.limbs * sizeof( mbedtls_mpi_uint ) );
     }
 
 exit:
