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 77f55c9b00
commit d382c28976
2 changed files with 153 additions and 88 deletions

View file

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

View file

@ -756,6 +756,48 @@ exit:
} }
/* END_CASE */ /* 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 */ /* BEGIN_CASE */
void mbedtls_mpi_shrink( int before, int used, int min, int after ) void mbedtls_mpi_shrink( int before, int used, int min, int after )
{ {
@ -834,70 +876,6 @@ exit:
} }
/* END_CASE */ /* 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 */ /* BEGIN_CASE */
void mbedtls_mpi_add_mpi( int radix_X, char * input_X, int radix_Y, void mbedtls_mpi_add_mpi( int radix_X, char * input_X, int radix_Y,
char * input_Y, int radix_A, char * input_A ) char * input_Y, int radix_A, char * input_A )