古いバージョンのopensslとリンクするために作成された古いコードがあります。このコードの一部は、PEMファイルから鍵をロードし、このキーは、次のコードを使用することによって、プライベートまたはパブリックキーであるかどうかを理解しようとします。opensslの最新バージョンではエラー: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");
}
を、この(正当)コンパイルされません。
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 Change Log](https://www.openssl.org/news/changelog.html)は、たくさんの構造がプライベートになっていると述べている。交換が必要だったので、私は 'p 'や' q'を取ったものを探しているRSA関数のオンライン[OpenSSL man pages](https://www.openssl.org/docs/manpages.html)を調べました'。私は[OpenSSL man pages](https://www.openssl.org/docs/manpages.html)から始め、1.1.0にドリルダウンし、Cryptoにドリルダウンして、*** 'RSA_' ***を探しました。時間の経過とともに、OpenSSL wikiは新しいコードをその例に蓄積するでしょう。 – jww
'get0'と' get1'はしばらくありました。あなたは、Valgrindのもとで問題を追い始めるときに、早い段階で(そして難しい方法で)学ぶのが普通です。なぜあなたは 'get1'関数を呼び出したときに漏れがあったのか、' get0'関数から何かを自由にして二重の空きを持つことになるでしょう。私は 'get0'と' get1'を指摘し、他人に問題を解決させます。誰かがこのポストでつまずくし、 "オハイオ州のたわごと"の瞬間を持っています... – jww