On Mon, Dec 05, 2022 at 11:31:18AM -0800, Thomas Dwyer III wrote: > Why does EVP_get_digestbyname("md4") return non-NULL if the legacy provider > isn't loaded? Similarly, why does it return non-NULL for "md5" after doing > EVP_set_default_properties(NULL, "fips=yes")? This seems unintuitive. Legacy > code that does not know about EVP_MD_fetch() checks the return value of > EVP_get_digestbyname(). Isn't that where the error should be detected? Why > let it get all the way to BIO_set_md() (or EVP_DigestInit() or whatever) > before the error is detected? To do so would introduce a time-of-check/time-of-use race, as the set of providers available may change in the intervening period. -Ben