[英]What is the correct way to use ECDSA in Crypto++
當我在 Crypto++ 中使用 ECDSA 驗證器驗證簽名時,如果公鑰不正確,該方法只會使應用程序崩潰。 我應該嘗試捕獲異常嗎? 處理這個問題的最佳方法是什么?
謝謝!
...我應該嘗試捕獲異常嗎? 處理這個問題的最佳方法是什么?
這取決於你想怎么做。 我認為有三種選擇。
以下信息來自 Crypto++ wiki 上的橢圓曲線數字簽名算法和SignatureVerificationFilter 。
首先,如果您願意,可以捕獲SignatureVerificationFailed
異常:
try
{
DSA::Verifier verifier(publicKey);
StringSource ss2(message+signature, true,
new SignatureVerificationFilter(
verifier, NULL, THROW_EXCEPTION
/* SIGNATURE_AT_END */
)
);
std::cout << "Verified signature on message" << std::endl;
}
catch (SignatureVerificationFailed& ex)
{
std::cerr << "Failed to verify signature on message" << std::endl;
}
其次,您可以獲得 boolean 值的結果。 注意缺少THROW_EXCEPTION
:
bool result = false;
StringSource ss(message+signature, true,
new SignatureVerificationFilter(
verifier,
new ArraySink(
(byte*)&result, sizeof(result)),
PUT_RESULT | SIGNATURE_AT_END
)
);
if(result)
std::cout << "Verified signature on message" << std::endl;
else
std::cerr << "Failed to verify signature on message" << std::endl;
第三,您可以放棄管道,只需在Verifier
object 上調用VerifyMessage
:
bool result = verifier.VerifyMessage(ConstBytePtr(message), BytePtrSize(message), ConstBytePtr(signature), BytePtrSize(signature));
if(result)
std::cout << "Verified signature on message" << std::endl;
else
std::cerr << "Failed to verify signature on message" << std::endl;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.