From 3e666df896578728fc3e21bbc97f872b731793d0 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 3 Apr 2023 14:01:43 -0400 Subject: [PATCH] Adds full nip19 parsing on key decoding capabilities. --- .../java/com/vitorpamplona/amethyst/model/Hex.kt | 12 ++++++------ .../amethyst/ui/screen/AccountStateViewModel.kt | 8 ++++++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Hex.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Hex.kt index c50ff5781..7e16f77d8 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Hex.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Hex.kt @@ -38,14 +38,14 @@ fun HexKey.toDisplayHexKey(): String { } fun decodePublicKey(key: String): ByteArray { + val parsed = Nip19.uriToRoute(key) + val pubKeyParsed = parsed?.hex?.toByteArray() + return if (key.startsWith("nsec")) { Persona(privKey = key.bechToBytes()).pubKey - } else if (key.startsWith("npub")) { - key.bechToBytes() - } else if (key.startsWith("note")) { - key.bechToBytes() - } else { // if (pattern.matcher(key).matches()) { - // } else { + } else if (pubKeyParsed != null) { + pubKeyParsed + } else { Hex.decode(key) } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/AccountStateViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/AccountStateViewModel.kt index 0cc9cb31f..58c9140e9 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/AccountStateViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/AccountStateViewModel.kt @@ -4,6 +4,8 @@ import androidx.lifecycle.ViewModel import com.vitorpamplona.amethyst.LocalPreferences import com.vitorpamplona.amethyst.ServiceManager import com.vitorpamplona.amethyst.model.Account +import com.vitorpamplona.amethyst.model.toByteArray +import com.vitorpamplona.amethyst.service.nip19.Nip19 import fr.acinq.secp256k1.Hex import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.DelicateCoroutinesApi @@ -39,12 +41,14 @@ class AccountStateViewModel() : ViewModel() { fun login(key: String) { val pattern = Pattern.compile(".+@.+\\.[a-z]+") + val parsed = Nip19.uriToRoute(key) + val pubKeyParsed = parsed?.hex?.toByteArray() val account = if (key.startsWith("nsec")) { Account(Persona(privKey = key.bechToBytes())) - } else if (key.startsWith("npub")) { - Account(Persona(pubKey = key.bechToBytes())) + } else if (pubKeyParsed != null) { + Account(Persona(pubKey = pubKeyParsed)) } else if (pattern.matcher(key).matches()) { // Evaluate NIP-5 Account(Persona())