Reimplement {EVP_CIPHER,EVP_MD,OBJ_NAME}_do_all{,_sorted}(3)
authortb <tb@openbsd.org>
Sat, 13 Jan 2024 11:08:39 +0000 (11:08 +0000)
committertb <tb@openbsd.org>
Sat, 13 Jan 2024 11:08:39 +0000 (11:08 +0000)
commit4f2938160a2631bf0980365ef58e1ca282f63c34
tree973387ef810ffc3fa0a6f7033494e4d6a235f5f5
parent3eb32604ea4c2a5ea6ddeb68cfd1dfd5bbf5be91
Reimplement {EVP_CIPHER,EVP_MD,OBJ_NAME}_do_all{,_sorted}(3)

This implements the do_all API by simple loops over the tables of
digests and ciphers. Since some ciphers are only available on some
platforms, we need to skip them if necessary. We use loops in each
of the functions rather the convoluted way of reducing some of the
loops to others.

Since the tables are sorted, as ensured by regress, both do_all() and
do_all_sorted() walk the lists in order. In particular, we no longer
need to allocate to be able to sort hash tables by name on the fly in a
void function that may end up doing nothing because allocation failed.
We still need to do an unchecked OPENSSL_init_crypto() call. But that's
what prayer and clean living are there for (as beck put it).

The OBJ_NAME API is completely misnamed. It has little to do with objects
and a lot to do with EVP. Therefore we implement what will remain from
its saner replacement in the evp directory, i.e., evp_names.c.

ok jsing
lib/libcrypto/evp/evp_names.c
lib/libcrypto/evp/names.c
lib/libcrypto/objects/o_names.c