Corda-Crypto.doVerify从不返回false

Corda-Crypto.doVerify从不返回false,corda,Corda,我刚刚在Corda的crypto API中找到了用于处理密钥验证的代码: fun doVerify(signatureScheme: SignatureScheme, publicKey: PublicKey, signatureData: ByteArray, clearData: ByteArray): Boolean { require(Crypto.isSupportedSignatureScheme(signatureScheme)) { "Unsup

我刚刚在Corda的crypto API中找到了用于处理密钥验证的代码:

fun doVerify(signatureScheme: SignatureScheme, publicKey: PublicKey, signatureData: ByteArray, clearData: ByteArray): Boolean {
    require(Crypto.isSupportedSignatureScheme(signatureScheme)) {
        "Unsupported key/algorithm for schemeCodeName: ${signatureScheme.schemeCodeName}"
    }
    if (signatureData.isEmpty()) throw IllegalArgumentException("Signature data is empty!")
    if (clearData.isEmpty()) throw IllegalArgumentException("Clear data is empty, nothing to verify!")
    val verificationResult = Crypto.isValid(signatureScheme, publicKey, signatureData, clearData)
    if (verificationResult) {
        return true
    } else {
        throw SignatureException("Signature Verification failed!")
    }
}
我可以理解在参数无效时抛出异常,但我很好奇为什么这要么返回true,要么在
verificationResult
false
时抛出另一个异常,而不仅仅是
返回verificationResult
。这似乎是一个非常不寻常的设计选择


最好是来自R3工程团队的人能解释一下吗?

这里没有工程团队,但我想这是因为
Crypto.doVerify
是从
TransactionSignature.verify
调用的函数,它在流中用于验证签名。在这样一个基本函数中引发异常,允许流将其包装为
FlowException
,以便可以由理解的管理。然而,更好的设计是使用一个
requireRevify
方法,该方法可以抛出或继续,或者从
TransactionSignature中抛出包装异常。请改为验证
方法。