TM-SGNL-iOS/SignalServiceKit/MessageBackup/MessageBackupKeyMaterial.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

49 lines
1.3 KiB
Swift

//
// Copyright 2024 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
public import LibSignalClient
public enum MessageBackupKeyMaterialError: Error {
case missingMasterKey
case missingMediaRootBackupKey
/// Encountered an error using libsignal methods to derive keys.
case derivationError(Error)
}
public enum MediaTierEncryptionType: CaseIterable {
case attachment
case thumbnail
}
public struct MediaTierEncryptionMetadata: Equatable {
let type: MediaTierEncryptionType
let mediaId: Data
let hmacKey: Data
let aesKey: Data
public var encryptionKey: Data {
return aesKey + hmacKey
}
}
extension BackupKey {
public func asMessageBackupKey(for aci: Aci) throws -> MessageBackupKey {
try MessageBackupKey(backupKey: self, backupId: self.deriveBackupId(aci: aci))
}
}
public protocol MessageBackupKeyMaterial {
func backupKey(
type: MessageBackupAuthCredentialType,
tx: DBReadTransaction
) throws(MessageBackupKeyMaterialError) -> BackupKey
func mediaEncryptionMetadata(
mediaName: String,
type: MediaTierEncryptionType,
tx: any DBReadTransaction
) throws(MessageBackupKeyMaterialError) -> MediaTierEncryptionMetadata
}