我有一个使用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 *。 就我检查而言,转换工作正常。 我错过了什么,做错了吗?
感谢。