Overhaul testing of mbedtls_mpi_copy
Replace the two test functions mbedtls_mpi_copy_sint (supporting signed inputs but always with exactly one limb) and mbedtls_mpi_copy_binary (supporting arbitrary-sized inputs but not negative inputs) by a single function that supports both arbitrary-sized inputs and arbitrary-signed inputs. This will allows testing combinations like negative source and zero-sized destination. Also generalize mpi_copy_self to support arbitrary inputs. Generate a new list of test cases systematically enumerating all possibilities among various categories: zero with 0 or 1 limb, negative or positive with 1 limb, negative or positive with >1 limb. I used the following Perl script: ``` sub rhs { $_ = $_[0]; s/bead/beef/; s/ca5cadedb01dfaceacc01ade/face1e55ca11ab1ecab005e5/; $_ } %v = ( "zero (null)" => "", "zero (1 limb)" => "0", "small positive" => "bead", "large positive" => "ca5cadedb01dfaceacc01ade", "small negative" => "-bead", "large negative" => "-ca5cadedb01dfaceacc01ade", ); foreach $s (sort keys %v) { foreach $d (sort keys %v) { printf "Copy %s to %s\nmbedtls_mpi_copy:\"%s\":\"%s\"\n\n", $s, $d, $v{$s}, rhs($v{$d}); } } foreach $s (sort keys %v) { printf "Copy self: %s\nmpi_copy_self:\"%s\"\n\n", $s, $v{$s}; } ``` Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
parent
dffc710008
commit
90ec8e857c
2 changed files with 133 additions and 60 deletions
|
@ -310,44 +310,131 @@ mbedtls_mpi_cmp_abs:10:"2":10:"-3":-1
|
|||
Base test mbedtls_mpi_cmp_abs (Mix values) #3
|
||||
mbedtls_mpi_cmp_abs:10:"-2":10:"1":1
|
||||
|
||||
Copy zero (1 limb) to positive (1 limb)
|
||||
mbedtls_mpi_copy_sint:0:1500
|
||||
Copy large negative to large negative
|
||||
mbedtls_mpi_copy:"-ca5cadedb01dfaceacc01ade":"-face1e55ca11ab1ecab005e5"
|
||||
|
||||
Copy zero (1 limb) to negative (1 limb)
|
||||
mbedtls_mpi_copy_sint:0:-1500
|
||||
Copy large negative to large positive
|
||||
mbedtls_mpi_copy:"-ca5cadedb01dfaceacc01ade":"face1e55ca11ab1ecab005e5"
|
||||
|
||||
Copy positive (1 limb) to zero (1 limb)
|
||||
mbedtls_mpi_copy_sint:1500:0
|
||||
Copy large negative to small negative
|
||||
mbedtls_mpi_copy:"-ca5cadedb01dfaceacc01ade":"-beef"
|
||||
|
||||
Copy negative (1 limb) to zero (1 limb)
|
||||
mbedtls_mpi_copy_sint:-1500:0
|
||||
Copy large negative to small positive
|
||||
mbedtls_mpi_copy:"-ca5cadedb01dfaceacc01ade":"beef"
|
||||
|
||||
Copy positive (1 limb) to negative (1 limb)
|
||||
mbedtls_mpi_copy_sint:1500:-42
|
||||
Copy large negative to zero (1 limb)
|
||||
mbedtls_mpi_copy:"-ca5cadedb01dfaceacc01ade":"0"
|
||||
|
||||
Copy negative (1 limb) to positive (1 limb)
|
||||
mbedtls_mpi_copy_sint:-42:1500
|
||||
Copy large negative to zero (null)
|
||||
mbedtls_mpi_copy:"-ca5cadedb01dfaceacc01ade":""
|
||||
|
||||
Copy large positive to large negative
|
||||
mbedtls_mpi_copy:"ca5cadedb01dfaceacc01ade":"-face1e55ca11ab1ecab005e5"
|
||||
|
||||
Copy large positive to large positive
|
||||
mbedtls_mpi_copy:"ca5cadedb01dfaceacc01ade":"face1e55ca11ab1ecab005e5"
|
||||
|
||||
Copy large positive to small negative
|
||||
mbedtls_mpi_copy:"ca5cadedb01dfaceacc01ade":"-beef"
|
||||
|
||||
Copy large positive to small positive
|
||||
mbedtls_mpi_copy:"ca5cadedb01dfaceacc01ade":"beef"
|
||||
|
||||
Copy large positive to zero (1 limb)
|
||||
mbedtls_mpi_copy:"ca5cadedb01dfaceacc01ade":"0"
|
||||
|
||||
Copy large positive to zero (null)
|
||||
mbedtls_mpi_copy:"ca5cadedb01dfaceacc01ade":""
|
||||
|
||||
Copy small negative to large negative
|
||||
mbedtls_mpi_copy:"-bead":"-face1e55ca11ab1ecab005e5"
|
||||
|
||||
Copy small negative to large positive
|
||||
mbedtls_mpi_copy:"-bead":"face1e55ca11ab1ecab005e5"
|
||||
|
||||
Copy small negative to small negative
|
||||
mbedtls_mpi_copy:"-bead":"-beef"
|
||||
|
||||
Copy small negative to small positive
|
||||
mbedtls_mpi_copy:"-bead":"beef"
|
||||
|
||||
Copy small negative to zero (1 limb)
|
||||
mbedtls_mpi_copy:"-bead":"0"
|
||||
|
||||
Copy small negative to zero (null)
|
||||
mbedtls_mpi_copy:"-bead":""
|
||||
|
||||
Copy small positive to large negative
|
||||
mbedtls_mpi_copy:"bead":"-face1e55ca11ab1ecab005e5"
|
||||
|
||||
Copy small positive to large positive
|
||||
mbedtls_mpi_copy:"bead":"face1e55ca11ab1ecab005e5"
|
||||
|
||||
Copy small positive to small negative
|
||||
mbedtls_mpi_copy:"bead":"-beef"
|
||||
|
||||
Copy small positive to small positive
|
||||
mbedtls_mpi_copy:"bead":"beef"
|
||||
|
||||
Copy small positive to zero (1 limb)
|
||||
mbedtls_mpi_copy:"bead":"0"
|
||||
|
||||
Copy small positive to zero (null)
|
||||
mbedtls_mpi_copy:"bead":""
|
||||
|
||||
Copy zero (1 limb) to large negative
|
||||
mbedtls_mpi_copy:"0":"-face1e55ca11ab1ecab005e5"
|
||||
|
||||
Copy zero (1 limb) to large positive
|
||||
mbedtls_mpi_copy:"0":"face1e55ca11ab1ecab005e5"
|
||||
|
||||
Copy zero (1 limb) to small negative
|
||||
mbedtls_mpi_copy:"0":"-beef"
|
||||
|
||||
Copy zero (1 limb) to small positive
|
||||
mbedtls_mpi_copy:"0":"beef"
|
||||
|
||||
Copy zero (1 limb) to zero (1 limb)
|
||||
mbedtls_mpi_copy:"0":"0"
|
||||
|
||||
Copy zero (1 limb) to zero (null)
|
||||
mbedtls_mpi_copy:"0":""
|
||||
|
||||
Copy zero (null) to large negative
|
||||
mbedtls_mpi_copy:"":"-face1e55ca11ab1ecab005e5"
|
||||
|
||||
Copy zero (null) to large positive
|
||||
mbedtls_mpi_copy:"":"face1e55ca11ab1ecab005e5"
|
||||
|
||||
Copy zero (null) to small negative
|
||||
mbedtls_mpi_copy:"":"-beef"
|
||||
|
||||
Copy zero (null) to small positive
|
||||
mbedtls_mpi_copy:"":"beef"
|
||||
|
||||
Copy zero (null) to zero (1 limb)
|
||||
mbedtls_mpi_copy:"":"0"
|
||||
|
||||
Copy zero (null) to zero (null)
|
||||
mbedtls_mpi_copy_binary:"":""
|
||||
mbedtls_mpi_copy:"":""
|
||||
|
||||
Copy zero (null) to positive (1 limb)
|
||||
mbedtls_mpi_copy_binary:"":"1234"
|
||||
Copy self: large negative
|
||||
mpi_copy_self:"-ca5cadedb01dfaceacc01ade"
|
||||
|
||||
Copy positive (1 limb) to zero (null)
|
||||
mbedtls_mpi_copy_binary:"1234":""
|
||||
Copy self: large positive
|
||||
mpi_copy_self:"ca5cadedb01dfaceacc01ade"
|
||||
|
||||
Copy positive to larger
|
||||
mbedtls_mpi_copy_binary:"bead":"ca5cadedb01dfaceacc01ade"
|
||||
Copy self: small negative
|
||||
mpi_copy_self:"-bead"
|
||||
|
||||
Copy positive to smaller
|
||||
mbedtls_mpi_copy_binary:"ca5cadedb01dfaceacc01ade":"bead"
|
||||
|
||||
Copy self: positive (1 limb)
|
||||
mpi_copy_self:14
|
||||
Copy self: small positive
|
||||
mpi_copy_self:"bead"
|
||||
|
||||
Copy self: zero (1 limb)
|
||||
mpi_copy_self:0
|
||||
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
|
||||
|
|
|
@ -501,56 +501,42 @@ exit:
|
|||
/* END_CASE */
|
||||
|
||||
/* BEGIN_CASE */
|
||||
void mbedtls_mpi_copy_sint( int input_X, int input_Y )
|
||||
void mbedtls_mpi_copy( char *src_hex, char *dst_hex )
|
||||
{
|
||||
mbedtls_mpi X, Y;
|
||||
mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y );
|
||||
mbedtls_mpi src, dst;
|
||||
mbedtls_mpi_init( &src );
|
||||
mbedtls_mpi_init( &dst );
|
||||
|
||||
TEST_ASSERT( mbedtls_mpi_lset( &X, input_X ) == 0 );
|
||||
TEST_ASSERT( mbedtls_mpi_lset( &Y, input_Y ) == 0 );
|
||||
TEST_ASSERT( mbedtls_test_read_mpi( &src, 16, src_hex ) == 0 );
|
||||
TEST_ASSERT( mbedtls_test_read_mpi( &dst, 16, dst_hex ) == 0 );
|
||||
|
||||
TEST_ASSERT( mbedtls_mpi_copy( &Y, &X ) == 0 );
|
||||
TEST_ASSERT( sign_is_valid( &Y ) );
|
||||
TEST_ASSERT( mbedtls_mpi_cmp_int( &X, input_X ) == 0 );
|
||||
TEST_ASSERT( mbedtls_mpi_cmp_int( &Y, input_X ) == 0 );
|
||||
TEST_ASSERT( mbedtls_mpi_copy( &dst, &src ) == 0 );
|
||||
|
||||
TEST_ASSERT( sign_is_valid( &dst ) );
|
||||
TEST_ASSERT( mbedtls_mpi_cmp_mpi( &dst, &src ) == 0 );
|
||||
|
||||
exit:
|
||||
mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y );
|
||||
mbedtls_mpi_free( &src );
|
||||
mbedtls_mpi_free( &dst );
|
||||
}
|
||||
/* END_CASE */
|
||||
|
||||
/* BEGIN_CASE */
|
||||
void mbedtls_mpi_copy_binary( data_t *input_X, data_t *input_Y )
|
||||
void mpi_copy_self( char *input_X )
|
||||
{
|
||||
mbedtls_mpi X, Y, X0;
|
||||
mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &X0 );
|
||||
|
||||
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_cmp_mpi( &X, &X0 ) == 0 );
|
||||
|
||||
TEST_ASSERT( mbedtls_mpi_copy( &Y, &X ) == 0 );
|
||||
TEST_ASSERT( sign_is_valid( &Y ) );
|
||||
TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &X0 ) == 0 );
|
||||
TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Y, &X0 ) == 0 );
|
||||
|
||||
exit:
|
||||
mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &X0 );
|
||||
}
|
||||
/* END_CASE */
|
||||
|
||||
/* BEGIN_CASE */
|
||||
void mpi_copy_self( int input_X )
|
||||
{
|
||||
mbedtls_mpi X;
|
||||
mbedtls_mpi X, A;
|
||||
mbedtls_mpi_init( &A );
|
||||
mbedtls_mpi_init( &X );
|
||||
|
||||
TEST_ASSERT( mbedtls_mpi_lset( &X, input_X ) == 0 );
|
||||
TEST_ASSERT( mbedtls_test_read_mpi( &X, 16, input_X ) == 0 );
|
||||
TEST_ASSERT( mbedtls_mpi_copy( &X, &X ) == 0 );
|
||||
TEST_ASSERT( mbedtls_mpi_cmp_int( &X, input_X ) == 0 );
|
||||
|
||||
TEST_ASSERT( mbedtls_test_read_mpi( &A, 16, input_X ) == 0 );
|
||||
TEST_ASSERT( sign_is_valid( &X ) );
|
||||
TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &A ) == 0 );
|
||||
|
||||
exit:
|
||||
mbedtls_mpi_free( &A );
|
||||
mbedtls_mpi_free( &X );
|
||||
}
|
||||
/* END_CASE */
|
||||
|
|
Loading…
Reference in a new issue