EVP_MD_CTX“错误:'ctx'的存储大小未知”

时间:2017-03-08 03:57:12

标签: c openssl

我的系统是Ubuntu16.04 LTS。当我使用OpenSSL EVP_MD_CTX时,出现此错误。任何人都可以帮助我吗?

CODE

#include <stdio.h>
#include <openssl/evp.h>
#include <openssl/rsa.h>
int main()
{
    int ret,inlen,outlen=0;
    unsigned long e=RSA_3;
    char data[100],out[500];
    EVP_MD_CTX md_ctx, md_ctx2;
    ...
}

ERROR

root@ubuntu:/work/test# gcc evp_openssl_test.c -I/usr/local/include -L/usr/local/lib -lssl -lcrypto -o
evptestevp_openssl_test.c: In function ‘main’:
evp_openssl_test.c:13:19: error: storage size of ‘md_ctx’ isn’t known
    EVP_MD_CTX md_ctx,md_ctx2;

2 个答案:

答案 0 :(得分:9)

您正在使用OpenSSL 1.1.0,这使得此结构(以及许多其他)不透明 - 这意味着您无法堆叠分配它。而是这样做:

EVP_MD_CTX *md_ctx;

md_ctx = EVP_MD_CTX_new();
if (md_ctx == NULL)
    ...
...
EVP_MD_CTX_free(md_ctx);

答案 1 :(得分:0)

我有一个类似的错误,但是使用了EVP_CIPHER_CTX

error: storage size of ‘ctx’ isn’t known
       EVP_CIPHER_CTX ctx;

我解决了这个问题

EVP_CIPHER_CTX *ctx;
ctx = EVP_CIPHER_CTX_new();

我希望这对遇到同样问题的人有所帮助。