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>
This commit is contained in:
parent
af7d44b4d2
commit
eee0d6ce6b
@ -144,12 +144,12 @@ class BignumCoreOperationArchSplit(BignumCoreOperation):
|
|||||||
yield cls(a_value, b_value, 32).create_test_case()
|
yield cls(a_value, b_value, 32).create_test_case()
|
||||||
yield cls(a_value, b_value, 64).create_test_case()
|
yield cls(a_value, b_value, 64).create_test_case()
|
||||||
|
|
||||||
class BignumCoreAddIf(BignumCoreOperationArchSplit):
|
class BignumCoreAddAndAddIf(BignumCoreOperationArchSplit):
|
||||||
"""Test cases for bignum core add if."""
|
"""Test cases for bignum core add and add-if."""
|
||||||
count = 0
|
count = 0
|
||||||
symbol = "+"
|
symbol = "+"
|
||||||
test_function = "mpi_core_add_if"
|
test_function = "mpi_core_add_and_add_if"
|
||||||
test_name = "mbedtls_mpi_core_add_if"
|
test_name = "mpi_core_add_and_add_if"
|
||||||
|
|
||||||
def result(self) -> List[str]:
|
def result(self) -> List[str]:
|
||||||
result = self.int_a + self.int_b
|
result = self.int_a + self.int_b
|
||||||
|
@ -359,41 +359,52 @@ exit:
|
|||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE */
|
/* BEGIN_CASE */
|
||||||
void mpi_core_add_if( char * input_A, char * input_B,
|
void mpi_core_add_and_add_if( char * input_A, char * input_B,
|
||||||
char * input_S, int carry )
|
char * input_S, int carry )
|
||||||
{
|
{
|
||||||
mbedtls_mpi_uint *A = NULL; /* first value to add */
|
mbedtls_mpi_uint *A = NULL; /* first value to add */
|
||||||
size_t A_limbs;
|
|
||||||
mbedtls_mpi_uint *B = NULL; /* second value to add */
|
mbedtls_mpi_uint *B = NULL; /* second value to add */
|
||||||
size_t B_limbs;
|
|
||||||
mbedtls_mpi_uint *S = NULL; /* expected result */
|
mbedtls_mpi_uint *S = NULL; /* expected result */
|
||||||
size_t S_limbs;
|
|
||||||
mbedtls_mpi_uint *X = NULL; /* destination - the in/out first operand */
|
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( &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( &B, &B_limbs, input_B ) );
|
||||||
TEST_EQUAL( 0, mbedtls_test_read_mpi_core( &S, &S_limbs, input_S ) );
|
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, B_limbs );
|
||||||
TEST_EQUAL( A_limbs, S_limbs );
|
TEST_EQUAL( A_limbs, S_limbs );
|
||||||
size_t limbs = A_limbs;
|
size_t limbs = A_limbs;
|
||||||
size_t bytes = limbs * sizeof( *A );
|
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,
|
/* 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 */
|
* if A != B, B + A. If A == B, we can test when A and B are aliased */
|
||||||
|
|
||||||
/* A + B */
|
/* 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 );
|
memcpy( X, A, bytes );
|
||||||
TEST_EQUAL( 0, mbedtls_mpi_core_add_if( X, B, limbs, 0 ) );
|
TEST_EQUAL( 0, mbedtls_mpi_core_add_if( X, B, limbs, 0 ) );
|
||||||
ASSERT_COMPARE( X, bytes, A, bytes );
|
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 ) );
|
TEST_EQUAL( carry, mbedtls_mpi_core_add_if( X, B, limbs, 1 ) );
|
||||||
ASSERT_COMPARE( X, bytes, S, bytes );
|
ASSERT_COMPARE( X, bytes, S, bytes );
|
||||||
|
|
||||||
@ -401,12 +412,21 @@ void mpi_core_add_if( char * input_A, char * input_B,
|
|||||||
{
|
{
|
||||||
/* A == B, so test where A and B are aliased */
|
/* 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 );
|
memcpy( X, B, bytes );
|
||||||
TEST_EQUAL( 0, mbedtls_mpi_core_add_if( X, X, limbs, 0 ) );
|
TEST_EQUAL( 0, mbedtls_mpi_core_add_if( X, X, limbs, 0 ) );
|
||||||
ASSERT_COMPARE( X, bytes, B, bytes );
|
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 ) );
|
TEST_EQUAL( carry, mbedtls_mpi_core_add_if( X, X, limbs, 1 ) );
|
||||||
ASSERT_COMPARE( X, bytes, S, bytes );
|
ASSERT_COMPARE( X, bytes, S, bytes );
|
||||||
}
|
}
|
||||||
@ -414,12 +434,26 @@ void mpi_core_add_if( char * input_A, char * input_B,
|
|||||||
{
|
{
|
||||||
/* A != B, so test B + A */
|
/* 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 );
|
memcpy( X, B, bytes );
|
||||||
TEST_EQUAL( 0, mbedtls_mpi_core_add_if( X, A, limbs, 0 ) );
|
TEST_EQUAL( 0, mbedtls_mpi_core_add_if( X, A, limbs, 0 ) );
|
||||||
ASSERT_COMPARE( X, bytes, B, bytes );
|
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 ) );
|
TEST_EQUAL( carry, mbedtls_mpi_core_add_if( X, A, limbs, 1 ) );
|
||||||
ASSERT_COMPARE( X, bytes, S, bytes );
|
ASSERT_COMPARE( X, bytes, S, bytes );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user