Overhaul testing of mbedtls_mpi_swap

Similarly to "Overhaul testing of mbedtls_mpi_copy", simplify the code
to test mbedtls_mpi_swap to have just one function for distinct MPIs
and one function for swapping an MPI with itself, covering all cases
of size (0, 1, >1) and sign (>0, <0).

The test cases are exactly the same as for mbedtls_mpi_copy with the
following replacements:
* `Copy` -> `Swap`
* ` to ` -> ` with `
* `_copy` -> `_swap`

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
Gilles Peskine 2021-06-10 22:29:57 +02:00
parent 90ec8e857c
commit fc1eeefc99
2 changed files with 153 additions and 88 deletions

View file

@ -436,43 +436,130 @@ mpi_copy_self:"0"
Copy self: zero (null)
mpi_copy_self:""
Swap zero (1 limb) with positive (1 limb)
mbedtls_mpi_swap_sint:0:1500
Swap large negative with large negative
mbedtls_mpi_swap:"-ca5cadedb01dfaceacc01ade":"-face1e55ca11ab1ecab005e5"
Swap zero (1 limb) with negative (1 limb)
mbedtls_mpi_swap_sint:0:-1500
Swap large negative with large positive
mbedtls_mpi_swap:"-ca5cadedb01dfaceacc01ade":"face1e55ca11ab1ecab005e5"
Swap positive (1 limb) with zero (1 limb)
mbedtls_mpi_swap_sint:1500:0
Swap large negative with small negative
mbedtls_mpi_swap:"-ca5cadedb01dfaceacc01ade":"-beef"
Swap negative (1 limb) with zero (1 limb)
mbedtls_mpi_swap_sint:-1500:0
Swap large negative with small positive
mbedtls_mpi_swap:"-ca5cadedb01dfaceacc01ade":"beef"
Swap positive (1 limb) with negative (1 limb)
mbedtls_mpi_swap_sint:1500:-42
Swap large negative with zero (1 limb)
mbedtls_mpi_swap:"-ca5cadedb01dfaceacc01ade":"0"
Swap negative (1 limb) with positive (1 limb)
mbedtls_mpi_swap_sint:-42:1500
Swap large negative with zero (null)
mbedtls_mpi_swap:"-ca5cadedb01dfaceacc01ade":""
Swap large positive with large negative
mbedtls_mpi_swap:"ca5cadedb01dfaceacc01ade":"-face1e55ca11ab1ecab005e5"
Swap large positive with large positive
mbedtls_mpi_swap:"ca5cadedb01dfaceacc01ade":"face1e55ca11ab1ecab005e5"
Swap large positive with small negative
mbedtls_mpi_swap:"ca5cadedb01dfaceacc01ade":"-beef"
Swap large positive with small positive
mbedtls_mpi_swap:"ca5cadedb01dfaceacc01ade":"beef"
Swap large positive with zero (1 limb)
mbedtls_mpi_swap:"ca5cadedb01dfaceacc01ade":"0"
Swap large positive with zero (null)
mbedtls_mpi_swap:"ca5cadedb01dfaceacc01ade":""
Swap small negative with large negative
mbedtls_mpi_swap:"-bead":"-face1e55ca11ab1ecab005e5"
Swap small negative with large positive
mbedtls_mpi_swap:"-bead":"face1e55ca11ab1ecab005e5"
Swap small negative with small negative
mbedtls_mpi_swap:"-bead":"-beef"
Swap small negative with small positive
mbedtls_mpi_swap:"-bead":"beef"
Swap small negative with zero (1 limb)
mbedtls_mpi_swap:"-bead":"0"
Swap small negative with zero (null)
mbedtls_mpi_swap:"-bead":""
Swap small positive with large negative
mbedtls_mpi_swap:"bead":"-face1e55ca11ab1ecab005e5"
Swap small positive with large positive
mbedtls_mpi_swap:"bead":"face1e55ca11ab1ecab005e5"
Swap small positive with small negative
mbedtls_mpi_swap:"bead":"-beef"
Swap small positive with small positive
mbedtls_mpi_swap:"bead":"beef"
Swap small positive with zero (1 limb)
mbedtls_mpi_swap:"bead":"0"
Swap small positive with zero (null)
mbedtls_mpi_swap:"bead":""
Swap zero (1 limb) with large negative
mbedtls_mpi_swap:"0":"-face1e55ca11ab1ecab005e5"
Swap zero (1 limb) with large positive
mbedtls_mpi_swap:"0":"face1e55ca11ab1ecab005e5"
Swap zero (1 limb) with small negative
mbedtls_mpi_swap:"0":"-beef"
Swap zero (1 limb) with small positive
mbedtls_mpi_swap:"0":"beef"
Swap zero (1 limb) with zero (1 limb)
mbedtls_mpi_swap:"0":"0"
Swap zero (1 limb) with zero (null)
mbedtls_mpi_swap:"0":""
Swap zero (null) with large negative
mbedtls_mpi_swap:"":"-face1e55ca11ab1ecab005e5"
Swap zero (null) with large positive
mbedtls_mpi_swap:"":"face1e55ca11ab1ecab005e5"
Swap zero (null) with small negative
mbedtls_mpi_swap:"":"-beef"
Swap zero (null) with small positive
mbedtls_mpi_swap:"":"beef"
Swap zero (null) with zero (1 limb)
mbedtls_mpi_swap:"":"0"
Swap zero (null) with zero (null)
mbedtls_mpi_swap_binary:"":""
mbedtls_mpi_swap:"":""
Swap zero (null) with positive (1 limb)
mbedtls_mpi_swap_binary:"":"1234"
Swap self: large negative
mpi_swap_self:"-ca5cadedb01dfaceacc01ade"
Swap positive (1 limb) with zero (null)
mbedtls_mpi_swap_binary:"1234":""
Swap self: large positive
mpi_swap_self:"ca5cadedb01dfaceacc01ade"
Swap positive with larger
mbedtls_mpi_swap_binary:"bead":"ca5cadedb01dfaceacc01ade"
Swap self: small negative
mpi_swap_self:"-bead"
Swap positive with smaller
mbedtls_mpi_swap_binary:"ca5cadedb01dfaceacc01ade":"bead"
Swap self: small positive
mpi_swap_self:"bead"
Swap self: 1 limb
mpi_swap_self:"face"
Swap self: zero (1 limb)
mpi_swap_self:"0"
Swap self: null
Swap self: zero (null)
mpi_swap_self:""
Shrink 2 limbs in a buffer of size 2 to 4

