I do this:
FILE* f_cert = fopen("cert", "rb");
X509* x_cert = NULL;
PEM_read_X509(f_cert, &x_cert, NULL, NULL);
...
now I want to read that "cert" file myself, and use PEM_read_bio_X509 instead of PEM_read_X509. So, if I already have these variables:
const char cert_data[] = {....};
const int sert_data_size = 123;
how do I init BIO, pass it to PEM_read_bio_X509 and free the temp bio?
Here is a sample code:
const char cert_data[] = {....};
const int cert_data_size = sizeof(cert_data);
BIO *bio = NULL;
X509* x_cert = NULL;
// Create a read-only BIO backed by the supplied memory buffer
bio = BIO_new_mem_buf((void*)cert_data, cert_data_size);
PEM_read_bio_X509(bio, &x_cert, NULL, NULL);
...
// Cleanup
BIO_free(bio);
Note: the supplied data is read directly from the supplied buffer: it is not copied first, so the supplied area of memory must be unchanged until the BIO is freed.
See OpenSSL documentation on the memory BIO for reference.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With