EVP_DigestVerifyFinal大约有50%的时间失败,输出为-1。 更改键和消息不会影响结果。
ERR_get_error()返回代码0 /无错误。
验证功能:
bool SECP256K1_public::verify(std::vector<unsigned char> signature, std::vector<unsigned char> message){
/* Create the Message Digest Context */
std::unique_ptr<EVP_MD_CTX, decltype(&::EVP_MD_CTX_destroy)> ctx(EVP_MD_CTX_create(), ::EVP_MD_CTX_destroy);
/* Initialize with a public key */
int rc = EVP_DigestVerifyInit(ctx.get(), NULL, EVP_sha256(), NULL, _key.get());
if (1 != rc){
throw std::runtime_error("EVP_DigestSignInit failed");
}
/* Load message */
rc = EVP_DigestVerifyUpdate(ctx.get(), message.data(), message.size());
if (1 != rc){
throw std::runtime_error("EVP_DigestVerifyUpdate failed");
}
/* Load signature and compare */
bool res;
rc = EVP_DigestVerifyFinal(ctx.get(), signature.data(), signature.size());
if (1 == rc){
res = true;
} else if (0 == rc){
res = false;
} else {
std::string err(ERR_error_string(ERR_get_error(), NULL));
throw std::runtime_error("EVP_DigestVerifyFinal failed. Error value: " + std::to_string(rc) + ". Error code: " + std::to_string(ERR_get_error()) + ". Error string: " + err);
}
return res;
输出:
终端:〜/.../服务器/测试$ ./testcrypto.exe
正在运行8个测试用例...
验证。
签名长度:72
签名:3046022100a5728ddb73341a499ff6919eeeee2ea169ae00f68de8a16f5302f123e03dc079022100c7abc75a11b79f86d7e9d94ad729903ecac28a2d6e9ced5d68f2a1b4beeebc
消息长度:551
消息:超过256个字节的数据。 SDF DSL fsadf SADF悲伤SADF sadfasd fasdf sdfasdf adfad FAAD DF ASDF ASDF ASDF ASD fasdfasdfasdasdfadf SADF ASDF的DFA DF dafasdfasdf asdfasdf asdfasdfasdf asdfasd ASDF d ASDF afasdfasdfasf asdfasdfasdasdfas ddasfd FAD悲伤难过asdfsadf˚FFASD哒asdfsad dfasd adfazcxzcvc zxcvxzc ZV zcvzxcv CV ZXCV CV ZXCV zxcvxc CV zxcv cw erer qwrqerqw eqwerewq r lsdljljsdl ;;;;;;;;;;;;;;;;;;;;;;;;; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; p;
***未检测到错误
终端:〜/.../服务器/测试$ ./testcrypto.exe
正在运行8个测试用例...
验证。
签名长度:72
签名:304502207a93d9bb5360638cc57b9d66feac8d1ec443b426b8359c4888248ce3425ea27d022100db79422ad3db2573f1fad9eb636674a4bac270db2aa4e473f7a580476592f83b00
消息长度:551
消息:超过256个字节的数据。 SDF DSL fsadf SADF悲伤SADF sadfasd fasdf sdfasdf adfad FAAD DF ASDF ASDF ASDF ASD fasdfasdfasdasdfadf SADF ASDF的DFA DF dafasdfasdf asdfasdf asdfasdfasdf asdfasd ASDF d ASDF afasdfasdfasf asdfasdfasdasdfas ddasfd FAD悲伤难过asdfsadf˚FFASD哒asdfsad dfasd adfazcxzcvc zxcvxzc ZV zcvzxcv CV ZXCV CV ZXCV zxcvxc CV zxcv cw erer qwrqerqw eqwerewq r lsdljljsdl ;;;;;;;;;;;;;;;;;;;;;;;;; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; p;
未知位置(0):致命错误:在“ SECP256 / digital_signature_cycle”中:std :: runtime_error:EVP_DigestVerifyFinal失败。错误值:-1。错误代码:0。错误字符串:错误:00000000:lib(0):func(0):原因(0) src / Crypto / tests.cpp(128):最后一个检查点:“ digital_signature_cycle”测试条目
***在测试模块“ testCrypto”中检测到1个故障