From 86adac95c90220733a0f2431d67b33a0fd3f2c53 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Fri, 5 May 2023 13:49:18 -0400 Subject: [PATCH] Adds protections for calculating zap amounts without a private key --- .../vitorpamplona/amethyst/model/Account.kt | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt index 81623a192..6c7b55d39 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -178,17 +178,23 @@ class Account( } fun isNIP47Author(pubkeyHex: String?): Boolean { - val privKey = zapPaymentRequest?.secret?.toByteArray() ?: loggedIn.privKey!! + val privKey = zapPaymentRequest?.secret?.toByteArray() ?: loggedIn.privKey + + if (privKey == null) return false + val pubKey = Utils.pubkeyCreate(privKey).toHexKey() return (pubKey == pubkeyHex) } fun decryptZapPaymentResponseEvent(zapResponseEvent: LnZapPaymentResponseEvent): Response? { val myNip47 = zapPaymentRequest ?: return null - return zapResponseEvent.response( - myNip47.secret?.toByteArray() ?: loggedIn.privKey!!, - myNip47.pubKeyHex.toByteArray() - ) + + val privKey = myNip47.secret?.toByteArray() ?: loggedIn.privKey + val pubKey = myNip47.pubKeyHex.toByteArray() + + if (privKey == null) return null + + return zapResponseEvent.response(privKey, pubKey) } fun calculateIfNoteWasZappedByAccount(zappedNote: Note?): Boolean { @@ -196,10 +202,9 @@ class Account( } fun calculateZappedAmount(zappedNote: Note?): BigDecimal { - return zappedNote?.zappedAmount( - zapPaymentRequest?.secret?.toByteArray() ?: loggedIn.privKey!!, - zapPaymentRequest?.pubKeyHex?.toByteArray() - ) ?: BigDecimal.ZERO + val privKey = zapPaymentRequest?.secret?.toByteArray() ?: loggedIn.privKey + val pubKey = zapPaymentRequest?.pubKeyHex?.toByteArray() + return zappedNote?.zappedAmount(privKey, pubKey) ?: BigDecimal.ZERO } fun sendZapPaymentRequestFor(bolt11: String, zappedNote: Note?, onResponse: (Response?) -> Unit) {