- Allow R and A to point to same mpi in mpi_div_mpi
diff --git a/ChangeLog b/ChangeLog
index a448acc..85e7a06 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,8 @@
Bugfixes
* Fixes for MSVC6
* Moved mpi_inv_mod() outside POLARSSL_GENPRIME
+ * Allow R and A to point to same mpi in mpi_div_mpi (found by Manuel
+ Pégourié-Gonnard)
= Version 1.2.0 released 2012-10-31
Features
diff --git a/library/bignum.c b/library/bignum.c
index 94e8eb3..23feb6a 100644
--- a/library/bignum.c
+++ b/library/bignum.c
@@ -1195,9 +1195,9 @@
if( R != NULL )
{
mpi_shift_r( &X, k );
+ X.s = A->s;
mpi_copy( R, &X );
- R->s = A->s;
if( mpi_cmp_int( R, 0 ) == 0 )
R->s = 1;
}
diff --git a/tests/suites/test_suite_mpi.function b/tests/suites/test_suite_mpi.function
index 1b328c4..6635392 100644
--- a/tests/suites/test_suite_mpi.function
+++ b/tests/suites/test_suite_mpi.function
@@ -514,21 +514,21 @@
BEGIN_CASE
mpi_mod_mpi:radix_X:input_X:radix_Y:input_Y:radix_A:input_A:div_result
{
- mpi X, Y, Z, A;
+ mpi X, Y, A;
int res;
- mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
+ mpi_init( &X ); mpi_init( &Y ); mpi_init( &A );
TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
TEST_ASSERT( mpi_read_string( &Y, {radix_Y}, {input_Y} ) == 0 );
TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
- res = mpi_mod_mpi( &Z, &X, &Y );
+ res = mpi_mod_mpi( &X, &X, &Y );
TEST_ASSERT( res == {div_result} );
if( res == 0 )
{
- TEST_ASSERT( mpi_cmp_mpi( &Z, &A ) == 0 );
+ TEST_ASSERT( mpi_cmp_mpi( &X, &A ) == 0 );
}
- mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
+ mpi_free( &X ); mpi_free( &Y ); mpi_free( &A );
}
END_CASE