diff options
Diffstat (limited to 'lib/mpi/mpicoder.c')
-rw-r--r-- | lib/mpi/mpicoder.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/lib/mpi/mpicoder.c b/lib/mpi/mpicoder.c index 623439e4bad5..2fd8d418526c 100644 --- a/lib/mpi/mpicoder.c +++ b/lib/mpi/mpicoder.c | |||
@@ -184,7 +184,9 @@ int mpi_read_buffer(MPI a, uint8_t *buf, unsigned buf_len, unsigned *nbytes, | |||
184 | p = buf; | 184 | p = buf; |
185 | *nbytes = n - lzeros; | 185 | *nbytes = n - lzeros; |
186 | 186 | ||
187 | for (i = a->nlimbs - 1; i >= 0; i--) { | 187 | for (i = a->nlimbs - 1 - lzeros / BYTES_PER_MPI_LIMB, |
188 | lzeros %= BYTES_PER_MPI_LIMB; | ||
189 | i >= 0; i--) { | ||
188 | alimb = a->d[i]; | 190 | alimb = a->d[i]; |
189 | #if BYTES_PER_MPI_LIMB == 4 | 191 | #if BYTES_PER_MPI_LIMB == 4 |
190 | *p++ = alimb >> 24; | 192 | *p++ = alimb >> 24; |
@@ -205,15 +207,11 @@ int mpi_read_buffer(MPI a, uint8_t *buf, unsigned buf_len, unsigned *nbytes, | |||
205 | #endif | 207 | #endif |
206 | 208 | ||
207 | if (lzeros > 0) { | 209 | if (lzeros > 0) { |
208 | if (lzeros >= sizeof(alimb)) { | 210 | mpi_limb_t *limb1 = (void *)p - sizeof(alimb); |
209 | p -= sizeof(alimb); | 211 | mpi_limb_t *limb2 = (void *)p - sizeof(alimb) |
210 | } else { | 212 | + lzeros; |
211 | mpi_limb_t *limb1 = (void *)p - sizeof(alimb); | 213 | *limb1 = *limb2; |
212 | mpi_limb_t *limb2 = (void *)p - sizeof(alimb) | 214 | p -= lzeros; |
213 | + lzeros; | ||
214 | *limb1 = *limb2; | ||
215 | p -= lzeros; | ||
216 | } | ||
217 | lzeros -= sizeof(alimb); | 215 | lzeros -= sizeof(alimb); |
218 | } | 216 | } |
219 | } | 217 | } |