diff --git a/tests/suites/test_suite_mpi.function b/tests/suites/test_suite_mpi.function
index 7a87c07..6118efc 100644
--- a/tests/suites/test_suite_mpi.function
+++ b/tests/suites/test_suite_mpi.function
@@ -768,14 +768,19 @@
                            data_t * input_Y )
 {
     #define MAX_LEN 64
-    mbedtls_mpi_uint X[MAX_LEN];
-    mbedtls_mpi_uint Y[MAX_LEN];
+    mbedtls_mpi_uint *X = NULL;
+    mbedtls_mpi_uint *Y = NULL;
     size_t len_X = CHARS_TO_LIMBS( input_X->len );
     size_t len_Y = CHARS_TO_LIMBS( input_Y->len );
+    size_t len_X_byte = len_X * sizeof( mbedtls_mpi_uint );
+    size_t len_Y_byte = len_Y * sizeof( mbedtls_mpi_uint );
 
     TEST_ASSERT( len_X <= MAX_LEN );
     TEST_ASSERT( len_Y <= MAX_LEN );
 
+    ASSERT_ALLOC( X, len_X_byte );
+    ASSERT_ALLOC( Y, len_Y_byte );
+
     TEST_ASSERT( mbedtls_mpi_core_read_be( X, len_X, input_X->x, input_X->len )
                  == 0 );
 
@@ -783,28 +788,26 @@
                  == 0 );
 
     /* condition is false */
