diff --git a/native/account/restore-backup-screen.react.js b/native/account/restore-backup-screen.react.js --- a/native/account/restore-backup-screen.react.js +++ b/native/account/restore-backup-screen.react.js @@ -121,7 +121,8 @@ let alertDetails = unknownErrorAlertDetails; if ( messageForException === 'user_not_found' || - messageForException === 'login_failed' + messageForException === 'login_failed' || + messageForException === 'backup_decryption_failed' ) { alertDetails = userNotFoundAlertDetails; } else if ( diff --git a/native/account/restore-password-account-screen.react.js b/native/account/restore-password-account-screen.react.js --- a/native/account/restore-password-account-screen.react.js +++ b/native/account/restore-password-account-screen.react.js @@ -127,7 +127,8 @@ let onPress = null; if ( messageForException === 'user_not_found' || - messageForException === 'login_failed' + messageForException === 'login_failed' || + messageForException === 'backup_decryption_failed' ) { alertMessage = userNotFoundAlertDetails; onPress = onUnsuccessfulLoginAlertAcknowledged; diff --git a/native/native_rust_library/src/backup.rs b/native/native_rust_library/src/backup.rs --- a/native/native_rust_library/src/backup.rs +++ b/native/native_rust_library/src/backup.rs @@ -527,6 +527,16 @@ #[display(fmt = "user_not_found")] struct UserNotFoundError; +#[derive(Debug, derive_more::Display)] +#[display(fmt = "backup_decryption_failed")] +struct BackupDecryptionError(Box); + +impl std::error::Error for BackupDecryptionError { + fn source(&self) -> Option<&(dyn Error + 'static)> { + Some( as std::ops::Deref>::deref(&self.0)) + } +} + // This struct should match `SIWEBackupData` in `lib/types/backup-types.js` #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -579,7 +589,7 @@ data: &mut [u8], backup_key: &mut [u8], ) -> Result> { - let decrypted = decrypt(backup_key, data)?; + let decrypted = decrypt(backup_key, data).map_err(BackupDecryptionError)?; Ok(serde_json::from_slice(&decrypted)?) } }