89 lines
2.9 KiB
Swift
89 lines
2.9 KiB
Swift
//
|
|
// Copyright 2023 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import Foundation
|
|
|
|
public protocol PreKeyUploadBundle {
|
|
var identity: OWSIdentity { get }
|
|
func getSignedPreKey() -> SignedPreKeyRecord?
|
|
func getPreKeyRecords() -> [PreKeyRecord]?
|
|
func getLastResortPreKey() -> KyberPreKeyRecord?
|
|
func getPqPreKeyRecords() -> [KyberPreKeyRecord]?
|
|
}
|
|
|
|
extension PreKeyUploadBundle {
|
|
func isEmpty() -> Bool {
|
|
if
|
|
getPreKeyRecords() == nil,
|
|
getSignedPreKey() == nil,
|
|
getLastResortPreKey() == nil,
|
|
getPqPreKeyRecords() == nil
|
|
{
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
}
|
|
|
|
public final class PartialPreKeyUploadBundle: PreKeyUploadBundle {
|
|
public let identity: OWSIdentity
|
|
public let signedPreKey: SignedPreKeyRecord?
|
|
public let preKeyRecords: [PreKeyRecord]?
|
|
public let lastResortPreKey: KyberPreKeyRecord?
|
|
public let pqPreKeyRecords: [KyberPreKeyRecord]?
|
|
|
|
internal init(
|
|
identity: OWSIdentity,
|
|
signedPreKey: SignedPreKeyRecord? = nil,
|
|
preKeyRecords: [PreKeyRecord]? = nil,
|
|
lastResortPreKey: KyberPreKeyRecord? = nil,
|
|
pqPreKeyRecords: [KyberPreKeyRecord]? = nil
|
|
) {
|
|
self.identity = identity
|
|
self.signedPreKey = signedPreKey
|
|
self.preKeyRecords = preKeyRecords
|
|
self.lastResortPreKey = lastResortPreKey
|
|
self.pqPreKeyRecords = pqPreKeyRecords
|
|
}
|
|
|
|
public func getSignedPreKey() -> SignedPreKeyRecord? { signedPreKey }
|
|
public func getPreKeyRecords() -> [PreKeyRecord]? { preKeyRecords }
|
|
public func getLastResortPreKey() -> KyberPreKeyRecord? { lastResortPreKey }
|
|
public func getPqPreKeyRecords() -> [KyberPreKeyRecord]? { pqPreKeyRecords }
|
|
}
|
|
|
|
public final class RegistrationPreKeyUploadBundle: PreKeyUploadBundle {
|
|
public let identity: OWSIdentity
|
|
public let identityKeyPair: ECKeyPair
|
|
public let signedPreKey: SignedPreKeyRecord
|
|
public let lastResortPreKey: KyberPreKeyRecord
|
|
|
|
public init(
|
|
identity: OWSIdentity,
|
|
identityKeyPair: ECKeyPair,
|
|
signedPreKey: SignedPreKeyRecord,
|
|
lastResortPreKey: KyberPreKeyRecord
|
|
) {
|
|
self.identity = identity
|
|
self.identityKeyPair = identityKeyPair
|
|
self.signedPreKey = signedPreKey
|
|
self.lastResortPreKey = lastResortPreKey
|
|
}
|
|
|
|
public func getSignedPreKey() -> SignedPreKeyRecord? { signedPreKey }
|
|
public func getPreKeyRecords() -> [PreKeyRecord]? { nil }
|
|
public func getLastResortPreKey() -> KyberPreKeyRecord? { lastResortPreKey }
|
|
public func getPqPreKeyRecords() -> [KyberPreKeyRecord]? { nil }
|
|
}
|
|
|
|
public struct RegistrationPreKeyUploadBundles {
|
|
public let aci: RegistrationPreKeyUploadBundle
|
|
public let pni: RegistrationPreKeyUploadBundle
|
|
|
|
public init(aci: RegistrationPreKeyUploadBundle, pni: RegistrationPreKeyUploadBundle) {
|
|
self.aci = aci
|
|
self.pni = pni
|
|
}
|
|
}
|