<div dir="ltr"><div>I'm struggling to understand how EVP_default_properties_is_fips_enabled() works. I cannot get this function to return nonzero unless I first call either EVP_default_properties_enable_fips() or EVP_set_default_properties(), even when the config file sets default_properties to enable fips.</div><div><br></div><div>Also, the return value of this function doesn't seem to have any effect on which provider gets selected (which I think is what issue #11594 describes?).<br></div><div><br></div><div>My config file has the following:</div><div><br></div><div style="margin-left:40px"><b><span style="color:rgb(0,0,255)"><span style="font-family:monospace">[openssl_init]<br>providers = provider_sect<br>alg_section = alg_sect</span></span></b></div><div style="margin-left:40px"><b><span style="color:rgb(0,0,255)"><span style="font-family:monospace"><br></span></span></b></div><div style="margin-left:40px"><b><span style="color:rgb(0,0,255)"><span style="font-family:monospace">[provider_sect]<br>fips = fips_sect<br>default = default_sect</span></span></b></div><div style="margin-left:40px"><b><span style="color:rgb(0,0,255)"><span style="font-family:monospace"><br></span></span></b></div><div style="margin-left:40px"><b><span style="color:rgb(0,0,255)"><span style="font-family:monospace">[default_sect]<br>activate = 1</span></span></b></div><div style="margin-left:40px"><b><span style="color:rgb(0,0,255)"><span style="font-family:monospace"><br></span></span></b></div><div style="margin-left:40px"><b><span style="color:rgb(0,0,255)"><span style="font-family:monospace">[alg_sect]<br>default_properties = fips=yes</span></span></b></div><div style="margin-left:40px"><b><span style="color:rgb(0,0,255)"><span style="font-family:monospace"><br></span></span></b></div><div style="margin-left:40px"><b><span style="color:rgb(0,0,255)"><span style="font-family:monospace">.include /path/to/fips.cnf</span></span></b></div><div><br></div><div>I understand this to mean both the default provider and the fips provider will be loaded into the default context, and both of these providers will be activated. I also see that:</div><div><br></div><div style="margin-left:40px"><span style="font-family:monospace"><b><span style="color:rgb(0,0,255)">EVP_MD_fetch(NULL, "sha256", NULL);</span></b></span><br></div><div><br></div><div>returns a pointer which EVP_MD_provider() confirms as being from the fips provider (as expected). Changing this to "fips=no" in the config file results in EVP_MD_fetch() returning EVP_MD from the default provider, again as expected. However, in both cases, EVP_default_properties_is_fips_enabled() always returns zero. I don't see anything in #11594 that would explain this.</div><div><br></div><div>Calling EVP_default_properties_enable_fips(NULL, 1) results in EVP_default_properties_is_fips_enabled() returning 1, but this does not appear to override the fips=no from the config file during EVP_MD_fetch() (which is what I believe #11594 describes).</div><div><br></div><div>Is the result of EVP_default_properties_is_fips_enabled() supposed to take into account the default properties specified in the config file? I don't see it doing that. Also, regarding #11594, if default properties are currently still broken, why do those in the config appear to work properly?<br></div><div><br></div><div>And finally the burning question: Any ETA on a fix? :-) :-) :-)<br></div><div><br></div><div><br></div><div>Thanks,</div><div>Tom.III</div><div><br></div></div>