![](/img/trans.png)
[英]Link error: undefined reference to EVP_CIPHER_CTX_ and EVP_CIPHER_CTX_init
[英]Create EVP_CIPHER_CTX array
我正在使用CentOS 7和OpenSSL v1.1.0。
由於OpenSSL更改了他們的API,因此出現以下錯誤: invalid use of incomplete type struct evp_cipher_ctx_st
。
static void InitAESKey(AES_KEY_CTX* ctx, BYTE* keybytes, int numkeys)
{
BYTE* pBufIdx = keybytes;
for (int i = 0; i < numkeys; i++)
{
OTEXT_AES_KEY_INIT(ctx + i, pBufIdx);
pBufIdx += AES_KEY_BYTES;
}
}
雖然AES_KEY_CTX
和OTEXT_AES_KEY_INIT
是定義的宏:
#define AES_KEY_CTX EVP_CIPHER_CTX
#define OTEXT_AES_KEY_INIT(ctx, buf) { \
EVP_CIPHER_CTX_init(ctx); \
EVP_EncryptInit_ex(ctx, EVP_aes_128_ecb(), NULL, buf, ZERO_IV); \
}
我試圖將宏更改為#define AES_KEY_CTX EVP_CIPHER_CTX*
,但是錯誤仍然存在。
在咨詢了OpenSSL用戶的電子郵件列表之后,我進行了以下更改,以便編譯代碼:
#define AES_KEY_CTX *EVP_CIPHER_CTX;
static void InitAESKey(AES_KEY_CTX* ctx, BYTE* keybytes, int numkeys)
{
BYTE* pBufIdx = keybytes;
for (int i = 0; i < numkeys; i++)
{
EVP_CIPHER_CTX_init(*(ctx + i));
EVP_EncryptInit_ex(*(ctx + i), EVP_aes_128_ecb(), NULL, pBufIdx, ZERO_IV);
pBufIdx += AES_KEY_BYTES;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.