绳子 - 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 为真,或者当 verificationResultfalse 时抛出另一个异常,而不是不仅仅是 return verificationResult。这似乎是一个非常不寻常的设计选择!

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

这里没有工程团队,但我猜这是因为 Crypto.doVerify 是从 TransactionSignature.verify 调用的函数,它是流程中用于验证签名的函数。在这样一个基本函数中引发异常,允许流程将其包装到 FlowException 以便它可以由 Flow Hospital.

管理