p==0 || prv->-6ren">
gpt4 book ai didi

c - 错误 : "invalid use of incomplete type ‘RSA {aka struct rsa_st}" in OpenSSL 1. 1.0

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:42 27 4
gpt4 key购买 nike

我有旧代码是为了链接旧版本的 openssl 而编写的。此代码的一部分从 PEM 文件加载 key ,并尝试使用以下代码了解此 key 是私钥还是公钥:

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) ) {
^~

我知道对结构的私有(private)成员的直接访问被替换为一个函数,但我很难弄清楚那是哪个函数。

最佳答案

crypto.cpp:158:13: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’
if( (prv->p==0 || prv->q==0) ) {
^~

如您所知,OpenSSL 1.1.0 改变了许多结构成员的可见性。您不能再直接访问成员。相反,您必须使用 getter 和 setter 函数。

尝试 RSA_get0_factors . get0 表示引用计数递增。不要BN_free它们。

void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q);

如果代码支持多个版本的 OpenSSL,那么您将需要一个保护程序,因为 RSA_get0_factors 适用于 OpenSSL 1.1.0 及更高版本。也许像下面这样。另见 OPENSSL_VERSION_NUMBER man page .

#include <openssl/opensslv.h>

#if OPENSSL_VERSION_NUMBER < 0x10100000L

/* OpenSSL 1.0.2 and below (old code) */

#else

/* OpenSSL 1.1.0 and above (new code) */

#endif

关于c - 错误 : "invalid use of incomplete type ‘RSA {aka struct rsa_st}" in OpenSSL 1. 1.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41348281/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com