From e2d96d1f2f9b9936411be3efee1875ff4c2eb3e0 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 17 Sep 2026 10:40:03 -0300 Subject: [PATCH] Name plaintext export attachment files by plaintext hash so they can be located from the exported json. --- .../thoughtcrime/securesms/backup/v2/local/LocalArchiver.kt | 2 +- .../src/main/java/org/signal/core/models/backup/MediaName.kt | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/local/LocalArchiver.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/local/LocalArchiver.kt index 690332793d..5fce92b0f0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/local/LocalArchiver.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/local/LocalArchiver.kt @@ -186,7 +186,7 @@ object LocalArchiver { val prefixDirs = HashMap() for (attachment in attachments) { if (cancellationSignal()) break - val mediaName = MediaName.forLocalBackupFilename(attachment.plaintextHash, attachment.localBackupKey.key) + val mediaName = MediaName.forPlaintextExportFilename(attachment.plaintextHash) try { val ext = attachment.contentType diff --git a/core/models-jvm/src/main/java/org/signal/core/models/backup/MediaName.kt b/core/models-jvm/src/main/java/org/signal/core/models/backup/MediaName.kt index ae86a51bae..4c24c2521f 100644 --- a/core/models-jvm/src/main/java/org/signal/core/models/backup/MediaName.kt +++ b/core/models-jvm/src/main/java/org/signal/core/models/backup/MediaName.kt @@ -20,6 +20,11 @@ value class MediaName(val name: String) { fun forThumbnailFromMediaName(mediaName: String) = MediaName("${mediaName}_thumbnail") fun forLocalBackupFilename(plaintextHash: ByteArray, localKey: ByteArray) = MediaName(Hex.toStringCondensed(CryptoUtil.sha256(plaintextHash + localKey))) + /** + * Since these are unencrypted, we don't want to create them via the local key. + */ + fun forPlaintextExportFilename(plaintextHash: ByteArray) = MediaName(Hex.toStringCondensed(plaintextHash)) + /** * For java, since it struggles with value classes. */