On Mon, Feb 18, 2013, Nick wrote:

> On Mon, 2013-02-18 at 13:22 +0100, Dr. Stephen Henson wrote:
> > Here's what's happening in detail. If you pass a non-NULL pointer for
> > the
> > second parameter it will attempt to reuse the structure.
> > 
> > In the case of the RSA structure the outer (RSA *) is allocated via
> > OPENSSL_malloc and so are many internal structures (e.g. BIGNUM key
> > components), which it will also attempt to reuse. So all the internals
> > need to
> > be initialised to something sensible too or it may attempt to free up
> > unintialised pointers with unpredictable results.
> > 
> 
> That makes perfect sense, thank you.
> 
> > Where possible applications shouldn't mess around at this level. There
> > are
> > utility functions of the form X509_new (and RSA_new for (RSA *)) that
> > allocate
> > and initialise the structures correctly.
> > 
> > So you could do something like this:
> > 
> > RSA *prsa1, *prsa2;
> > 
> > prsa1 = RSA_new();
> > 
> > prsa2 = d2i_RSAPrivateKey_fp(pFile, &prsa1);
> > 
> > But there isn't really any point as you can just do:
> > 
> > rsa = d2i_RSAPrivateKey_fp(pFile, NULL);
> > 
> > Which will call RSA_new() internally.
> > 
> 
> I figured the same and took this approach too.
> 
> Can you confirm the same logic applies to d2i_X509_fp?
> 

Yes, it applies to any function of the form d2i_<something>_fp.

Steve.
--
Dr Stephen N. Henson. OpenSSL project core developer.
Commercial tech support now available see: http://www.openssl.org
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to