more minor improvement
This commit is contained in:
@@ -1045,7 +1045,7 @@ t_uint mpi_mul_hlp( size_t i, const t_uint *s, t_uint *d, t_uint b )
|
|||||||
|
|
||||||
t++;
|
t++;
|
||||||
|
|
||||||
*d += c; c = ( *d < c ); d++;
|
*d += c; c = ( *d < c );
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1463,7 +1463,7 @@ int mpi_exp_mod( mpi *X, const mpi *A, const mpi *E, const mpi *N, mpi *_RR )
|
|||||||
size_t i, j, nblimbs;
|
size_t i, j, nblimbs;
|
||||||
size_t bufsize, nbits;
|
size_t bufsize, nbits;
|
||||||
t_uint ei, mm, state;
|
t_uint ei, mm, state;
|
||||||
mpi RR, RR0, T, W[ 2 << POLARSSL_MPI_WINDOW_SIZE ], Apos;
|
mpi RR, T, W[ 2 << POLARSSL_MPI_WINDOW_SIZE ], Apos;
|
||||||
int neg;
|
int neg;
|
||||||
|
|
||||||
if( mpi_cmp_int( N, 0 ) < 0 || ( N->p[0] & 1 ) == 0 )
|
if( mpi_cmp_int( N, 0 ) < 0 || ( N->p[0] & 1 ) == 0 )
|
||||||
@@ -1476,7 +1476,7 @@ int mpi_exp_mod( mpi *X, const mpi *A, const mpi *E, const mpi *N, mpi *_RR )
|
|||||||
* Init temps and window size
|
* Init temps and window size
|
||||||
*/
|
*/
|
||||||
mpi_montg_init( &mm, N );
|
mpi_montg_init( &mm, N );
|
||||||
mpi_init( &RR ); mpi_init( &RR0 ); mpi_init( &T );
|
mpi_init( &RR ); mpi_init( &T );
|
||||||
memset( W, 0, sizeof( W ) );
|
memset( W, 0, sizeof( W ) );
|
||||||
|
|
||||||
i = mpi_msb( E );
|
i = mpi_msb( E );
|
||||||
@@ -1488,10 +1488,9 @@ int mpi_exp_mod( mpi *X, const mpi *A, const mpi *E, const mpi *N, mpi *_RR )
|
|||||||
wsize = POLARSSL_MPI_WINDOW_SIZE;
|
wsize = POLARSSL_MPI_WINDOW_SIZE;
|
||||||
|
|
||||||
j = N->n;
|
j = N->n;
|
||||||
MPI_CHK( mpi_grow( X, j ) );
|
MPI_CHK( mpi_grow( X, N->n ) );
|
||||||
MPI_CHK( mpi_grow( &W[1], j ) );
|
MPI_CHK( mpi_grow( &W[1], N->n ) );
|
||||||
MPI_CHK( mpi_grow( &T, j * 2 ) );
|
MPI_CHK( mpi_grow( &T, N->n * 2 ) ); /* T = 0 here. */
|
||||||
memset( T.p, 0, j * ciL ); /* Clear the lower half of T. */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Compensate for negative A (and correct at the end)
|
* Compensate for negative A (and correct at the end)
|
||||||
@@ -1511,14 +1510,14 @@ int mpi_exp_mod( mpi *X, const mpi *A, const mpi *E, const mpi *N, mpi *_RR )
|
|||||||
*/
|
*/
|
||||||
if( _RR == NULL || _RR->p == NULL )
|
if( _RR == NULL || _RR->p == NULL )
|
||||||
{
|
{
|
||||||
MPI_CHK( mpi_lset( &RR0, 1 ) );
|
/* T->p is all zero here. */
|
||||||
MPI_CHK( mpi_shift_l( &RR0, N->n * 2 * biL ) );
|
mpi_sub_hlp( N->n, N->p, T.p + N->n);
|
||||||
MPI_CHK( mpi_mod_mpi( &RR0, &RR0, N ) );
|
MPI_CHK( mpi_mod_mpi( &RR, &T, N ) );
|
||||||
MPI_CHK( mpi_copy( &RR, &RR0 ) ); /* Shrink to size of N. */
|
|
||||||
MPI_CHK( mpi_grow( &RR, N->n ) );
|
|
||||||
|
|
||||||
if( _RR != NULL )
|
if( _RR != NULL )
|
||||||
memcpy( _RR, &RR, sizeof( mpi ) );
|
memcpy( _RR, &RR, sizeof( mpi ) );
|
||||||
|
|
||||||
|
/* The condition of "the lower half of T is all zero" is kept. */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
memcpy( &RR, _RR, sizeof( mpi ) );
|
memcpy( &RR, _RR, sizeof( mpi ) );
|
||||||
@@ -1663,7 +1662,7 @@ cleanup:
|
|||||||
for( i = (one << (wsize - 1)); i < (one << wsize); i++ )
|
for( i = (one << (wsize - 1)); i < (one << wsize); i++ )
|
||||||
mpi_free( &W[i] );
|
mpi_free( &W[i] );
|
||||||
|
|
||||||
mpi_free( &RR0 ); mpi_free( &W[1] ); mpi_free( &T ); mpi_free( &Apos );
|
mpi_free( &W[1] ); mpi_free( &T ); mpi_free( &Apos );
|
||||||
|
|
||||||
if( _RR == NULL )
|
if( _RR == NULL )
|
||||||
mpi_free( &RR );
|
mpi_free( &RR );
|
||||||
|
|||||||
Reference in New Issue
Block a user