From dd98fcc63171036ef3abd8c952e33b32ee549980 Mon Sep 17 00:00:00 2001 From: Kgothatso Ngako Date: Sat, 6 Jun 2026 00:42:14 +0200 Subject: [PATCH] Check for GiftWrapImpersonationException.kt --- .../ac/cord/auxiliary/compose/database/dao/NostrDao.kt | 9 +++++++++ .../compose/exceptions/GiftWrapImpersonationException.kt | 4 ++++ 2 files changed, 13 insertions(+) create mode 100644 composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/GiftWrapImpersonationException.kt diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NostrDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NostrDao.kt index 1818a23b..cdb8981f 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NostrDao.kt +++ b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/NostrDao.kt @@ -15,6 +15,7 @@ import ac.cord.auxiliary.compose.database.model.Post import ac.cord.auxiliary.compose.database.model.Profile import ac.cord.auxiliary.compose.database.model.UnsignedNostrEvent import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter +import ac.cord.auxiliary.compose.exceptions.GiftWrapImpersonationException import ac.cord.auxiliary.compose.managers.SeedManager import ac.cord.auxiliary.compose.managers.toHex import androidx.room3.Dao @@ -27,6 +28,7 @@ import com.vitorpamplona.quartz.nip01Core.tags.people.taggedUsers import com.vitorpamplona.quartz.nip02FollowList.ContactListEvent import com.vitorpamplona.quartz.nip17Dm.settings.ChatMessageRelayListEvent import com.vitorpamplona.quartz.nip59Giftwrap.wraps.GiftWrapEvent +import kotlin.math.log import kotlin.time.Clock import kotlin.time.Instant @@ -350,6 +352,13 @@ abstract class NostrDao( giftWrapSeal.decryptGiftWrapPayload( activeUserPrivateKey )?.let { decryptedGiftWrapPayload -> + if (giftWrapSeal.publicKey.lowercase() != decryptedGiftWrapPayload.publicKey.lowercase()) { + val giftWrapImpersonation = GiftWrapImpersonationException( + "Seal pubkey (${giftWrapSeal.publicKey}) and payload pubkey (${decryptedGiftWrapPayload.publicKey}) needs to be the same for the giftWrap ${nostrEvent.id}" + ) + logger.e("Impersonation", giftWrapImpersonation) + throw giftWrapImpersonation // Once this is thrown the database transaction fails and nothing gets saved to the DB... + } val result = database.giftWrapPayloadDao().upsert( decryptedGiftWrapPayload ) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/GiftWrapImpersonationException.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/GiftWrapImpersonationException.kt new file mode 100644 index 00000000..18f930b6 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/exceptions/GiftWrapImpersonationException.kt @@ -0,0 +1,4 @@ +package ac.cord.auxiliary.compose.exceptions + +open class GiftWrapImpersonationException(message: String? = null, cause: Throwable? = null) : Exception(message, cause) { +} \ No newline at end of file