There are samples on how to do this in the OpenSSL book as well as a rather lengthy discussion on BIO's in general.
Also "BIO_get_mem_ptr()" gives you a pointer to BUF_MEM structure, not a char*. Your compiler should have yelled at you for that.
On Oct 13, 2005, at 12:41 PM, Adam Jones wrote:
Below is the code I am using to try and test the base64 encode in
openssl. I am using rand to generate a binary and then encoding
that to base64. Instead of using a file, I want to use memory to
output the base64 encoded buffer. This code compiles and runs, but
my output buffer is all 0. Any help would be appreciated. What have
I missed?
The variable written does show 16 like it should......help!
#include <iostream>
#include <memory.h>
#include "evp.h"
#include "rand.h"
#include "bio.h"
using namespace std;
int main()
{
BIO *b64;
unsigned char *pbuffer = new unsigned char [16];
unsigned char *pOutput = new unsigned char [100];
int written;
memset(pOutput, '0', 100);
RAND_bytes(pbuffer, 16);
b64 = BIO_new(BIO_f_base64());
written = BIO_write(b64, pbuffer, 16);
cout << written << endl;
BIO_get_mem_ptr(b64, pOutput);
for ( int nLoop = 0; nLoop< 16; nLoop++)
{
cout << pOutput[nLoop];
}
cout << "\n" << endl;
BIO_free_all(b64);
smime.p7s
Description: S/MIME cryptographic signature
