Я пытаюсь использовать функцию PEM_read_bio для получения данных из файла.
Версия SSLeay, которую мы используем, относится к 1997 году, поэтому документация немного тонкая на местах. К счастью, в этом случае кажется, что здесь задокументирована соответствующая функция: https://www.openssl.org/docs/man1.1.0/crypto/PEM_read_bio.html
Я изначально пробовал это:
char ** names;
char ** headers;
unsigned char ** data;
long len;
BIO *in = BIO_new_file("C:\\filename.txt", "r");
if (!in)
{
// error
}
else
{
int result = PEM_read_bio(in, names, headers, data, &len);
}
BIO_free(in);
OPENSSL_free(names);
OPENSSL_free(headers);
OPENSSL_free(data);
Однако это приводит к ошибке проверки во время выполнения: The variable 'names' is being used without being initialized.
В документации упоминается OPENSSL_malloc( num )
, используемая для инициализации памяти, но в ней не упоминается, делает ли это это за кадром, или пользователь делает это.
OPENSSL_malloc
похоже на использование в malloc C, но как мы должны знать, сколько памяти нужно выделить заранее, перед чтением файла?
В начале я попробовал следующее:
char ** names = reinterpret_cast<char **>(OPENSSL_malloc(2));
char ** headers = reinterpret_cast<char **>(OPENSSL_malloc(2));
unsigned char ** data = reinterpret_cast<unsigned char **>(OPENSSL_malloc(2));
long len;
Это приводит к явно случайным данным.