crypto: rsa - only require output buffers as big as needed.
rhe RSA operations explicitly left-align the integers being written skipping any leading zero bytes, but still require the output buffers to include just enough space for the integer + the leading zero bytes. Since the size of integer + the leading zero bytes (i.e. the key modulus size) can now be obtained more easily through crypto_akcipher_maxsize change the operations to only require as big a buffer as actually needed if the caller has that information. The semantics for request->dst_len don't change. Signed-off-by: Andrew Zaborowski <andrew.zaborowski@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
9cbe21d8f8
commit
457e6f73a1
24
crypto/rsa.c
24
crypto/rsa.c
@ -91,12 +91,6 @@ static int rsa_enc(struct akcipher_request *req)
|
|||||||
goto err_free_c;
|
goto err_free_c;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req->dst_len < mpi_get_size(pkey->n)) {
|
|
||||||
req->dst_len = mpi_get_size(pkey->n);
|
|
||||||
ret = -EOVERFLOW;
|
|
||||||
goto err_free_c;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
m = mpi_read_raw_from_sgl(req->src, req->src_len);
|
m = mpi_read_raw_from_sgl(req->src, req->src_len);
|
||||||
if (!m)
|
if (!m)
|
||||||
@ -136,12 +130,6 @@ static int rsa_dec(struct akcipher_request *req)
|
|||||||
goto err_free_m;
|
goto err_free_m;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req->dst_len < mpi_get_size(pkey->n)) {
|
|
||||||
req->dst_len = mpi_get_size(pkey->n);
|
|
||||||
ret = -EOVERFLOW;
|
|
||||||
goto err_free_m;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
c = mpi_read_raw_from_sgl(req->src, req->src_len);
|
c = mpi_read_raw_from_sgl(req->src, req->src_len);
|
||||||
if (!c)
|
if (!c)
|
||||||
@ -180,12 +168,6 @@ static int rsa_sign(struct akcipher_request *req)
|
|||||||
goto err_free_s;
|
goto err_free_s;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req->dst_len < mpi_get_size(pkey->n)) {
|
|
||||||
req->dst_len = mpi_get_size(pkey->n);
|
|
||||||
ret = -EOVERFLOW;
|
|
||||||
goto err_free_s;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
m = mpi_read_raw_from_sgl(req->src, req->src_len);
|
m = mpi_read_raw_from_sgl(req->src, req->src_len);
|
||||||
if (!m)
|
if (!m)
|
||||||
@ -225,12 +207,6 @@ static int rsa_verify(struct akcipher_request *req)
|
|||||||
goto err_free_m;
|
goto err_free_m;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req->dst_len < mpi_get_size(pkey->n)) {
|
|
||||||
req->dst_len = mpi_get_size(pkey->n);
|
|
||||||
ret = -EOVERFLOW;
|
|
||||||
goto err_free_m;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
s = mpi_read_raw_from_sgl(req->src, req->src_len);
|
s = mpi_read_raw_from_sgl(req->src, req->src_len);
|
||||||
if (!s) {
|
if (!s) {
|
||||||
|
Loading…
Reference in New Issue
Block a user