'HMAC_CTX'类型不完整
'HMAC_CTX' has incomplete type
我正在尝试在 Fedora 31 上编译一个C++项目,但收到此错误:
[ 66%] Building CXX object proxy_ws/CMakeFiles/proxy_lws.dir/proxy_lws.cpp.o
In file included from /vagrant/include/libwebsockets.h:600,
from /vagrant/proxy_ws/proxy_lws_utils.hpp:12,
from /vagrant/proxy_ws/proxy_lws.cpp:18:
/vagrant/include/libwebsockets/lws-genhash.h:80:18: error: field ‘ctx’ has incomplete type ‘HMAC_CTX’ {aka ‘hmac_ctx_st’}
80 | HMAC_CTX ctx;
| ^~~
In file included from /usr/include/openssl/crypto.h:25,
from /usr/include/openssl/comp.h:16,
from /usr/include/openssl/ssl.h:17,
from /vagrant/include/libwebsockets.h:250,
from /vagrant/proxy_ws/proxy_lws_utils.hpp:12,
from /vagrant/proxy_ws/proxy_lws.cpp:18:
/usr/include/openssl/ossl_typ.h:104:16: note: forward declaration of ‘HMAC_CTX’ {aka ‘struct hmac_ctx_st’}
104 | typedef struct hmac_ctx_st HMAC_CTX;
| ^~~~~~~~~~~
关于如何解决它的任何想法?
我假设您使用的是最新版本的openSSL库。
看看这个: https://wiki.openssl.org/index.php/OpenSSL_1.1.0_Changes
第一行指出,openSSL 更新 API 的目标是使结构更加"不透明"。因此,您不能直接使用hmac_ctx_st。
在上面提供的链接中进一步向下滚动,您将看到以下内容:
应用程序代码现在必须使用指针,并且无法分配对象 直接在堆栈上。例如,如果旧代码确实如此:
BN_CTX ctx;
您现在必须执行以下操作:
BN_CTX *ctx; ctx = BN_CTX_new(); [...] BN_CTX_free(ctx);
所以这是你问题的起点。您很可能需要将 ctx 声明为指针并在堆上分配内存。
但是请注意,您可能会遇到更多问题。鉴于更新库的整个前提是提高安全性,您现在必须通过"getters"和"setters"操作该结构中的数据。
相关文章:
- 使用crypto++的HMAC解密植物文本
- 将const指针(EVP_MD)保存到变量中,以将其重新使用为类方法(HMAC)
- 使用OpenSSL的SHA 512 HMAC消息身份验证的问题
- SHA256 HMAC使用OpenSL 1.1不编译
- C++ OPEN SSL 库 HMAC 功能返回值每次运行时都不相同
- 自行编写的 HMAC 函数,无法正常工作
- 是否有可能使用wincrypt进行HMAC
- 使用加密API C/C++的HMAC
- HMAC在Java和C++中消化不同
- 未定义的引用EVP_sha1、HMAC、Id 返回 1 个退出状态
- Arduino SHA1-HMAC 和 base64 编码与 Python 之间的问题
- 如何在HMAC-SHA1 Crypto++实现中使用自定义密钥
- QCA-OSSL 插件未加载.显示错误:不支持 HMAC(SHA1)
- HMAC on Mountain lion OSX 10.8.3 EXC_CRASH
- Java Mac HMAC vs C++ OpenSSL hmac
- HMAC SHA256 in C++ (DynamoDB)
- 我的代码中的HMAC-SHA512错误
- HMAC-SHA1不返回期望的哈希值