2017-01-28 46 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