2014-01-08 1 views
4

Я делаю это:Переход от PEM_read_X509 к PEM_read_bio_X509 (FILE основе для ввода на основе BIO)

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 и освободить темп био?

ответ

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); 

Примечание: в комплект поставки данные считываются непосредственно из прилагаемого буфера: он не копируется во-первых, таким образом, поставляется область памяти должна быть неизменной до тех пор, БИО не освобождается ,

См. OpenSSL documentation on the memory BIO для справки.

Смежные вопросы