Use libsignal validator to verify backups.

This commit is contained in:
Greyson Parrelli
2024-10-29 14:24:46 -04:00
parent f848a78365
commit 50af0b0838
20 changed files with 447 additions and 175 deletions

View File

@@ -7,6 +7,7 @@ import org.signal.core.util.isNotNullOrBlank
import org.signal.core.util.logging.Log
import org.signal.core.util.logging.logW
import org.signal.libsignal.protocol.ecc.Curve
import org.thoughtcrime.securesms.backup.v2.ArchiveValidator
import org.thoughtcrime.securesms.backup.v2.BackupRepository
import org.thoughtcrime.securesms.crypto.ProfileKeyUtil
import org.thoughtcrime.securesms.dependencies.AppDependencies
@@ -239,6 +240,21 @@ object LinkDeviceRepository {
}
stopwatch.split("create-backup")
when (val result = ArchiveValidator.validate(tempBackupFile, ephemeralMessageBackupKey)) {
ArchiveValidator.ValidationResult.Success -> {
Log.d(TAG, "Successfully passed validation.")
}
is ArchiveValidator.ValidationResult.ReadError -> {
Log.w(TAG, "Failed to read the file during validation!", result.exception)
return LinkUploadArchiveResult.BackupCreationFailure(result.exception)
}
is ArchiveValidator.ValidationResult.ValidationError -> {
Log.w(TAG, "The backup file fails validation!", result.exception)
return LinkUploadArchiveResult.BackupCreationFailure(result.exception)
}
}
stopwatch.split("validate-backup")
val uploadForm = when (val result = SignalNetwork.attachments.getAttachmentV4UploadForm()) {
is NetworkResult.Success -> result.result
is NetworkResult.ApplicationError -> throw result.throwable