У меня есть следующий рабочий пример Python:
Код: Выделить всё
#!/usr/bin/env python3
import hashlib
from ecdsa import curves, VerifyingKey
public_key_bytes = bytearray.fromhex("0303b2ce64bc207bdd8bc4df859187fcb686320d63ffa091410fc158fbb77980ea")
public_key = VerifyingKey.from_string(public_key_bytes, curve=curves.NIST256p, hashfunc=hashlib.sha256)
ds = bytearray.fromhex("F8CD88299FA4605800207BFEBEAC55024053F30F7C69B35C15E60800AC3B6FE3ED0639952F7B028D86867445961FFE94FB226BFF7006E0C451EE3F8728C177FB")
m = bytearray.fromhex("8210492204E060610BDF26D77B5BF8C9CBFCF70422081475FD445DF0FF")
print(public_key.verify(ds, m))
Когда я изменяю любой байт m, ds или public_key Я получаю ожидаемые ошибки проверки.
Код: Выделить всё
m
Теперь самое сложное. Я создал следующие две функции:
Первая функция для загрузки открытого ключа.
Код: Выделить всё
EVP_PKEY* load_public_key(const unsigned char* public_key_bytes, size_t key_len) {
EVP_PKEY* pkey = nullptr;
EVP_PKEY_CTX* ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, nullptr);
if (!ctx) {
std::cerr
Подробнее здесь: [url]https://stackoverflow.com/questions/78702369/evp-digestverifyfinal-fails-ecdsa-p-256-sha-256-with-openssl-libcrypto[/url]