前景提要
HDC调试需求开发(15万预算),能者速来!>>>
今天下载了Openssl的最新版本1.1.1
使用下面的函数签名
EVP_SignInit_ex(mdctx, EVP_sm3(), NULL);
EVP_SignUpdate(mdctx, msg, sizeof(msg));
ret = EVP_SignFinal(mdctx, sign_value, &sign_len, prikey);
出现错误:EVP_SignFinal error: error:100C508A:elliptic curve routines:pkey_ec_ctrl:invalid digest type
其中prikey对应的私钥文件是用下面的命令生成的: openssl genpkey -algorithm EC -out eckey.pem \ -pkeyopt ec_paramgen_curve:P-384 \ -pkeyopt ec_param_enc:named_curve
跟踪了一下源代码,在源文件ec_pmeth.c中的pkey_ec_ctrl函数中有如下代码:
case EVP_PKEY_CTRL_MD:
if (EVP_MD_type((const EVP_MD *)p2) != NID_sha1 &&
EVP_MD_type((const EVP_MD *)p2) != NID_ecdsa_with_SHA1 &&
EVP_MD_type((const EVP_MD *)p2) != NID_sha224 &&
EVP_MD_type((const EVP_MD *)p2) != NID_sha256 &&
EVP_MD_type((const EVP_MD *)p2) != NID_sha384 &&
EVP_MD_type((const EVP_MD *)p2) != NID_sha512) {
ECerr(EC_F_PKEY_EC_CTRL, EC_R_INVALID_DIGEST_TYPE);
return 0;
}
我理解的其中的意思是 进行签名时摘要函数不能使用SM3吗?