ecdh_cms_encrypt(): tweak wrap_algor construction
authortb <tb@openbsd.org>
Wed, 17 Apr 2024 14:00:17 +0000 (14:00 +0000)
committertb <tb@openbsd.org>
Wed, 17 Apr 2024 14:00:17 +0000 (14:00 +0000)
commit5bb58957e90e2c11565797d3a76b053da665f263
tree1aa9f1afe1f62bc42779c19f187e67bd785f3325
parent7737d5ad4603f7209653cdbf5ca89013081ac467
ecdh_cms_encrypt(): tweak wrap_algor construction

This manually constructs an X509_ALGOR because the (now internal) legacy
interface EVP_CIPHER_param_to_asn1() (which is an unwelcome complication
thanks to RC2) is entirely incompatible with X509_ALGOR_set0() since
the ASN1_TYPE can't be pulled apart nicely (because the ASN1_TYPE API
is incomplete as well).

Once we got this far, we get to DER-encode the inner AlgorithmIdentifier
and set that blob as the parameters of another one. The same variables
are reused of course and needless to say an unchecked X509_ALGOR_set0()
would leak this blob on failure. So fix this by switching to the usual
error checked X509_ALGOR_set0_by_nid().

ok jsing
lib/libcrypto/ec/ec_ameth.c