From c29b4b8e5f53fccdc2df245aa599f8c68ab5d09c Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 16 Oct 2023 11:54:56 -0400 Subject: [PATCH] Avoids testing the signature when the id or sig fields are blank --- .../amethyst/benchmark/EventBenchmark.kt | 2 +- .../benchmark/GiftWrapReceivingBenchmark.kt | 2 +- .../java/com/vitorpamplona/quartz/events/Event.kt | 15 +++++++++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/benchmark/src/androidTest/java/com/vitorpamplona/amethyst/benchmark/EventBenchmark.kt b/benchmark/src/androidTest/java/com/vitorpamplona/amethyst/benchmark/EventBenchmark.kt index 5583407d6..7960b9947 100644 --- a/benchmark/src/androidTest/java/com/vitorpamplona/amethyst/benchmark/EventBenchmark.kt +++ b/benchmark/src/androidTest/java/com/vitorpamplona/amethyst/benchmark/EventBenchmark.kt @@ -74,7 +74,7 @@ class EventBenchmark { val event = Event.fromJson(msg[2]) benchmarkRule.measureRepeated { // Should pass - assertTrue( event.hasVerifedSignature() ) + assertTrue( event.hasVerifiedSignature() ) } } diff --git a/benchmark/src/androidTest/java/com/vitorpamplona/amethyst/benchmark/GiftWrapReceivingBenchmark.kt b/benchmark/src/androidTest/java/com/vitorpamplona/amethyst/benchmark/GiftWrapReceivingBenchmark.kt index c3faf87f4..ad3d331f9 100644 --- a/benchmark/src/androidTest/java/com/vitorpamplona/amethyst/benchmark/GiftWrapReceivingBenchmark.kt +++ b/benchmark/src/androidTest/java/com/vitorpamplona/amethyst/benchmark/GiftWrapReceivingBenchmark.kt @@ -114,7 +114,7 @@ class GiftWrapReceivingBenchmark { ) benchmarkRule.measureRepeated { - wrap.hasVerifedSignature() + wrap.hasVerifiedSignature() } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt index 4b84baf68..798e521ac 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt @@ -217,8 +217,15 @@ open class Event( return "nostr:${toNIP19()}" } - fun hasCorrectIDHash() = id.equals(generateId()) - fun hasVerifedSignature() = CryptoUtils.verifySignature(Hex.decode(sig), Hex.decode(id), Hex.decode(pubKey)) + fun hasCorrectIDHash(): Boolean { + if (id.isEmpty()) return false + return id.equals(generateId()) + } + + fun hasVerifiedSignature(): Boolean { + if (id.isEmpty() || sig.isEmpty()) return false + return CryptoUtils.verifySignature(Hex.decode(sig), Hex.decode(id), Hex.decode(pubKey)) + } /** * Checks if the ID is correct and then if the pubKey's secret key signed the event. @@ -233,14 +240,14 @@ open class Event( """.trimIndent() ) } - if (!hasVerifedSignature()) { + if (!hasVerifiedSignature()) { throw Exception("""Bad signature!""") } } override fun hasValidSignature(): Boolean { return try { - hasCorrectIDHash() && hasVerifedSignature() + hasCorrectIDHash() && hasVerifiedSignature() } catch (e: Exception) { Log.w("Event", "Event $id does not have a valid signature: ${toJson()}", e) false