EVP_DigestVerifyFinal ~ 50% отказов - PullRequest
0 голосов
/ 20 октября 2018

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

подпись: 3046022100a5728ddb73341a499ff6919eeeee2ea169ae00f68de8a16f5302f123e03dc079022100c7abc75a11b79f86d7e9d94ad729903eb5 * 5 * 5 * 5 5 5 5 5 5 5 5 5 5 5 5 6 5 5 5 5 5 5 5 5 6 5 5 5 5 5 5 5SDF DSL fsadf ПАПД грустной ПАПД sadfasd fasdf sdfasdf adfad FAAD ф.р. Asdf Asdf Asdf ASD fasdfasdfasdasdfadf ПАПД Asdf ДКА ф.р. dafasdfasdf asdfasdf asdfasdfasdf asdfasd Asdf д Asdf afasdfasdfasf asdfasdfasdasdfas ddasfd причуды грустный грустный asdfsadf ф FASD да asdfsad dfasd adfazcxzcvc zxcvxzc ZV zcvzxcv резюме zxcv резюме zxcv zxcvxc резюмеzxcv cw erer qwrqerqw eqwerewq r lsdljljsdl ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; kkkkkkkkkkkkkkkkkk kkkkkkkkkkkkjffff fffffff fls; adddddkjfjjjjjjjjjjsl; kj klda; 10; *; 10*** Ошибки не обнаружены

терминал: ~ /.../ Сервер / Тесты $ ./testcrypto.exe

Запуск 8 тестовых случаев ...

В проверке.

1032 * длина Подпись: 72

Подпись: 304502207a93d9bb5360638cc57b9d66feac8d1ec443b426b8359c4888248ce3425ea27d022100db79422ad3db2573f1fad9eb636674a4bac270db2aa4e473f7a580476592f83b00

1036 длина * Сообщение: 551

Сообщение: Данные, превышает 256 байт.SDF DSL fsadf ПАПД грустной ПАПД sadfasd fasdf sdfasdf adfad FAAD ф.р. Asdf Asdf Asdf ASD fasdfasdfasdasdfadf ПАПД Asdf ДКА ф.р. dafasdfasdf asdfasdf asdfasdfasdf asdfasd Asdf д Asdf afasdfasdfasf asdfasdfasdasdfas ddasfd причуды грустный грустный asdfsadf ф FASD да asdfsad dfasd adfazcxzcvc zxcvxzc ZV zcvzxcv резюме zxcv резюме zxcv zxcvxc резюмеzxcv cw erer qwrqerqw eqwerewq r lsdljljsdl ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; kkkkkkkkkkkkkkkkkk kkkkkkkkkkkkjffff fffffff fls; adddddkjfjjjjjjjjjjsl; kj klda; 10 * ;;неизвестное расположение (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»

*** 1 ошибка обнаружена в тестовом модуле «testCrypto»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...