首页 > 解决方案 > 如何更新 EVP_CIPHER_CTX 类型的 ctx 的 IV(打开 ssl 1.1.0)

问题描述

我正在将我的 Openssl 包升级到 1.1.0 系列。但是,由于 Openssl 使许多结构变得不透明,我无法更新特定 ctx 的 iv。

EVP_CIPHER_CTX *ctx; // This was EVP_CIPHER_CTX ctx; for version 1.0.x series

EVP_DecryptInit(ctx, cipher, keydata, iv);

对于特定情况,我需要更新 iv。在早期版本的 openssl 1.0.x 系列中,我用

memcpy(nextIv, &ctx.iv, DES3_BLOCK_SIZE);

但是在将其更改为

memcpy(nextIv, ctx->iv, DES3_BLOCK_SIZE);

我收到编译器错误

错误:取消指向不完整类型“EVP_CIPHER_CTX”的指针 {aka 'struct evp_cipher_ctx_st'} memcpy(nextIv, ctx->iv, DES3_BLOCK_SIZE);

我认为这是因为结构已变得不透明。

我可以用什么替换memcpy语句来更新 ctx 的 iv 以消除错误?

标签: openssl

解决方案


在 OpenSSL 1.1.0 之后,您可以像这样访问 ctx->iv。

const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx);
unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx);

推荐阅读