Implement and use a do_cipher() wrapper
authortb <tb@openbsd.org>
Sat, 16 Dec 2023 09:46:06 +0000 (09:46 +0000)
committertb <tb@openbsd.org>
Sat, 16 Dec 2023 09:46:06 +0000 (09:46 +0000)
commit48c99b6807dc39a5ab21ba284fbb957ecddbecba
tree615b03e921f913090f1c678f48de5825aa18de10
parentf73a2a9759dfccecc4f2bfef87dc2b09b2f9dd8f
Implement and use a do_cipher() wrapper

Instead of using five different idioms for eight callers of the do_cipher()
method in EVP_{Decrypt,Encrypt}{Update,Final_ex}(), wrap the API insanity
in an evp_cipher() function that calls do_cipher() as appropriate depending
on the EVP_CIPH_FLAG_CUSTOM_CIPHER being set or not. This wrapper has the
usual OpenSSL calling conventions.

There is one complication in EVP_EncryptUpdate() in the case a previous
call wrote only a partial buffer. In that case, the evp_cipher() call is
made twice and the lengths have to be added. Add overflow checks and only
set outl (the number of bytes written) to out on success.

ok jsing
lib/libcrypto/evp/evp_enc.c