From 9b57a0ea098c693e9f02e753c637dd8b5e202ce6 Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Mon, 20 Oct 2025 14:26:41 -0300 Subject: [PATCH] Feat: Encrypt and include seed words in account export Encrypts the seed words using NIP-44 and adds them to the account export data. This ensures that mnemonic phrases are securely backed up along with other account details during the export process. --- .../nostrsigner/models/AccountExport.kt | 22 ++++++++++--------- .../service/AccountExportService.kt | 2 ++ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/models/AccountExport.kt b/app/src/main/java/com/greenart7c3/nostrsigner/models/AccountExport.kt index 5e39337c..206059f6 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/models/AccountExport.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/models/AccountExport.kt @@ -10,17 +10,19 @@ import com.fasterxml.jackson.module.kotlin.readValue */ @Immutable data class AccountExportData( - @JsonProperty("npub") + @param:JsonProperty("npub") val npub: String, - @JsonProperty("name") + @param:JsonProperty("name") val name: String, - @JsonProperty("nsec") + @param:JsonProperty("nsec") val nsec: String?, - @JsonProperty("signPolicy") + @param:JsonProperty("seedWords") + val seedWords: String, + @param:JsonProperty("signPolicy") val signPolicy: Int, - @JsonProperty("picture") + @param:JsonProperty("picture") val picture: String?, - @JsonProperty("didBackup") + @param:JsonProperty("didBackup") val didBackup: Boolean, ) @@ -29,13 +31,13 @@ data class AccountExportData( */ @Immutable data class BulkAccountExport( - @JsonProperty("version") + @param:JsonProperty("version") val version: String = "1.0", - @JsonProperty("exportDate") + @param:JsonProperty("exportDate") val exportDate: Long = System.currentTimeMillis() / 1000, - @JsonProperty("accountCount") + @param:JsonProperty("accountCount") val accountCount: Int, - @JsonProperty("accounts") + @param:JsonProperty("accounts") val accounts: List, ) { companion object { diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/service/AccountExportService.kt b/app/src/main/java/com/greenart7c3/nostrsigner/service/AccountExportService.kt index 0668947b..4c0fb6b8 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/service/AccountExportService.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/service/AccountExportService.kt @@ -64,6 +64,7 @@ object AccountExportService { */ private fun accountToExportData(account: Account, password: String): AccountExportData { val privKey = account.signer.keyPair.privKey + val encrypedSeedWords = if (account.seedWords.isNotEmpty()) account.signer.signerSync.nip44Encrypt(account.seedWords.joinToString(" "), account.hexKey) else "" // Encrypt private key with password (NIP-49) or use nsec if no password val encryptedNsec = if (privKey != null) { @@ -83,6 +84,7 @@ object AccountExportService { signPolicy = account.signPolicy, picture = account.picture.value, didBackup = account.didBackup, + seedWords = encrypedSeedWords, ) } }