Загрузка закрытого ключа RSA из памяти с использованием libxmlsec - PullRequest
1 голос
/ 07 апреля 2010

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

Мой тест закрытый ключ не имеет парольной фразы, поэтому я решил пока не использовать обратные вызовы.

Кто-то уже делал что-то подобное? Ребята, вы видите что-нибудь, что я мог бы изменить / протестировать, чтобы продвинуться в решении этой проблемы?

Я только что обнаружил библиотеку вчера, поэтому я мог упустить что-то очевидное здесь; Я просто не вижу этого.

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 08 апреля 2010

Я изменил формат 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
);

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

...