Corda-Crypto.doVerify从不返回false
我刚刚在Corda的crypto API中找到了用于处理密钥验证的代码: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
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中抛出包装异常。请改为验证方法。