绳子 - Crypto.doVerify 从不 returns false
Corda - Crypto.doVerify never returns false
我刚在 Corda 的加密 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!")
}
}
我可以理解当参数无效时抛出异常,但我很好奇为什么这 returns 为真,或者当 verificationResult
为 false
时抛出另一个异常,而不是不仅仅是 return verificationResult
。这似乎是一个非常不寻常的设计选择!
谁能解释一下,最好是来自 R3 工程团队的人?
这里没有工程团队,但我猜这是因为 Crypto.doVerify
是从 TransactionSignature.verify
调用的函数,它是流程中用于验证签名的函数。在这样一个基本函数中引发异常,允许流程将其包装到 FlowException
以便它可以由 Flow Hospital.
管理
我刚在 Corda 的加密 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!")
}
}
我可以理解当参数无效时抛出异常,但我很好奇为什么这 returns 为真,或者当 verificationResult
为 false
时抛出另一个异常,而不是不仅仅是 return verificationResult
。这似乎是一个非常不寻常的设计选择!
谁能解释一下,最好是来自 R3 工程团队的人?
这里没有工程团队,但我猜这是因为 Crypto.doVerify
是从 TransactionSignature.verify
调用的函数,它是流程中用于验证签名的函数。在这样一个基本函数中引发异常,允许流程将其包装到 FlowException
以便它可以由 Flow Hospital.