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

66 lines
2.1 KiB
Swift

//
// Copyright 2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
/// Wraps the stores for 1:1 sessions that use the Signal Protocol (Double Ratchet + X3DH).
public protocol SignalProtocolStore {
var sessionStore: SignalSessionStore { get }
var preKeyStore: SignalPreKeyStore { get }
var signedPreKeyStore: SignalSignedPreKeyStore { get }
var kyberPreKeyStore: SignalKyberPreKeyStore { get }
}
public class SignalProtocolStoreImpl: SignalProtocolStore {
public let sessionStore: SignalSessionStore
public let preKeyStore: SignalPreKeyStore
public let signedPreKeyStore: SignalSignedPreKeyStore
public let kyberPreKeyStore: SignalKyberPreKeyStore
public init(
for identity: OWSIdentity,
recipientIdFinder: RecipientIdFinder,
remoteConfigProvider: any RemoteConfigProvider
) {
sessionStore = SSKSessionStore(
for: identity,
recipientIdFinder: recipientIdFinder
)
preKeyStore = SSKPreKeyStore(for: identity)
signedPreKeyStore = SSKSignedPreKeyStore(for: identity)
kyberPreKeyStore = SSKKyberPreKeyStore(
for: identity,
dateProvider: Date.provider,
remoteConfigProvider: remoteConfigProvider
)
}
}
// MARK: - SignalProtocolStoreManager
/// Wrapper for ACI/PNI protocol stores that can be passed around to dependencies
public protocol SignalProtocolStoreManager {
func signalProtocolStore(for identity: OWSIdentity) -> SignalProtocolStore
}
public struct SignalProtocolStoreManagerImpl: SignalProtocolStoreManager {
private let aciProtocolStore: SignalProtocolStore
private let pniProtocolStore: SignalProtocolStore
public init(
aciProtocolStore: SignalProtocolStore,
pniProtocolStore: SignalProtocolStore
) {
self.aciProtocolStore = aciProtocolStore
self.pniProtocolStore = pniProtocolStore
}
public func signalProtocolStore(for identity: OWSIdentity) -> SignalProtocolStore {
switch identity {
case .aci:
return aciProtocolStore
case .pni:
return pniProtocolStore
}
}
}