Corda - Crypto.doVerify никогда не возвращает false - PullRequest
2 голосов
/ 03 августа 2020

Я только что нашел этот код в криптографическом API Corda для обработки проверки ключа:

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, а не просто return verificationResult. Это кажется весьма необычным выбором дизайна!

Может ли кто-нибудь, в идеале, из команды инженеров R3, объяснить?

1 Ответ

2 голосов
/ 03 августа 2020

Здесь нет инженерной команды, но я предполагаю, что это потому, что Crypto.doVerify - это функция, вызываемая из TransactionSignature.verify, которая используется в потоках для проверки подписей. Вызов исключения в такой важной функции позволяет потоку обернуть его в FlowException, чтобы им мог управлять Flow Hospital .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...