View file

@ -541,6 +541,48 @@ exit:
}
/* END_CASE */
/* BEGIN_CASE */
void mbedtls_mpi_swap( char *X_hex, char *Y_hex )
{
mbedtls_mpi X, Y, X0, Y0;
mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y );
mbedtls_mpi_init( &X0 ); mbedtls_mpi_init( &Y0 );
TEST_ASSERT( mbedtls_test_read_mpi( &X, 16, X_hex ) == 0 );
TEST_ASSERT( mbedtls_test_read_mpi( &Y, 16, Y_hex ) == 0 );
TEST_ASSERT( mbedtls_test_read_mpi( &X0, 16, X_hex ) == 0 );
TEST_ASSERT( mbedtls_test_read_mpi( &Y0, 16, Y_hex ) == 0 );
mbedtls_mpi_swap( &X, &Y );
TEST_ASSERT( sign_is_valid( &X ) );
TEST_ASSERT( sign_is_valid( &Y ) );
TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &Y0 ) == 0 );
TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Y, &X0 ) == 0 );
exit:
mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y );
mbedtls_mpi_free( &X0 ); mbedtls_mpi_free( &Y0 );
}
/* END_CASE */
/* BEGIN_CASE */
void mpi_swap_self( char *X_hex )
{
mbedtls_mpi X, X0;
mbedtls_mpi_init( &X ); mbedtls_mpi_init( &X0 );
TEST_ASSERT( mbedtls_test_read_mpi( &X, 16, X_hex ) == 0 );
TEST_ASSERT( mbedtls_test_read_mpi( &X0, 16, X_hex ) == 0 );
mbedtls_mpi_swap( &X, &X );
TEST_ASSERT( sign_is_valid( &X ) );
TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &X0 ) == 0 );
exit:
mbedtls_mpi_free( &X ); mbedtls_mpi_free( &X0 );
}
/* END_CASE */
/* BEGIN_CASE */
void mbedtls_mpi_shrink( int before, int used, int min, int after )
{
@ -619,70 +661,6 @@ exit:
}
/* END_CASE */
/* BEGIN_CASE */
void mbedtls_mpi_swap_sint( int input_X, int input_Y )
{
mbedtls_mpi X, Y;
mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y );
TEST_ASSERT( mbedtls_mpi_lset( &X, input_X ) == 0 );
TEST_ASSERT( mbedtls_mpi_lset( &Y, input_Y ) == 0 );
TEST_ASSERT( mbedtls_mpi_cmp_int( &X, input_X ) == 0 );
TEST_ASSERT( mbedtls_mpi_cmp_int( &Y, input_Y ) == 0 );
mbedtls_mpi_swap( &X, &Y );
TEST_ASSERT( sign_is_valid( &X ) );
TEST_ASSERT( sign_is_valid( &Y ) );
TEST_ASSERT( mbedtls_mpi_cmp_int( &X, input_Y ) == 0 );
TEST_ASSERT( mbedtls_mpi_cmp_int( &Y, input_X ) == 0 );
exit:
mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y );
}
/* END_CASE */
/* BEGIN_CASE */
void mbedtls_mpi_swap_binary( data_t *input_X, data_t *input_Y )
{
mbedtls_mpi X, Y, X0, Y0;
mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y );
mbedtls_mpi_init( &X0 ); mbedtls_mpi_init( &Y0 );
TEST_ASSERT( mbedtls_mpi_read_binary( &X, input_X->x, input_X->len ) == 0 );
TEST_ASSERT( mbedtls_mpi_read_binary( &Y, input_Y->x, input_Y->len ) == 0 );
TEST_ASSERT( mbedtls_mpi_read_binary( &X0, input_X->x, input_X->len ) == 0 );
TEST_ASSERT( mbedtls_mpi_read_binary( &Y0, input_Y->x, input_Y->len ) == 0 );
mbedtls_mpi_swap( &X, &Y );
TEST_ASSERT( sign_is_valid( &X ) );
TEST_ASSERT( sign_is_valid( &Y ) );
TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &Y0 ) == 0 );
TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Y, &X0 ) == 0 );
exit:
mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y );
mbedtls_mpi_free( &X0 ); mbedtls_mpi_free( &Y0 );
}
/* END_CASE */
/* BEGIN_CASE */
void mpi_swap_self( data_t *input_X )
{
mbedtls_mpi X, X0;
mbedtls_mpi_init( &X ); mbedtls_mpi_init( &X0 );
TEST_ASSERT( mbedtls_mpi_read_binary( &X, input_X->x, input_X->len ) == 0 );
TEST_ASSERT( mbedtls_mpi_read_binary( &X0, input_X->x, input_X->len ) == 0 );
mbedtls_mpi_swap( &X, &X );
TEST_ASSERT( sign_is_valid( &X ) );
TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &X0 ) == 0 );
exit:
mbedtls_mpi_free( &X ); mbedtls_mpi_free( &X0 );
}
/* END_CASE */
/* BEGIN_CASE */
void mbedtls_mpi_add_mpi( int radix_X, char * input_X, int radix_Y,
char * input_Y, int radix_A, char * input_A )