我这样做:
FILE* f_cert = fopen("cert", "rb");
X509* x_cert = NULL;
PEM_read_X509(f_cert, &x_cert, NULL, NULL);
...
现在我想自己读取“cert”文件,并使用PEM_read_bio_X509而不是PEM_read_X509。 所以,如果我已经有了这些变量:
const char cert_data[] = {....};
const int sert_data_size = 123;
如何启动BIO,将其传递给PEM_read_bio_X509并释放临时生物?
答案 0 :(得分:5)
以下是示例代码:
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);
注意:提供的数据直接从提供的缓冲区中读取:它不会先被复制,因此在释放BIO之前,所提供的内存区域必须保持不变。