Add some documentation to describe the encap/decap requirements

Document the fact that we now require unwrappedlen/wrappedlen to be set
to the size of the unwrapped/wrapped buffers

Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/25522)
This commit is contained in:
Neil Horman 2024-09-27 09:33:35 -04:00 committed by Tomas Mraz
parent 796b2caa9e
commit 1c1223ff53
3 changed files with 20 additions and 3 deletions

View File

@ -31,10 +31,13 @@ key that is used during decapsulation.
The EVP_PKEY_decapsulate() function performs a private key decapsulation
operation using I<ctx>. The data to be decapsulated is specified using the
I<wrapped> and I<wrappedlen> parameters.
If I<unwrapped> is NULL then the maximum size of the output secret buffer
If I<unwrapped> is NULL then the size of the output secret buffer
is written to I<*unwrappedlen>. If I<unwrapped> is not NULL and the
call is successful then the decapsulated secret data is written to I<unwrapped>
and the amount of data written to I<*unwrappedlen>.
and the amount of data written to I<*unwrappedlen>. Note that, if I<unwrappedlen>
is not NULL in this call, the value it points to must be initialised to the length of
I<unwrapped>, so that the call can validate it is of sufficient size to hold the
result of the operation.
=head1 NOTES

View File

@ -41,7 +41,10 @@ unless I<genkeylen> is NULL.
If I<wrappedkey> is not NULL and the call is successful then the
internally generated key is written to I<genkey> and its size is written to
I<*genkeylen>. The encapsulated version of the generated key is written to
I<wrappedkey> and its size is written to I<*wrappedkeylen>.
I<wrappedkey> and its size is written to I<*wrappedkeylen>. Note that if
I<wrappedlen> is not NULL, then the value it points to must initially hold the size of
the I<unwrapped> buffer so that its size can be validated by the call, ensuring
it is large enough to hold the result written to I<wrapped>.
=head1 NOTES

View File

@ -298,6 +298,11 @@ static int rsasve_generate(PROV_RSA_CTX *prsactx,
return 1;
}
/*
* If outlen is specified, then it must report the length
* of the out buffer on input so that we can confirm
* its size is sufficent for encapsulation
*/
if (outlen != NULL && *outlen < nlen) {
ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_OUTPUT_LENGTH);
return 0;
@ -372,6 +377,12 @@ static int rsasve_recover(PROV_RSA_CTX *prsactx,
ERR_raise(ERR_LIB_PROV, PROV_R_BAD_LENGTH);
return 0;
}
/*
* If outlen is specified, then it must report the length
* of the out buffer, so that we can confirm that it is of
* sufficient size to hold the output of decapsulation
*/
if (outlen != NULL && *outlen < nlen) {
ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_OUTPUT_LENGTH);
return 0;