提交 9f286132 编写于 作者: R Roberto Sassu 提交者: Zheng Zengkai

mpi: introduce mpi_key_length()

hulk inclusion
category: feature
feature: IMA Digest Lists extension
bugzilla: 46797

-------------------------------------------------

Introduce the new function to get the number of bits and bytes from an MPI.
Signed-off-by: NRoberto Sassu <roberto.sassu@huawei.com>
Signed-off-by: NTianxing Zhang <zhangtianxing3@huawei.com>
Reviewed-by: NJason Yan <yanaijie@huawei.com>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
上级 dd2fe236
......@@ -90,6 +90,8 @@ enum gcry_mpi_format {
};
MPI mpi_read_raw_data(const void *xbuffer, size_t nbytes);
int mpi_key_length(const void *xbuffer, unsigned int ret_nread,
unsigned int *nbits_arg, unsigned int *nbytes_arg);
MPI mpi_read_from_buffer(const void *buffer, unsigned *ret_nread);
int mpi_fromstr(MPI val, const char *str);
MPI mpi_scanval(const char *string);
......
......@@ -79,22 +79,41 @@ MPI mpi_read_raw_data(const void *xbuffer, size_t nbytes)
}
EXPORT_SYMBOL_GPL(mpi_read_raw_data);
MPI mpi_read_from_buffer(const void *xbuffer, unsigned *ret_nread)
int mpi_key_length(const void *xbuffer, unsigned int ret_nread,
unsigned int *nbits_arg, unsigned int *nbytes_arg)
{
const uint8_t *buffer = xbuffer;
unsigned int nbits, nbytes;
MPI val;
unsigned int nbits;
if (*ret_nread < 2)
return ERR_PTR(-EINVAL);
if (ret_nread < 2)
return -EINVAL;
nbits = buffer[0] << 8 | buffer[1];
if (nbits > MAX_EXTERN_MPI_BITS) {
pr_info("MPI: mpi too large (%u bits)\n", nbits);
return ERR_PTR(-EINVAL);
return -EINVAL;
}
nbytes = DIV_ROUND_UP(nbits, 8);
if (nbits_arg)
*nbits_arg = nbits;
if (nbytes_arg)
*nbytes_arg = DIV_ROUND_UP(nbits, 8);
return 0;
}
EXPORT_SYMBOL_GPL(mpi_key_length);
MPI mpi_read_from_buffer(const void *xbuffer, unsigned *ret_nread)
{
const uint8_t *buffer = xbuffer;
unsigned int nbytes;
MPI val;
int ret;
ret = mpi_key_length(xbuffer, *ret_nread, NULL, &nbytes);
if (ret < 0)
return ERR_PTR(ret);
if (nbytes + 2 > *ret_nread) {
pr_info("MPI: mpi larger than buffer nbytes=%u ret_nread=%u\n",
nbytes, *ret_nread);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册