ec_ameth: clean up eckey_{pub,priv}_encode()
authortb <tb@openbsd.org>
Mon, 21 Aug 2023 09:52:30 +0000 (09:52 +0000)
committertb <tb@openbsd.org>
Mon, 21 Aug 2023 09:52:30 +0000 (09:52 +0000)
commit2b293404fc7806435b127a250d5d80fa764f26d5
treecc63608df73311465201d9eed97a9720016106b2
parentfa6120e046e066dfb69c15252b987bcb455de956
ec_ameth: clean up eckey_{pub,priv}_encode()

Factor eckey_param_free() out of eckey_pub_encode(). ASN1_OBJECT_free()
is not actually needed. This will be addressed later.

i2o_ECPublicKey() allocates internally if *out == NULL, so no need to do
the two-call dance. Its return value is documented to be <= 0 on error,
which is wrong in the sense that only 0 is returned. Keep using the same
check for <= 0 as everywhere else.

Set of EC_PKEY_NO_PARAMETERS after the poorly named eckey_param2type() to
avoid potential underhanded side effects.

In eckey_priv_encode(), error exits would leak pval was leaked a few times.
Avoid this and simplify using i2d's internal allocation. Reinstate the
flags in a single error path.

ok jsing
lib/libcrypto/ec/ec_ameth.c