31 lines
855 B
Swift
31 lines
855 B
Swift
//
|
|
// Copyright 2025 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import Foundation
|
|
|
|
public class NonceHeaderOutputStreamTransform: StreamTransform {
|
|
|
|
private let metadataHeader: BackupNonce.MetadataHeader
|
|
|
|
public init(metadataHeader: BackupNonce.MetadataHeader) {
|
|
self.metadataHeader = metadataHeader
|
|
}
|
|
|
|
private var hasWrittenHeader = false
|
|
|
|
public func transform(data: Data) throws -> Data {
|
|
if hasWrittenHeader { return data }
|
|
defer { hasWrittenHeader = true }
|
|
|
|
var result = Data()
|
|
result.append(BackupNonce.magicFileSignature)
|
|
let headerData = metadataHeader.data
|
|
result.append(ChunkedOutputStreamTransform.writeVariableLengthUInt32(UInt32(headerData.count)))
|
|
result.append(headerData)
|
|
result.append(data)
|
|
return result
|
|
}
|
|
}
|