在OpenSSL(SSL_CTX)中访问EVP_CIPHER_CTX和GCM128_CONTEXT

问题描述 投票:0回答:0

目前有没有一种好方法可以通过已建立的连接(例如,通过 SSL_CTX、SSL_SESSION 等)通过 SSL、EVP 等 API 访问 openssl 3.1 中的 EVP_CIPHER_CTXGCM128_CONTEXT

我的问题是,如果我想获得

GCM128_CONTEXT
,我必须首先与 EVP_AES_GCM_CTX 进行交互。这是一个问题,因为这种类型只能在内部访问,而且我不认为复制结构定义是解决此问题的干净方法。
GCM128_CONTEXT
也可用于非内部代码,因为它是在 “公共”头文件 中定义的。 (在这种情况下,公开意味着它在构建时输出到包含目录,抱歉我想不出更好的词)这对我来说是一个指示,它可以在没有
EVP_AES_GCM_CTX
的情况下使用。

也许相关问题:

其他背景

在查看 Openssl 文档时,我找不到从当前

EVP_CIPHER_CTX
或外部
SSL_CTX
获取
SSL_SESSION
的好方法。在内部,它们可以通过 ssl_local.h 引用。我希望有一种无需依赖内部方法的方法。

获取

GCM128_CONTEXT
的解决方案是简单地复制结构体定义并像这样获取
EVP_AES_GCM_CTX
并简单地访问
GCM128_CONTEXT
:

https://github.com/openssl/openssl/blob/fbd23b929609c0b2fe22da97ac349fae5a385027/crypto/evp/e_aes.c#L227

EVP_CIPHER_CTX *ctx; // Get this from somewhere
EVP_AES_GCM_CTX *gctx = (EVP_AES_GCM_CTX *)EVP_CIPHER_CTX_get_cipher_data(ctx);
gctx->gcm; // This is the GCM128_CONTEXT

我期待类似这样的事情:

  1. 设置
    SSL_CTX
    并启动SSL连接(握手完成)
  2. 获取当前使用的
    EVP_CIPHER_CTX
  • 如果在握手期间我们没有选择 AES_GCM 模式中止
  1. GCM128_CONTEXT
     获取 
    EVP_CIPHER_CTX

我可以编写一些内部 Openssl 代码。我的主要问题是我不想复制

EVP_AES_GCM_CTX
结构和后续定义。

c api struct openssl libraries
© www.soinside.com 2019 - 2024. All rights reserved.