簡體   English   中英

在 Crypto++ 中使用 ECDSA 的正確方法是什么

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM