On Thu, Sep 09, 2004, Smith Baylor wrote:

> A PKCS12 object is encrypted with a shared secret.  When I use  the
> function i2d_PKCS12_fp() to write to a file, it works, but, when I use
> this to store in a BIO and convert this into base64, it does only
> 2/3rds of it.  Why is this?  Any thoughts or pointers?
> 
> Thanks
> 
> 
> 
> On Thu, 9 Sep 2004 08:32:36 -0700, Smith Baylor <[EMAIL PROTECTED]> wrote:
> >         BIO *mbio, *b64bio, *bio;
> > 
> >         mbio = BIO_new(BIO_s_mem());
> >         b64bio = BIO_new(BIO_f_base64());
> >         bio = BIO_push(b64bio, mbio);
> >         int bytes_stored = i2d_PKCS12_bio(bio, p12);
> >         BIO_flush(mbio2);
> > 
> >         BIO_get_mem_data(mbio, (unsigned char *)&p12_data_tmp);
> >         p12_data = (unsigned char*)OPENSSL_malloc(bytes_stored + 1);
> >         strncpy(p12_data, p12_data_tmp, bytes_stored);
> >         p12_data[bytes_stored] = '\0';
> > 
> > bytes_stored gives me 4030 bytes, but, when I try to print or save the
> > p12_data, I am able to get only 3000 bytes and the program stops.
> > What am I doing wrong?
> > 

At least one problem is that you need to call BIO_flush() on the BIO chain
(bio in your example above) not the memory BIO.

Steve.
--
Dr Stephen N. Henson. Email, S/MIME and PGP keys: see homepage
OpenSSL project core developer and freelance consultant.
Funding needed! Details on homepage.
Homepage: http://www.drh-consultancy.demon.co.uk
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to