Загрузка закрытого ключа RSA из памяти с помощью libxmlsec
Вопрос
В настоящее время я использую libxmlsec. в мое программное обеспечение C ++, и я стараюсь загрузить закрытый ключ RSA из памяти. Чтобы сделать это, я искал через API и нашел Эта функция.
Требуется двоичные данные, размер, строка формата и несколько параметров связанных с обратным вызовом PEM.
Когда я называю функцию, она просто застряла, использует 100% времени ЦП и никогда не возвращается. Совершенно раздражает, потому что у меня нет способа выяснить, что не так.
Вот мой код:
d_xmlsec_dsig_context->signKey =
xmlSecCryptoAppKeyLoadMemory(
reinterpret_cast<const xmlSecByte*>(data),
static_cast<xmlSecSize>(datalen),
xmlSecKeyDataFormatBinary,
NULL,
NULL,
NULL
);
data
это const char*
указывая на сырые байты моего ключа RSA (используя i2d_RSAPrivateKey()
, от Openssl) а также datalen
размер data
.
Мой тестовое задание Частный ключ не имеет парольной фразы, поэтому я решил не использовать обратные вызовы на данный момент.
Кто-то уже сделал что-то подобное? Вы, ребята, видите, что я могу изменить / тестировать, чтобы выдержать эту проблему?
Я только что обнаружил библиотеку вчера, поэтому я мог бы пропустить что-то очевидное здесь; Я просто не вижу этого.
Большое спасибо за Вашу помощь.
Решение
Я изменил формат data
к PEM, используя функцию OpenSSL PEM_write_bio_RSAPrivateKey()
и изменил третий аргумент на звонок xmlSecCryptoAppKeyLoadMemory()
Так что это соответствует новому формату.
Новый код:
d_xmlsec_dsig_context->signKey =
xmlSecCryptoAppKeyLoadMemory(
reinterpret_cast<const xmlSecByte*>(data), // data is now in PEM format
static_cast<xmlSecSize>(datalen),
xmlSecKeyDataFormatPem, // Updated
NULL,
NULL,
NULL
);
И с тех пор все работает: звонок больше не застрял.