Загрузка закрытого ключа RSA из памяти с помощью libxmlsec

StackOverflow https://stackoverflow.com/questions/2594772

Вопрос

В настоящее время я использую 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
);

И с тех пор все работает: звонок больше не застрял.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top