OpenSSL解除引用指向不完整类型的指针

时间:2013-06-01 23:34:14

标签: c ssl struct openssl

我正在使用OpenSSL库。我试图访问struct engine_st的rsa_meth属性。做的代码如下:

  

则将ctx-> client_cert_engine-> rsa_meth

其中ctx的类型为SSL_CTX *。

我试图包含所有必要的头文件,但它还是给了我:

dereferencing pointer to incomplete type.

虽然,如果我删除rsa_meth,那么它可以正常工作。

3 个答案:

答案 0 :(得分:2)

engine_st(client_cert_engine是什么)是一个内部结构定义(它在crypto / engine / eng_int.h中),并且不在公共头中公开。这(可能)是为了防止在更改结构时出现二进制兼容性问题。而不是尝试取消引用,使用engine.h标头中定义的getter:

 const char *ENGINE_get_id(const ENGINE *e);
 const char *ENGINE_get_name(const ENGINE *e);
 const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e);
 const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e);
 const ECDH_METHOD *ENGINE_get_ECDH(const ENGINE *e);
 const ECDSA_METHOD *ENGINE_get_ECDSA(const ENGINE *e);
 const DH_METHOD *ENGINE_get_DH(const ENGINE *e);
 const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e);
 const STORE_METHOD *ENGINE_get_STORE(const ENGINE *e);

答案 1 :(得分:0)

这意味着未定义RSA_METH结构。您需要在openssl / rsa.h中包含其定义

请包含openssl / rsa.h或

添加

#include <openssl/rsa.h>

到此代码之前的代码。

答案 2 :(得分:0)

您正在取消引用ctx-&gt; client_cert_engine,它是一个ENGINE *(指向struct engine_st的指针)。

尝试加入<openssl/engine.h>