1package com.peachpasswords.ui.vault23import com.peachpasswords.vault.PeachPayloadCodec4import com.peachpasswords.vault.PeachScript5import com.peachpasswords.vault.VaultEntry6789101112131415object PeachScriptImport {1617 18 sealed interface DecryptResult {19 data class Success(val entries: List<VaultEntry>) : DecryptResult20 data object WrongPassword : DecryptResult21 data object Corrupted : DecryptResult22 }2324 25 fun looksLikePeachScript(text: String): Boolean = PeachScript.isPeachScript(text)2627 28 fun isEncrypted(text: String): Boolean = looksLikePeachScript(text)2930 313233343536 fun decryptAndParse(text: String, backupPassword: String): DecryptResult {37 val normalised = PeachScript.normalise(text)38 if (!PeachScript.isPeachScript(normalised)) return DecryptResult.Corrupted39 val bytes = try {40 PeachScript.decode(normalised)41 } catch (_: Exception) {42 return DecryptResult.Corrupted43 }44 return try {45 DecryptResult.Success(PeachPayloadCodec.parsePayload(bytes, backupPassword))46 } catch (e: PeachPayloadCodec.PeachScriptException) {47 if (e.message == "INVALID_PASSPHRASE") DecryptResult.WrongPassword else DecryptResult.Corrupted48 } catch (_: Exception) {49 DecryptResult.Corrupted50 }51 }52}