如何解决错误?

时间:2018-03-07 17:28:42

标签: aes-gcm

我编写以下代码 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?

1 个答案:

答案 0 :(得分:1)

文字EVP_CTRL_AEAD_SET_IVLEN是OpenSSL 1.1版中的新功能。这与您正在使用的源代码一致,该源代码来自OpenSSL存储库的 master 分支,其中正在进行版本1.1开发。但是,您的系统的OpenSSL标头适用于某些早期版本的OpenSSL,并且这些标头未定义EVP_CTRL_AEAD_SET_IVLEN。要修复,您需要:

  • 在您的系统上安装OpenSSL 1.1并告诉C编译器在编译该程序时使用其头文件(使用-I选项指定1.1头的位置)并链接1.1库(使用-L选项指定1.1库的位置)

或:

  • 修改程序源以仅使用系统上安装的OpenSSL版本中可用的接口

可能的第三种方法是下载与您系统上的OpenSSL版本兼容的演示程序版本。不幸的是,在这种情况下不起作用,因为OpenSSL存储库中1.1之前的版本不存在特定程序。