2014-01-08 42 views
4

我這樣做:從PEM_read_X509切換到PEM_read_bio_X509(基礎,以生物輸入文件)

FILE* f_cert = fopen("cert", "rb"); 
X509* x_cert = NULL; 
PEM_read_X509(f_cert, &x_cert, NULL, NULL); 
... 

現在我想讀的是「證書」的文件我自己,而不是使用PEM_read_X509 PEM_read_bio_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); 

注意:所提供的數據被直接從提供的緩衝器讀出:它不是首先被複制,所以直到BIO被釋放的存儲器所提供的面積必須保持不變。

請參閱OpenSSL documentation on the memory BIO以供參考。