在C ++中验证签名

时间:2017-02-15 09:26:03

标签: c++ openssl

我有一个使用Openssl函数验证C ++签名的函数。 验证不起作用。

int verify(char *msg, int msg_len, char *signature, int signature_len, char *cert_str, int cert_len) {

X509* cert = d2i_X509(NULL, &cert_str, cert_len);

EVP_PKEY* key = X509_get_pubkey(cert);

EVP_MD_CTX* ctx = EVP_MD_CTX_create();
EVP_MD_CTX_init(ctx);

X509_ALGOR *palg = NULL;
ASN1_OBJECT *paobj = NULL;
X509_get0_signature(NULL, &palg, cert);
TRACE_ASSERT(T_PLUGIN, palg);
X509_ALGOR_get0(&paobj, NULL, NULL, palg);
int alg = OBJ_obj2nid(paobj);

const EVP_MD* md = EVP_get_digestbynid(alg);

EVP_VerifyInit_ex(ctx, md, NULL);
EVP_VerifyUpdate(ctx, msg, msg_len);

return EVP_VerifyFinal(ctx, signature, signature_len, key) == 1);

由于某些未知原因,验证会在应通过验证的内容上返回0。 msg,signature和cert_str是字节数组转换为char *。 就我检查而言,转换工作正常。 我错过了什么,做错了吗?

感谢。

0 个答案:

没有答案