mpi_exp_mod: remove the 'one' variable

Signed-off-by: Janos Follath <janos.follath@arm.com>
diff --git a/library/bignum.c b/library/bignum.c
index 1ce552c..ad1a5d4 100644
--- a/library/bignum.c
+++ b/library/bignum.c
@@ -2001,7 +2001,7 @@
                          mbedtls_mpi *prec_RR )
 {
     int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
-    size_t window_bitsize, one = 1;
+    size_t window_bitsize;
     size_t i, j, nblimbs;
     size_t bufsize, nbits;
     mbedtls_mpi_uint ei, mm, state;
@@ -2122,9 +2122,12 @@
     if( window_bitsize > 1 )
     {
         /*
-         * W[1 << (window_bitsize - 1)] = W[1] ^ (window_bitsize - 1)
+         * W[i] = W[1] ^ i
+         *
+         * The first bit of the sliding window is always 1 and therefore we
+         * only need to store the second half of the table.
          */
-        j =  one << ( window_bitsize - 1 );
+        j = w_table_used_size / 2;
 
         MBEDTLS_MPI_CHK( mbedtls_mpi_grow( &W[j], N->n + 1 ) );
         MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &W[j], &W[1]    ) );
@@ -2134,8 +2137,10 @@
 
         /*
          * W[i] = W[i - 1] * W[1]
+         * (The last element in the table is for the result X, so we don't need
+         * to calculate that.)
          */
-        for( i = j + 1; i < ( one << window_bitsize ); i++ )
+        for( i = j + 1; i < w_table_used_size - 1; i++ )
         {
             MBEDTLS_MPI_CHK( mbedtls_mpi_grow( &W[i], N->n + 1 ) );
             MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &W[i], &W[i - 1] ) );
@@ -2225,7 +2230,7 @@
 
         exponent_bits_in_window <<= 1;
 
-        if( ( exponent_bits_in_window & ( one << window_bitsize ) ) != 0 )
+        if( ( exponent_bits_in_window & ( (size_t) 1 << window_bitsize ) ) != 0 )
         {
             MBEDTLS_MPI_CHK( mpi_select( &WW, W, w_table_used_size, 1 ) );
             mpi_montmul( &W[x_index], &WW, N, mm, &T );