使用boringssl库时出现段错误

时间:2018-12-06 11:29:00

标签: openssl boringssl

当我在终端上运行以下代码时,它给出了分段错误。 我正在使用boringssl库。

#include <bits/stdc++.h>
#include <openssl/evp.h>
using namespace std;

// #include <openssl/digest.h>
int main(){
    EVP_MD_CTX* ctx = EVP_MD_CTX_new();
    EVP_MD_CTX_init(ctx);

    const EVP_MD* sha256 = EVP_sha256();
    EVP_DigestInit(ctx,sha256);

    char str[]="ANIKET GUPTA";
    EVP_DigestUpdate(ctx,str,strlen(str));

    unsigned char hash[EVP_MAX_MD_SIZE];
    unsigned int* hash_size;
    EVP_DigestFinal(ctx,hash,hash_size);

    cout <<"SUCCESS";
    EVP_MD_CTX_free(ctx);
}

我使用以下命令运行此代码:g++ -I~/src/boringssl/include sign.cpp ~/src/boringssl/build/crypto/libcrypto.a -lpthread  造成细分错误的错误是什么?

2 个答案:

答案 0 :(得分:0)

在线

unsigned int* hash_size;
EVP_DigestFinal(ctx, hash, hash_size);

您正在使用hash_size且未初始化,而EVP_DigestFinal()会尝试将hash_size结果写入未知位置,从而导致段错误。相反,您可以

unsigned int hash_size;
EVP_DigestFinal(ctx, hash, &hash_size);

您的编译器应该已经为您指出了这个问题,它通常能够检测到这样的未初始化变量。

答案 1 :(得分:0)

已解决! 我们必须malloc hash和hash_size