aboutsummaryrefslogtreecommitdiffstats
path: root/lib/mpi/mpicoder.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mpi/mpicoder.c')
-rw-r--r--lib/mpi/mpicoder.c18
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 }