2017-01-28 18 views
1

Существует множество примеров, написанных на C о том, как проверить цифровую подпись в сообщении, но в моем случае использования я должен предоставить только хеш сообщений.Как проверить цифровую подпись с помощью хэша и открытого ключа?

Есть ли альтернатива EVP_DigestVerifyUpdate(mdctx, msg, strlen(msg));, где я мог бы напрямую предоставить хэш?

+0

Не собираюсь говорить, что это невозможно, но с EVP я его никогда не видел (но всегда желаю учиться). Всякий раз, когда мне приходилось делать что-то подобное (для меня обычно это подписание, где у меня уже есть дайджест, редко проверка), мне пришлось использовать [RSA_sign и RSA_verify] (https://www.openssl.org/docs /man1.0.2/crypto/RSA_verify.html), что требует дайджест сообщения, а не оригинальное сообщение. Если вы используете RSA (я не могу себе представить, что вы этого не сделали), это может быть для вас вариантом. – WhozCraig

+0

К сожалению, я использую ECDSA: / –

ответ

1

Это вы что искали?

EVP_PKEY *public_key = ...; 
EVP_PKEY_CTX *public_key_ctx = EVP_PKEY_CTX_new(public_key, NULL); 

EVP_PKEY_verify_init(public_key_ctx); 
if (1 != EVP_PKEY_verify(public_key_ctx, sig, siglen, hash, hashlen)) 
    // invalid signature 

 Смежные вопросы

  • Нет связанных вопросов^_^