2010-04-07 65 views
1

我目前在我的C++軟件中使用libxmlsec,我嘗試從內存中加載RSA私鑰。爲此,我搜索了谷歌API,發現this function使用libxmlsec從內存中加載RSA私鑰

它採用二進制數據,大小,格式字符串和幾個PEM回調相關的參數。

當我調用該函數時,它只是使用了100%的CPU時間並且從不返回。非常討厭,因爲我無法找出哪裏出了什麼問題。

這是我的代碼:

d_xmlsec_dsig_context->signKey = 
    xmlSecCryptoAppKeyLoadMemory(
     reinterpret_cast<const xmlSecByte*>(data), 
     static_cast<xmlSecSize>(datalen), 
     xmlSecKeyDataFormatBinary, 
     NULL, 
     NULL, 
     NULL 
    ); 

dataconst char*指向我的RSA密鑰的原始字節(使用i2d_RSAPrivateKey(),從OpenSSL的)和datalen大小data

我的測試私鑰沒有密碼,所以我決定暫時不使用回調。

有人已經做過類似的事情嗎?你們看到有什麼我可以改變/測試來解決這個問題嗎?

我剛剛在昨天發現了這個庫,所以我可能會錯過這裏的一些明顯的東西;我只是看不到它。

非常感謝您的幫助。

回答

0

我改變了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 
); 

從那時起,一切正常:通話並不再會被卡住。