Commit 20b5b7f3 authored by Nicolai Stange's avatar Nicolai Stange Committed by Herbert Xu

lib/mpi: refactor mpi_read_from_buffer() in terms of mpi_read_raw_data()

mpi_read_from_buffer() and mpi_read_raw_data() do basically the same thing
except that the former extracts the number of payload bits from the first
two bytes of the input buffer.

Besides that, the data copying logic is exactly the same.

Replace the open coded buffer to MPI instance conversion by a call to
mpi_read_raw_data().
Signed-off-by: default avatarNicolai Stange <nicstange@gmail.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent cdf24b42
...@@ -80,10 +80,8 @@ EXPORT_SYMBOL_GPL(mpi_read_raw_data); ...@@ -80,10 +80,8 @@ EXPORT_SYMBOL_GPL(mpi_read_raw_data);
MPI mpi_read_from_buffer(const void *xbuffer, unsigned *ret_nread) MPI mpi_read_from_buffer(const void *xbuffer, unsigned *ret_nread)
{ {
const uint8_t *buffer = xbuffer; const uint8_t *buffer = xbuffer;
int i, j; unsigned int nbits, nbytes;
unsigned nbits, nbytes, nlimbs; MPI val;
mpi_limb_t a;
MPI val = NULL;
if (*ret_nread < 2) if (*ret_nread < 2)
return ERR_PTR(-EINVAL); return ERR_PTR(-EINVAL);
...@@ -93,7 +91,6 @@ MPI mpi_read_from_buffer(const void *xbuffer, unsigned *ret_nread) ...@@ -93,7 +91,6 @@ MPI mpi_read_from_buffer(const void *xbuffer, unsigned *ret_nread)
pr_info("MPI: mpi too large (%u bits)\n", nbits); pr_info("MPI: mpi too large (%u bits)\n", nbits);
return ERR_PTR(-EINVAL); return ERR_PTR(-EINVAL);
} }
buffer += 2;
nbytes = DIV_ROUND_UP(nbits, 8); nbytes = DIV_ROUND_UP(nbits, 8);
if (nbytes + 2 > *ret_nread) { if (nbytes + 2 > *ret_nread) {
...@@ -102,24 +99,9 @@ MPI mpi_read_from_buffer(const void *xbuffer, unsigned *ret_nread) ...@@ -102,24 +99,9 @@ MPI mpi_read_from_buffer(const void *xbuffer, unsigned *ret_nread)
return ERR_PTR(-EINVAL); return ERR_PTR(-EINVAL);
} }
nlimbs = DIV_ROUND_UP(nbytes, BYTES_PER_MPI_LIMB); val = mpi_read_raw_data(buffer + 2, nbytes);
val = mpi_alloc(nlimbs);
if (!val) if (!val)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
i = BYTES_PER_MPI_LIMB - nbytes % BYTES_PER_MPI_LIMB;
i %= BYTES_PER_MPI_LIMB;
val->nbits = nbits;
j = val->nlimbs = nlimbs;
val->sign = 0;
for (; j > 0; j--) {
a = 0;
for (; i < BYTES_PER_MPI_LIMB; i++) {
a <<= 8;
a |= *buffer++;
}
i = 0;
val->d[j - 1] = a;
}
*ret_nread = nbytes + 2; *ret_nread = nbytes + 2;
return val; return val;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment