我有舊的代碼被寫入鏈接與舊版本的openssl。這段代碼的部分負荷從PEM文件的關鍵,並試圖瞭解這個鍵是私人或公共密鑰,通過使用下面的代碼:錯誤:OpenSSL 1.1.0中的「使用不完整類型」RSA {aka struct rsa_st}「
if((prv->p==0 || prv->q==0)) {
// This is not a private key!
throw error("No private key for decryption");
}
與OpenSSL的最新版本,此(理所當然)不能編譯:
crypto.cpp: In function ‘key* decrypt_header(file_t, RSA*)’:
crypto.cpp:158:13: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’
if((prv->p==0 || prv->q==0)) {
^~
我明白到結構的私有成員直接訪問與功能所取代,但我有一個很難搞清楚哪些功能是。
感謝。任何想法,我應該找到這個沒有重新學習openssl? –
@ShacharShemesh - 我認爲你必須忍受它...... [1.1.0更改日誌](https://www.openssl.org/news/changelog.html)指出一堆結構是私有的。由於需要替換,我查看了在線的[OpenSSL手冊頁](https://www.openssl.org/docs/manpages.html),查找了獲取「p」和/或「q」的RSA函數'。我從[OpenSSL手冊頁]開始(https://www.openssl.org/docs/manpages.html),鑽入1.1.0,鑽入Crypto,然後搜索***'RSA_' ***。隨着時間的推移,OpenSSL wiki可能會在其示例中累積新代碼。 – jww
'get0'和'get1'事物已經存在了一段時間。當你開始在Valgrind下追逐問題時,你通常會很早就知道這一點(並且很難)。你會想知道爲什麼當你調用'get1'函數時發生泄漏,或者你會通過'get0'函數釋放某些東西來使用double free來分段錯誤。我指出'get0'和'get1'來拯救別人的麻煩。有人會偶然發現這篇文章,並有一個「哦,狗屎」的時刻... – jww