Extend the unit tests for mbedtls_mpi_core_add_if() to also test mbedtls_mpi_core_add()
Signed-off-by: Tom Cosgrove <tom.cosgrove@arm.com>
diff --git a/scripts/mbedtls_dev/bignum_core.py b/scripts/mbedtls_dev/bignum_core.py
index e46364b..0d238e7 100644
--- a/scripts/mbedtls_dev/bignum_core.py
+++ b/scripts/mbedtls_dev/bignum_core.py
@@ -144,12 +144,12 @@
yield cls(a_value, b_value, 32).create_test_case()
yield cls(a_value, b_value, 64).create_test_case()
-class BignumCoreAddIf(BignumCoreOperationArchSplit):
- """Test cases for bignum core add if."""
+class BignumCoreAddAndAddIf(BignumCoreOperationArchSplit):
+ """Test cases for bignum core add and add-if."""
count = 0
symbol = "+"
- test_function = "mpi_core_add_if"
- test_name = "mbedtls_mpi_core_add_if"
+ test_function = "mpi_core_add_and_add_if"
+ test_name = "mpi_core_add_and_add_if"
def result(self) -> List[str]:
result = self.int_a + self.int_b
diff --git a/tests/suites/test_suite_bignum_core.function b/tests/suites/test_suite_bignum_core.function
index fb5fe3a..1cd8b40 100644
--- a/tests/suites/test_suite_bignum_core.function
+++ b/tests/suites/test_suite_bignum_core.function
@@ -359,41 +359,52 @@
/* END_CASE */
/* BEGIN_CASE */
-void mpi_core_add_if( char * input_A, char * input_B,
- char * input_S, int carry )
+void mpi_core_add_and_add_if( char * input_A, char * input_B,
+ char * input_S, int carry )
{
mbedtls_mpi_uint *A = NULL; /* first value to add */
- size_t A_limbs;
mbedtls_mpi_uint *B = NULL; /* second value to add */
- size_t B_limbs;
mbedtls_mpi_uint *S = NULL; /* expected result */
- size_t S_limbs;
mbedtls_mpi_uint *X = NULL; /* destination - the in/out first operand */
- size_t X_limbs;
+ size_t A_limbs, B_limbs, S_limbs;
TEST_EQUAL( 0, mbedtls_test_read_mpi_core( &A, &A_limbs, input_A ) );
TEST_EQUAL( 0, mbedtls_test_read_mpi_core( &B, &B_limbs, input_B ) );
TEST_EQUAL( 0, mbedtls_test_read_mpi_core( &S, &S_limbs, input_S ) );
- X_limbs = S_limbs;
- ASSERT_ALLOC( X, X_limbs );
- /* add_if expects all operands to be the same length */
+ /* add and add_if expect all operands to be the same length */
TEST_EQUAL( A_limbs, B_limbs );
TEST_EQUAL( A_limbs, S_limbs );
size_t limbs = A_limbs;
size_t bytes = limbs * sizeof( *A );
+ ASSERT_ALLOC( X, limbs );
+
/* The test cases have A <= B to avoid repetition, so we test A + B then,
* if A != B, B + A. If A == B, we can test when A and B are aliased */
/* A + B */
- /* cond = 0 => X unchanged, no carry */
+ /* add => correct result and carry */
+ TEST_EQUAL( carry, mbedtls_mpi_core_add( X, A, B, limbs ) );
+ ASSERT_COMPARE( X, bytes, S, bytes );
+
+ /* add, alias output and first operand => correct result and carry */
+ memcpy( X, A, bytes );
+ TEST_EQUAL( carry, mbedtls_mpi_core_add( X, X, B, limbs ) );
+ ASSERT_COMPARE( X, bytes, S, bytes );
+
+ /* add, alias output and second operand => correct result and carry */
+ memcpy( X, B, bytes );
+ TEST_EQUAL( carry, mbedtls_mpi_core_add( X, A, X, limbs ) );
+ ASSERT_COMPARE( X, bytes, S, bytes );
+
+ /* add_if: cond = 0 => X unchanged, no carry */
memcpy( X, A, bytes );
TEST_EQUAL( 0, mbedtls_mpi_core_add_if( X, B, limbs, 0 ) );
ASSERT_COMPARE( X, bytes, A, bytes );
- /* cond = 1 => correct result and carry */
+ /* add_if: cond = 1 => correct result and carry */
TEST_EQUAL( carry, mbedtls_mpi_core_add_if( X, B, limbs, 1 ) );
ASSERT_COMPARE( X, bytes, S, bytes );
@@ -401,12 +412,21 @@
{
/* A == B, so test where A and B are aliased */
- /* cond = 0 => X unchanged, no carry */
+ /* add => correct result and carry */
+ TEST_EQUAL( carry, mbedtls_mpi_core_add( X, A, A, limbs ) );
+ ASSERT_COMPARE( X, bytes, S, bytes );
+
+ /* add, output aliased to both operands => correct result and carry */
+ memcpy( X, A, bytes );
+ TEST_EQUAL( carry, mbedtls_mpi_core_add( X, X, X, limbs ) );
+ ASSERT_COMPARE( X, bytes, S, bytes );
+
+ /* add_if: cond = 0 => X unchanged, no carry */
memcpy( X, B, bytes );
TEST_EQUAL( 0, mbedtls_mpi_core_add_if( X, X, limbs, 0 ) );
ASSERT_COMPARE( X, bytes, B, bytes );
- /* cond = 1 => correct result and carry */
+ /* add_if: cond = 1 => correct result and carry */
TEST_EQUAL( carry, mbedtls_mpi_core_add_if( X, X, limbs, 1 ) );
ASSERT_COMPARE( X, bytes, S, bytes );
}
@@ -414,12 +434,26 @@
{
/* A != B, so test B + A */
- /* cond = 0 => d unchanged, no carry */
+ /* add => correct result and carry */
+ TEST_EQUAL( carry, mbedtls_mpi_core_add( X, B, A, limbs ) );
+ ASSERT_COMPARE( X, bytes, S, bytes );
+
+ /* add, alias output and first operand => correct result and carry */
+ memcpy( X, B, bytes );
+ TEST_EQUAL( carry, mbedtls_mpi_core_add( X, X, A, limbs ) );
+ ASSERT_COMPARE( X, bytes, S, bytes );
+
+ /* add, alias output and second operand => correct result and carry */
+ memcpy( X, A, bytes );
+ TEST_EQUAL( carry, mbedtls_mpi_core_add( X, B, X, limbs ) );
+ ASSERT_COMPARE( X, bytes, S, bytes );
+
+ /* add_if: cond = 0 => d unchanged, no carry */
memcpy( X, B, bytes );
TEST_EQUAL( 0, mbedtls_mpi_core_add_if( X, A, limbs, 0 ) );
ASSERT_COMPARE( X, bytes, B, bytes );
- /* cond = 1 => correct result and carry */
+ /* add_if: cond = 1 => correct result and carry */
TEST_EQUAL( carry, mbedtls_mpi_core_add_if( X, A, limbs, 1 ) );
ASSERT_COMPARE( X, bytes, S, bytes );
}