我编写以下代码 https://github.com/openssl/openssl/blob/master/demos/evp/aesgcm.c
我编译它给出了这个命令: cc aesg.c -lmcrypt 我收到了这个错误:
aesg.c:66:30: error: ‘EVP_CTRL_AEAD_SET_IVLEN’ undeclared (first use in this function)
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, sizeof(gcm_iv), NULL);
^
aesg.c:66:30: note: each undeclared identifier is reported only once for each function it appears in
aesg.c:79:30: error: ‘EVP_CTRL_AEAD_GET_TAG’ undeclared (first use in this function)
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, 16, outbuf);
^
aesg.c: In function ‘aes_gcm_decrypt’:
aesg.c:98:30: error: ‘EVP_CTRL_AEAD_SET_IVLEN’ undeclared (first use in this function)
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, sizeof(gcm_iv), NULL);
^
aesg.c:109:30: error: ‘EVP_CTRL_AEAD_SET_TAG’ undeclared (first use in this function)
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, sizeof(gcm_tag),
^
What will be the problem?
答案 0 :(得分:1)
文字EVP_CTRL_AEAD_SET_IVLEN
是OpenSSL 1.1版中的新功能。这与您正在使用的源代码一致,该源代码来自OpenSSL存储库的 master 分支,其中正在进行版本1.1开发。但是,您的系统的OpenSSL标头适用于某些早期版本的OpenSSL,并且这些标头未定义EVP_CTRL_AEAD_SET_IVLEN
。要修复,您需要:
-I
选项指定1.1头的位置)并链接1.1库(使用-L
选项指定1.1库的位置)或:
可能的第三种方法是下载与您系统上的OpenSSL版本兼容的演示程序版本。不幸的是,在这种情况下不起作用,因为OpenSSL存储库中1.1之前的版本不存在特定程序。