diff --git a/library/ecp.c b/library/ecp.c index 78b7a6528..fd21dd778 100644 --- a/library/ecp.c +++ b/library/ecp.c @@ -1475,12 +1475,17 @@ static int ecp_mul_mxz( ecp_group *grp, ecp_point *R, /* Save PX and read from P before writing to R, in case P == R */ mpi_copy( &PX, &P->X ); MPI_CHK( ecp_copy( &RP, P ) ); - MPI_CHK( ecp_set_zero( R ) ); + + /* Set R to zero in modified x/z coordinates */ + MPI_CHK( mpi_lset( &R->X, 1 ) ); + MPI_CHK( mpi_lset( &R->Z, 0 ) ); + mpi_free( &R->Y ); /* Randomize coordinates of the starting point */ - MPI_CHK( ecp_randomize_mxz( grp, &RP, f_rng, p_rng ) ); + if( f_rng != NULL ) + MPI_CHK( ecp_randomize_mxz( grp, &RP, f_rng, p_rng ) ); - i = mpi_msb( m ) + 1; + i = mpi_msb( m ); /* one past the (zero-based) most significant bit */ while( i-- > 0 ) { // TODO: no branch, and constant memory-access pattern diff --git a/tests/suites/test_suite_ecp.function b/tests/suites/test_suite_ecp.function index 4e177ad83..1f04d678c 100644 --- a/tests/suites/test_suite_ecp.function +++ b/tests/suites/test_suite_ecp.function @@ -298,13 +298,11 @@ void ecp_test_vec_x( int id, char *dA_hex, char *xA_hex, TEST_ASSERT( ecp_check_pubkey( &grp, &R ) == 0 ); TEST_ASSERT( mpi_cmp_mpi( &R.X, &xS ) == 0 ); - TEST_ASSERT( ecp_mul( &grp, &R, &dB, &grp.G, - &rnd_pseudo_rand, &rnd_info ) == 0 ); + TEST_ASSERT( ecp_mul( &grp, &R, &dB, &grp.G, NULL, NULL ) == 0 ); TEST_ASSERT( ecp_check_pubkey( &grp, &R ) == 0 ); TEST_ASSERT( mpi_cmp_mpi( &R.X, &xB ) == 0 ); - TEST_ASSERT( ecp_mul( &grp, &R, &dA, &R, - &rnd_pseudo_rand, &rnd_info ) == 0 ); + TEST_ASSERT( ecp_mul( &grp, &R, &dA, &R, NULL, NULL ) == 0 ); TEST_ASSERT( ecp_check_pubkey( &grp, &R ) == 0 ); TEST_ASSERT( mpi_cmp_mpi( &R.X, &xS ) == 0 );