EVP_DigestVerifyFinal〜50%的失败率

时间:2018-10-20 15:48:25

标签: c++ openssl

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个故障

0 个答案:

没有答案