Wockenfuß wrote:
Hi all,

I have written a class in C++ to easily access functions from OpenSSL from our 
products.
In the constructor of my class I do the following lines of code:

        threadSetup();

        OpenSSL_add_all_digests();
        OpenSSL_add_all_ciphers();
        OpenSSL_add_all_algorithms();
        
        ERR_load_PKCS7_strings();
        ERR_load_X509_strings();
        ERR_load_crypto_strings();
        ERR_load_ERR_strings();

        RAND_seed( rnd_seed, sizeof(rnd_seed) );

        ENGINE_load_builtin_engines();

In the destructor I do the following:

        ENGINE_cleanup();
        RAND_cleanup();
        CRYPTO_cleanup_all_ex_data();
        ERR_free_strings();
        threadCleanUp();

This leads to a memory leak, because of the OpenSSL_add_all_...-functions in the constructor. In the online manual I've read that I need to call
        EVP_cleanup();

in the destructor too. So if I do this all memory leaks are gone, but the 
function

        X509_verify_cert()

fails with the error 'certificate signature failure '.
If I remove the EVP_cleanup() from the destructor the function works as fine as 
it should work.

Could please anyone give me a hint what could be wrong?
The destructor is called at least once before the constructor is called again 
and X509_verify_cert is called.


Ideally these steps should be done once per program life-time; constructor steps at start-up, destructor steps at program exit (say in an environment where the OS doesn't clean up the program's memory).

Doing it per-object creation is unnecessary and error prone (as maybe the case here). I believe it should be possible to do it once per program lifetime without changing your C++ class too much.

-jb
--
Real computer scientists don't comment their code.  The identifiers are
so long they can't afford the disk space.
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to