-    TEST_CF_SECRET( X, len_X * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_SECRET( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    TEST_CF_SECRET( X, len_X_byte );
+    TEST_CF_SECRET( Y, len_Y_byte );
 
     mbedtls_mpi_core_cond_assign( X, Y, len_Y, 0 );
 
-    TEST_CF_PUBLIC( X, len_X * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_PUBLIC( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    TEST_CF_PUBLIC( X, len_X_byte );
+    TEST_CF_PUBLIC( Y, len_Y_byte );
 
-    TEST_ASSERT( memcmp( X, Y, MIN( len_X, len_Y ) *
-                               sizeof( mbedtls_mpi_uint ) ) != 0 );
+    TEST_ASSERT( memcmp( X, Y, MIN( len_X_byte, len_Y_byte ) ) != 0 );
 
     /* condition is true */
-    TEST_CF_SECRET( X, len_X * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_SECRET( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    TEST_CF_SECRET( X, len_X_byte );
+    TEST_CF_SECRET( Y, len_Y_byte );
 
     mbedtls_mpi_core_cond_assign( X, Y, len_Y, 1 );
 
-    TEST_CF_PUBLIC( X, len_X * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_PUBLIC( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    TEST_CF_PUBLIC( X, len_X_byte );
+    TEST_CF_PUBLIC( Y, len_Y_byte );
 
-    ASSERT_COMPARE( X, len_Y * sizeof( mbedtls_mpi_uint ),
-                    Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    ASSERT_COMPARE( X, len_Y_byte, Y, len_Y_byte );
 
 exit:
     ;
@@ -818,53 +821,56 @@
                          data_t * input_Y )
 {
     #define MAX_LEN 64
-    mbedtls_mpi_uint tmp_X[MAX_LEN];
-    mbedtls_mpi_uint tmp_Y[MAX_LEN];
-    mbedtls_mpi_uint X[MAX_LEN];
-    mbedtls_mpi_uint Y[MAX_LEN];
+    mbedtls_mpi_uint *tmp_X = NULL;
+    mbedtls_mpi_uint *tmp_Y = NULL;
+    mbedtls_mpi_uint *X = NULL;
+    mbedtls_mpi_uint *Y = NULL;
     size_t len_X = CHARS_TO_LIMBS( input_X->len );
     size_t len_Y = CHARS_TO_LIMBS( input_Y->len );
+    size_t len_X_byte = len_X * sizeof( mbedtls_mpi_uint );
+    size_t len_Y_byte = len_Y * sizeof( mbedtls_mpi_uint );
 
     TEST_ASSERT( len_X <= MAX_LEN );
     TEST_ASSERT( len_Y <= MAX_LEN );
 
+    ASSERT_ALLOC( tmp_X, len_X_byte );
+    ASSERT_ALLOC( tmp_Y, len_Y_byte );
+
     TEST_ASSERT( mbedtls_mpi_core_read_be( tmp_X, len_X,
                                            input_X->x, input_X->len )
                  == 0 );
-    memcpy( X, tmp_X, len_X * sizeof( mbedtls_mpi_uint ) );
+    ASSERT_ALLOC( X, len_X_byte );
+    memcpy( X, tmp_X, len_X_byte );
 
     TEST_ASSERT( mbedtls_mpi_core_read_be( tmp_Y, len_Y,
                                            input_Y->x, input_Y->len )
                  == 0 );
-    memcpy( Y, tmp_Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    ASSERT_ALLOC( Y, len_Y_byte );
+    memcpy( Y, tmp_Y, len_Y_byte );
 
     /* condition is false */
-    TEST_CF_SECRET( X, len_X * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_SECRET( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    TEST_CF_SECRET( X, len_X_byte );
+    TEST_CF_SECRET( Y, len_Y_byte );
 
     mbedtls_mpi_core_cond_swap( X, Y, len_X, 0 );
 
-    TEST_CF_PUBLIC( X, len_X * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_PUBLIC( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    TEST_CF_PUBLIC( X, len_X_byte );
+    TEST_CF_PUBLIC( Y, len_Y_byte );
 
-    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 ) );
+    ASSERT_COMPARE( X, len_X_byte, tmp_X, len_X_byte );
+    ASSERT_COMPARE( Y, len_Y_byte, tmp_Y, len_Y_byte );
 
     /* condition is true */
-    TEST_CF_SECRET( X, len_X * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_SECRET( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    TEST_CF_SECRET( X, len_X_byte );
+    TEST_CF_SECRET( Y, len_Y_byte );
 
     mbedtls_mpi_core_cond_swap( X, Y, len_X, 1 );
 
-    TEST_CF_PUBLIC( X, len_X * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_PUBLIC( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    TEST_CF_PUBLIC( X, len_X_byte );
+    TEST_CF_PUBLIC( Y, len_Y_byte );
 
-    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_byte, tmp_Y, len_Y_byte );
+    ASSERT_COMPARE( Y, len_X_byte, tmp_X, len_X_byte );
 
 exit:
     ;
@@ -878,21 +884,25 @@
                               data_t * input_Y )
 {
     #define MAX_LEN 64
-    mbedtls_mpi_uint X[MAX_LEN];
-    mbedtls_mpi_uint Y[MAX_LEN];
+    mbedtls_mpi_uint *X = NULL;
+    mbedtls_mpi_uint *Y = NULL;
     mbedtls_mpi_uint buff_m[MAX_LEN];
     mbedtls_mpi_mod_modulus m;
     size_t len_X = CHARS_TO_LIMBS( input_X->len );
     size_t len_Y = CHARS_TO_LIMBS( input_Y->len );
+    size_t len_X_byte = len_X * sizeof( mbedtls_mpi_uint );
+    size_t len_Y_byte = len_Y * sizeof( mbedtls_mpi_uint );
 
     TEST_ASSERT( len_X <= MAX_LEN );
     TEST_ASSERT( len_Y <= MAX_LEN );
 
+    ASSERT_ALLOC( X, len_X_byte );
+    ASSERT_ALLOC( Y, len_Y_byte );
+
     memset( buff_m, 0, MAX_LEN * sizeof( mbedtls_mpi_uint ) );
     mbedtls_mpi_mod_modulus_init( &m );
     TEST_ASSERT( mbedtls_mpi_mod_modulus_setup(
-                        &m, buff_m,
-                        len_X <= len_Y ? len_X : len_Y,
+                        &m, buff_m, len_Y,
                         MBEDTLS_MPI_MOD_EXT_REP_BE,
                         MBEDTLS_MPI_MOD_REP_MONTGOMERY )
                  == 0 );
@@ -906,27 +916,26 @@
                  == 0 );
 
     /* condition is false */
-    TEST_CF_SECRET( X, len_X * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_SECRET( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    TEST_CF_SECRET( X, len_X_byte );
+    TEST_CF_SECRET( Y, len_Y_byte );
 
     mbedtls_mpi_mod_raw_cond_assign( X, Y, &m, 0 );
 
-    TEST_CF_PUBLIC( X, len_X * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_PUBLIC( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    TEST_CF_PUBLIC( X, len_X_byte );
+    TEST_CF_PUBLIC( Y, len_Y_byte );
 
     TEST_ASSERT( memcmp( X, Y, m.limbs * sizeof( mbedtls_mpi_uint ) ) != 0 );
 
     /* condition is true */
-    TEST_CF_SECRET( X, len_X * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_SECRET( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    TEST_CF_SECRET( X, len_X_byte );
+    TEST_CF_SECRET( Y, len_Y_byte );
 
     mbedtls_mpi_mod_raw_cond_assign( X, Y, &m, 1 );
 
-    TEST_CF_PUBLIC( X, len_X * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_PUBLIC( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    TEST_CF_PUBLIC( X, len_X_byte );
+    TEST_CF_PUBLIC( Y, len_Y_byte );
 
-    ASSERT_COMPARE( X, len_Y * sizeof( mbedtls_mpi_uint ),
-                    Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    ASSERT_COMPARE( X, len_Y_byte, Y, len_Y_byte );
 
 exit:
     ;
@@ -940,62 +949,65 @@
                             data_t * input_Y )
 {
     #define MAX_LEN 64
-    mbedtls_mpi_uint tmp_X[MAX_LEN];
-    mbedtls_mpi_uint tmp_Y[MAX_LEN];
-    mbedtls_mpi_uint X[MAX_LEN];
-    mbedtls_mpi_uint Y[MAX_LEN];
+    mbedtls_mpi_uint *tmp_X = NULL;
+    mbedtls_mpi_uint *tmp_Y = NULL;
+    mbedtls_mpi_uint *X = NULL;
+    mbedtls_mpi_uint *Y = NULL;
     mbedtls_mpi_uint buff_m[MAX_LEN];
     mbedtls_mpi_mod_modulus m;
     size_t len_X = CHARS_TO_LIMBS( input_X->len );
     size_t len_Y = CHARS_TO_LIMBS( input_Y->len );
+    size_t len_X_byte = len_X * sizeof( mbedtls_mpi_uint );
+    size_t len_Y_byte = len_Y * sizeof( mbedtls_mpi_uint );
+    size_t len_m_byte = len_X_byte;
 
     TEST_ASSERT( len_X <= MAX_LEN );
     TEST_ASSERT( len_Y <= MAX_LEN );
 
+    ASSERT_ALLOC( tmp_X, len_X_byte );
+    ASSERT_ALLOC( tmp_Y, len_Y_byte );
+
     memset( buff_m, 0, MAX_LEN * sizeof( mbedtls_mpi_uint ) );
     mbedtls_mpi_mod_modulus_init( &m );
     TEST_ASSERT( mbedtls_mpi_mod_modulus_setup(
-                        &m, buff_m,
-                        len_X <= len_Y ? len_X : len_Y,
+                        &m, buff_m, len_X,
                         MBEDTLS_MPI_MOD_EXT_REP_BE,
                         MBEDTLS_MPI_MOD_REP_MONTGOMERY )
                  == 0 );
 
     TEST_ASSERT( mbedtls_mpi_core_read_be( tmp_X, len_X, input_X->x, input_X->len )
                  == 0 );
-    memcpy( X, tmp_X, len_X * sizeof( mbedtls_mpi_uint ) );
+    ASSERT_ALLOC( X, len_X_byte );
+    memcpy( X, tmp_X, len_X_byte );
 
     TEST_ASSERT( mbedtls_mpi_core_read_be( tmp_Y, len_Y, input_Y->x, input_Y->len )
                  == 0 );
-    memcpy( Y, tmp_Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    ASSERT_ALLOC( Y, len_Y_byte );
+    memcpy( Y, tmp_Y, len_Y_byte );
 
     /* condition is false */
-    TEST_CF_SECRET( X, len_X * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_SECRET( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    TEST_CF_SECRET( X, len_X_byte );
+    TEST_CF_SECRET( Y, len_Y_byte );
 
     mbedtls_mpi_mod_raw_cond_swap( X, Y, &m, 0 );
 
-    TEST_CF_PUBLIC( X, len_X * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_PUBLIC( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    TEST_CF_PUBLIC( X, len_X_byte );
+    TEST_CF_PUBLIC( Y, len_Y_byte );
 
-    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 ) );
+    ASSERT_COMPARE( X, len_X_byte, tmp_X, len_X_byte );
+    ASSERT_COMPARE( Y, len_Y_byte, tmp_Y, len_Y_byte );
 
     /* condition is true */
-    TEST_CF_SECRET( X, len_X * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_SECRET( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    TEST_CF_SECRET( X, len_X_byte );
+    TEST_CF_SECRET( Y, len_Y_byte );
 
     mbedtls_mpi_mod_raw_cond_swap( X, Y, &m, 1 );
 
-    TEST_CF_PUBLIC( X, len_X * sizeof( mbedtls_mpi_uint ) );
-    TEST_CF_PUBLIC( Y, len_Y * sizeof( mbedtls_mpi_uint ) );
+    TEST_CF_PUBLIC( X, len_X_byte );
+    TEST_CF_PUBLIC( Y, len_Y_byte );
 
-    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, len_m_byte, tmp_Y, len_Y_byte );
+    ASSERT_COMPARE( Y, len_m_byte, tmp_X, len_X_byte );
 
 exit:
     ;
