Я только что нашел этот код в криптографическом 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, объяснить?