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

45 lines
1.1 KiB
Swift

//
// Copyright 2024 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import CryptoKit
import Foundation
public class MetadataStreamTransform: StreamTransform, FinalizableStreamTransform {
public var hasFinalized: Bool = false
private var sha256Result: SHA256.Digest?
private var sha256State: SHA256?
public func digest() throws -> Data {
guard hasFinalized else {
throw OWSAssertionError("Reading digest before finalized")
}
guard let sha256Result else {
throw OWSAssertionError("Not configured to calculate digest")
}
return Data(sha256Result)
}
init(calculateDigest: Bool) {
if calculateDigest {
self.sha256State = SHA256()
}
}
public private(set) var count: Int = 0
public func transform(data: Data) -> Data {
sha256State?.update(data: data)
count += data.count
return data
}
public func finalize() -> Data {
hasFinalized = true
sha256Result = sha256State?.finalize()
sha256State = nil
return Data()
}
}