I've been using openssl-fips for a couple of years.  I'm looking to 
upgrade to 2.0 because of the slow (~10 seconds) integrity check on my 
platforms when using version 1.2 when I call "FIPS_mode_set()".

I've got the FIPS canister built, and I've got the openssl 1.0.1c 
libraries all compiled, and all of my apps are now linking just fine. 
Unfortunately there are some runtime issues I'm seeing, seemingly related 
to the EVP_MC_CTX initialization (or lack thereof) prior to calling 
EVP_DigestInit.  The man page says that EVP_DigestInit will initialize the 
input EVP_MD_CTX structure.  In the openssl source code that is indeed the 
case -- EVP_DigestInit immediately calls "EVP_MD_CTX_init" and everything 
is happy.

However, when I'm using the new 2.0 openssl FIPS module, it seems to me 
like it doesn't do a similar initialization -- it's probably calling 
FIPS_digestinit in the background due to the re-definition of 
EVP_DigestInit to FIPS_digestinit in openssl/fipssyms.h or something. Most 
apps (for instance, openssh) depend on this CTX initialization, and 
without it they tend to seg fault randomly on me.  The code in the apps 
will often do something like this -- creating a CTX structure on the stack 
and using it immediately:

        EVP_MD_CTX md;
        EVP_DigestInit(&md, kex->evp_md);

Again, this works fine with the non-FIPS version of openssl, and even 
worked fine in older FIPS openssl (version 1.2).  However, now I get seg 
faults.

I put together a patch for openssh that initializes every EVP_MD_CTX right 
after creation (using the EVP_MD_CTX_init function), and now openssh works 
just great!  All of my seg faults in openssh have gone away.  However, 
I've got a pile of other apps (python, php, net-snmmp, etc) which are also 
skipping the call to "EVP_MD_CTX_init".  I don't think it's appropriate 
(or maintainable) for me to patch every single app that ever uses an 
EVP_MD_CTX.  What have other users been doing to solve this problem?

And finally, I don't know if this question is more well suited for the 
-dev or the -users mailing list, so I put it in -users and expect that it 
can be copied to -dev if needed.

Thanks in advance for any help!

Kind Regards,
Brian Aanderud





Reply via email to