Add some support for binary service IDs

This commit is contained in:
Max Radermacher 2025-10-24 17:38:58 -05:00 committed by GitHub
parent 6dd2815fde
commit f20625e780
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
53 changed files with 1562 additions and 365 deletions

View File

@ -77,6 +77,8 @@ def supress_adjacent_capital_letters(name):
result = "".join(chars)
if result.endswith("Id"):
result = result[:-2] + "ID"
if result.endswith("IdBinary"):
result = result[:-8] + "IDBinary"
if result.endswith("Url"):
result = result[:-3] + "URL"
return result

View File

@ -4,6 +4,7 @@
//
import XCTest
import LibSignalClient
@testable import SignalServiceKit
import SwiftProtobuf
@ -59,7 +60,7 @@ class SSKProtoEnvelopeTest: XCTestCase {
func testParse_roundtrip() {
let builder = SSKProtoEnvelope.builder(timestamp: 123)
builder.setType(SSKProtoEnvelopeType.prekeyBundle)
builder.setSourceServiceID("CE599F9B-8C64-4C58-B5D0-E8014501C8A3")
builder.setSourceServiceIDBinary(Aci.constantForTesting("CE599F9B-8C64-4C58-B5D0-E8014501C8A3").serviceIdBinary)
builder.setSourceDevice(1)
let phonyContent = "phony data".data(using: .utf8)!
@ -84,7 +85,7 @@ class SSKProtoEnvelopeTest: XCTestCase {
XCTAssertEqual(envelope.type, SSKProtoEnvelopeType.prekeyBundle)
XCTAssertEqual(envelope.timestamp, 123)
XCTAssertEqual(envelope.sourceServiceID, "CE599F9B-8C64-4C58-B5D0-E8014501C8A3")
XCTAssertEqual(envelope.sourceServiceIDBinary, Aci.constantForTesting("CE599F9B-8C64-4C58-B5D0-E8014501C8A3").serviceIdBinary)
XCTAssertEqual(envelope.sourceDevice, 1)
XCTAssertTrue(envelope.hasContent)
XCTAssertEqual(envelope.content, phonyContent)

View File

@ -11,7 +11,7 @@ import XCTest
final class ContactStreamTest: XCTestCase {
let outputContactSyncData = "GwoMKzEzMjMxMTExMTExEgdBbGljZS0xQABgATMSB0FsaWNlLTJAAEokMzFjZTE0MTItOWEyOC00ZTZmLWI0ZWUtMjIyMjIyMjIyMjIyYAFBCgwrMTMyMTMzMzMzMzMSB0FsaWNlLTNAAEokMWQ0YWIwNDUtODhmYi00YzRlLTlmNmEtMzMzMzMzMzMzMzMzYAE="
let outputContactSyncData = "GwoMKzEzMjMxMTExMTExEgdBbGljZS0xQABgAUUSB0FsaWNlLTJAAEokMzFjZTE0MTItOWEyOC00ZTZmLWI0ZWUtMjIyMjIyMjIyMjIyYAFqEDHOFBKaKE5vtO4iIiIiIiJTCgwrMTMyMTMzMzMzMzMSB0FsaWNlLTNAAEokMWQ0YWIwNDUtODhmYi00YzRlLTlmNmEtMzMzMzMzMzMzMzMzYAFqEB1KsEWI+0xOn2ozMzMzMzM="
private func makeAccount(phoneNumber: String?, serviceId: String?, fullName: String) -> SignalAccount {
return SignalAccount(

View File

@ -52,6 +52,18 @@ extension ServiceId {
}
}
extension ServiceId {
public static func parseFrom(serviceIdBinary: Data?, serviceIdString: String?) -> Self? {
if let serviceIdBinary {
return try? Self.parseFrom(serviceIdBinary: serviceIdBinary)
}
if let serviceIdString {
return try? Self.parseFrom(serviceIdString: serviceIdString)
}
return nil
}
}
extension ProtocolAddress {
public convenience init(_ serviceId: ServiceId, deviceId: DeviceId) {
self.init(serviceId, deviceId: deviceId.uint32Value)
@ -179,6 +191,9 @@ public class ServiceIdObjC: NSObject, NSCopying {
@objc
public var serviceIdString: String { wrappedValue.serviceIdString }
@objc
public var serviceIdBinary: Data { wrappedValue.serviceIdBinary }
@objc
public var serviceIdUppercaseString: String { wrappedValue.serviceIdUppercaseString }
@ -317,15 +332,15 @@ public struct ServiceIdString: Codable, Hashable {
}
@propertyWrapper
public struct ServiceIdUppercaseString: Codable, Hashable {
public let wrappedValue: ServiceId
public struct ServiceIdUppercaseString<T: ServiceId>: Codable, Hashable {
public let wrappedValue: T
public init(wrappedValue: ServiceId) {
public init(wrappedValue: T) {
self.wrappedValue = wrappedValue
}
public init(from decoder: Decoder) throws {
self.wrappedValue = try ServiceId.parseFrom(
self.wrappedValue = try T.parseFrom(
serviceIdString: try decoder.singleValueContainer().decode(String.self)
)
}
@ -337,7 +352,7 @@ public struct ServiceIdUppercaseString: Codable, Hashable {
}
extension ServiceId {
public var codableUppercaseString: ServiceIdUppercaseString { .init(wrappedValue: self) }
public var codableUppercaseString: ServiceIdUppercaseString<ServiceId> { .init(wrappedValue: self) }
}
// MARK: - Unit Tests

View File

@ -468,7 +468,10 @@ class BackupArchiveTSMessageContentsArchiver: BackupArchiveProtoStreamWriter {
bodyRange.start = bodyRangeParam.start
bodyRange.length = bodyRangeParam.length
if let mentionAci = Aci.parseFrom(aciString: bodyRangeParam.mentionAci) {
if let mentionAci = Aci.parseFrom(
serviceIdBinary: bodyRangeParam.mentionAciBinary,
serviceIdString: bodyRangeParam.mentionAci,
) {
bodyRange.associatedValue = .mentionAci(
mentionAci.serviceIdBinary
)

View File

@ -36,7 +36,7 @@ final class BackupArchiveGroupUpdateSwiftToProtoConverter {
func pniData(_ pni: Pni) -> Data {
return pni.rawUUID.data
}
func serviceIdData(_ serviceId: ServiceIdUppercaseString) -> Data {
func serviceIdData(_ serviceId: ServiceIdUppercaseString<ServiceId>) -> Data {
return serviceId.wrappedValue.serviceIdBinary
}

View File

@ -27,6 +27,9 @@ final class ContactOutputStream {
}
if let aci {
contactBuilder.setAci(aci.serviceIdString)
if FeatureFlags.serviceIdBinaryVariableOverhead {
contactBuilder.setAciBinary(aci.serviceIdBinary)
}
}
// TODO: this should be removed after a 90-day timer from when Desktop stops

View File

@ -292,11 +292,14 @@ extension OWSSyncManager: SyncManagerProtocol, SyncManagerProtocolSwift {
_ syncMessage: SSKProtoSyncMessageMessageRequestResponse,
transaction: DBWriteTransaction
) {
guard let thread: TSThread = {
guard let thread = { () -> TSThread? in
if let groupId = syncMessage.groupID {
return TSGroupThread.fetch(groupId: groupId, transaction: transaction)
}
if let threadAci = Aci.parseFrom(aciString: syncMessage.threadAci) {
if let threadAci = Aci.parseFrom(
serviceIdBinary: syncMessage.threadAciBinary,
serviceIdString: syncMessage.threadAci,
) {
return TSContactThread.getWithContactAddress(SignalServiceAddress(threadAci), transaction: transaction)
}
return nil

View File

@ -42,7 +42,10 @@ class ContactsInputStream {
_ = try inputStream.decodeData(count: Int(contactDetails.avatar.length))
}
let aci = Aci.parseFrom(aciString: contactDetails.hasAci ? contactDetails.aci : nil)
let aci = Aci.parseFrom(
serviceIdBinary: contactDetails.hasAciBinary ? contactDetails.aciBinary : nil,
serviceIdString: contactDetails.hasAci ? contactDetails.aci : nil,
)
let phoneNumber = E164.expectNilOrValid(stringValue: contactDetails.hasContactE164 ? contactDetails.contactE164 : nil)
return ContactDetails(

View File

@ -93,23 +93,26 @@ public struct LinkingProvisioningMessage {
self.phoneNumber = phoneNumber
self.aci = try {
guard
let aciString = proto.aci,
let aci = Aci.parseFrom(aciString: aciString)
else {
guard let aci = Aci.parseFrom(serviceIdBinary: proto.aciBinary, serviceIdString: proto.aci) else {
throw ProvisioningError.invalidProvisionMessage("invalid ACI from provisioning message")
}
return aci
}()
self.pni = try {
guard
let pniString = proto.pni,
let pni = Pni.parseFrom(ambiguousString: pniString)
else {
throw ProvisioningError.invalidProvisionMessage("invalid PNI from provisioning message")
if let pniBinary = proto.pniBinary {
guard let pniUuid = UUID(data: pniBinary) else {
throw ProvisioningError.invalidProvisionMessage("invalid PNI from provisioning message")
}
return Pni(fromUUID: pniUuid)
}
return pni
if let pniString = proto.pni {
guard let pni = Pni.parseFrom(ambiguousString: pniString) else {
throw ProvisioningError.invalidProvisionMessage("invalid PNI from provisioning message")
}
return pni
}
throw ProvisioningError.invalidProvisionMessage("invalid PNI from provisioning message")
}()
if
@ -151,7 +154,13 @@ public struct LinkingProvisioningMessage {
messageBuilder.setProvisioningVersion(Constants.provisioningVersion)
messageBuilder.setNumber(phoneNumber)
messageBuilder.setAci(aci.rawUUID.uuidString.lowercased())
if FeatureFlags.serviceIdBinaryProvisioning {
messageBuilder.setAciBinary(aci.rawUUID.data)
}
messageBuilder.setPni(pni.rawUUID.uuidString.lowercased())
if FeatureFlags.serviceIdBinaryProvisioning {
messageBuilder.setPniBinary(pni.rawUUID.data)
}
switch rootKey {
case .accountEntropyPool(let accountEntropyPool):

View File

@ -46,6 +46,17 @@ NS_ASSUME_NONNULL_BEGIN
SSKProtoSyncMessageBlockedBuilder *blockedBuilder = [SSKProtoSyncMessageBlocked builder];
[blockedBuilder setNumbers:_phoneNumbers];
[blockedBuilder setAcis:_uuids];
NSMutableArray<NSData *> *aciBinaries = [NSMutableArray array];
for (NSString *aciString in _uuids) {
AciObjC *aciObj = [[AciObjC alloc] initWithAciString:aciString];
if (aciObj != nil) {
[aciBinaries addObject:aciObj.serviceIdBinary];
}
}
if (FeatureFlagsObjC.serviceIdBinaryVariableOverhead) {
[blockedBuilder setAcisBinary:aciBinaries];
}
[blockedBuilder setGroupIds:_groupIds];
SSKProtoSyncMessageBlocked *blockedProto = [blockedBuilder buildInfallibly];

View File

@ -43,7 +43,15 @@ NS_ASSUME_NONNULL_BEGIN
SSKProtoSyncMessageReadBuilder *readProtoBuilder =
[SSKProtoSyncMessageRead builderWithTimestamp:readReceipt.messageIdTimestamp];
[readProtoBuilder setSenderAci:readReceipt.senderAddress.aciString];
ServiceIdObjC *aciObj = readReceipt.senderAddress.serviceIdObjC;
if ([aciObj isKindOfClass:[AciObjC class]]) {
[readProtoBuilder setSenderAci:aciObj.serviceIdString];
if (FeatureFlagsObjC.serviceIdBinaryVariableOverhead) {
[readProtoBuilder setSenderAciBinary:aciObj.serviceIdBinary];
}
} else {
OWSFailDebug(@"can't send read receipt for message without an ACI");
}
NSError *error;
SSKProtoSyncMessageRead *_Nullable readProto = [readProtoBuilder buildAndReturnError:&error];

View File

@ -62,7 +62,15 @@ NS_ASSUME_NONNULL_BEGIN
SSKProtoSyncMessageViewOnceOpenBuilder *readProtoBuilder =
[SSKProtoSyncMessageViewOnceOpen builderWithTimestamp:self.messageIdTimestamp];
readProtoBuilder.senderAci = self.senderAddress.aciString;
ServiceIdObjC *senderAci = self.senderAddress.serviceIdObjC;
if ([senderAci isKindOfClass:[AciObjC class]]) {
readProtoBuilder.senderAci = senderAci.serviceIdString;
if (FeatureFlagsObjC.serviceIdBinaryConstantOverhead) {
readProtoBuilder.senderAciBinary = senderAci.serviceIdBinary;
}
} else {
OWSFailDebug(@"can't send view once open sync for message without an ACI");
}
NSError *error;
SSKProtoSyncMessageViewOnceOpen *_Nullable readProto = [readProtoBuilder buildAndReturnError:&error];
if (error || !readProto) {

View File

@ -48,7 +48,15 @@ NS_ASSUME_NONNULL_BEGIN
SSKProtoSyncMessageViewedBuilder *viewedProtoBuilder =
[SSKProtoSyncMessageViewed builderWithTimestamp:viewedReceipt.messageIdTimestamp];
[viewedProtoBuilder setSenderAci:viewedReceipt.senderAddress.aciString];
ServiceIdObjC *aciObj = viewedReceipt.senderAddress.serviceIdObjC;
if ([aciObj isKindOfClass:[AciObjC class]]) {
[viewedProtoBuilder setSenderAci:aciObj.serviceIdString];
if (FeatureFlagsObjC.serviceIdBinaryVariableOverhead) {
[viewedProtoBuilder setSenderAciBinary:aciObj.serviceIdBinary];
}
} else {
OWSFailDebug(@"can't send viewed receipt for message without an ACI");
}
NSError *error;
SSKProtoSyncMessageViewed *_Nullable viewedProto = [viewedProtoBuilder buildAndReturnError:&error];

View File

@ -86,6 +86,21 @@ public enum FeatureFlags {
// migration. That should happen by 2026-05-27. Then, delete all the code
// that's now dead because this is false.
public static let decodeDeprecatedPreKeys = true
public static let serviceIdBinaryProvisioning = true
public static let serviceIdBinaryConstantOverhead = build <= .internal
public static let serviceIdBinaryVariableOverhead = build <= .dev
public static let serviceIdBinaryOneOf = false
}
// MARK: -
@objc
public class FeatureFlagsObjC: NSObject {
@objc
public static let serviceIdBinaryConstantOverhead = FeatureFlags.serviceIdBinaryConstantOverhead
@objc
public static let serviceIdBinaryVariableOverhead = FeatureFlags.serviceIdBinaryVariableOverhead
}
// MARK: -

View File

@ -74,7 +74,7 @@ public class MessageBodyRanges: NSObject, NSCopying, NSSecureCoding {
continue
}
let range = NSRange(location: Int(proto.start), length: Int(proto.length))
if let mentionAciString = proto.mentionAci, let mentionAci = Aci.parseFrom(aciString: mentionAciString) {
if let mentionAci = Aci.parseFrom(serviceIdBinary: proto.mentionAciBinary, serviceIdString: proto.mentionAci) {
mentions[range] = mentionAci
} else if
let protoStyle = proto.style,
@ -422,7 +422,11 @@ public class MessageBodyRanges: NSObject, NSCopying, NSSecureCoding {
guard let builder = self.protoBuilder(mention.range, maxBodyLength: maxBodyLength) else {
return
}
builder.setMentionAci(mention.value.serviceIdString)
if FeatureFlags.serviceIdBinaryOneOf {
builder.setMentionAciBinary(mention.value.serviceIdBinary)
} else {
builder.setMentionAci(mention.value.serviceIdString)
}
protos.append(builder.buildInfallibly())
}

View File

@ -120,14 +120,19 @@ class DeleteForMeOutgoingSyncMessage: OWSOutgoingSyncMessage {
extension DeleteForMeSyncMessage.Outgoing {
enum ConversationIdentifier: Codable, Equatable {
case threadServiceId(serviceId: String)
case threadServiceId(serviceId: ServiceIdUppercaseString<ServiceId>)
case threadE164(e164: String)
case threadGroupId(groupId: Data)
fileprivate var asProto: SSKProtoSyncMessageDeleteForMeConversationIdentifier {
let protoBuilder = SSKProtoSyncMessageDeleteForMeConversationIdentifier.builder()
switch self {
case .threadServiceId(let serviceId): protoBuilder.setThreadServiceID(serviceId)
case .threadServiceId(let serviceId):
if FeatureFlags.serviceIdBinaryOneOf {
protoBuilder.setThreadServiceIDBinary(serviceId.wrappedValue.serviceIdBinary)
} else {
protoBuilder.setThreadServiceID(serviceId.wrappedValue.serviceIdString)
}
case .threadE164(let e164): protoBuilder.setThreadE164(e164)
case .threadGroupId(let groupId): protoBuilder.setThreadGroupID(groupId)
}
@ -139,7 +144,7 @@ extension DeleteForMeSyncMessage.Outgoing {
enum Author: Codable, Equatable {
/// The author's ACI. Note that the author of a message must be an
/// ACI, never a PNI.
case aci(aci: String)
case aci(aci: ServiceIdUppercaseString<Aci>)
/// The author's E164, if their ACI is absent. This should only be
/// relevant for old (pre-ACI) messages.
case e164(e164: String)
@ -177,7 +182,7 @@ extension DeleteForMeSyncMessage.Outgoing {
private init?(incomingMessage: TSIncomingMessage) {
if let authorAci = incomingMessage.authorAddress.aci {
author = .aci(aci: authorAci.serviceIdUppercaseString)
author = .aci(aci: ServiceIdUppercaseString(wrappedValue: authorAci))
} else if let authorE164 = incomingMessage.authorAddress.e164 {
author = .e164(e164: authorE164.stringValue)
} else {
@ -188,7 +193,7 @@ extension DeleteForMeSyncMessage.Outgoing {
}
private init(outgoingMessage: TSOutgoingMessage, localIdentifiers: LocalIdentifiers) {
author = .aci(aci: localIdentifiers.aci.serviceIdUppercaseString)
author = .aci(aci: ServiceIdUppercaseString(wrappedValue: localIdentifiers.aci))
sentTimestamp = outgoingMessage.timestamp
}
@ -196,7 +201,12 @@ extension DeleteForMeSyncMessage.Outgoing {
let protoBuilder = SSKProtoSyncMessageDeleteForMeAddressableMessage.builder()
protoBuilder.setSentTimestamp(sentTimestamp)
switch author {
case .aci(let aci): protoBuilder.setAuthorServiceID(aci)
case .aci(let aci):
if FeatureFlags.serviceIdBinaryOneOf {
protoBuilder.setAuthorServiceIDBinary(aci.wrappedValue.serviceIdBinary)
} else {
protoBuilder.setAuthorServiceID(aci.wrappedValue.serviceIdString)
}
case .e164(let e164): protoBuilder.setAuthorE164(e164)
}
return protoBuilder.buildInfallibly()

View File

@ -344,7 +344,7 @@ final class DeleteForMeOutgoingSyncMessageManagerImpl: DeleteForMeOutgoingSyncMe
let contactThread = thread as? TSContactThread,
let contactServiceId = recipientDatabaseTable.fetchServiceId(contactThread: contactThread, tx: tx)
{
return .threadServiceId(serviceId: contactServiceId.serviceIdUppercaseString)
return .threadServiceId(serviceId: ServiceIdUppercaseString(wrappedValue: contactServiceId))
} else if
let contactThread = thread as? TSContactThread,
let contactE164 = contactThread.contactPhoneNumber
@ -509,7 +509,7 @@ open class MockDeleteForMeOutgoingSyncMessageManager: DeleteForMeOutgoingSyncMes
public func makeThreadDeletionContext(thread: TSThread, isFullDelete: Bool, localIdentifiers: LocalIdentifiers, tx: DBReadTransaction) -> Outgoing.ThreadDeletionContext? {
let conversationIdentifier: Outgoing.ConversationIdentifier = if let contactThread = thread as? TSContactThread {
.threadServiceId(serviceId: contactThread.contactUUID!)
.threadServiceId(serviceId: ServiceIdUppercaseString(wrappedValue: try! ServiceId.parseFrom(serviceIdString: contactThread.contactUUID!)))
} else if let groupThread = thread as? TSGroupThread {
.threadGroupId(groupId: groupThread.groupId)
} else {

View File

@ -167,9 +167,10 @@ final class DeleteForMeSyncMessageReceiverImpl: DeleteForMeSyncMessageReceiver {
) -> Conversation? {
guard let proto else { return nil }
if
let threadServiceId = proto.threadServiceID.flatMap({ try? ServiceId.parseFrom(serviceIdString: $0) })
{
if let threadServiceId = ServiceId.parseFrom(
serviceIdBinary: proto.threadServiceIDBinary,
serviceIdString: proto.threadServiceID,
) {
if
let localIdentifiers = tsAccountManager.localIdentifiers(tx: tx),
localIdentifiers.contains(serviceId: threadServiceId),
@ -226,7 +227,10 @@ final class DeleteForMeSyncMessageReceiverImpl: DeleteForMeSyncMessageReceiver {
let sentTimestamp = proto.sentTimestamp
var author: AddressableMessage.Author?
if let authorServiceId = proto.authorServiceID.flatMap({ try? ServiceId.parseFrom(serviceIdString: $0) }) {
if let authorServiceId = ServiceId.parseFrom(
serviceIdBinary: proto.authorServiceIDBinary,
serviceIdString: proto.authorServiceID,
) {
if
let localIdentifiers = tsAccountManager.localIdentifiers(tx: tx),
localIdentifiers.contains(serviceId: authorServiceId)

View File

@ -47,13 +47,15 @@ public class OWSIncomingSentMessageTranscript: SentMessageTranscript {
groupId = contextInfo.groupId
recipientAddress = nil
} else if
sentProto.destinationServiceID != nil
|| sentProto.destinationE164 != nil
{
let destinationAddress = SignalServiceAddress.legacyAddress(
} else if sentProto.hasDestinationServiceID || sentProto.hasDestinationServiceIDBinary || sentProto.destinationE164 != nil {
let serviceId = ServiceId.parseFrom(
serviceIdBinary: sentProto.destinationServiceIDBinary,
serviceIdString: sentProto.destinationServiceID,
phoneNumber: sentProto.destinationE164?.nilIfEmpty
)
let destinationAddress = SignalServiceAddress(
serviceId: serviceId,
legacyPhoneNumber: sentProto.destinationE164?.nilIfEmpty,
cache: SSKEnvironment.shared.signalServiceAddressCacheRef,
)
guard destinationAddress.isValid else {
owsFailDebug("Invalid destinationAddress.")
@ -151,8 +153,10 @@ public class OWSIncomingSentMessageTranscript: SentMessageTranscript {
var recipientStates = [SignalServiceAddress: TSOutgoingMessageRecipientState]()
for statusProto in sentProto.unidentifiedStatus {
guard
let serviceIdString = statusProto.destinationServiceID,
let serviceId = try? ServiceId.parseFrom(serviceIdString: serviceIdString),
let serviceId = ServiceId.parseFrom(
serviceIdBinary: statusProto.destinationServiceIDBinary,
serviceIdString: statusProto.destinationServiceID,
),
statusProto.hasUnidentified
else {
owsFailDebug("Delivery status proto is missing value.")
@ -303,10 +307,13 @@ public class OWSIncomingSentMessageTranscript: SentMessageTranscript {
if
let storyContext = dataMessage.storyContext,
storyContext.hasSentTimestamp,
let authorAci = storyContext.authorAci
storyContext.hasAuthorAci || storyContext.hasAuthorAciBinary
{
storyTimestamp = storyContext.sentTimestamp
storyAuthorAci = try Aci.parseFrom(serviceIdString: authorAci)
storyAuthorAci = Aci.parseFrom(serviceIdBinary: storyContext.authorAciBinary, serviceIdString: storyContext.authorAci)
guard storyAuthorAci != nil else {
throw OWSAssertionError("Couldn't parse story author")
}
} else {
storyTimestamp = nil
storyAuthorAci = nil

View File

@ -93,6 +93,9 @@ NS_ASSUME_NONNULL_BEGIN
[sentBuilder setTimestamp:self.timestamp];
[sentBuilder setDestinationE164:self.sentRecipientAddress.phoneNumber];
[sentBuilder setDestinationServiceID:self.sentRecipientAddress.serviceIdString];
if (FeatureFlagsObjC.serviceIdBinaryConstantOverhead) {
[sentBuilder setDestinationServiceIDBinary:self.sentRecipientAddress.serviceIdObjC.serviceIdBinary];
}
[sentBuilder setIsRecipientUpdate:self.isRecipientUpdate];
if (![self prepareDataSyncMessageContentWithSentBuilder:sentBuilder tx:transaction]) {

View File

@ -81,6 +81,9 @@ extension OWSOutgoingSentMessageTranscript {
let statusBuilder = SSKProtoSyncMessageSentUnidentifiedDeliveryStatus.builder()
statusBuilder.setDestinationServiceID(recipientServiceId.serviceIdString)
if FeatureFlags.serviceIdBinaryVariableOverhead {
statusBuilder.setDestinationServiceIDBinary(recipientServiceId.serviceIdBinary)
}
statusBuilder.setUnidentified(recipientState.wasSentByUD)
sentBuilder.addUnidentifiedStatus(statusBuilder.buildInfallibly())

View File

@ -81,6 +81,10 @@ NS_ASSUME_NONNULL_BEGIN
messageRequestResponseBuilder.groupID = self.groupId;
} else if (self.threadAci != nil) {
messageRequestResponseBuilder.threadAci = self.threadAci;
if (FeatureFlagsObjC.serviceIdBinaryConstantOverhead) {
messageRequestResponseBuilder.threadAciBinary =
[[AciObjC alloc] initWithAciString:self.threadAci].serviceIdBinary;
}
} else if (self.version < 2) {
// Fallback behavior. Messages of this version are no longer created.
// Eventually, all enqueued messages of this type should be resolved
@ -98,7 +102,13 @@ NS_ASSUME_NONNULL_BEGIN
} else {
OWSAssertDebug([thread isKindOfClass:[TSContactThread class]]);
TSContactThread *contactThread = (TSContactThread *)thread;
messageRequestResponseBuilder.threadAci = contactThread.contactAddress.aciString;
ServiceIdObjC *threadAci = contactThread.contactAddress.serviceIdObjC;
if ([threadAci isKindOfClass:[AciObjC class]]) {
messageRequestResponseBuilder.threadAci = threadAci.serviceIdString;
if (FeatureFlagsObjC.serviceIdBinaryConstantOverhead) {
messageRequestResponseBuilder.threadAciBinary = threadAci.serviceIdBinary;
}
}
}
}

View File

@ -234,7 +234,10 @@ internal class SpecificGroupMessageProcessor {
hasGroupBeenUpdated: Bool,
tx: DBReadTransaction
) -> GroupMessageProcessorManager.DiscardMode {
guard let sourceAci = Aci.parseFrom(aciString: jobInfo.envelope.sourceServiceID) else {
guard let sourceAci = Aci.parseFrom(
serviceIdBinary: jobInfo.envelope.sourceServiceIDBinary,
serviceIdString: jobInfo.envelope.sourceServiceID,
) else {
owsFailDebug("Invalid source address.")
return .discard
}
@ -458,8 +461,10 @@ internal class SpecificGroupMessageProcessor {
do {
let spamReportingMetadata: GroupUpdateSpamReportingMetadata = {
guard let serverGuid = jobInfo.envelope.serverGuid else { return .unreportable }
return .reportable(serverGuid: serverGuid)
guard let serverGuid = ValidatedIncomingEnvelope.parseServerGuid(fromEnvelope: jobInfo.envelope) else {
return .unreportable
}
return .reportable(serverGuid: serverGuid.uuidString.lowercased())
}()
try await SSKEnvironment.shared.groupsV2Ref.updateGroupWithChangeActions(
spamReportingMetadata: spamReportingMetadata,
@ -483,8 +488,10 @@ internal class SpecificGroupMessageProcessor {
private func tryToUpdateUsingService(jobInfo: IncomingGroupsV2MessageJobInfo) async throws(RetryableError) -> Bool {
let spamReportingMetadata: GroupUpdateSpamReportingMetadata = {
guard let serverGuid = jobInfo.envelope.serverGuid else { return .unreportable }
return .reportable(serverGuid: serverGuid)
guard let serverGuid = ValidatedIncomingEnvelope.parseServerGuid(fromEnvelope: jobInfo.envelope) else {
return .unreportable
}
return .reportable(serverGuid: serverGuid.uuidString.lowercased())
}()
do {
try await SSKEnvironment.shared.groupV2UpdatesRef.refreshGroup(

View File

@ -4,13 +4,13 @@
//
import Foundation
import LibSignalClient
public import LibSignalClient
public protocol IncomingPniChangeNumberProcessor {
func processIncomingPniChangePhoneNumber(
proto: SSKProtoSyncMessagePniChangeNumber,
updatedPni updatedPniString: String?,
updatedPni: Pni,
tx: DBWriteTransaction
)
}
@ -48,14 +48,9 @@ public class IncomingPniChangeNumberProcessorImpl: IncomingPniChangeNumberProces
public func processIncomingPniChangePhoneNumber(
proto: SSKProtoSyncMessagePniChangeNumber,
updatedPni updatedPniString: String?,
updatedPni: Pni,
tx: DBWriteTransaction
) {
guard let updatedPni = Pni.parseFrom(pniString: updatedPniString) else {
owsFailDebug("Missing or invalid updated PNI string while processing incoming PNI change-number sync message!")
return
}
guard let localAci = tsAccountManager.localIdentifiers(tx: tx)?.aci else {
owsFailDebug("Missing ACI while processing incoming PNI change-number sync message!")
return

View File

@ -45,7 +45,7 @@ public class QuotedReplyManagerImpl: QuotedReplyManager {
owsFailDebug("Invalid timestamp")
return nil
}
guard let quoteAuthor = Aci.parseFrom(aciString: quote.authorAci) else {
guard let quoteAuthor = Aci.parseFrom(serviceIdBinary: quote.authorAciBinary, serviceIdString: quote.authorAci) else {
owsFailDebug("quoted message missing author")
return nil
}
@ -794,6 +794,9 @@ public class QuotedReplyManagerImpl: QuotedReplyManager {
throw OWSAssertionError("It should be impossible to quote a message without a UUID")
}
quoteBuilder.setAuthorAci(authorAci.serviceIdString)
if FeatureFlags.serviceIdBinaryConstantOverhead {
quoteBuilder.setAuthorAciBinary(authorAci.serviceIdBinary)
}
var hasQuotedText = false
var hasQuotedAttachment = false

View File

@ -4,7 +4,7 @@
//
import Foundation
import LibSignalClient
public import LibSignalClient
extension TSInfoMessage {
@objc(TSInfoMessageUpdateMessages)
@ -131,7 +131,7 @@ extension TSInfoMessage {
case sequenceOfInviteLinkRequestAndCancels(count: UInt, isTail: Bool)
case invitedPniPromotedToFullMemberAci(pni: PniUuid, aci: AciUuid)
case inviteRemoved(invitee: ServiceIdUppercaseString, wasLocalUser: Bool)
case inviteRemoved(invitee: ServiceIdUppercaseString<ServiceId>, wasLocalUser: Bool)
func toNewItem(
updater: GroupUpdateSource,
@ -490,7 +490,7 @@ extension TSInfoMessage {
case localUserWasInvitedByOtherUser(updaterAci: AciUuid)
case localUserWasInvitedByUnknownUser
case otherUserWasInvitedByLocalUser(inviteeServiceId: ServiceIdUppercaseString)
case otherUserWasInvitedByLocalUser(inviteeServiceId: ServiceIdUppercaseString<ServiceId>)
case unnamedUsersWereInvitedByLocalUser(count: UInt)
case unnamedUsersWereInvitedByOtherUser(updaterAci: AciUuid, count: UInt)
@ -515,9 +515,9 @@ extension TSInfoMessage {
case localUserDeclinedInviteFromInviter(inviterAci: AciUuid)
case localUserDeclinedInviteFromUnknownUser
case otherUserDeclinedInviteFromLocalUser(invitee: ServiceIdUppercaseString)
case otherUserDeclinedInviteFromInviter(invitee: ServiceIdUppercaseString, inviterAci: AciUuid)
case otherUserDeclinedInviteFromUnknownUser(invitee: ServiceIdUppercaseString)
case otherUserDeclinedInviteFromLocalUser(invitee: ServiceIdUppercaseString<ServiceId>)
case otherUserDeclinedInviteFromInviter(invitee: ServiceIdUppercaseString<ServiceId>, inviterAci: AciUuid)
case otherUserDeclinedInviteFromUnknownUser(invitee: ServiceIdUppercaseString<ServiceId>)
case unnamedUserDeclinedInviteFromInviter(inviterAci: AciUuid)
case unnamedUserDeclinedInviteFromUnknownUser
@ -525,7 +525,7 @@ extension TSInfoMessage {
case localUserInviteRevokedByUnknownUser
// For a single invite we revoked we keep the invitee.
// For many, or if someone else revoked, we just keep the number.
case otherUserInviteRevokedByLocalUser(invitee: ServiceIdUppercaseString)
case otherUserInviteRevokedByLocalUser(invitee: ServiceIdUppercaseString<ServiceId>)
case unnamedUserInvitesWereRevokedByLocalUser(count: UInt)
case unnamedUserInvitesWereRevokedByOtherUser(updaterAci: AciUuid, count: UInt)
case unnamedUserInvitesWereRevokedByUnknownUser(count: UInt)

View File

@ -474,8 +474,10 @@ NSUInteger const TSOutgoingMessageSchemaVersion = 1;
SSKProtoDataMessageReactionBuilder *reactionBuilder =
[SSKProtoDataMessageReaction builderWithEmoji:self.storyReactionEmoji
timestamp:self.storyTimestamp.unsignedLongLongValue];
// ACI TODO: Use `serviceIdString` to populate this value.
[reactionBuilder setTargetAuthorAci:self.storyAuthorUuidString];
[reactionBuilder setTargetAuthorAci:self.storyAuthorAci.serviceIdString];
if (FeatureFlagsObjC.serviceIdBinaryConstantOverhead) {
[reactionBuilder setTargetAuthorAciBinary:self.storyAuthorAci.serviceIdBinary];
}
NSError *error;
SSKProtoDataMessageReaction *_Nullable reaction = [reactionBuilder buildAndReturnError:&error];
@ -491,8 +493,10 @@ NSUInteger const TSOutgoingMessageSchemaVersion = 1;
}
SSKProtoDataMessageStoryContextBuilder *storyContextBuilder = [SSKProtoDataMessageStoryContext builder];
// ACI TODO: Use `serviceIdString` to populate this value.
[storyContextBuilder setAuthorAci:self.storyAuthorUuidString];
[storyContextBuilder setAuthorAci:self.storyAuthorAci.serviceIdString];
if (FeatureFlagsObjC.serviceIdBinaryConstantOverhead) {
[storyContextBuilder setAuthorAciBinary:self.storyAuthorAci.serviceIdBinary];
}
[storyContextBuilder setSentTimestamp:self.storyTimestamp.unsignedLongLongValue];
[builder setStoryContext:[storyContextBuilder buildInfallibly]];

View File

@ -172,7 +172,7 @@ public class MessageProcessor {
}
}
private var recentlyProcessedGuids = SetDeque<String>()
private var recentlyProcessedGuids = SetDeque<UUID>()
/// Should ideally match `MESSAGE_SENDER_MAX_CONCURRENCY`.
private var recentlyProcessedGuidLimit = 256
@ -242,7 +242,7 @@ public class MessageProcessor {
processedEnvelopesCount += batchEnvelopes.count - remainingEnvelopes.count
}
for processedEnvelope in batchEnvelopes.prefix(processedEnvelopesCount) {
guard let serverGuid = processedEnvelope.envelope.serverGuid else {
guard let serverGuid = ValidatedIncomingEnvelope.parseServerGuid(fromEnvelope: processedEnvelope.envelope) else {
continue
}
recentlyProcessedGuids.pushBack(serverGuid)
@ -555,7 +555,7 @@ private extension MessageProcessor {
tx: DBWriteTransaction
) -> ProcessingRequest {
assertOnQueue(queueForProcessing)
if let serverGuid = envelope.envelope.serverGuid, recentlyProcessedGuids.contains(serverGuid) {
if let serverGuid = ValidatedIncomingEnvelope.parseServerGuid(fromEnvelope: envelope.envelope), recentlyProcessedGuids.contains(serverGuid) {
return ProcessingRequest(envelope, state: .completed(error: OWSGenericError("Skipping because it was recently processed.")))
}
let builder = ProcessingRequestBuilder(

View File

@ -410,11 +410,16 @@ public final class MessageReceiver {
toProfileWhitelist: groupId.serialize(), userProfileWriter: .localUser, transaction: tx
)
} else {
let serviceId = ServiceId.parseFrom(
serviceIdBinary: sent.destinationServiceIDBinary,
serviceIdString: sent.destinationServiceID,
)
// If we observe a linked device sending our profile key to another user,
// we can infer that that user belongs in our profile whitelist.
let destinationAddress = SignalServiceAddress.legacyAddress(
serviceIdString: sent.destinationServiceID,
phoneNumber: sent.destinationE164?.nilIfEmpty
let destinationAddress = SignalServiceAddress(
serviceId: serviceId,
legacyPhoneNumber: sent.destinationE164?.nilIfEmpty,
cache: SSKEnvironment.shared.signalServiceAddressCacheRef,
)
if destinationAddress.isValid {
SSKEnvironment.shared.profileManagerRef.addUser(
@ -444,7 +449,10 @@ public final class MessageReceiver {
case .success, .invalidReaction:
break
case .associatedMessageMissing:
let messageAuthor = Aci.parseFrom(aciString: reaction.targetAuthorAci)
let messageAuthor = Aci.parseFrom(
serviceIdBinary: reaction.targetAuthorAciBinary,
serviceIdString: reaction.targetAuthorAci,
)
SSKEnvironment.shared.earlyMessageManagerRef.recordEarlyEnvelope(
envelope,
plainTextData: request.plaintextData,
@ -582,7 +590,10 @@ public final class MessageReceiver {
syncMessage.read, readTimestamp: decryptedEnvelope.timestamp, tx: tx
)
for readReceiptProto in earlyReceipts {
let messageAuthor = Aci.parseFrom(aciString: readReceiptProto.senderAci)
let messageAuthor = Aci.parseFrom(
serviceIdBinary: readReceiptProto.senderAciBinary,
serviceIdString: readReceiptProto.senderAci,
)
SSKEnvironment.shared.earlyMessageManagerRef.recordEarlyReadReceiptFromLinkedDevice(
timestamp: decryptedEnvelope.timestamp,
associatedMessageTimestamp: readReceiptProto.timestamp,
@ -595,7 +606,10 @@ public final class MessageReceiver {
syncMessage.viewed, viewedTimestamp: decryptedEnvelope.timestamp, tx: tx
)
for viewedReceiptProto in earlyReceipts {
let messageAuthor = Aci.parseFrom(aciString: viewedReceiptProto.senderAci)
let messageAuthor = Aci.parseFrom(
serviceIdBinary: viewedReceiptProto.senderAciBinary,
serviceIdString: viewedReceiptProto.senderAci,
)
SSKEnvironment.shared.earlyMessageManagerRef.recordEarlyViewedReceiptFromLinkedDevice(
timestamp: decryptedEnvelope.timestamp,
associatedMessageTimestamp: viewedReceiptProto.timestamp,
@ -650,9 +664,26 @@ public final class MessageReceiver {
)
} else if let pniChangeNumber = syncMessage.pniChangeNumber {
let pniProcessor = DependenciesBridge.shared.incomingPniChangeNumberProcessor
let updatedPni: Pni
if let updatedPniBinary = envelope.updatedPniBinary {
guard let _updatedPni = UUID(data: updatedPniBinary) else {
owsFailDebug("Couldn't parse updated PNI")
return
}
updatedPni = Pni(fromUUID: _updatedPni)
} else if let updatedPniString = envelope.updatedPni {
guard let _updatedPni = Pni.parseFrom(pniString: updatedPniString) else {
owsFailDebug("Couldn't parse updated PNI")
return
}
updatedPni = _updatedPni
} else {
owsFailDebug("Can't change number without PNI")
return
}
pniProcessor.processIncomingPniChangePhoneNumber(
proto: pniChangeNumber,
updatedPni: envelope.updatedPni,
updatedPni: updatedPni,
tx: tx
)
} else if let callEvent = syncMessage.callEvent {
@ -760,12 +791,22 @@ public final class MessageReceiver {
private func handleSyncedBlocklist(_ blocked: SSKProtoSyncMessageBlocked, tx: DBWriteTransaction) {
var blockedAcis = Set<Aci>()
for aciString in blocked.acis {
guard let aci = Aci.parseFrom(aciString: aciString) else {
owsFailDebug("Blocked ACI was nil.")
continue
if !blocked.acisBinary.isEmpty {
for aciBinary in blocked.acisBinary {
guard let aci = try? Aci.parseFrom(serviceIdBinary: aciBinary) else {
owsFailDebug("Blocked ACI binary was nil")
continue
}
blockedAcis.insert(aci)
}
} else {
for aciString in blocked.acis {
guard let aci = Aci.parseFrom(aciString: aciString) else {
owsFailDebug("Blocked ACI was nil.")
continue
}
blockedAcis.insert(aci)
}
blockedAcis.insert(aci)
}
SSKEnvironment.shared.blockingManagerRef.processIncomingSync(
blockedPhoneNumbers: Set(blocked.numbers),
@ -958,7 +999,10 @@ public final class MessageReceiver {
wasReceivedByUD: request.wasReceivedByUD,
serverDeliveryTimestamp: request.serverDeliveryTimestamp,
associatedMessageTimestamp: reaction.timestamp,
associatedMessageAuthor: Aci.parseFrom(aciString: reaction.targetAuthorAci),
associatedMessageAuthor: Aci.parseFrom(
serviceIdBinary: reaction.targetAuthorAciBinary,
serviceIdString: reaction.targetAuthorAci,
),
transaction: tx
)
}
@ -1034,7 +1078,7 @@ public final class MessageReceiver {
tx: tx
)
}
let serverGuid = envelope.envelope.serverGuid.flatMap { UUID(uuidString: $0) }
let serverGuid = ValidatedIncomingEnvelope.parseServerGuid(fromEnvelope: envelope.envelope)
let quotedMessageBuilder = DependenciesBridge.shared.quotedReplyManager.quotedMessage(
for: dataMessage,
thread: thread,
@ -1121,9 +1165,9 @@ public final class MessageReceiver {
var storyTimestamp: UInt64?
var storyAuthorAci: Aci?
if let storyContext = dataMessage.storyContext, storyContext.hasSentTimestamp, storyContext.hasAuthorAci {
if let storyContext = dataMessage.storyContext, storyContext.hasSentTimestamp, (storyContext.hasAuthorAci || storyContext.hasAuthorAciBinary) {
storyTimestamp = storyContext.sentTimestamp
storyAuthorAci = Aci.parseFrom(aciString: storyContext.authorAci)
storyAuthorAci = Aci.parseFrom(serviceIdBinary: storyContext.authorAciBinary, serviceIdString: storyContext.authorAci)
Logger.info("Processing storyContext for message w/ts \(envelope.timestamp), storyTimestamp: \(String(describing: storyTimestamp)), authorAci: \(String(describing: storyAuthorAci))")
guard let storyAuthorAci else {
owsFailDebug("Discarding story reply with invalid ACI")
@ -1931,7 +1975,7 @@ public final class MessageReceiver {
let message = try DependenciesBridge.shared.editManager.processIncomingEditMessage(
dataMessage,
serverTimestamp: envelope.serverTimestamp,
serverGuid: envelope.envelope.serverGuid,
serverGuid: ValidatedIncomingEnvelope.parseServerGuid(fromEnvelope: envelope.envelope)?.uuidString.lowercased(),
serverDeliveryTimestamp: serverDeliveryTimestamp,
thread: thread,
editTarget: editTarget,
@ -2000,7 +2044,11 @@ public final class MessageReceiver {
extension SSKProtoEnvelope {
@objc
var formattedAddress: String {
return "\(String(describing: sourceServiceID)).\(sourceDevice)"
let serviceId = ServiceId.parseFrom(
serviceIdBinary: self.sourceServiceIDBinary,
serviceIdString: self.sourceServiceID,
)
return "\(serviceId as Optional).\(sourceDevice)"
}
}

View File

@ -78,7 +78,6 @@ open class MockIdentityManager: OWSIdentityManager {
open func verificationState(for address: SignalServiceAddress, tx: DBReadTransaction) -> VerificationState { fatalError() }
open func setVerificationState(_ verificationState: VerificationState, of identityKey: Data, for address: SignalServiceAddress, isUserInitiatedChange: Bool, tx: DBWriteTransaction) -> ChangeVerificationStateResult { fatalError() }
open func processIncomingVerifiedProto(_ verified: SSKProtoVerified, tx: DBWriteTransaction) throws { fatalError() }
open func processIncomingPniChangePhoneNumber(proto: SSKProtoSyncMessagePniChangeNumber, updatedPni updatedPniString: String?, preKeyManager: PreKeyManager, tx: DBWriteTransaction) { fatalError() }
open func shouldSharePhoneNumber(with serviceId: ServiceId, tx: DBReadTransaction) -> Bool { fatalError() }
open func setShouldSharePhoneNumber(with recipient: Aci, tx: DBWriteTransaction) { fatalError() }
open func clearShouldSharePhoneNumber(with recipient: Aci, tx: DBWriteTransaction) { fatalError() }

View File

@ -834,7 +834,7 @@ public class OWSIdentityManagerImpl: OWSIdentityManager {
// MARK: - Verified
public func processIncomingVerifiedProto(_ verified: SSKProtoVerified, tx: DBWriteTransaction) throws {
guard let aci = Aci.parseFrom(aciString: verified.destinationAci) else {
guard let aci = Aci.parseFrom(serviceIdBinary: verified.destinationAciBinary, serviceIdString: verified.destinationAci) else {
return owsFailDebug("Verification state sync message missing destination.")
}
Logger.info("Received verification state message for \(aci)")

View File

@ -603,7 +603,7 @@ public class OWSMessageDecrypter {
}
let envelopeBuilder = validatedEnvelope.envelope.asBuilder()
envelopeBuilder.setSourceServiceID(decryptResult.senderAci.serviceIdString)
envelopeBuilder.setSourceServiceIDBinary(decryptResult.senderAci.serviceIdBinary)
envelopeBuilder.setSourceDevice(decryptResult.senderDeviceId.uint32Value)
let decryptedEnvelope = try DecryptedIncomingEnvelope(
@ -611,7 +611,7 @@ public class OWSMessageDecrypter {
updatedEnvelope: try envelopeBuilder.build(),
sourceAci: decryptResult.senderAci,
sourceDeviceId: decryptResult.senderDeviceId,
wasReceivedByUD: validatedEnvelope.envelope.sourceServiceID == nil,
wasReceivedByUD: !(validatedEnvelope.envelope.hasSourceServiceID || validatedEnvelope.envelope.hasSourceServiceIDBinary),
plaintextData: decryptResult.paddedPayload.withoutPadding(),
isPlaintextCipher: decryptResult.messageType == .plaintext
)
@ -798,6 +798,7 @@ public class OWSMessageDecrypter {
}
static func description(for envelope: SSKProtoEnvelope) -> String {
return "<Envelope type: \(descriptionForEnvelopeType(envelope)), source: \(envelope.formattedAddress), timestamp: \(envelope.timestamp), serverTimestamp: \(envelope.serverTimestamp), serverGuid: \(envelope.serverGuid ?? "(null)"), content.length: \(envelope.content?.count ?? 0) />"
let serverGuid = ValidatedIncomingEnvelope.parseServerGuid(fromEnvelope: envelope)
return "<Envelope type: \(descriptionForEnvelopeType(envelope)), source: \(envelope.formattedAddress), timestamp: \(envelope.timestamp), serverTimestamp: \(envelope.serverTimestamp), serverGuid: \(serverGuid?.uuidString.lowercased() ?? "(null)"), content.length: \(envelope.content?.count ?? 0) />"
}
}

View File

@ -510,6 +510,7 @@ extension OWSReceiptManager {
private func processReceiptsFromLinkedDevice<T>(
_ receiptProtos: [T],
senderAci: KeyPath<T, String?>,
senderAciBinary: KeyPath<T, Data?>,
messageTimestamp: KeyPath<T, UInt64>,
tx: DBWriteTransaction,
markMessage: (TSMessage) -> Void,
@ -519,7 +520,10 @@ extension OWSReceiptManager {
let messageTimestamps = receiptProtos.map { $0[keyPath: messageTimestamp] }
Logger.info("Handling \(receiptProtos.count) \(T.self)(s) w/timestamps: \(messageTimestamps)")
for receiptProto in receiptProtos {
guard let senderAci = Aci.parseFrom(aciString: receiptProto[keyPath: senderAci]) else {
guard let senderAci = Aci.parseFrom(
serviceIdBinary: receiptProto[keyPath: senderAciBinary],
serviceIdString: receiptProto[keyPath: senderAci],
) else {
owsFailDebug("Missing ACI.")
continue
}
@ -575,6 +579,7 @@ extension OWSReceiptManager {
return processReceiptsFromLinkedDevice(
readReceiptProtos,
senderAci: \.senderAci,
senderAciBinary: \.senderAciBinary,
messageTimestamp: \.timestamp,
tx: tx,
markMessage: {
@ -594,6 +599,7 @@ extension OWSReceiptManager {
return processReceiptsFromLinkedDevice(
viewedReceiptProtos,
senderAci: \.senderAci,
senderAciBinary: \.senderAciBinary,
messageTimestamp: \.timestamp,
tx: tx,
markMessage: {

View File

@ -31,6 +31,9 @@ extension OWSOutgoingReactionMessage {
return nil
}
reactionBuilder.setTargetAuthorAci(messageAuthor.serviceIdString)
if FeatureFlags.serviceIdBinaryConstantOverhead {
reactionBuilder.setTargetAuthorAciBinary(messageAuthor.serviceIdBinary)
}
do {
return try reactionBuilder.build()

View File

@ -135,7 +135,10 @@ public class ReactionManager: NSObject {
owsFailDebug("Received invalid emoji")
return .invalidReaction
}
guard let messageAuthor = Aci.parseFrom(aciString: reaction.targetAuthorAci) else {
guard let messageAuthor = Aci.parseFrom(
serviceIdBinary: reaction.targetAuthorAciBinary,
serviceIdString: reaction.targetAuthorAci,
) else {
owsFailDebug("reaction missing message author")
return .invalidReaction
}

View File

@ -42,7 +42,7 @@ public class OutgoingStorySentMessageTranscript: OWSOutgoingSyncMessage {
return nil
}
return (try? JSONDecoder().decode(
[ServiceIdUppercaseString: StoryRecipientState].self, from: encodedRecipientStates
[ServiceIdUppercaseString<ServiceId>: StoryRecipientState].self, from: encodedRecipientStates
))?.mapKeys(injectiveTransform: { $0.wrappedValue })
}
@ -96,6 +96,9 @@ public class OutgoingStorySentMessageTranscript: OWSOutgoingSyncMessage {
for (serviceId, state) in recipientStates {
let builder = SSKProtoSyncMessageSentStoryMessageRecipient.builder()
builder.setDestinationServiceID(serviceId.serviceIdString)
if FeatureFlags.serviceIdBinaryVariableOverhead {
builder.setDestinationServiceIDBinary(serviceId.serviceIdBinary)
}
builder.setDistributionListIds(state.contexts.map { $0.uuidString })
builder.setIsAllowedToReply(state.allowsReplies)
sentBuilder.addStoryMessageRecipients(builder.buildInfallibly())

View File

@ -329,11 +329,11 @@ public final class StoryMessage: NSObject, SDSCodableModel, Decodable {
}
let manifest = StoryManifest.outgoing(recipientStates: Dictionary(uniqueKeysWithValues: try proto.storyMessageRecipients.map { recipient in
guard
let serviceIdString = recipient.destinationServiceID,
let serviceId = try? ServiceId.parseFrom(serviceIdString: serviceIdString)
else {
throw OWSAssertionError("Invalid ServiceId on story recipient \(String(describing: recipient.destinationServiceID))")
guard let serviceId = ServiceId.parseFrom(
serviceIdBinary: recipient.destinationServiceIDBinary,
serviceIdString: recipient.destinationServiceID,
) else {
throw OWSAssertionError("Invalid ServiceId on story recipient")
}
return (
@ -642,10 +642,10 @@ public final class StoryMessage: NSObject, SDSCodableModel, Decodable {
var newRecipientStates = [ServiceId: StoryRecipientState]()
for recipient in recipients {
guard
let serviceIdString = recipient.destinationServiceID,
let serviceId = try? ServiceId.parseFrom(serviceIdString: serviceIdString)
else {
guard let serviceId = ServiceId.parseFrom(
serviceIdBinary: recipient.destinationServiceIDBinary,
serviceIdString: recipient.destinationServiceID,
) else {
owsFailDebug("Missing UUID for story recipient")
continue
}
@ -1030,7 +1030,7 @@ public enum StoryManifest {
private enum CodableStoryManifest: Codable {
case incoming(receivedState: StoryReceivedState)
case outgoing(recipientStates: [ServiceIdUppercaseString: StoryRecipientState])
case outgoing(recipientStates: [ServiceIdUppercaseString<ServiceId>: StoryRecipientState])
init(_ storyManifest: StoryManifest) {
switch storyManifest {

View File

@ -65,13 +65,29 @@ class ValidatedIncomingEnvelope {
case unidentifiedSender
}
// MARK: - GUID
var serverGuid: UUID? {
return Self.parseServerGuid(fromEnvelope: self.envelope)
}
static func parseServerGuid(fromEnvelope envelope: SSKProtoEnvelope) -> UUID? {
if let serverGuidBinary = envelope.serverGuidBinary {
return UUID(data: serverGuidBinary)
}
if let serverGuidString = envelope.serverGuid {
return UUID(uuidString: serverGuidString)
}
return nil
}
// MARK: - Source
func validateSource<T: ServiceId>(_ type: T.Type) throws -> (T, DeviceId) {
guard
let sourceServiceIdString = envelope.sourceServiceID,
let sourceServiceId = try ServiceId.parseFrom(serviceIdString: sourceServiceIdString) as? T
else {
guard let sourceServiceId = T.parseFrom(
serviceIdBinary: envelope.sourceServiceIDBinary,
serviceIdString: envelope.sourceServiceID,
) else {
throw OWSAssertionError("Invalid source.")
}
guard envelope.hasSourceDevice, let sourceDevice = DeviceId(validating: envelope.sourceDevice) else {
@ -86,11 +102,16 @@ class ValidatedIncomingEnvelope {
for envelope: SSKProtoEnvelope,
localIdentifiers: LocalIdentifiers
) throws -> OWSIdentity {
// Old, locally-persisted envelopes may not have a destination specified.
guard let destinationServiceIdString = envelope.destinationServiceID, !destinationServiceIdString.isEmpty else {
return .aci
let destinationServiceId: ServiceId
if envelope.destinationServiceID?.nilIfEmpty != nil || envelope.hasDestinationServiceIDBinary {
destinationServiceId = try ServiceId.parseFrom(
serviceIdBinary: envelope.destinationServiceIDBinary,
serviceIdString: envelope.destinationServiceID,
) ?? { () throws -> ServiceId in throw OWSGenericError("Couldn't parse destination.") }()
} else {
// Old, locally-persisted envelopes may not have a destination specified.
destinationServiceId = localIdentifiers.aci
}
let destinationServiceId = try ServiceId.parseFrom(serviceIdString: destinationServiceIdString)
switch destinationServiceId {
case localIdentifiers.aci:
return .aci

View File

@ -88,183 +88,187 @@ struct ProvisioningProtos_ProvisionEnvelope: Sendable {
fileprivate var _body: Data? = nil
}
struct ProvisioningProtos_ProvisionMessage: Sendable {
struct ProvisioningProtos_ProvisionMessage: @unchecked Sendable {
// SwiftProtobuf.Message conformance is added in an extension below. See the
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
// methods supported on all messages.
/// @required
var aciIdentityKeyPublic: Data {
get {return _aciIdentityKeyPublic ?? Data()}
set {_aciIdentityKeyPublic = newValue}
get {return _storage._aciIdentityKeyPublic ?? Data()}
set {_uniqueStorage()._aciIdentityKeyPublic = newValue}
}
/// Returns true if `aciIdentityKeyPublic` has been explicitly set.
var hasAciIdentityKeyPublic: Bool {return self._aciIdentityKeyPublic != nil}
var hasAciIdentityKeyPublic: Bool {return _storage._aciIdentityKeyPublic != nil}
/// Clears the value of `aciIdentityKeyPublic`. Subsequent reads from it will return its default value.
mutating func clearAciIdentityKeyPublic() {self._aciIdentityKeyPublic = nil}
mutating func clearAciIdentityKeyPublic() {_uniqueStorage()._aciIdentityKeyPublic = nil}
/// @required
var aciIdentityKeyPrivate: Data {
get {return _aciIdentityKeyPrivate ?? Data()}
set {_aciIdentityKeyPrivate = newValue}
get {return _storage._aciIdentityKeyPrivate ?? Data()}
set {_uniqueStorage()._aciIdentityKeyPrivate = newValue}
}
/// Returns true if `aciIdentityKeyPrivate` has been explicitly set.
var hasAciIdentityKeyPrivate: Bool {return self._aciIdentityKeyPrivate != nil}
var hasAciIdentityKeyPrivate: Bool {return _storage._aciIdentityKeyPrivate != nil}
/// Clears the value of `aciIdentityKeyPrivate`. Subsequent reads from it will return its default value.
mutating func clearAciIdentityKeyPrivate() {self._aciIdentityKeyPrivate = nil}
mutating func clearAciIdentityKeyPrivate() {_uniqueStorage()._aciIdentityKeyPrivate = nil}
/// @required
var pniIdentityKeyPublic: Data {
get {return _pniIdentityKeyPublic ?? Data()}
set {_pniIdentityKeyPublic = newValue}
get {return _storage._pniIdentityKeyPublic ?? Data()}
set {_uniqueStorage()._pniIdentityKeyPublic = newValue}
}
/// Returns true if `pniIdentityKeyPublic` has been explicitly set.
var hasPniIdentityKeyPublic: Bool {return self._pniIdentityKeyPublic != nil}
var hasPniIdentityKeyPublic: Bool {return _storage._pniIdentityKeyPublic != nil}
/// Clears the value of `pniIdentityKeyPublic`. Subsequent reads from it will return its default value.
mutating func clearPniIdentityKeyPublic() {self._pniIdentityKeyPublic = nil}
mutating func clearPniIdentityKeyPublic() {_uniqueStorage()._pniIdentityKeyPublic = nil}
/// @required
var pniIdentityKeyPrivate: Data {
get {return _pniIdentityKeyPrivate ?? Data()}
set {_pniIdentityKeyPrivate = newValue}
get {return _storage._pniIdentityKeyPrivate ?? Data()}
set {_uniqueStorage()._pniIdentityKeyPrivate = newValue}
}
/// Returns true if `pniIdentityKeyPrivate` has been explicitly set.
var hasPniIdentityKeyPrivate: Bool {return self._pniIdentityKeyPrivate != nil}
var hasPniIdentityKeyPrivate: Bool {return _storage._pniIdentityKeyPrivate != nil}
/// Clears the value of `pniIdentityKeyPrivate`. Subsequent reads from it will return its default value.
mutating func clearPniIdentityKeyPrivate() {self._pniIdentityKeyPrivate = nil}
mutating func clearPniIdentityKeyPrivate() {_uniqueStorage()._pniIdentityKeyPrivate = nil}
var aci: String {
get {return _aci ?? String()}
set {_aci = newValue}
get {return _storage._aci ?? String()}
set {_uniqueStorage()._aci = newValue}
}
/// Returns true if `aci` has been explicitly set.
var hasAci: Bool {return self._aci != nil}
var hasAci: Bool {return _storage._aci != nil}
/// Clears the value of `aci`. Subsequent reads from it will return its default value.
mutating func clearAci() {self._aci = nil}
mutating func clearAci() {_uniqueStorage()._aci = nil}
var pni: String {
get {return _pni ?? String()}
set {_pni = newValue}
get {return _storage._pni ?? String()}
set {_uniqueStorage()._pni = newValue}
}
/// Returns true if `pni` has been explicitly set.
var hasPni: Bool {return self._pni != nil}
var hasPni: Bool {return _storage._pni != nil}
/// Clears the value of `pni`. Subsequent reads from it will return its default value.
mutating func clearPni() {self._pni = nil}
mutating func clearPni() {_uniqueStorage()._pni = nil}
var number: String {
get {return _number ?? String()}
set {_number = newValue}
get {return _storage._number ?? String()}
set {_uniqueStorage()._number = newValue}
}
/// Returns true if `number` has been explicitly set.
var hasNumber: Bool {return self._number != nil}
var hasNumber: Bool {return _storage._number != nil}
/// Clears the value of `number`. Subsequent reads from it will return its default value.
mutating func clearNumber() {self._number = nil}
mutating func clearNumber() {_uniqueStorage()._number = nil}
/// @required
var provisioningCode: String {
get {return _provisioningCode ?? String()}
set {_provisioningCode = newValue}
get {return _storage._provisioningCode ?? String()}
set {_uniqueStorage()._provisioningCode = newValue}
}
/// Returns true if `provisioningCode` has been explicitly set.
var hasProvisioningCode: Bool {return self._provisioningCode != nil}
var hasProvisioningCode: Bool {return _storage._provisioningCode != nil}
/// Clears the value of `provisioningCode`. Subsequent reads from it will return its default value.
mutating func clearProvisioningCode() {self._provisioningCode = nil}
mutating func clearProvisioningCode() {_uniqueStorage()._provisioningCode = nil}
var userAgent: String {
get {return _userAgent ?? String()}
set {_userAgent = newValue}
get {return _storage._userAgent ?? String()}
set {_uniqueStorage()._userAgent = newValue}
}
/// Returns true if `userAgent` has been explicitly set.
var hasUserAgent: Bool {return self._userAgent != nil}
var hasUserAgent: Bool {return _storage._userAgent != nil}
/// Clears the value of `userAgent`. Subsequent reads from it will return its default value.
mutating func clearUserAgent() {self._userAgent = nil}
mutating func clearUserAgent() {_uniqueStorage()._userAgent = nil}
/// @required
var profileKey: Data {
get {return _profileKey ?? Data()}
set {_profileKey = newValue}
get {return _storage._profileKey ?? Data()}
set {_uniqueStorage()._profileKey = newValue}
}
/// Returns true if `profileKey` has been explicitly set.
var hasProfileKey: Bool {return self._profileKey != nil}
var hasProfileKey: Bool {return _storage._profileKey != nil}
/// Clears the value of `profileKey`. Subsequent reads from it will return its default value.
mutating func clearProfileKey() {self._profileKey = nil}
mutating func clearProfileKey() {_uniqueStorage()._profileKey = nil}
var readReceipts: Bool {
get {return _readReceipts ?? false}
set {_readReceipts = newValue}
get {return _storage._readReceipts ?? false}
set {_uniqueStorage()._readReceipts = newValue}
}
/// Returns true if `readReceipts` has been explicitly set.
var hasReadReceipts: Bool {return self._readReceipts != nil}
var hasReadReceipts: Bool {return _storage._readReceipts != nil}
/// Clears the value of `readReceipts`. Subsequent reads from it will return its default value.
mutating func clearReadReceipts() {self._readReceipts = nil}
mutating func clearReadReceipts() {_uniqueStorage()._readReceipts = nil}
var provisioningVersion: UInt32 {
get {return _provisioningVersion ?? 0}
set {_provisioningVersion = newValue}
get {return _storage._provisioningVersion ?? 0}
set {_uniqueStorage()._provisioningVersion = newValue}
}
/// Returns true if `provisioningVersion` has been explicitly set.
var hasProvisioningVersion: Bool {return self._provisioningVersion != nil}
var hasProvisioningVersion: Bool {return _storage._provisioningVersion != nil}
/// Clears the value of `provisioningVersion`. Subsequent reads from it will return its default value.
mutating func clearProvisioningVersion() {self._provisioningVersion = nil}
mutating func clearProvisioningVersion() {_uniqueStorage()._provisioningVersion = nil}
var masterKey: Data {
get {return _masterKey ?? Data()}
set {_masterKey = newValue}
get {return _storage._masterKey ?? Data()}
set {_uniqueStorage()._masterKey = newValue}
}
/// Returns true if `masterKey` has been explicitly set.
var hasMasterKey: Bool {return self._masterKey != nil}
var hasMasterKey: Bool {return _storage._masterKey != nil}
/// Clears the value of `masterKey`. Subsequent reads from it will return its default value.
mutating func clearMasterKey() {self._masterKey = nil}
mutating func clearMasterKey() {_uniqueStorage()._masterKey = nil}
/// 32 bytes
var ephemeralBackupKey: Data {
get {return _ephemeralBackupKey ?? Data()}
set {_ephemeralBackupKey = newValue}
get {return _storage._ephemeralBackupKey ?? Data()}
set {_uniqueStorage()._ephemeralBackupKey = newValue}
}
/// Returns true if `ephemeralBackupKey` has been explicitly set.
var hasEphemeralBackupKey: Bool {return self._ephemeralBackupKey != nil}
var hasEphemeralBackupKey: Bool {return _storage._ephemeralBackupKey != nil}
/// Clears the value of `ephemeralBackupKey`. Subsequent reads from it will return its default value.
mutating func clearEphemeralBackupKey() {self._ephemeralBackupKey = nil}
mutating func clearEphemeralBackupKey() {_uniqueStorage()._ephemeralBackupKey = nil}
var accountEntropyPool: String {
get {return _accountEntropyPool ?? String()}
set {_accountEntropyPool = newValue}
get {return _storage._accountEntropyPool ?? String()}
set {_uniqueStorage()._accountEntropyPool = newValue}
}
/// Returns true if `accountEntropyPool` has been explicitly set.
var hasAccountEntropyPool: Bool {return self._accountEntropyPool != nil}
var hasAccountEntropyPool: Bool {return _storage._accountEntropyPool != nil}
/// Clears the value of `accountEntropyPool`. Subsequent reads from it will return its default value.
mutating func clearAccountEntropyPool() {self._accountEntropyPool = nil}
mutating func clearAccountEntropyPool() {_uniqueStorage()._accountEntropyPool = nil}
/// NEXT ID: 17
var mediaRootBackupKey: Data {
get {return _mediaRootBackupKey ?? Data()}
set {_mediaRootBackupKey = newValue}
get {return _storage._mediaRootBackupKey ?? Data()}
set {_uniqueStorage()._mediaRootBackupKey = newValue}
}
/// Returns true if `mediaRootBackupKey` has been explicitly set.
var hasMediaRootBackupKey: Bool {return self._mediaRootBackupKey != nil}
var hasMediaRootBackupKey: Bool {return _storage._mediaRootBackupKey != nil}
/// Clears the value of `mediaRootBackupKey`. Subsequent reads from it will return its default value.
mutating func clearMediaRootBackupKey() {self._mediaRootBackupKey = nil}
mutating func clearMediaRootBackupKey() {_uniqueStorage()._mediaRootBackupKey = nil}
/// 16-byte UUID
var aciBinary: Data {
get {return _storage._aciBinary ?? Data()}
set {_uniqueStorage()._aciBinary = newValue}
}
/// Returns true if `aciBinary` has been explicitly set.
var hasAciBinary: Bool {return _storage._aciBinary != nil}
/// Clears the value of `aciBinary`. Subsequent reads from it will return its default value.
mutating func clearAciBinary() {_uniqueStorage()._aciBinary = nil}
/// 16-byte UUID
var pniBinary: Data {
get {return _storage._pniBinary ?? Data()}
set {_uniqueStorage()._pniBinary = newValue}
}
/// Returns true if `pniBinary` has been explicitly set.
var hasPniBinary: Bool {return _storage._pniBinary != nil}
/// Clears the value of `pniBinary`. Subsequent reads from it will return its default value.
mutating func clearPniBinary() {_uniqueStorage()._pniBinary = nil}
var unknownFields = SwiftProtobuf.UnknownStorage()
init() {}
fileprivate var _aciIdentityKeyPublic: Data? = nil
fileprivate var _aciIdentityKeyPrivate: Data? = nil
fileprivate var _pniIdentityKeyPublic: Data? = nil
fileprivate var _pniIdentityKeyPrivate: Data? = nil
fileprivate var _aci: String? = nil
fileprivate var _pni: String? = nil
fileprivate var _number: String? = nil
fileprivate var _provisioningCode: String? = nil
fileprivate var _userAgent: String? = nil
fileprivate var _profileKey: Data? = nil
fileprivate var _readReceipts: Bool? = nil
fileprivate var _provisioningVersion: UInt32? = nil
fileprivate var _masterKey: Data? = nil
fileprivate var _ephemeralBackupKey: Data? = nil
fileprivate var _accountEntropyPool: String? = nil
fileprivate var _mediaRootBackupKey: Data? = nil
fileprivate var _storage = _StorageClass.defaultInstance
}
// MARK: - Code below here is support for the SwiftProtobuf runtime.
@ -346,108 +350,188 @@ extension ProvisioningProtos_ProvisionEnvelope: SwiftProtobuf.Message, SwiftProt
extension ProvisioningProtos_ProvisionMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = _protobuf_package + ".ProvisionMessage"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}aciIdentityKeyPublic\0\u{1}aciIdentityKeyPrivate\0\u{1}number\0\u{1}provisioningCode\0\u{1}userAgent\0\u{1}profileKey\0\u{1}readReceipts\0\u{1}aci\0\u{1}provisioningVersion\0\u{1}pni\0\u{1}pniIdentityKeyPublic\0\u{1}pniIdentityKeyPrivate\0\u{1}masterKey\0\u{1}ephemeralBackupKey\0\u{1}accountEntropyPool\0\u{1}mediaRootBackupKey\0")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}aciIdentityKeyPublic\0\u{1}aciIdentityKeyPrivate\0\u{1}number\0\u{1}provisioningCode\0\u{1}userAgent\0\u{1}profileKey\0\u{1}readReceipts\0\u{1}aci\0\u{1}provisioningVersion\0\u{1}pni\0\u{1}pniIdentityKeyPublic\0\u{1}pniIdentityKeyPrivate\0\u{1}masterKey\0\u{1}ephemeralBackupKey\0\u{1}accountEntropyPool\0\u{1}mediaRootBackupKey\0\u{1}aciBinary\0\u{1}pniBinary\0")
fileprivate class _StorageClass {
var _aciIdentityKeyPublic: Data? = nil
var _aciIdentityKeyPrivate: Data? = nil
var _pniIdentityKeyPublic: Data? = nil
var _pniIdentityKeyPrivate: Data? = nil
var _aci: String? = nil
var _pni: String? = nil
var _number: String? = nil
var _provisioningCode: String? = nil
var _userAgent: String? = nil
var _profileKey: Data? = nil
var _readReceipts: Bool? = nil
var _provisioningVersion: UInt32? = nil
var _masterKey: Data? = nil
var _ephemeralBackupKey: Data? = nil
var _accountEntropyPool: String? = nil
var _mediaRootBackupKey: Data? = nil
var _aciBinary: Data? = nil
var _pniBinary: Data? = nil
// This property is used as the initial default value for new instances of the type.
// The type itself is protecting the reference to its storage via CoW semantics.
// This will force a copy to be made of this reference when the first mutation occurs;
// hence, it is safe to mark this as `nonisolated(unsafe)`.
static nonisolated(unsafe) let defaultInstance = _StorageClass()
private init() {}
init(copying source: _StorageClass) {
_aciIdentityKeyPublic = source._aciIdentityKeyPublic
_aciIdentityKeyPrivate = source._aciIdentityKeyPrivate
_pniIdentityKeyPublic = source._pniIdentityKeyPublic
_pniIdentityKeyPrivate = source._pniIdentityKeyPrivate
_aci = source._aci
_pni = source._pni
_number = source._number
_provisioningCode = source._provisioningCode
_userAgent = source._userAgent
_profileKey = source._profileKey
_readReceipts = source._readReceipts
_provisioningVersion = source._provisioningVersion
_masterKey = source._masterKey
_ephemeralBackupKey = source._ephemeralBackupKey
_accountEntropyPool = source._accountEntropyPool
_mediaRootBackupKey = source._mediaRootBackupKey
_aciBinary = source._aciBinary
_pniBinary = source._pniBinary
}
}
fileprivate mutating func _uniqueStorage() -> _StorageClass {
if !isKnownUniquelyReferenced(&_storage) {
_storage = _StorageClass(copying: _storage)
}
return _storage
}
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
// The use of inline closures is to circumvent an issue where the compiler
// allocates stack space for every case branch when no optimizations are
// enabled. https://github.com/apple/swift-protobuf/issues/1034
switch fieldNumber {
case 1: try { try decoder.decodeSingularBytesField(value: &self._aciIdentityKeyPublic) }()
case 2: try { try decoder.decodeSingularBytesField(value: &self._aciIdentityKeyPrivate) }()
case 3: try { try decoder.decodeSingularStringField(value: &self._number) }()
case 4: try { try decoder.decodeSingularStringField(value: &self._provisioningCode) }()
case 5: try { try decoder.decodeSingularStringField(value: &self._userAgent) }()
case 6: try { try decoder.decodeSingularBytesField(value: &self._profileKey) }()
case 7: try { try decoder.decodeSingularBoolField(value: &self._readReceipts) }()
case 8: try { try decoder.decodeSingularStringField(value: &self._aci) }()
case 9: try { try decoder.decodeSingularUInt32Field(value: &self._provisioningVersion) }()
case 10: try { try decoder.decodeSingularStringField(value: &self._pni) }()
case 11: try { try decoder.decodeSingularBytesField(value: &self._pniIdentityKeyPublic) }()
case 12: try { try decoder.decodeSingularBytesField(value: &self._pniIdentityKeyPrivate) }()
case 13: try { try decoder.decodeSingularBytesField(value: &self._masterKey) }()
case 14: try { try decoder.decodeSingularBytesField(value: &self._ephemeralBackupKey) }()
case 15: try { try decoder.decodeSingularStringField(value: &self._accountEntropyPool) }()
case 16: try { try decoder.decodeSingularBytesField(value: &self._mediaRootBackupKey) }()
default: break
_ = _uniqueStorage()
try withExtendedLifetime(_storage) { (_storage: _StorageClass) in
while let fieldNumber = try decoder.nextFieldNumber() {
// The use of inline closures is to circumvent an issue where the compiler
// allocates stack space for every case branch when no optimizations are
// enabled. https://github.com/apple/swift-protobuf/issues/1034
switch fieldNumber {
case 1: try { try decoder.decodeSingularBytesField(value: &_storage._aciIdentityKeyPublic) }()
case 2: try { try decoder.decodeSingularBytesField(value: &_storage._aciIdentityKeyPrivate) }()
case 3: try { try decoder.decodeSingularStringField(value: &_storage._number) }()
case 4: try { try decoder.decodeSingularStringField(value: &_storage._provisioningCode) }()
case 5: try { try decoder.decodeSingularStringField(value: &_storage._userAgent) }()
case 6: try { try decoder.decodeSingularBytesField(value: &_storage._profileKey) }()
case 7: try { try decoder.decodeSingularBoolField(value: &_storage._readReceipts) }()
case 8: try { try decoder.decodeSingularStringField(value: &_storage._aci) }()
case 9: try { try decoder.decodeSingularUInt32Field(value: &_storage._provisioningVersion) }()
case 10: try { try decoder.decodeSingularStringField(value: &_storage._pni) }()
case 11: try { try decoder.decodeSingularBytesField(value: &_storage._pniIdentityKeyPublic) }()
case 12: try { try decoder.decodeSingularBytesField(value: &_storage._pniIdentityKeyPrivate) }()
case 13: try { try decoder.decodeSingularBytesField(value: &_storage._masterKey) }()
case 14: try { try decoder.decodeSingularBytesField(value: &_storage._ephemeralBackupKey) }()
case 15: try { try decoder.decodeSingularStringField(value: &_storage._accountEntropyPool) }()
case 16: try { try decoder.decodeSingularBytesField(value: &_storage._mediaRootBackupKey) }()
case 17: try { try decoder.decodeSingularBytesField(value: &_storage._aciBinary) }()
case 18: try { try decoder.decodeSingularBytesField(value: &_storage._pniBinary) }()
default: break
}
}
}
}
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
// The use of inline closures is to circumvent an issue where the compiler
// allocates stack space for every if/case branch local when no optimizations
// are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
// https://github.com/apple/swift-protobuf/issues/1182
try { if let v = self._aciIdentityKeyPublic {
try visitor.visitSingularBytesField(value: v, fieldNumber: 1)
} }()
try { if let v = self._aciIdentityKeyPrivate {
try visitor.visitSingularBytesField(value: v, fieldNumber: 2)
} }()
try { if let v = self._number {
try visitor.visitSingularStringField(value: v, fieldNumber: 3)
} }()
try { if let v = self._provisioningCode {
try visitor.visitSingularStringField(value: v, fieldNumber: 4)
} }()
try { if let v = self._userAgent {
try visitor.visitSingularStringField(value: v, fieldNumber: 5)
} }()
try { if let v = self._profileKey {
try visitor.visitSingularBytesField(value: v, fieldNumber: 6)
} }()
try { if let v = self._readReceipts {
try visitor.visitSingularBoolField(value: v, fieldNumber: 7)
} }()
try { if let v = self._aci {
try visitor.visitSingularStringField(value: v, fieldNumber: 8)
} }()
try { if let v = self._provisioningVersion {
try visitor.visitSingularUInt32Field(value: v, fieldNumber: 9)
} }()
try { if let v = self._pni {
try visitor.visitSingularStringField(value: v, fieldNumber: 10)
} }()
try { if let v = self._pniIdentityKeyPublic {
try visitor.visitSingularBytesField(value: v, fieldNumber: 11)
} }()
try { if let v = self._pniIdentityKeyPrivate {
try visitor.visitSingularBytesField(value: v, fieldNumber: 12)
} }()
try { if let v = self._masterKey {
try visitor.visitSingularBytesField(value: v, fieldNumber: 13)
} }()
try { if let v = self._ephemeralBackupKey {
try visitor.visitSingularBytesField(value: v, fieldNumber: 14)
} }()
try { if let v = self._accountEntropyPool {
try visitor.visitSingularStringField(value: v, fieldNumber: 15)
} }()
try { if let v = self._mediaRootBackupKey {
try visitor.visitSingularBytesField(value: v, fieldNumber: 16)
} }()
try withExtendedLifetime(_storage) { (_storage: _StorageClass) in
// The use of inline closures is to circumvent an issue where the compiler
// allocates stack space for every if/case branch local when no optimizations
// are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
// https://github.com/apple/swift-protobuf/issues/1182
try { if let v = _storage._aciIdentityKeyPublic {
try visitor.visitSingularBytesField(value: v, fieldNumber: 1)
} }()
try { if let v = _storage._aciIdentityKeyPrivate {
try visitor.visitSingularBytesField(value: v, fieldNumber: 2)
} }()
try { if let v = _storage._number {
try visitor.visitSingularStringField(value: v, fieldNumber: 3)
} }()
try { if let v = _storage._provisioningCode {
try visitor.visitSingularStringField(value: v, fieldNumber: 4)
} }()
try { if let v = _storage._userAgent {
try visitor.visitSingularStringField(value: v, fieldNumber: 5)
} }()
try { if let v = _storage._profileKey {
try visitor.visitSingularBytesField(value: v, fieldNumber: 6)
} }()
try { if let v = _storage._readReceipts {
try visitor.visitSingularBoolField(value: v, fieldNumber: 7)
} }()
try { if let v = _storage._aci {
try visitor.visitSingularStringField(value: v, fieldNumber: 8)
} }()
try { if let v = _storage._provisioningVersion {
try visitor.visitSingularUInt32Field(value: v, fieldNumber: 9)
} }()
try { if let v = _storage._pni {
try visitor.visitSingularStringField(value: v, fieldNumber: 10)
} }()
try { if let v = _storage._pniIdentityKeyPublic {
try visitor.visitSingularBytesField(value: v, fieldNumber: 11)
} }()
try { if let v = _storage._pniIdentityKeyPrivate {
try visitor.visitSingularBytesField(value: v, fieldNumber: 12)
} }()
try { if let v = _storage._masterKey {
try visitor.visitSingularBytesField(value: v, fieldNumber: 13)
} }()
try { if let v = _storage._ephemeralBackupKey {
try visitor.visitSingularBytesField(value: v, fieldNumber: 14)
} }()
try { if let v = _storage._accountEntropyPool {
try visitor.visitSingularStringField(value: v, fieldNumber: 15)
} }()
try { if let v = _storage._mediaRootBackupKey {
try visitor.visitSingularBytesField(value: v, fieldNumber: 16)
} }()
try { if let v = _storage._aciBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 17)
} }()
try { if let v = _storage._pniBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 18)
} }()
}
try unknownFields.traverse(visitor: &visitor)
}
static func ==(lhs: ProvisioningProtos_ProvisionMessage, rhs: ProvisioningProtos_ProvisionMessage) -> Bool {
if lhs._aciIdentityKeyPublic != rhs._aciIdentityKeyPublic {return false}
if lhs._aciIdentityKeyPrivate != rhs._aciIdentityKeyPrivate {return false}
if lhs._pniIdentityKeyPublic != rhs._pniIdentityKeyPublic {return false}
if lhs._pniIdentityKeyPrivate != rhs._pniIdentityKeyPrivate {return false}
if lhs._aci != rhs._aci {return false}
if lhs._pni != rhs._pni {return false}
if lhs._number != rhs._number {return false}
if lhs._provisioningCode != rhs._provisioningCode {return false}
if lhs._userAgent != rhs._userAgent {return false}
if lhs._profileKey != rhs._profileKey {return false}
if lhs._readReceipts != rhs._readReceipts {return false}
if lhs._provisioningVersion != rhs._provisioningVersion {return false}
if lhs._masterKey != rhs._masterKey {return false}
if lhs._ephemeralBackupKey != rhs._ephemeralBackupKey {return false}
if lhs._accountEntropyPool != rhs._accountEntropyPool {return false}
if lhs._mediaRootBackupKey != rhs._mediaRootBackupKey {return false}
if lhs._storage !== rhs._storage {
let storagesAreEqual: Bool = withExtendedLifetime((lhs._storage, rhs._storage)) { (_args: (_StorageClass, _StorageClass)) in
let _storage = _args.0
let rhs_storage = _args.1
if _storage._aciIdentityKeyPublic != rhs_storage._aciIdentityKeyPublic {return false}
if _storage._aciIdentityKeyPrivate != rhs_storage._aciIdentityKeyPrivate {return false}
if _storage._pniIdentityKeyPublic != rhs_storage._pniIdentityKeyPublic {return false}
if _storage._pniIdentityKeyPrivate != rhs_storage._pniIdentityKeyPrivate {return false}
if _storage._aci != rhs_storage._aci {return false}
if _storage._pni != rhs_storage._pni {return false}
if _storage._number != rhs_storage._number {return false}
if _storage._provisioningCode != rhs_storage._provisioningCode {return false}
if _storage._userAgent != rhs_storage._userAgent {return false}
if _storage._profileKey != rhs_storage._profileKey {return false}
if _storage._readReceipts != rhs_storage._readReceipts {return false}
if _storage._provisioningVersion != rhs_storage._provisioningVersion {return false}
if _storage._masterKey != rhs_storage._masterKey {return false}
if _storage._ephemeralBackupKey != rhs_storage._ephemeralBackupKey {return false}
if _storage._accountEntropyPool != rhs_storage._accountEntropyPool {return false}
if _storage._mediaRootBackupKey != rhs_storage._mediaRootBackupKey {return false}
if _storage._aciBinary != rhs_storage._aciBinary {return false}
if _storage._pniBinary != rhs_storage._pniBinary {return false}
return true
}
if !storagesAreEqual {return false}
}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}

View File

@ -488,6 +488,30 @@ public class ProvisioningProtoProvisionMessage: NSObject, Codable, NSSecureCodin
return proto.hasMediaRootBackupKey
}
@objc
public var aciBinary: Data? {
guard hasAciBinary else {
return nil
}
return proto.aciBinary
}
@objc
public var hasAciBinary: Bool {
return proto.hasAciBinary
}
@objc
public var pniBinary: Data? {
guard hasPniBinary else {
return nil
}
return proto.pniBinary
}
@objc
public var hasPniBinary: Bool {
return proto.hasPniBinary
}
public var hasUnknownFields: Bool {
return !proto.unknownFields.data.isEmpty
}
@ -639,6 +663,12 @@ extension ProvisioningProtoProvisionMessage {
if let _value = mediaRootBackupKey {
builder.setMediaRootBackupKey(_value)
}
if let _value = aciBinary {
builder.setAciBinary(_value)
}
if let _value = pniBinary {
builder.setPniBinary(_value)
}
if let _value = unknownFields {
builder.setUnknownFields(_value)
}
@ -830,6 +860,28 @@ public class ProvisioningProtoProvisionMessageBuilder: NSObject {
proto.mediaRootBackupKey = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setAciBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.aciBinary = valueParam
}
public func setAciBinary(_ valueParam: Data) {
proto.aciBinary = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setPniBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.pniBinary = valueParam
}
public func setPniBinary(_ valueParam: Data) {
proto.pniBinary = valueParam
}
public func setUnknownFields(_ unknownFields: SwiftProtobuf.UnknownStorage) {
proto.unknownFields = unknownFields
}

View File

@ -184,6 +184,54 @@ public class SSKProtoEnvelope: NSObject, Codable, NSSecureCoding {
return proto.hasSpamReportingToken
}
@objc
public var sourceServiceIDBinary: Data? {
guard hasSourceServiceIDBinary else {
return nil
}
return proto.sourceServiceIDBinary
}
@objc
public var hasSourceServiceIDBinary: Bool {
return proto.hasSourceServiceIDBinary
}
@objc
public var destinationServiceIDBinary: Data? {
guard hasDestinationServiceIDBinary else {
return nil
}
return proto.destinationServiceIDBinary
}
@objc
public var hasDestinationServiceIDBinary: Bool {
return proto.hasDestinationServiceIDBinary
}
@objc
public var serverGuidBinary: Data? {
guard hasServerGuidBinary else {
return nil
}
return proto.serverGuidBinary
}
@objc
public var hasServerGuidBinary: Bool {
return proto.hasServerGuidBinary
}
@objc
public var updatedPniBinary: Data? {
guard hasUpdatedPniBinary else {
return nil
}
return proto.updatedPniBinary
}
@objc
public var hasUpdatedPniBinary: Bool {
return proto.hasUpdatedPniBinary
}
public var hasUnknownFields: Bool {
return !proto.unknownFields.data.isEmpty
}
@ -298,6 +346,18 @@ extension SSKProtoEnvelope {
if let _value = spamReportingToken {
builder.setSpamReportingToken(_value)
}
if let _value = sourceServiceIDBinary {
builder.setSourceServiceIDBinary(_value)
}
if let _value = destinationServiceIDBinary {
builder.setDestinationServiceIDBinary(_value)
}
if let _value = serverGuidBinary {
builder.setServerGuidBinary(_value)
}
if let _value = updatedPniBinary {
builder.setUpdatedPniBinary(_value)
}
if let _value = unknownFields {
builder.setUnknownFields(_value)
}
@ -416,6 +476,50 @@ public class SSKProtoEnvelopeBuilder: NSObject {
proto.spamReportingToken = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setSourceServiceIDBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.sourceServiceIDBinary = valueParam
}
public func setSourceServiceIDBinary(_ valueParam: Data) {
proto.sourceServiceIDBinary = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setDestinationServiceIDBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.destinationServiceIDBinary = valueParam
}
public func setDestinationServiceIDBinary(_ valueParam: Data) {
proto.destinationServiceIDBinary = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setServerGuidBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.serverGuidBinary = valueParam
}
public func setServerGuidBinary(_ valueParam: Data) {
proto.serverGuidBinary = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setUpdatedPniBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.updatedPniBinary = valueParam
}
public func setUpdatedPniBinary(_ valueParam: Data) {
proto.updatedPniBinary = valueParam
}
public func setUnknownFields(_ unknownFields: SwiftProtobuf.UnknownStorage) {
proto.unknownFields = unknownFields
}
@ -3892,6 +3996,18 @@ public class SSKProtoDataMessageQuote: NSObject, Codable, NSSecureCoding {
return proto.hasType
}
@objc
public var authorAciBinary: Data? {
guard hasAuthorAciBinary else {
return nil
}
return proto.authorAciBinary
}
@objc
public var hasAuthorAciBinary: Bool {
return proto.hasAuthorAciBinary
}
public var hasUnknownFields: Bool {
return !proto.unknownFields.data.isEmpty
}
@ -3996,6 +4112,9 @@ extension SSKProtoDataMessageQuote {
if let _value = type {
builder.setType(_value)
}
if let _value = authorAciBinary {
builder.setAuthorAciBinary(_value)
}
if let _value = unknownFields {
builder.setUnknownFields(_value)
}
@ -4070,6 +4189,17 @@ public class SSKProtoDataMessageQuoteBuilder: NSObject {
proto.type = SSKProtoDataMessageQuoteTypeUnwrap(valueParam)
}
@objc
@available(swift, obsoleted: 1.0)
public func setAuthorAciBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.authorAciBinary = valueParam
}
public func setAuthorAciBinary(_ valueParam: Data) {
proto.authorAciBinary = valueParam
}
public func setUnknownFields(_ unknownFields: SwiftProtobuf.UnknownStorage) {
proto.unknownFields = unknownFields
}
@ -5936,6 +6066,18 @@ public class SSKProtoDataMessageReaction: NSObject, Codable, NSSecureCoding {
return proto.hasTargetAuthorAci
}
@objc
public var targetAuthorAciBinary: Data? {
guard hasTargetAuthorAciBinary else {
return nil
}
return proto.targetAuthorAciBinary
}
@objc
public var hasTargetAuthorAciBinary: Bool {
return proto.hasTargetAuthorAciBinary
}
public var hasUnknownFields: Bool {
return !proto.unknownFields.data.isEmpty
}
@ -6031,6 +6173,9 @@ extension SSKProtoDataMessageReaction {
if let _value = targetAuthorAci {
builder.setTargetAuthorAci(_value)
}
if let _value = targetAuthorAciBinary {
builder.setTargetAuthorAciBinary(_value)
}
if let _value = unknownFields {
builder.setUnknownFields(_value)
}
@ -6086,6 +6231,17 @@ public class SSKProtoDataMessageReactionBuilder: NSObject {
proto.timestamp = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setTargetAuthorAciBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.targetAuthorAciBinary = valueParam
}
public func setTargetAuthorAciBinary(_ valueParam: Data) {
proto.targetAuthorAciBinary = valueParam
}
public func setUnknownFields(_ unknownFields: SwiftProtobuf.UnknownStorage) {
proto.unknownFields = unknownFields
}
@ -7448,6 +7604,18 @@ public class SSKProtoDataMessageStoryContext: NSObject, Codable, NSSecureCoding
return proto.hasSentTimestamp
}
@objc
public var authorAciBinary: Data? {
guard hasAuthorAciBinary else {
return nil
}
return proto.authorAciBinary
}
@objc
public var hasAuthorAciBinary: Bool {
return proto.hasAuthorAciBinary
}
public var hasUnknownFields: Bool {
return !proto.unknownFields.data.isEmpty
}
@ -7527,6 +7695,9 @@ extension SSKProtoDataMessageStoryContext {
if hasSentTimestamp {
builder.setSentTimestamp(sentTimestamp)
}
if let _value = authorAciBinary {
builder.setAuthorAciBinary(_value)
}
if let _value = unknownFields {
builder.setUnknownFields(_value)
}
@ -7558,6 +7729,17 @@ public class SSKProtoDataMessageStoryContextBuilder: NSObject {
proto.sentTimestamp = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setAuthorAciBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.authorAciBinary = valueParam
}
public func setAuthorAciBinary(_ valueParam: Data) {
proto.authorAciBinary = valueParam
}
public func setUnknownFields(_ unknownFields: SwiftProtobuf.UnknownStorage) {
proto.unknownFields = unknownFields
}
@ -9450,6 +9632,18 @@ public class SSKProtoVerified: NSObject, Codable, NSSecureCoding {
return proto.hasNullMessage
}
@objc
public var destinationAciBinary: Data? {
guard hasDestinationAciBinary else {
return nil
}
return proto.destinationAciBinary
}
@objc
public var hasDestinationAciBinary: Bool {
return proto.hasDestinationAciBinary
}
public var hasUnknownFields: Bool {
return !proto.unknownFields.data.isEmpty
}
@ -9535,6 +9729,9 @@ extension SSKProtoVerified {
if let _value = nullMessage {
builder.setNullMessage(_value)
}
if let _value = destinationAciBinary {
builder.setDestinationAciBinary(_value)
}
if let _value = unknownFields {
builder.setUnknownFields(_value)
}
@ -9588,6 +9785,17 @@ public class SSKProtoVerifiedBuilder: NSObject {
proto.nullMessage = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setDestinationAciBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.destinationAciBinary = valueParam
}
public func setDestinationAciBinary(_ valueParam: Data) {
proto.destinationAciBinary = valueParam
}
public func setUnknownFields(_ unknownFields: SwiftProtobuf.UnknownStorage) {
proto.unknownFields = unknownFields
}
@ -9649,6 +9857,18 @@ public class SSKProtoSyncMessageSentUnidentifiedDeliveryStatus: NSObject, Codabl
return proto.hasUnidentified
}
@objc
public var destinationServiceIDBinary: Data? {
guard hasDestinationServiceIDBinary else {
return nil
}
return proto.destinationServiceIDBinary
}
@objc
public var hasDestinationServiceIDBinary: Bool {
return proto.hasDestinationServiceIDBinary
}
public var hasUnknownFields: Bool {
return !proto.unknownFields.data.isEmpty
}
@ -9728,6 +9948,9 @@ extension SSKProtoSyncMessageSentUnidentifiedDeliveryStatus {
if hasUnidentified {
builder.setUnidentified(unidentified)
}
if let _value = destinationServiceIDBinary {
builder.setDestinationServiceIDBinary(_value)
}
if let _value = unknownFields {
builder.setUnknownFields(_value)
}
@ -9759,6 +9982,17 @@ public class SSKProtoSyncMessageSentUnidentifiedDeliveryStatusBuilder: NSObject
proto.unidentified = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setDestinationServiceIDBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.destinationServiceIDBinary = valueParam
}
public func setDestinationServiceIDBinary(_ valueParam: Data) {
proto.destinationServiceIDBinary = valueParam
}
public func setUnknownFields(_ unknownFields: SwiftProtobuf.UnknownStorage) {
proto.unknownFields = unknownFields
}
@ -9825,6 +10059,18 @@ public class SSKProtoSyncMessageSentStoryMessageRecipient: NSObject, Codable, NS
return proto.hasIsAllowedToReply
}
@objc
public var destinationServiceIDBinary: Data? {
guard hasDestinationServiceIDBinary else {
return nil
}
return proto.destinationServiceIDBinary
}
@objc
public var hasDestinationServiceIDBinary: Bool {
return proto.hasDestinationServiceIDBinary
}
public var hasUnknownFields: Bool {
return !proto.unknownFields.data.isEmpty
}
@ -9905,6 +10151,9 @@ extension SSKProtoSyncMessageSentStoryMessageRecipient {
if hasIsAllowedToReply {
builder.setIsAllowedToReply(isAllowedToReply)
}
if let _value = destinationServiceIDBinary {
builder.setDestinationServiceIDBinary(_value)
}
if let _value = unknownFields {
builder.setUnknownFields(_value)
}
@ -9946,6 +10195,17 @@ public class SSKProtoSyncMessageSentStoryMessageRecipientBuilder: NSObject {
proto.isAllowedToReply = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setDestinationServiceIDBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.destinationServiceIDBinary = valueParam
}
public func setDestinationServiceIDBinary(_ valueParam: Data) {
proto.destinationServiceIDBinary = valueParam
}
public func setUnknownFields(_ unknownFields: SwiftProtobuf.UnknownStorage) {
proto.unknownFields = unknownFields
}
@ -10052,6 +10312,18 @@ public class SSKProtoSyncMessageSent: NSObject, Codable, NSSecureCoding {
return proto.hasIsRecipientUpdate
}
@objc
public var destinationServiceIDBinary: Data? {
guard hasDestinationServiceIDBinary else {
return nil
}
return proto.destinationServiceIDBinary
}
@objc
public var hasDestinationServiceIDBinary: Bool {
return proto.hasDestinationServiceIDBinary
}
public var hasUnknownFields: Bool {
return !proto.unknownFields.data.isEmpty
}
@ -10187,6 +10459,9 @@ extension SSKProtoSyncMessageSent {
if let _value = editMessage {
builder.setEditMessage(_value)
}
if let _value = destinationServiceIDBinary {
builder.setDestinationServiceIDBinary(_value)
}
if let _value = unknownFields {
builder.setUnknownFields(_value)
}
@ -10292,6 +10567,17 @@ public class SSKProtoSyncMessageSentBuilder: NSObject {
proto.editMessage = valueParam.proto
}
@objc
@available(swift, obsoleted: 1.0)
public func setDestinationServiceIDBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.destinationServiceIDBinary = valueParam
}
public func setDestinationServiceIDBinary(_ valueParam: Data) {
proto.destinationServiceIDBinary = valueParam
}
public func setUnknownFields(_ unknownFields: SwiftProtobuf.UnknownStorage) {
proto.unknownFields = unknownFields
}
@ -10521,6 +10807,11 @@ public class SSKProtoSyncMessageBlocked: NSObject, Codable, NSSecureCoding {
return proto.groupIds
}
@objc
public var acisBinary: [Data] {
return proto.acisBinary
}
public var hasUnknownFields: Bool {
return !proto.unknownFields.data.isEmpty
}
@ -10597,6 +10888,7 @@ extension SSKProtoSyncMessageBlocked {
builder.setNumbers(numbers)
builder.setAcis(acis)
builder.setGroupIds(groupIds)
builder.setAcisBinary(acisBinary)
if let _value = unknownFields {
builder.setUnknownFields(_value)
}
@ -10642,6 +10934,16 @@ public class SSKProtoSyncMessageBlockedBuilder: NSObject {
proto.groupIds = wrappedItems
}
@objc
public func addAcisBinary(_ valueParam: Data) {
proto.acisBinary.append(valueParam)
}
@objc
public func setAcisBinary(_ wrappedItems: [Data]) {
proto.acisBinary = wrappedItems
}
public func setUnknownFields(_ unknownFields: SwiftProtobuf.UnknownStorage) {
proto.unknownFields = unknownFields
}
@ -10884,6 +11186,18 @@ public class SSKProtoSyncMessageRead: NSObject, Codable, NSSecureCoding {
return proto.hasSenderAci
}
@objc
public var senderAciBinary: Data? {
guard hasSenderAciBinary else {
return nil
}
return proto.senderAciBinary
}
@objc
public var hasSenderAciBinary: Bool {
return proto.hasSenderAciBinary
}
public var hasUnknownFields: Bool {
return !proto.unknownFields.data.isEmpty
}
@ -10968,6 +11282,9 @@ extension SSKProtoSyncMessageRead {
if let _value = senderAci {
builder.setSenderAci(_value)
}
if let _value = senderAciBinary {
builder.setSenderAciBinary(_value)
}
if let _value = unknownFields {
builder.setUnknownFields(_value)
}
@ -11006,6 +11323,17 @@ public class SSKProtoSyncMessageReadBuilder: NSObject {
proto.timestamp = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setSenderAciBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.senderAciBinary = valueParam
}
public func setSenderAciBinary(_ valueParam: Data) {
proto.senderAciBinary = valueParam
}
public func setUnknownFields(_ unknownFields: SwiftProtobuf.UnknownStorage) {
proto.unknownFields = unknownFields
}
@ -11061,6 +11389,18 @@ public class SSKProtoSyncMessageViewed: NSObject, Codable, NSSecureCoding {
return proto.hasSenderAci
}
@objc
public var senderAciBinary: Data? {
guard hasSenderAciBinary else {
return nil
}
return proto.senderAciBinary
}
@objc
public var hasSenderAciBinary: Bool {
return proto.hasSenderAciBinary
}
public var hasUnknownFields: Bool {
return !proto.unknownFields.data.isEmpty
}
@ -11145,6 +11485,9 @@ extension SSKProtoSyncMessageViewed {
if let _value = senderAci {
builder.setSenderAci(_value)
}
if let _value = senderAciBinary {
builder.setSenderAciBinary(_value)
}
if let _value = unknownFields {
builder.setUnknownFields(_value)
}
@ -11183,6 +11526,17 @@ public class SSKProtoSyncMessageViewedBuilder: NSObject {
proto.timestamp = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setSenderAciBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.senderAciBinary = valueParam
}
public func setSenderAciBinary(_ valueParam: Data) {
proto.senderAciBinary = valueParam
}
public func setUnknownFields(_ unknownFields: SwiftProtobuf.UnknownStorage) {
proto.unknownFields = unknownFields
}
@ -11681,6 +12035,18 @@ public class SSKProtoSyncMessageViewOnceOpen: NSObject, Codable, NSSecureCoding
return proto.hasSenderAci
}
@objc
public var senderAciBinary: Data? {
guard hasSenderAciBinary else {
return nil
}
return proto.senderAciBinary
}
@objc
public var hasSenderAciBinary: Bool {
return proto.hasSenderAciBinary
}
public var hasUnknownFields: Bool {
return !proto.unknownFields.data.isEmpty
}
@ -11765,6 +12131,9 @@ extension SSKProtoSyncMessageViewOnceOpen {
if let _value = senderAci {
builder.setSenderAci(_value)
}
if let _value = senderAciBinary {
builder.setSenderAciBinary(_value)
}
if let _value = unknownFields {
builder.setUnknownFields(_value)
}
@ -11803,6 +12172,17 @@ public class SSKProtoSyncMessageViewOnceOpenBuilder: NSObject {
proto.timestamp = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setSenderAciBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.senderAciBinary = valueParam
}
public func setSenderAciBinary(_ valueParam: Data) {
proto.senderAciBinary = valueParam
}
public func setUnknownFields(_ unknownFields: SwiftProtobuf.UnknownStorage) {
proto.unknownFields = unknownFields
}
@ -12314,6 +12694,18 @@ public class SSKProtoSyncMessageMessageRequestResponse: NSObject, Codable, NSSec
return proto.hasType
}
@objc
public var threadAciBinary: Data? {
guard hasThreadAciBinary else {
return nil
}
return proto.threadAciBinary
}
@objc
public var hasThreadAciBinary: Bool {
return proto.hasThreadAciBinary
}
public var hasUnknownFields: Bool {
return !proto.unknownFields.data.isEmpty
}
@ -12396,6 +12788,9 @@ extension SSKProtoSyncMessageMessageRequestResponse {
if let _value = type {
builder.setType(_value)
}
if let _value = threadAciBinary {
builder.setThreadAciBinary(_value)
}
if let _value = unknownFields {
builder.setUnknownFields(_value)
}
@ -12438,6 +12833,17 @@ public class SSKProtoSyncMessageMessageRequestResponseBuilder: NSObject {
proto.type = SSKProtoSyncMessageMessageRequestResponseTypeUnwrap(valueParam)
}
@objc
@available(swift, obsoleted: 1.0)
public func setThreadAciBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.threadAciBinary = valueParam
}
public func setThreadAciBinary(_ valueParam: Data) {
proto.threadAciBinary = valueParam
}
public func setUnknownFields(_ unknownFields: SwiftProtobuf.UnknownStorage) {
proto.unknownFields = unknownFields
}
@ -14081,6 +14487,18 @@ public class SSKProtoSyncMessageDeleteForMeConversationIdentifier: NSObject, Cod
return proto.hasThreadE164
}
@objc
public var threadServiceIDBinary: Data? {
guard hasThreadServiceIDBinary else {
return nil
}
return proto.threadServiceIDBinary
}
@objc
public var hasThreadServiceIDBinary: Bool {
return proto.hasThreadServiceIDBinary
}
public var hasUnknownFields: Bool {
return !proto.unknownFields.data.isEmpty
}
@ -14163,6 +14581,9 @@ extension SSKProtoSyncMessageDeleteForMeConversationIdentifier {
if let _value = threadE164 {
builder.setThreadE164(_value)
}
if let _value = threadServiceIDBinary {
builder.setThreadServiceIDBinary(_value)
}
if let _value = unknownFields {
builder.setUnknownFields(_value)
}
@ -14211,6 +14632,17 @@ public class SSKProtoSyncMessageDeleteForMeConversationIdentifierBuilder: NSObje
proto.threadE164 = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setThreadServiceIDBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.threadServiceIDBinary = valueParam
}
public func setThreadServiceIDBinary(_ valueParam: Data) {
proto.threadServiceIDBinary = valueParam
}
public func setUnknownFields(_ unknownFields: SwiftProtobuf.UnknownStorage) {
proto.unknownFields = unknownFields
}
@ -14275,6 +14707,18 @@ public class SSKProtoSyncMessageDeleteForMeAddressableMessage: NSObject, Codable
return proto.hasAuthorE164
}
@objc
public var authorServiceIDBinary: Data? {
guard hasAuthorServiceIDBinary else {
return nil
}
return proto.authorServiceIDBinary
}
@objc
public var hasAuthorServiceIDBinary: Bool {
return proto.hasAuthorServiceIDBinary
}
@objc
public var sentTimestamp: UInt64 {
return proto.sentTimestamp
@ -14363,6 +14807,9 @@ extension SSKProtoSyncMessageDeleteForMeAddressableMessage {
if let _value = authorE164 {
builder.setAuthorE164(_value)
}
if let _value = authorServiceIDBinary {
builder.setAuthorServiceIDBinary(_value)
}
if hasSentTimestamp {
builder.setSentTimestamp(sentTimestamp)
}
@ -14403,6 +14850,17 @@ public class SSKProtoSyncMessageDeleteForMeAddressableMessageBuilder: NSObject {
proto.authorE164 = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setAuthorServiceIDBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.authorServiceIDBinary = valueParam
}
public func setAuthorServiceIDBinary(_ valueParam: Data) {
proto.authorServiceIDBinary = valueParam
}
@objc
public func setSentTimestamp(_ valueParam: UInt64) {
proto.sentTimestamp = valueParam
@ -17133,6 +17591,18 @@ public class SSKProtoContactDetails: NSObject, Codable, NSSecureCoding {
return proto.hasAci
}
@objc
public var aciBinary: Data? {
guard hasAciBinary else {
return nil
}
return proto.aciBinary
}
@objc
public var hasAciBinary: Bool {
return proto.hasAciBinary
}
@objc
public var name: String? {
guard hasName else {
@ -17259,6 +17729,9 @@ extension SSKProtoContactDetails {
if let _value = aci {
builder.setAci(_value)
}
if let _value = aciBinary {
builder.setAciBinary(_value)
}
if let _value = name {
builder.setName(_value)
}
@ -17311,6 +17784,17 @@ public class SSKProtoContactDetailsBuilder: NSObject {
proto.aci = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setAciBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.aciBinary = valueParam
}
public func setAciBinary(_ valueParam: Data) {
proto.aciBinary = valueParam
}
@objc
@available(swift, obsoleted: 1.0)
public func setName(_ valueParam: String?) {
@ -18601,6 +19085,18 @@ public class SSKProtoBodyRange: NSObject, Codable, NSSecureCoding {
return proto.hasStyle
}
@objc
public var mentionAciBinary: Data? {
guard hasMentionAciBinary else {
return nil
}
return proto.mentionAciBinary
}
@objc
public var hasMentionAciBinary: Bool {
return proto.hasMentionAciBinary
}
public var hasUnknownFields: Bool {
return !proto.unknownFields.data.isEmpty
}
@ -18686,6 +19182,9 @@ extension SSKProtoBodyRange {
if let _value = style {
builder.setStyle(_value)
}
if let _value = mentionAciBinary {
builder.setMentionAciBinary(_value)
}
if let _value = unknownFields {
builder.setUnknownFields(_value)
}
@ -18727,6 +19226,17 @@ public class SSKProtoBodyRangeBuilder: NSObject {
proto.style = SSKProtoBodyRangeStyleUnwrap(valueParam)
}
@objc
@available(swift, obsoleted: 1.0)
public func setMentionAciBinary(_ valueParam: Data?) {
guard let valueParam = valueParam else { return }
proto.mentionAciBinary = valueParam
}
public func setMentionAciBinary(_ valueParam: Data) {
proto.mentionAciBinary = valueParam
}
public func setUnknownFields(_ unknownFields: SwiftProtobuf.UnknownStorage) {
proto.unknownFields = unknownFields
}

View File

@ -153,6 +153,46 @@ struct SignalServiceProtos_Envelope: Sendable {
/// Clears the value of `spamReportingToken`. Subsequent reads from it will return its default value.
mutating func clearSpamReportingToken() {self._spamReportingToken = nil}
/// service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
var sourceServiceIDBinary: Data {
get {return _sourceServiceIDBinary ?? Data()}
set {_sourceServiceIDBinary = newValue}
}
/// Returns true if `sourceServiceIDBinary` has been explicitly set.
var hasSourceServiceIDBinary: Bool {return self._sourceServiceIDBinary != nil}
/// Clears the value of `sourceServiceIDBinary`. Subsequent reads from it will return its default value.
mutating func clearSourceServiceIDBinary() {self._sourceServiceIDBinary = nil}
/// service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
var destinationServiceIDBinary: Data {
get {return _destinationServiceIDBinary ?? Data()}
set {_destinationServiceIDBinary = newValue}
}
/// Returns true if `destinationServiceIDBinary` has been explicitly set.
var hasDestinationServiceIDBinary: Bool {return self._destinationServiceIDBinary != nil}
/// Clears the value of `destinationServiceIDBinary`. Subsequent reads from it will return its default value.
mutating func clearDestinationServiceIDBinary() {self._destinationServiceIDBinary = nil}
/// 16-byte UUID
var serverGuidBinary: Data {
get {return _serverGuidBinary ?? Data()}
set {_serverGuidBinary = newValue}
}
/// Returns true if `serverGuidBinary` has been explicitly set.
var hasServerGuidBinary: Bool {return self._serverGuidBinary != nil}
/// Clears the value of `serverGuidBinary`. Subsequent reads from it will return its default value.
mutating func clearServerGuidBinary() {self._serverGuidBinary = nil}
/// 16-byte UUID
var updatedPniBinary: Data {
get {return _updatedPniBinary ?? Data()}
set {_updatedPniBinary = newValue}
}
/// Returns true if `updatedPniBinary` has been explicitly set.
var hasUpdatedPniBinary: Bool {return self._updatedPniBinary != nil}
/// Clears the value of `updatedPniBinary`. Subsequent reads from it will return its default value.
mutating func clearUpdatedPniBinary() {self._updatedPniBinary = nil}
var unknownFields = SwiftProtobuf.UnknownStorage()
enum TypeEnum: Int, SwiftProtobuf.Enum, Swift.CaseIterable {
@ -183,6 +223,10 @@ struct SignalServiceProtos_Envelope: Sendable {
fileprivate var _updatedPni: String? = nil
fileprivate var _story: Bool? = nil
fileprivate var _spamReportingToken: Data? = nil
fileprivate var _sourceServiceIDBinary: Data? = nil
fileprivate var _destinationServiceIDBinary: Data? = nil
fileprivate var _serverGuidBinary: Data? = nil
fileprivate var _updatedPniBinary: Data? = nil
}
struct SignalServiceProtos_TypingMessage: Sendable {
@ -1221,6 +1265,16 @@ struct SignalServiceProtos_DataMessage: @unchecked Sendable {
/// Clears the value of `type`. Subsequent reads from it will return its default value.
mutating func clearType() {self._type = nil}
/// 16-byte UUID
var authorAciBinary: Data {
get {return _authorAciBinary ?? Data()}
set {_authorAciBinary = newValue}
}
/// Returns true if `authorAciBinary` has been explicitly set.
var hasAuthorAciBinary: Bool {return self._authorAciBinary != nil}
/// Clears the value of `authorAciBinary`. Subsequent reads from it will return its default value.
mutating func clearAuthorAciBinary() {self._authorAciBinary = nil}
var unknownFields = SwiftProtobuf.UnknownStorage()
enum TypeEnum: Int, SwiftProtobuf.Enum, Swift.CaseIterable {
@ -1278,6 +1332,7 @@ struct SignalServiceProtos_DataMessage: @unchecked Sendable {
fileprivate var _authorAci: String? = nil
fileprivate var _text: String? = nil
fileprivate var _type: SignalServiceProtos_DataMessage.Quote.TypeEnum? = nil
fileprivate var _authorAciBinary: Data? = nil
}
struct Contact: Sendable {
@ -1740,6 +1795,16 @@ struct SignalServiceProtos_DataMessage: @unchecked Sendable {
/// Clears the value of `timestamp`. Subsequent reads from it will return its default value.
mutating func clearTimestamp() {self._timestamp = nil}
/// 16-byte UUID
var targetAuthorAciBinary: Data {
get {return _targetAuthorAciBinary ?? Data()}
set {_targetAuthorAciBinary = newValue}
}
/// Returns true if `targetAuthorAciBinary` has been explicitly set.
var hasTargetAuthorAciBinary: Bool {return self._targetAuthorAciBinary != nil}
/// Clears the value of `targetAuthorAciBinary`. Subsequent reads from it will return its default value.
mutating func clearTargetAuthorAciBinary() {self._targetAuthorAciBinary = nil}
var unknownFields = SwiftProtobuf.UnknownStorage()
init() {}
@ -1748,6 +1813,7 @@ struct SignalServiceProtos_DataMessage: @unchecked Sendable {
fileprivate var _remove: Bool? = nil
fileprivate var _targetAuthorAci: String? = nil
fileprivate var _timestamp: UInt64? = nil
fileprivate var _targetAuthorAciBinary: Data? = nil
}
struct Delete: Sendable {
@ -1980,12 +2046,23 @@ struct SignalServiceProtos_DataMessage: @unchecked Sendable {
/// Clears the value of `sentTimestamp`. Subsequent reads from it will return its default value.
mutating func clearSentTimestamp() {self._sentTimestamp = nil}
/// 16-byte UUID
var authorAciBinary: Data {
get {return _authorAciBinary ?? Data()}
set {_authorAciBinary = newValue}
}
/// Returns true if `authorAciBinary` has been explicitly set.
var hasAuthorAciBinary: Bool {return self._authorAciBinary != nil}
/// Clears the value of `authorAciBinary`. Subsequent reads from it will return its default value.
mutating func clearAuthorAciBinary() {self._authorAciBinary = nil}
var unknownFields = SwiftProtobuf.UnknownStorage()
init() {}
fileprivate var _authorAci: String? = nil
fileprivate var _sentTimestamp: UInt64? = nil
fileprivate var _authorAciBinary: Data? = nil
}
struct GiftBadge: Sendable {
@ -2207,6 +2284,16 @@ struct SignalServiceProtos_Verified: Sendable {
/// Clears the value of `nullMessage`. Subsequent reads from it will return its default value.
mutating func clearNullMessage() {self._nullMessage = nil}
/// 16-byte UUID
var destinationAciBinary: Data {
get {return _destinationAciBinary ?? Data()}
set {_destinationAciBinary = newValue}
}
/// Returns true if `destinationAciBinary` has been explicitly set.
var hasDestinationAciBinary: Bool {return self._destinationAciBinary != nil}
/// Clears the value of `destinationAciBinary`. Subsequent reads from it will return its default value.
mutating func clearDestinationAciBinary() {self._destinationAciBinary = nil}
var unknownFields = SwiftProtobuf.UnknownStorage()
enum State: Int, SwiftProtobuf.Enum, Swift.CaseIterable {
@ -2226,6 +2313,7 @@ struct SignalServiceProtos_Verified: Sendable {
fileprivate var _identityKey: Data? = nil
fileprivate var _state: SignalServiceProtos_Verified.State? = nil
fileprivate var _nullMessage: Data? = nil
fileprivate var _destinationAciBinary: Data? = nil
}
struct SignalServiceProtos_SyncMessage: @unchecked Sendable {
@ -2493,6 +2581,16 @@ struct SignalServiceProtos_SyncMessage: @unchecked Sendable {
/// Clears the value of `editMessage`. Subsequent reads from it will return its default value.
mutating func clearEditMessage() {self._editMessage = nil}
/// service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
var destinationServiceIDBinary: Data {
get {return _destinationServiceIDBinary ?? Data()}
set {_destinationServiceIDBinary = newValue}
}
/// Returns true if `destinationServiceIDBinary` has been explicitly set.
var hasDestinationServiceIDBinary: Bool {return self._destinationServiceIDBinary != nil}
/// Clears the value of `destinationServiceIDBinary`. Subsequent reads from it will return its default value.
mutating func clearDestinationServiceIDBinary() {self._destinationServiceIDBinary = nil}
var unknownFields = SwiftProtobuf.UnknownStorage()
struct UnidentifiedDeliveryStatus: Sendable {
@ -2518,12 +2616,23 @@ struct SignalServiceProtos_SyncMessage: @unchecked Sendable {
/// Clears the value of `unidentified`. Subsequent reads from it will return its default value.
mutating func clearUnidentified() {self._unidentified = nil}
/// service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
var destinationServiceIDBinary: Data {
get {return _destinationServiceIDBinary ?? Data()}
set {_destinationServiceIDBinary = newValue}
}
/// Returns true if `destinationServiceIDBinary` has been explicitly set.
var hasDestinationServiceIDBinary: Bool {return self._destinationServiceIDBinary != nil}
/// Clears the value of `destinationServiceIDBinary`. Subsequent reads from it will return its default value.
mutating func clearDestinationServiceIDBinary() {self._destinationServiceIDBinary = nil}
var unknownFields = SwiftProtobuf.UnknownStorage()
init() {}
fileprivate var _destinationServiceID: String? = nil
fileprivate var _unidentified: Bool? = nil
fileprivate var _destinationServiceIDBinary: Data? = nil
}
struct StoryMessageRecipient: Sendable {
@ -2551,12 +2660,23 @@ struct SignalServiceProtos_SyncMessage: @unchecked Sendable {
/// Clears the value of `isAllowedToReply`. Subsequent reads from it will return its default value.
mutating func clearIsAllowedToReply() {self._isAllowedToReply = nil}
/// service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
var destinationServiceIDBinary: Data {
get {return _destinationServiceIDBinary ?? Data()}
set {_destinationServiceIDBinary = newValue}
}
/// Returns true if `destinationServiceIDBinary` has been explicitly set.
var hasDestinationServiceIDBinary: Bool {return self._destinationServiceIDBinary != nil}
/// Clears the value of `destinationServiceIDBinary`. Subsequent reads from it will return its default value.
mutating func clearDestinationServiceIDBinary() {self._destinationServiceIDBinary = nil}
var unknownFields = SwiftProtobuf.UnknownStorage()
init() {}
fileprivate var _destinationServiceID: String? = nil
fileprivate var _isAllowedToReply: Bool? = nil
fileprivate var _destinationServiceIDBinary: Data? = nil
}
init() {}
@ -2569,6 +2689,7 @@ struct SignalServiceProtos_SyncMessage: @unchecked Sendable {
fileprivate var _isRecipientUpdate: Bool? = nil
fileprivate var _storyMessage: SignalServiceProtos_StoryMessage? = nil
fileprivate var _editMessage: SignalServiceProtos_EditMessage? = nil
fileprivate var _destinationServiceIDBinary: Data? = nil
}
struct Contacts: @unchecked Sendable {
@ -2614,6 +2735,9 @@ struct SignalServiceProtos_SyncMessage: @unchecked Sendable {
var groupIds: [Data] = []
/// 16-byte UUID
var acisBinary: [Data] = []
var unknownFields = SwiftProtobuf.UnknownStorage()
init() {}
@ -2677,12 +2801,23 @@ struct SignalServiceProtos_SyncMessage: @unchecked Sendable {
/// Clears the value of `timestamp`. Subsequent reads from it will return its default value.
mutating func clearTimestamp() {self._timestamp = nil}
/// 16-byte UUID
var senderAciBinary: Data {
get {return _senderAciBinary ?? Data()}
set {_senderAciBinary = newValue}
}
/// Returns true if `senderAciBinary` has been explicitly set.
var hasSenderAciBinary: Bool {return self._senderAciBinary != nil}
/// Clears the value of `senderAciBinary`. Subsequent reads from it will return its default value.
mutating func clearSenderAciBinary() {self._senderAciBinary = nil}
var unknownFields = SwiftProtobuf.UnknownStorage()
init() {}
fileprivate var _senderAci: String? = nil
fileprivate var _timestamp: UInt64? = nil
fileprivate var _senderAciBinary: Data? = nil
}
struct Viewed: Sendable {
@ -2709,12 +2844,23 @@ struct SignalServiceProtos_SyncMessage: @unchecked Sendable {
/// Clears the value of `timestamp`. Subsequent reads from it will return its default value.
mutating func clearTimestamp() {self._timestamp = nil}
/// 16-byte UUID
var senderAciBinary: Data {
get {return _senderAciBinary ?? Data()}
set {_senderAciBinary = newValue}
}
/// Returns true if `senderAciBinary` has been explicitly set.
var hasSenderAciBinary: Bool {return self._senderAciBinary != nil}
/// Clears the value of `senderAciBinary`. Subsequent reads from it will return its default value.
mutating func clearSenderAciBinary() {self._senderAciBinary = nil}
var unknownFields = SwiftProtobuf.UnknownStorage()
init() {}
fileprivate var _senderAci: String? = nil
fileprivate var _timestamp: UInt64? = nil
fileprivate var _senderAciBinary: Data? = nil
}
struct Configuration: Sendable {
@ -2855,12 +3001,23 @@ struct SignalServiceProtos_SyncMessage: @unchecked Sendable {
/// Clears the value of `timestamp`. Subsequent reads from it will return its default value.
mutating func clearTimestamp() {self._timestamp = nil}
/// 16-byte UUID
var senderAciBinary: Data {
get {return _senderAciBinary ?? Data()}
set {_senderAciBinary = newValue}
}
/// Returns true if `senderAciBinary` has been explicitly set.
var hasSenderAciBinary: Bool {return self._senderAciBinary != nil}
/// Clears the value of `senderAciBinary`. Subsequent reads from it will return its default value.
mutating func clearSenderAciBinary() {self._senderAciBinary = nil}
var unknownFields = SwiftProtobuf.UnknownStorage()
init() {}
fileprivate var _senderAci: String? = nil
fileprivate var _timestamp: UInt64? = nil
fileprivate var _senderAciBinary: Data? = nil
}
struct FetchLatest: Sendable {
@ -2969,6 +3126,16 @@ struct SignalServiceProtos_SyncMessage: @unchecked Sendable {
/// Clears the value of `type`. Subsequent reads from it will return its default value.
mutating func clearType() {self._type = nil}
/// 16-byte UUID
var threadAciBinary: Data {
get {return _threadAciBinary ?? Data()}
set {_threadAciBinary = newValue}
}
/// Returns true if `threadAciBinary` has been explicitly set.
var hasThreadAciBinary: Bool {return self._threadAciBinary != nil}
/// Clears the value of `threadAciBinary`. Subsequent reads from it will return its default value.
mutating func clearThreadAciBinary() {self._threadAciBinary = nil}
var unknownFields = SwiftProtobuf.UnknownStorage()
enum TypeEnum: Int, SwiftProtobuf.Enum, Swift.CaseIterable {
@ -2991,6 +3158,7 @@ struct SignalServiceProtos_SyncMessage: @unchecked Sendable {
fileprivate var _threadAci: String? = nil
fileprivate var _groupID: Data? = nil
fileprivate var _type: SignalServiceProtos_SyncMessage.MessageRequestResponse.TypeEnum? = nil
fileprivate var _threadAciBinary: Data? = nil
}
struct OutgoingPayment: Sendable {
@ -3447,7 +3615,6 @@ struct SignalServiceProtos_SyncMessage: @unchecked Sendable {
/// Clears the value of `threadGroupID`. Subsequent reads from it will return its default value.
mutating func clearThreadGroupID() {self._threadGroupID = nil}
/// }
var threadE164: String {
get {return _threadE164 ?? String()}
set {_threadE164 = newValue}
@ -3457,6 +3624,16 @@ struct SignalServiceProtos_SyncMessage: @unchecked Sendable {
/// Clears the value of `threadE164`. Subsequent reads from it will return its default value.
mutating func clearThreadE164() {self._threadE164 = nil}
/// service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
var threadServiceIDBinary: Data {
get {return _threadServiceIDBinary ?? Data()}
set {_threadServiceIDBinary = newValue}
}
/// Returns true if `threadServiceIDBinary` has been explicitly set.
var hasThreadServiceIDBinary: Bool {return self._threadServiceIDBinary != nil}
/// Clears the value of `threadServiceIDBinary`. Subsequent reads from it will return its default value.
mutating func clearThreadServiceIDBinary() {self._threadServiceIDBinary = nil}
var unknownFields = SwiftProtobuf.UnknownStorage()
init() {}
@ -3464,6 +3641,7 @@ struct SignalServiceProtos_SyncMessage: @unchecked Sendable {
fileprivate var _threadServiceID: String? = nil
fileprivate var _threadGroupID: Data? = nil
fileprivate var _threadE164: String? = nil
fileprivate var _threadServiceIDBinary: Data? = nil
}
struct AddressableMessage: Sendable {
@ -3490,6 +3668,16 @@ struct SignalServiceProtos_SyncMessage: @unchecked Sendable {
/// Clears the value of `authorE164`. Subsequent reads from it will return its default value.
mutating func clearAuthorE164() {self._authorE164 = nil}
/// service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
var authorServiceIDBinary: Data {
get {return _authorServiceIDBinary ?? Data()}
set {_authorServiceIDBinary = newValue}
}
/// Returns true if `authorServiceIDBinary` has been explicitly set.
var hasAuthorServiceIDBinary: Bool {return self._authorServiceIDBinary != nil}
/// Clears the value of `authorServiceIDBinary`. Subsequent reads from it will return its default value.
mutating func clearAuthorServiceIDBinary() {self._authorServiceIDBinary = nil}
/// }
var sentTimestamp: UInt64 {
get {return _sentTimestamp ?? 0}
@ -3506,6 +3694,7 @@ struct SignalServiceProtos_SyncMessage: @unchecked Sendable {
fileprivate var _authorServiceID: String? = nil
fileprivate var _authorE164: String? = nil
fileprivate var _authorServiceIDBinary: Data? = nil
fileprivate var _sentTimestamp: UInt64? = nil
}
@ -3936,6 +4125,16 @@ struct SignalServiceProtos_ContactDetails: Sendable {
/// Clears the value of `aci`. Subsequent reads from it will return its default value.
mutating func clearAci() {self._aci = nil}
/// 16-byte UUID
var aciBinary: Data {
get {return _aciBinary ?? Data()}
set {_aciBinary = newValue}
}
/// Returns true if `aciBinary` has been explicitly set.
var hasAciBinary: Bool {return self._aciBinary != nil}
/// Clears the value of `aciBinary`. Subsequent reads from it will return its default value.
mutating func clearAciBinary() {self._aciBinary = nil}
var name: String {
get {return _name ?? String()}
set {_name = newValue}
@ -4018,6 +4217,7 @@ struct SignalServiceProtos_ContactDetails: Sendable {
fileprivate var _contactE164: String? = nil
fileprivate var _aci: String? = nil
fileprivate var _aciBinary: Data? = nil
fileprivate var _name: String? = nil
fileprivate var _avatar: SignalServiceProtos_ContactDetails.Avatar? = nil
fileprivate var _expireTimer: UInt32? = nil
@ -4276,7 +4476,6 @@ struct SignalServiceProtos_BodyRange: Sendable {
/// Clears the value of `mentionAci`. Subsequent reads from it will return its default value.
mutating func clearMentionAci() {self._mentionAci = nil}
/// }
var style: SignalServiceProtos_BodyRange.Style {
get {return _style ?? .none}
set {_style = newValue}
@ -4286,6 +4485,16 @@ struct SignalServiceProtos_BodyRange: Sendable {
/// Clears the value of `style`. Subsequent reads from it will return its default value.
mutating func clearStyle() {self._style = nil}
/// 16-byte UUID
var mentionAciBinary: Data {
get {return _mentionAciBinary ?? Data()}
set {_mentionAciBinary = newValue}
}
/// Returns true if `mentionAciBinary` has been explicitly set.
var hasMentionAciBinary: Bool {return self._mentionAciBinary != nil}
/// Clears the value of `mentionAciBinary`. Subsequent reads from it will return its default value.
mutating func clearMentionAciBinary() {self._mentionAciBinary = nil}
var unknownFields = SwiftProtobuf.UnknownStorage()
enum Style: Int, SwiftProtobuf.Enum, Swift.CaseIterable {
@ -4308,6 +4517,7 @@ struct SignalServiceProtos_BodyRange: Sendable {
fileprivate var _length: UInt32? = nil
fileprivate var _mentionAci: String? = nil
fileprivate var _style: SignalServiceProtos_BodyRange.Style? = nil
fileprivate var _mentionAciBinary: Data? = nil
}
struct SignalServiceProtos_EditMessage: Sendable {
@ -4347,7 +4557,7 @@ fileprivate let _protobuf_package = "SignalServiceProtos"
extension SignalServiceProtos_Envelope: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = _protobuf_package + ".Envelope"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}type\0\u{2}\u{4}timestamp\0\u{2}\u{2}sourceDevice\0\u{1}content\0\u{1}serverGuid\0\u{1}serverTimestamp\0\u{1}sourceServiceId\0\u{2}\u{2}destinationServiceId\0\u{1}urgent\0\u{1}updatedPni\0\u{1}story\0\u{1}spamReportingToken\0\u{c}\u{2}\u{1}\u{c}\u{3}\u{1}\u{c}\u{6}\u{1}")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}type\0\u{2}\u{4}timestamp\0\u{2}\u{2}sourceDevice\0\u{1}content\0\u{1}serverGuid\0\u{1}serverTimestamp\0\u{1}sourceServiceId\0\u{2}\u{2}destinationServiceId\0\u{1}urgent\0\u{1}updatedPni\0\u{1}story\0\u{1}spamReportingToken\0\u{2}\u{2}sourceServiceIdBinary\0\u{1}destinationServiceIdBinary\0\u{1}serverGuidBinary\0\u{1}updatedPniBinary\0\u{c}\u{2}\u{1}\u{c}\u{3}\u{1}\u{c}\u{6}\u{1}\u{c}\u{12}\u{1}")
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
@ -4367,6 +4577,10 @@ extension SignalServiceProtos_Envelope: SwiftProtobuf.Message, SwiftProtobuf._Me
case 15: try { try decoder.decodeSingularStringField(value: &self._updatedPni) }()
case 16: try { try decoder.decodeSingularBoolField(value: &self._story) }()
case 17: try { try decoder.decodeSingularBytesField(value: &self._spamReportingToken) }()
case 19: try { try decoder.decodeSingularBytesField(value: &self._sourceServiceIDBinary) }()
case 20: try { try decoder.decodeSingularBytesField(value: &self._destinationServiceIDBinary) }()
case 21: try { try decoder.decodeSingularBytesField(value: &self._serverGuidBinary) }()
case 22: try { try decoder.decodeSingularBytesField(value: &self._updatedPniBinary) }()
default: break
}
}
@ -4413,6 +4627,18 @@ extension SignalServiceProtos_Envelope: SwiftProtobuf.Message, SwiftProtobuf._Me
try { if let v = self._spamReportingToken {
try visitor.visitSingularBytesField(value: v, fieldNumber: 17)
} }()
try { if let v = self._sourceServiceIDBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 19)
} }()
try { if let v = self._destinationServiceIDBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 20)
} }()
try { if let v = self._serverGuidBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 21)
} }()
try { if let v = self._updatedPniBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 22)
} }()
try unknownFields.traverse(visitor: &visitor)
}
@ -4429,6 +4655,10 @@ extension SignalServiceProtos_Envelope: SwiftProtobuf.Message, SwiftProtobuf._Me
if lhs._updatedPni != rhs._updatedPni {return false}
if lhs._story != rhs._story {return false}
if lhs._spamReportingToken != rhs._spamReportingToken {return false}
if lhs._sourceServiceIDBinary != rhs._sourceServiceIDBinary {return false}
if lhs._destinationServiceIDBinary != rhs._destinationServiceIDBinary {return false}
if lhs._serverGuidBinary != rhs._serverGuidBinary {return false}
if lhs._updatedPniBinary != rhs._updatedPniBinary {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@ -5512,7 +5742,7 @@ extension SignalServiceProtos_DataMessage.ProtocolVersion: SwiftProtobuf._ProtoN
extension SignalServiceProtos_DataMessage.Quote: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = SignalServiceProtos_DataMessage.protoMessageName + ".Quote"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}id\0\u{2}\u{2}text\0\u{1}attachments\0\u{1}authorAci\0\u{1}bodyRanges\0\u{1}type\0\u{c}\u{2}\u{1}")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}id\0\u{2}\u{2}text\0\u{1}attachments\0\u{1}authorAci\0\u{1}bodyRanges\0\u{1}type\0\u{1}authorAciBinary\0\u{c}\u{2}\u{1}")
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
@ -5526,6 +5756,7 @@ extension SignalServiceProtos_DataMessage.Quote: SwiftProtobuf.Message, SwiftPro
case 5: try { try decoder.decodeSingularStringField(value: &self._authorAci) }()
case 6: try { try decoder.decodeRepeatedMessageField(value: &self.bodyRanges) }()
case 7: try { try decoder.decodeSingularEnumField(value: &self._type) }()
case 8: try { try decoder.decodeSingularBytesField(value: &self._authorAciBinary) }()
default: break
}
}
@ -5554,6 +5785,9 @@ extension SignalServiceProtos_DataMessage.Quote: SwiftProtobuf.Message, SwiftPro
try { if let v = self._type {
try visitor.visitSingularEnumField(value: v, fieldNumber: 7)
} }()
try { if let v = self._authorAciBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 8)
} }()
try unknownFields.traverse(visitor: &visitor)
}
@ -5564,6 +5798,7 @@ extension SignalServiceProtos_DataMessage.Quote: SwiftProtobuf.Message, SwiftPro
if lhs.attachments != rhs.attachments {return false}
if lhs.bodyRanges != rhs.bodyRanges {return false}
if lhs._type != rhs._type {return false}
if lhs._authorAciBinary != rhs._authorAciBinary {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@ -6121,7 +6356,7 @@ extension SignalServiceProtos_DataMessage.Sticker: SwiftProtobuf.Message, SwiftP
extension SignalServiceProtos_DataMessage.Reaction: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = SignalServiceProtos_DataMessage.protoMessageName + ".Reaction"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}emoji\0\u{1}remove\0\u{2}\u{2}targetAuthorAci\0\u{1}timestamp\0\u{c}\u{3}\u{1}")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}emoji\0\u{1}remove\0\u{2}\u{2}targetAuthorAci\0\u{1}timestamp\0\u{1}targetAuthorAciBinary\0\u{c}\u{3}\u{1}")
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
@ -6133,6 +6368,7 @@ extension SignalServiceProtos_DataMessage.Reaction: SwiftProtobuf.Message, Swift
case 2: try { try decoder.decodeSingularBoolField(value: &self._remove) }()
case 4: try { try decoder.decodeSingularStringField(value: &self._targetAuthorAci) }()
case 5: try { try decoder.decodeSingularUInt64Field(value: &self._timestamp) }()
case 6: try { try decoder.decodeSingularBytesField(value: &self._targetAuthorAciBinary) }()
default: break
}
}
@ -6155,6 +6391,9 @@ extension SignalServiceProtos_DataMessage.Reaction: SwiftProtobuf.Message, Swift
try { if let v = self._timestamp {
try visitor.visitSingularUInt64Field(value: v, fieldNumber: 5)
} }()
try { if let v = self._targetAuthorAciBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 6)
} }()
try unknownFields.traverse(visitor: &visitor)
}
@ -6163,6 +6402,7 @@ extension SignalServiceProtos_DataMessage.Reaction: SwiftProtobuf.Message, Swift
if lhs._remove != rhs._remove {return false}
if lhs._targetAuthorAci != rhs._targetAuthorAci {return false}
if lhs._timestamp != rhs._timestamp {return false}
if lhs._targetAuthorAciBinary != rhs._targetAuthorAciBinary {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@ -6456,7 +6696,7 @@ extension SignalServiceProtos_DataMessage.Payment.Activation.TypeEnum: SwiftProt
extension SignalServiceProtos_DataMessage.StoryContext: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = SignalServiceProtos_DataMessage.protoMessageName + ".StoryContext"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}authorAci\0\u{1}sentTimestamp\0")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}authorAci\0\u{1}sentTimestamp\0\u{1}authorAciBinary\0")
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
@ -6466,6 +6706,7 @@ extension SignalServiceProtos_DataMessage.StoryContext: SwiftProtobuf.Message, S
switch fieldNumber {
case 1: try { try decoder.decodeSingularStringField(value: &self._authorAci) }()
case 2: try { try decoder.decodeSingularUInt64Field(value: &self._sentTimestamp) }()
case 3: try { try decoder.decodeSingularBytesField(value: &self._authorAciBinary) }()
default: break
}
}
@ -6482,12 +6723,16 @@ extension SignalServiceProtos_DataMessage.StoryContext: SwiftProtobuf.Message, S
try { if let v = self._sentTimestamp {
try visitor.visitSingularUInt64Field(value: v, fieldNumber: 2)
} }()
try { if let v = self._authorAciBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 3)
} }()
try unknownFields.traverse(visitor: &visitor)
}
static func ==(lhs: SignalServiceProtos_DataMessage.StoryContext, rhs: SignalServiceProtos_DataMessage.StoryContext) -> Bool {
if lhs._authorAci != rhs._authorAci {return false}
if lhs._sentTimestamp != rhs._sentTimestamp {return false}
if lhs._authorAciBinary != rhs._authorAciBinary {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@ -6733,7 +6978,7 @@ extension SignalServiceProtos_ReceiptMessage.TypeEnum: SwiftProtobuf._ProtoNameP
extension SignalServiceProtos_Verified: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = _protobuf_package + ".Verified"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\u{2}identityKey\0\u{1}state\0\u{1}nullMessage\0\u{1}destinationAci\0\u{c}\u{1}\u{1}")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\u{2}identityKey\0\u{1}state\0\u{1}nullMessage\0\u{1}destinationAci\0\u{1}destinationAciBinary\0\u{c}\u{1}\u{1}")
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
@ -6745,6 +6990,7 @@ extension SignalServiceProtos_Verified: SwiftProtobuf.Message, SwiftProtobuf._Me
case 3: try { try decoder.decodeSingularEnumField(value: &self._state) }()
case 4: try { try decoder.decodeSingularBytesField(value: &self._nullMessage) }()
case 5: try { try decoder.decodeSingularStringField(value: &self._destinationAci) }()
case 6: try { try decoder.decodeSingularBytesField(value: &self._destinationAciBinary) }()
default: break
}
}
@ -6767,6 +7013,9 @@ extension SignalServiceProtos_Verified: SwiftProtobuf.Message, SwiftProtobuf._Me
try { if let v = self._destinationAci {
try visitor.visitSingularStringField(value: v, fieldNumber: 5)
} }()
try { if let v = self._destinationAciBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 6)
} }()
try unknownFields.traverse(visitor: &visitor)
}
@ -6775,6 +7024,7 @@ extension SignalServiceProtos_Verified: SwiftProtobuf.Message, SwiftProtobuf._Me
if lhs._identityKey != rhs._identityKey {return false}
if lhs._state != rhs._state {return false}
if lhs._nullMessage != rhs._nullMessage {return false}
if lhs._destinationAciBinary != rhs._destinationAciBinary {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@ -6996,7 +7246,7 @@ extension SignalServiceProtos_SyncMessage: SwiftProtobuf.Message, SwiftProtobuf.
extension SignalServiceProtos_SyncMessage.Sent: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = SignalServiceProtos_SyncMessage.protoMessageName + ".Sent"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}destinationE164\0\u{1}timestamp\0\u{1}message\0\u{1}expirationStartTimestamp\0\u{1}unidentifiedStatus\0\u{1}isRecipientUpdate\0\u{1}destinationServiceId\0\u{1}storyMessage\0\u{1}storyMessageRecipients\0\u{1}editMessage\0")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}destinationE164\0\u{1}timestamp\0\u{1}message\0\u{1}expirationStartTimestamp\0\u{1}unidentifiedStatus\0\u{1}isRecipientUpdate\0\u{1}destinationServiceId\0\u{1}storyMessage\0\u{1}storyMessageRecipients\0\u{1}editMessage\0\u{2}\u{2}destinationServiceIdBinary\0")
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
@ -7014,6 +7264,7 @@ extension SignalServiceProtos_SyncMessage.Sent: SwiftProtobuf.Message, SwiftProt
case 8: try { try decoder.decodeSingularMessageField(value: &self._storyMessage) }()
case 9: try { try decoder.decodeRepeatedMessageField(value: &self.storyMessageRecipients) }()
case 10: try { try decoder.decodeSingularMessageField(value: &self._editMessage) }()
case 12: try { try decoder.decodeSingularBytesField(value: &self._destinationServiceIDBinary) }()
default: break
}
}
@ -7054,6 +7305,9 @@ extension SignalServiceProtos_SyncMessage.Sent: SwiftProtobuf.Message, SwiftProt
try { if let v = self._editMessage {
try visitor.visitSingularMessageField(value: v, fieldNumber: 10)
} }()
try { if let v = self._destinationServiceIDBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 12)
} }()
try unknownFields.traverse(visitor: &visitor)
}
@ -7068,6 +7322,7 @@ extension SignalServiceProtos_SyncMessage.Sent: SwiftProtobuf.Message, SwiftProt
if lhs._storyMessage != rhs._storyMessage {return false}
if lhs.storyMessageRecipients != rhs.storyMessageRecipients {return false}
if lhs._editMessage != rhs._editMessage {return false}
if lhs._destinationServiceIDBinary != rhs._destinationServiceIDBinary {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@ -7075,7 +7330,7 @@ extension SignalServiceProtos_SyncMessage.Sent: SwiftProtobuf.Message, SwiftProt
extension SignalServiceProtos_SyncMessage.Sent.UnidentifiedDeliveryStatus: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = SignalServiceProtos_SyncMessage.Sent.protoMessageName + ".UnidentifiedDeliveryStatus"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\u{2}unidentified\0\u{1}destinationServiceId\0\u{c}\u{1}\u{1}")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\u{2}unidentified\0\u{1}destinationServiceId\0\u{2}\u{3}destinationServiceIdBinary\0\u{c}\u{1}\u{1}")
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
@ -7085,6 +7340,7 @@ extension SignalServiceProtos_SyncMessage.Sent.UnidentifiedDeliveryStatus: Swift
switch fieldNumber {
case 2: try { try decoder.decodeSingularBoolField(value: &self._unidentified) }()
case 3: try { try decoder.decodeSingularStringField(value: &self._destinationServiceID) }()
case 6: try { try decoder.decodeSingularBytesField(value: &self._destinationServiceIDBinary) }()
default: break
}
}
@ -7101,12 +7357,16 @@ extension SignalServiceProtos_SyncMessage.Sent.UnidentifiedDeliveryStatus: Swift
try { if let v = self._destinationServiceID {
try visitor.visitSingularStringField(value: v, fieldNumber: 3)
} }()
try { if let v = self._destinationServiceIDBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 6)
} }()
try unknownFields.traverse(visitor: &visitor)
}
static func ==(lhs: SignalServiceProtos_SyncMessage.Sent.UnidentifiedDeliveryStatus, rhs: SignalServiceProtos_SyncMessage.Sent.UnidentifiedDeliveryStatus) -> Bool {
if lhs._destinationServiceID != rhs._destinationServiceID {return false}
if lhs._unidentified != rhs._unidentified {return false}
if lhs._destinationServiceIDBinary != rhs._destinationServiceIDBinary {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@ -7114,7 +7374,7 @@ extension SignalServiceProtos_SyncMessage.Sent.UnidentifiedDeliveryStatus: Swift
extension SignalServiceProtos_SyncMessage.Sent.StoryMessageRecipient: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = SignalServiceProtos_SyncMessage.Sent.protoMessageName + ".StoryMessageRecipient"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}destinationServiceId\0\u{1}distributionListIds\0\u{1}isAllowedToReply\0")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}destinationServiceId\0\u{1}distributionListIds\0\u{1}isAllowedToReply\0\u{2}\u{2}destinationServiceIdBinary\0")
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
@ -7125,6 +7385,7 @@ extension SignalServiceProtos_SyncMessage.Sent.StoryMessageRecipient: SwiftProto
case 1: try { try decoder.decodeSingularStringField(value: &self._destinationServiceID) }()
case 2: try { try decoder.decodeRepeatedStringField(value: &self.distributionListIds) }()
case 3: try { try decoder.decodeSingularBoolField(value: &self._isAllowedToReply) }()
case 5: try { try decoder.decodeSingularBytesField(value: &self._destinationServiceIDBinary) }()
default: break
}
}
@ -7144,6 +7405,9 @@ extension SignalServiceProtos_SyncMessage.Sent.StoryMessageRecipient: SwiftProto
try { if let v = self._isAllowedToReply {
try visitor.visitSingularBoolField(value: v, fieldNumber: 3)
} }()
try { if let v = self._destinationServiceIDBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 5)
} }()
try unknownFields.traverse(visitor: &visitor)
}
@ -7151,6 +7415,7 @@ extension SignalServiceProtos_SyncMessage.Sent.StoryMessageRecipient: SwiftProto
if lhs._destinationServiceID != rhs._destinationServiceID {return false}
if lhs.distributionListIds != rhs.distributionListIds {return false}
if lhs._isAllowedToReply != rhs._isAllowedToReply {return false}
if lhs._destinationServiceIDBinary != rhs._destinationServiceIDBinary {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@ -7235,7 +7500,7 @@ extension SignalServiceProtos_SyncMessage.Contacts: SwiftProtobuf.Message, Swift
extension SignalServiceProtos_SyncMessage.Blocked: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = SignalServiceProtos_SyncMessage.protoMessageName + ".Blocked"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}numbers\0\u{1}groupIds\0\u{1}acis\0")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}numbers\0\u{1}groupIds\0\u{1}acis\0\u{1}acisBinary\0")
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
@ -7246,6 +7511,7 @@ extension SignalServiceProtos_SyncMessage.Blocked: SwiftProtobuf.Message, SwiftP
case 1: try { try decoder.decodeRepeatedStringField(value: &self.numbers) }()
case 2: try { try decoder.decodeRepeatedBytesField(value: &self.groupIds) }()
case 3: try { try decoder.decodeRepeatedStringField(value: &self.acis) }()
case 4: try { try decoder.decodeRepeatedBytesField(value: &self.acisBinary) }()
default: break
}
}
@ -7261,6 +7527,9 @@ extension SignalServiceProtos_SyncMessage.Blocked: SwiftProtobuf.Message, SwiftP
if !self.acis.isEmpty {
try visitor.visitRepeatedStringField(value: self.acis, fieldNumber: 3)
}
if !self.acisBinary.isEmpty {
try visitor.visitRepeatedBytesField(value: self.acisBinary, fieldNumber: 4)
}
try unknownFields.traverse(visitor: &visitor)
}
@ -7268,6 +7537,7 @@ extension SignalServiceProtos_SyncMessage.Blocked: SwiftProtobuf.Message, SwiftP
if lhs.numbers != rhs.numbers {return false}
if lhs.acis != rhs.acis {return false}
if lhs.groupIds != rhs.groupIds {return false}
if lhs.acisBinary != rhs.acisBinary {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@ -7313,7 +7583,7 @@ extension SignalServiceProtos_SyncMessage.Request.TypeEnum: SwiftProtobuf._Proto
extension SignalServiceProtos_SyncMessage.Read: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = SignalServiceProtos_SyncMessage.protoMessageName + ".Read"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\u{2}timestamp\0\u{1}senderAci\0\u{c}\u{1}\u{1}")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\u{2}timestamp\0\u{1}senderAci\0\u{1}senderAciBinary\0\u{c}\u{1}\u{1}")
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
@ -7323,6 +7593,7 @@ extension SignalServiceProtos_SyncMessage.Read: SwiftProtobuf.Message, SwiftProt
switch fieldNumber {
case 2: try { try decoder.decodeSingularUInt64Field(value: &self._timestamp) }()
case 3: try { try decoder.decodeSingularStringField(value: &self._senderAci) }()
case 4: try { try decoder.decodeSingularBytesField(value: &self._senderAciBinary) }()
default: break
}
}
@ -7339,12 +7610,16 @@ extension SignalServiceProtos_SyncMessage.Read: SwiftProtobuf.Message, SwiftProt
try { if let v = self._senderAci {
try visitor.visitSingularStringField(value: v, fieldNumber: 3)
} }()
try { if let v = self._senderAciBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 4)
} }()
try unknownFields.traverse(visitor: &visitor)
}
static func ==(lhs: SignalServiceProtos_SyncMessage.Read, rhs: SignalServiceProtos_SyncMessage.Read) -> Bool {
if lhs._senderAci != rhs._senderAci {return false}
if lhs._timestamp != rhs._timestamp {return false}
if lhs._senderAciBinary != rhs._senderAciBinary {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@ -7352,7 +7627,7 @@ extension SignalServiceProtos_SyncMessage.Read: SwiftProtobuf.Message, SwiftProt
extension SignalServiceProtos_SyncMessage.Viewed: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = SignalServiceProtos_SyncMessage.protoMessageName + ".Viewed"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\u{2}timestamp\0\u{1}senderAci\0\u{c}\u{1}\u{1}")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\u{2}timestamp\0\u{1}senderAci\0\u{1}senderAciBinary\0\u{c}\u{1}\u{1}")
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
@ -7362,6 +7637,7 @@ extension SignalServiceProtos_SyncMessage.Viewed: SwiftProtobuf.Message, SwiftPr
switch fieldNumber {
case 2: try { try decoder.decodeSingularUInt64Field(value: &self._timestamp) }()
case 3: try { try decoder.decodeSingularStringField(value: &self._senderAci) }()
case 4: try { try decoder.decodeSingularBytesField(value: &self._senderAciBinary) }()
default: break
}
}
@ -7378,12 +7654,16 @@ extension SignalServiceProtos_SyncMessage.Viewed: SwiftProtobuf.Message, SwiftPr
try { if let v = self._senderAci {
try visitor.visitSingularStringField(value: v, fieldNumber: 3)
} }()
try { if let v = self._senderAciBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 4)
} }()
try unknownFields.traverse(visitor: &visitor)
}
static func ==(lhs: SignalServiceProtos_SyncMessage.Viewed, rhs: SignalServiceProtos_SyncMessage.Viewed) -> Bool {
if lhs._senderAci != rhs._senderAci {return false}
if lhs._timestamp != rhs._timestamp {return false}
if lhs._senderAciBinary != rhs._senderAciBinary {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@ -7493,7 +7773,7 @@ extension SignalServiceProtos_SyncMessage.StickerPackOperation.TypeEnum: SwiftPr
extension SignalServiceProtos_SyncMessage.ViewOnceOpen: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = SignalServiceProtos_SyncMessage.protoMessageName + ".ViewOnceOpen"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\u{2}timestamp\0\u{1}senderAci\0\u{c}\u{1}\u{1}")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\u{2}timestamp\0\u{1}senderAci\0\u{1}senderAciBinary\0\u{c}\u{1}\u{1}")
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
@ -7503,6 +7783,7 @@ extension SignalServiceProtos_SyncMessage.ViewOnceOpen: SwiftProtobuf.Message, S
switch fieldNumber {
case 2: try { try decoder.decodeSingularUInt64Field(value: &self._timestamp) }()
case 3: try { try decoder.decodeSingularStringField(value: &self._senderAci) }()
case 4: try { try decoder.decodeSingularBytesField(value: &self._senderAciBinary) }()
default: break
}
}
@ -7519,12 +7800,16 @@ extension SignalServiceProtos_SyncMessage.ViewOnceOpen: SwiftProtobuf.Message, S
try { if let v = self._senderAci {
try visitor.visitSingularStringField(value: v, fieldNumber: 3)
} }()
try { if let v = self._senderAciBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 4)
} }()
try unknownFields.traverse(visitor: &visitor)
}
static func ==(lhs: SignalServiceProtos_SyncMessage.ViewOnceOpen, rhs: SignalServiceProtos_SyncMessage.ViewOnceOpen) -> Bool {
if lhs._senderAci != rhs._senderAci {return false}
if lhs._timestamp != rhs._timestamp {return false}
if lhs._senderAciBinary != rhs._senderAciBinary {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@ -7614,7 +7899,7 @@ extension SignalServiceProtos_SyncMessage.Keys: SwiftProtobuf.Message, SwiftProt
extension SignalServiceProtos_SyncMessage.MessageRequestResponse: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = SignalServiceProtos_SyncMessage.protoMessageName + ".MessageRequestResponse"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\u{2}threadAci\0\u{1}groupId\0\u{1}type\0\u{c}\u{1}\u{1}")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\u{2}threadAci\0\u{1}groupId\0\u{1}type\0\u{1}threadAciBinary\0\u{c}\u{1}\u{1}")
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
@ -7625,6 +7910,7 @@ extension SignalServiceProtos_SyncMessage.MessageRequestResponse: SwiftProtobuf.
case 2: try { try decoder.decodeSingularStringField(value: &self._threadAci) }()
case 3: try { try decoder.decodeSingularBytesField(value: &self._groupID) }()
case 4: try { try decoder.decodeSingularEnumField(value: &self._type) }()
case 5: try { try decoder.decodeSingularBytesField(value: &self._threadAciBinary) }()
default: break
}
}
@ -7644,6 +7930,9 @@ extension SignalServiceProtos_SyncMessage.MessageRequestResponse: SwiftProtobuf.
try { if let v = self._type {
try visitor.visitSingularEnumField(value: v, fieldNumber: 4)
} }()
try { if let v = self._threadAciBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 5)
} }()
try unknownFields.traverse(visitor: &visitor)
}
@ -7651,6 +7940,7 @@ extension SignalServiceProtos_SyncMessage.MessageRequestResponse: SwiftProtobuf.
if lhs._threadAci != rhs._threadAci {return false}
if lhs._groupID != rhs._groupID {return false}
if lhs._type != rhs._type {return false}
if lhs._threadAciBinary != rhs._threadAciBinary {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@ -8046,7 +8336,7 @@ extension SignalServiceProtos_SyncMessage.DeleteForMe: SwiftProtobuf.Message, Sw
extension SignalServiceProtos_SyncMessage.DeleteForMe.ConversationIdentifier: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = SignalServiceProtos_SyncMessage.DeleteForMe.protoMessageName + ".ConversationIdentifier"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}threadServiceId\0\u{1}threadGroupId\0\u{1}threadE164\0")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}threadServiceId\0\u{1}threadGroupId\0\u{1}threadE164\0\u{1}threadServiceIdBinary\0")
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
@ -8057,6 +8347,7 @@ extension SignalServiceProtos_SyncMessage.DeleteForMe.ConversationIdentifier: Sw
case 1: try { try decoder.decodeSingularStringField(value: &self._threadServiceID) }()
case 2: try { try decoder.decodeSingularBytesField(value: &self._threadGroupID) }()
case 3: try { try decoder.decodeSingularStringField(value: &self._threadE164) }()
case 4: try { try decoder.decodeSingularBytesField(value: &self._threadServiceIDBinary) }()
default: break
}
}
@ -8076,6 +8367,9 @@ extension SignalServiceProtos_SyncMessage.DeleteForMe.ConversationIdentifier: Sw
try { if let v = self._threadE164 {
try visitor.visitSingularStringField(value: v, fieldNumber: 3)
} }()
try { if let v = self._threadServiceIDBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 4)
} }()
try unknownFields.traverse(visitor: &visitor)
}
@ -8083,6 +8377,7 @@ extension SignalServiceProtos_SyncMessage.DeleteForMe.ConversationIdentifier: Sw
if lhs._threadServiceID != rhs._threadServiceID {return false}
if lhs._threadGroupID != rhs._threadGroupID {return false}
if lhs._threadE164 != rhs._threadE164 {return false}
if lhs._threadServiceIDBinary != rhs._threadServiceIDBinary {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@ -8090,7 +8385,7 @@ extension SignalServiceProtos_SyncMessage.DeleteForMe.ConversationIdentifier: Sw
extension SignalServiceProtos_SyncMessage.DeleteForMe.AddressableMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = SignalServiceProtos_SyncMessage.DeleteForMe.protoMessageName + ".AddressableMessage"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}authorServiceId\0\u{1}authorE164\0\u{1}sentTimestamp\0")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}authorServiceId\0\u{1}authorE164\0\u{1}sentTimestamp\0\u{1}authorServiceIdBinary\0")
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
@ -8101,6 +8396,7 @@ extension SignalServiceProtos_SyncMessage.DeleteForMe.AddressableMessage: SwiftP
case 1: try { try decoder.decodeSingularStringField(value: &self._authorServiceID) }()
case 2: try { try decoder.decodeSingularStringField(value: &self._authorE164) }()
case 3: try { try decoder.decodeSingularUInt64Field(value: &self._sentTimestamp) }()
case 4: try { try decoder.decodeSingularBytesField(value: &self._authorServiceIDBinary) }()
default: break
}
}
@ -8120,12 +8416,16 @@ extension SignalServiceProtos_SyncMessage.DeleteForMe.AddressableMessage: SwiftP
try { if let v = self._sentTimestamp {
try visitor.visitSingularUInt64Field(value: v, fieldNumber: 3)
} }()
try { if let v = self._authorServiceIDBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 4)
} }()
try unknownFields.traverse(visitor: &visitor)
}
static func ==(lhs: SignalServiceProtos_SyncMessage.DeleteForMe.AddressableMessage, rhs: SignalServiceProtos_SyncMessage.DeleteForMe.AddressableMessage) -> Bool {
if lhs._authorServiceID != rhs._authorServiceID {return false}
if lhs._authorE164 != rhs._authorE164 {return false}
if lhs._authorServiceIDBinary != rhs._authorServiceIDBinary {return false}
if lhs._sentTimestamp != rhs._sentTimestamp {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
@ -8501,7 +8801,7 @@ extension SignalServiceProtos_GroupContextV2: SwiftProtobuf.Message, SwiftProtob
extension SignalServiceProtos_ContactDetails: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = _protobuf_package + ".ContactDetails"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}contactE164\0\u{1}name\0\u{1}avatar\0\u{2}\u{5}expireTimer\0\u{1}aci\0\u{1}inboxPosition\0\u{2}\u{2}expireTimerVersion\0\u{c}\u{4}\u{1}\u{c}\u{5}\u{1}\u{c}\u{6}\u{1}\u{c}\u{7}\u{1}\u{c}\u{b}\u{1}")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}contactE164\0\u{1}name\0\u{1}avatar\0\u{2}\u{5}expireTimer\0\u{1}aci\0\u{1}inboxPosition\0\u{2}\u{2}expireTimerVersion\0\u{1}aciBinary\0\u{c}\u{4}\u{1}\u{c}\u{5}\u{1}\u{c}\u{6}\u{1}\u{c}\u{7}\u{1}\u{c}\u{b}\u{1}")
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
@ -8516,6 +8816,7 @@ extension SignalServiceProtos_ContactDetails: SwiftProtobuf.Message, SwiftProtob
case 9: try { try decoder.decodeSingularStringField(value: &self._aci) }()
case 10: try { try decoder.decodeSingularUInt32Field(value: &self._inboxPosition) }()
case 12: try { try decoder.decodeSingularUInt32Field(value: &self._expireTimerVersion) }()
case 13: try { try decoder.decodeSingularBytesField(value: &self._aciBinary) }()
default: break
}
}
@ -8547,12 +8848,16 @@ extension SignalServiceProtos_ContactDetails: SwiftProtobuf.Message, SwiftProtob
try { if let v = self._expireTimerVersion {
try visitor.visitSingularUInt32Field(value: v, fieldNumber: 12)
} }()
try { if let v = self._aciBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 13)
} }()
try unknownFields.traverse(visitor: &visitor)
}
static func ==(lhs: SignalServiceProtos_ContactDetails, rhs: SignalServiceProtos_ContactDetails) -> Bool {
if lhs._contactE164 != rhs._contactE164 {return false}
if lhs._aci != rhs._aci {return false}
if lhs._aciBinary != rhs._aciBinary {return false}
if lhs._name != rhs._name {return false}
if lhs._avatar != rhs._avatar {return false}
if lhs._expireTimer != rhs._expireTimer {return false}
@ -8853,7 +9158,7 @@ extension SignalServiceProtos_PniSignatureMessage: SwiftProtobuf.Message, SwiftP
extension SignalServiceProtos_BodyRange: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = _protobuf_package + ".BodyRange"
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}start\0\u{1}length\0\u{1}mentionAci\0\u{1}style\0")
static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}start\0\u{1}length\0\u{1}mentionAci\0\u{1}style\0\u{1}mentionAciBinary\0")
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
while let fieldNumber = try decoder.nextFieldNumber() {
@ -8865,6 +9170,7 @@ extension SignalServiceProtos_BodyRange: SwiftProtobuf.Message, SwiftProtobuf._M
case 2: try { try decoder.decodeSingularUInt32Field(value: &self._length) }()
case 3: try { try decoder.decodeSingularStringField(value: &self._mentionAci) }()
case 4: try { try decoder.decodeSingularEnumField(value: &self._style) }()
case 5: try { try decoder.decodeSingularBytesField(value: &self._mentionAciBinary) }()
default: break
}
}
@ -8887,6 +9193,9 @@ extension SignalServiceProtos_BodyRange: SwiftProtobuf.Message, SwiftProtobuf._M
try { if let v = self._style {
try visitor.visitSingularEnumField(value: v, fieldNumber: 4)
} }()
try { if let v = self._mentionAciBinary {
try visitor.visitSingularBytesField(value: v, fieldNumber: 5)
} }()
try unknownFields.traverse(visitor: &visitor)
}
@ -8895,6 +9204,7 @@ extension SignalServiceProtos_BodyRange: SwiftProtobuf.Message, SwiftProtobuf._M
if lhs._length != rhs._length {return false}
if lhs._mentionAci != rhs._mentionAci {return false}
if lhs._style != rhs._style {return false}
if lhs._mentionAciBinary != rhs._mentionAciBinary {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}

View File

@ -12,15 +12,3 @@ public extension SSKProtoSyncMessageSent {
storyMessage != nil || !storyMessageRecipients.isEmpty
}
}
public extension SSKProtoEnvelope {
@objc
var sourceAddress: SignalServiceAddress? {
return sourceServiceID.flatMap { (serviceIdString) -> SignalServiceAddress? in
guard let serviceId = try? ServiceId.parseFrom(serviceIdString: serviceIdString) else {
return nil
}
return SignalServiceAddress(serviceId)
}
}
}

View File

@ -47,5 +47,7 @@ message ProvisionMessage {
optional bytes ephemeralBackupKey = 14; // 32 bytes
optional string accountEntropyPool = 15;
optional bytes mediaRootBackupKey = 16;
// NEXT ID: 17
optional bytes aciBinary = 17; // 16-byte UUID
optional bytes pniBinary = 18; // 16-byte UUID
// NEXT ID: 19
}

View File

@ -45,6 +45,11 @@ message Envelope {
optional string updatedPni = 15;
optional bool story = 16;
optional bytes spamReportingToken = 17;
reserved 18; // internal server use
optional bytes sourceServiceIdBinary = 19; // service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
optional bytes destinationServiceIdBinary = 20; // service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
optional bytes serverGuidBinary = 21; // 16-byte UUID
optional bytes updatedPniBinary = 22; // 16-byte UUID
}
message TypingMessage {
@ -221,6 +226,7 @@ message DataMessage {
repeated QuotedAttachment attachments = 4;
repeated BodyRange bodyRanges = 6;
optional Type type = 7;
optional bytes authorAciBinary = 8; // 16-byte UUID
}
message Contact {
@ -310,6 +316,7 @@ message DataMessage {
optional string targetAuthorAci = 4;
// @required
optional uint64 timestamp = 5;
optional bytes targetAuthorAciBinary = 6; // 16-byte UUID
}
message Delete {
@ -370,6 +377,7 @@ message DataMessage {
message StoryContext {
optional string authorAci = 1;
optional uint64 sentTimestamp = 2;
optional bytes authorAciBinary = 3; // 16-byte UUID
}
enum ProtocolVersion {
@ -463,6 +471,7 @@ message Verified {
optional bytes identityKey = 2;
optional State state = 3;
optional bytes nullMessage = 4;
optional bytes destinationAciBinary = 6; // 16-byte UUID
}
message SyncMessage {
@ -471,12 +480,14 @@ message SyncMessage {
reserved /*destinationE164*/ 1;
optional string destinationServiceId = 3;
optional bool unidentified = 2;
optional bytes destinationServiceIdBinary = 6; // service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
}
message StoryMessageRecipient {
optional string destinationServiceId = 1;
repeated string distributionListIds = 2;
optional bool isAllowedToReply = 3;
optional bytes destinationServiceIdBinary = 5; // service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
}
optional string destinationE164 = 1;
@ -489,6 +500,7 @@ message SyncMessage {
optional StoryMessage storyMessage = 8;
repeated StoryMessageRecipient storyMessageRecipients = 9;
optional EditMessage editMessage = 10;
optional bytes destinationServiceIdBinary = 12; // service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
}
message Contacts {
@ -502,6 +514,7 @@ message SyncMessage {
repeated string numbers = 1;
repeated string acis = 3;
repeated bytes groupIds = 2;
repeated bytes acisBinary = 4; // 16-byte UUID
}
message Request {
@ -523,6 +536,7 @@ message SyncMessage {
optional string senderAci = 3;
// @required
optional uint64 timestamp = 2;
optional bytes senderAciBinary = 4; // 16-byte UUID
}
message Viewed {
@ -530,6 +544,7 @@ message SyncMessage {
optional string senderAci = 3;
// @required
optional uint64 timestamp = 2;
optional bytes senderAciBinary = 4; // 16-byte UUID
}
message Configuration {
@ -554,10 +569,11 @@ message SyncMessage {
}
message ViewOnceOpen {
reserved /*senderE164*/ 1;
optional string senderAci = 3;
// @required
optional uint64 timestamp = 2;
reserved /*senderE164*/ 1;
optional string senderAci = 3;
// @required
optional uint64 timestamp = 2;
optional bytes senderAciBinary = 4; // 16-byte UUID
}
message FetchLatest {
@ -593,6 +609,7 @@ message SyncMessage {
optional string threadAci = 2;
optional bytes groupId = 3;
optional Type type = 4;
optional bytes threadAciBinary = 5; // 16-byte UUID
}
message OutgoingPayment {
@ -695,6 +712,7 @@ message SyncMessage {
optional string threadServiceId = 1;
optional bytes threadGroupId = 2;
optional string threadE164 = 3;
optional bytes threadServiceIdBinary = 4; // service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
// }
}
@ -702,6 +720,7 @@ message SyncMessage {
// oneof author {
optional string authorServiceId = 1;
optional string authorE164 = 2;
optional bytes authorServiceIdBinary = 4; // service ID binary (i.e. 16 byte UUID for ACI, 1 byte prefix + 16 byte UUID for PNI)
// }
optional uint64 sentTimestamp = 3;
}
@ -819,6 +838,7 @@ message ContactDetails {
optional string contactE164 = 1;
optional string aci = 9;
optional bytes aciBinary = 13; // 16-byte UUID
optional string name = 2;
optional Avatar avatar = 3;
reserved /* color */ 4;
@ -829,7 +849,7 @@ message ContactDetails {
optional uint32 expireTimerVersion = 12;
optional uint32 inboxPosition = 10;
reserved /* archived */ 11;
// NEXT ID: 13
// NEXT ID: 14
}
message Pack {
@ -892,6 +912,7 @@ message BodyRange {
// oneof associatedValue {
optional string mentionAci = 3;
optional Style style = 4;
optional bytes mentionAciBinary = 5; // 16-byte UUID
// }
}

View File

@ -255,6 +255,9 @@ public final class OWSRecipientIdentity: NSObject, SDSCodableModel, Decodable {
let verifiedBuilder = SSKProtoVerified.builder()
verifiedBuilder.setDestinationAci(destinationAci.wrappedAciValue.serviceIdString)
if FeatureFlags.serviceIdBinaryConstantOverhead {
verifiedBuilder.setDestinationAciBinary(destinationAci.wrappedAciValue.serviceIdBinary)
}
verifiedBuilder.setIdentityKey(identityKey)
verifiedBuilder.setState(verificationState.protoState)
if paddingBytesLength > 0 {

View File

@ -467,7 +467,7 @@ struct FakeService {
let sentBuilder = SSKProtoSyncMessageSent.builder()
sentBuilder.setMessage(try dataMessageBuilder.build())
sentBuilder.setTimestamp(timestamp)
sentBuilder.setDestinationServiceID(destinationServiceId.serviceIdString)
sentBuilder.setDestinationServiceIDBinary(destinationServiceId.serviceIdBinary)
let syncMessageBuilder = SSKProtoSyncMessage.builder()
syncMessageBuilder.setSent(try sentBuilder.build())

View File

@ -171,7 +171,10 @@ public class ViewOnceMessages: NSObject {
envelope: SSKProtoEnvelope,
transaction: DBWriteTransaction
) -> ViewOnceSyncMessageProcessingResult {
guard let messageSender = Aci.parseFrom(aciString: message.senderAci) else {
guard let messageSender = Aci.parseFrom(
serviceIdBinary: message.senderAciBinary,
serviceIdString: message.senderAci,
) else {
owsFailDebug("Invalid messageSender.")
return .invalidSyncMessage
}

View File

@ -3,6 +3,7 @@
// SPDX-License-Identifier: AGPL-3.0-only
//
import LibSignalClient
import XCTest
@testable import SignalServiceKit
@ -50,13 +51,13 @@ extension DeleteForMeOutgoingSyncMessage.Contents: ValidatableModel {
messageDeletes: [
Outgoing.MessageDeletes(
conversationIdentifier: .threadE164(e164: "+17735550199"),
addressableMessages: [.forTests(author: .aci(aci: "4C3B579D-C6E0-42C3-AEF3-E9B9801D9271"), sentTimestamp: 1234)]
addressableMessages: [.forTests(author: .aci(aci: ServiceIdUppercaseString(wrappedValue: Aci.constantForTesting("4C3B579D-C6E0-42C3-AEF3-E9B9801D9271"))), sentTimestamp: 1234)]
)
],
nilAttachmentDeletes: (),
conversationDeletes: [
Outgoing.ConversationDelete(
conversationIdentifier: .threadServiceId(serviceId: "7A8709AA-B1CA-40B8-89C2-35330E88F2A9"),
conversationIdentifier: .threadServiceId(serviceId: ServiceIdUppercaseString(wrappedValue: Aci.constantForTesting("7A8709AA-B1CA-40B8-89C2-35330E88F2A9"))),
mostRecentAddressableMessages: [.forTests(author: .e164(e164: "+17735550198"), sentTimestamp: 5678)],
nilNonExpiringAddressableMessages: (),
isFullDelete: true
@ -75,13 +76,13 @@ extension DeleteForMeOutgoingSyncMessage.Contents: ValidatableModel {
messageDeletes: [
Outgoing.MessageDeletes(
conversationIdentifier: .threadE164(e164: "+17735550199"),
addressableMessages: [.forTests(author: .aci(aci: "4C3B579D-C6E0-42C3-AEF3-E9B9801D9271"), sentTimestamp: 1234)]
addressableMessages: [.forTests(author: .aci(aci: ServiceIdUppercaseString(wrappedValue: Aci.constantForTesting("4C3B579D-C6E0-42C3-AEF3-E9B9801D9271"))), sentTimestamp: 1234)]
)
],
attachmentDeletes: [
Outgoing.AttachmentDelete(
conversationIdentifier: .threadServiceId(serviceId: "D8626C3E-79BB-4665-B7D6-66884F543164"),
targetMessage: .forTests(author: .aci(aci: "BF1C5C1B-15DA-4A49-92C7-EFBA8BFFDF4B"), sentTimestamp: 9001),
conversationIdentifier: .threadServiceId(serviceId: ServiceIdUppercaseString(wrappedValue: Aci.constantForTesting("D8626C3E-79BB-4665-B7D6-66884F543164"))),
targetMessage: .forTests(author: .aci(aci: ServiceIdUppercaseString(wrappedValue: Aci.constantForTesting("BF1C5C1B-15DA-4A49-92C7-EFBA8BFFDF4B"))), sentTimestamp: 9001),
clientUuid: UUID(uuidString: "C374CDB9-2440-4E39-8FE5-29CD4CB5C812")!,
encryptedDigest: Data(repeating: 24, count: 95),
plaintextHash: Data(repeating: 21, count: 92)
@ -89,7 +90,7 @@ extension DeleteForMeOutgoingSyncMessage.Contents: ValidatableModel {
],
conversationDeletes: [
Outgoing.ConversationDelete(
conversationIdentifier: .threadServiceId(serviceId: "7A8709AA-B1CA-40B8-89C2-35330E88F2A9"),
conversationIdentifier: .threadServiceId(serviceId: ServiceIdUppercaseString(wrappedValue: Aci.constantForTesting("7A8709AA-B1CA-40B8-89C2-35330E88F2A9"))),
mostRecentAddressableMessages: [.forTests(author: .e164(e164: "+17735550198"), sentTimestamp: 5678)],
nilNonExpiringAddressableMessages: (),
isFullDelete: true
@ -108,13 +109,13 @@ extension DeleteForMeOutgoingSyncMessage.Contents: ValidatableModel {
messageDeletes: [
Outgoing.MessageDeletes(
conversationIdentifier: .threadE164(e164: "+17735550199"),
addressableMessages: [.forTests(author: .aci(aci: "4C3B579D-C6E0-42C3-AEF3-E9B9801D9271"), sentTimestamp: 1234)]
addressableMessages: [.forTests(author: .aci(aci: ServiceIdUppercaseString(wrappedValue: Aci.constantForTesting("4C3B579D-C6E0-42C3-AEF3-E9B9801D9271"))), sentTimestamp: 1234)]
)
],
attachmentDeletes: [
Outgoing.AttachmentDelete(
conversationIdentifier: .threadServiceId(serviceId: "D8626C3E-79BB-4665-B7D6-66884F543164"),
targetMessage: .forTests(author: .aci(aci: "BF1C5C1B-15DA-4A49-92C7-EFBA8BFFDF4B"), sentTimestamp: 9001),
conversationIdentifier: .threadServiceId(serviceId: ServiceIdUppercaseString(wrappedValue: Aci.constantForTesting("D8626C3E-79BB-4665-B7D6-66884F543164"))),
targetMessage: .forTests(author: .aci(aci: ServiceIdUppercaseString(wrappedValue: Aci.constantForTesting("BF1C5C1B-15DA-4A49-92C7-EFBA8BFFDF4B"))), sentTimestamp: 9001),
clientUuid: UUID(uuidString: "C374CDB9-2440-4E39-8FE5-29CD4CB5C812")!,
encryptedDigest: Data(repeating: 24, count: 95),
plaintextHash: Data(repeating: 21, count: 92)
@ -122,7 +123,7 @@ extension DeleteForMeOutgoingSyncMessage.Contents: ValidatableModel {
],
conversationDeletes: [
Outgoing.ConversationDelete(
conversationIdentifier: .threadServiceId(serviceId: "7A8709AA-B1CA-40B8-89C2-35330E88F2A9"),
conversationIdentifier: .threadServiceId(serviceId: ServiceIdUppercaseString(wrappedValue: Aci.constantForTesting("7A8709AA-B1CA-40B8-89C2-35330E88F2A9"))),
mostRecentAddressableMessages: [.forTests(author: .e164(e164: "+17735550198"), sentTimestamp: 5678)],
mostRecentNonExpiringAddressableMessages: [.forTests(author: .e164(e164: "+17735550197"), sentTimestamp: 1337)],
isFullDelete: true

View File

@ -111,7 +111,7 @@ class MessageDecryptionTest: SSKBaseTest {
let envelopeBuilder = SSKProtoEnvelope.builder(timestamp: timestamp)
envelopeBuilder.setType(type)
envelopeBuilder.setDestinationServiceID((destinationServiceId ?? localDestinationServiceId).serviceIdString)
envelopeBuilder.setDestinationServiceIDBinary((destinationServiceId ?? localDestinationServiceId).serviceIdBinary)
envelopeBuilder.setServerTimestamp(Date.ows_millisecondTimestamp())
if type == .unidentifiedSender {
@ -136,7 +136,7 @@ class MessageDecryptionTest: SSKBaseTest {
))
envelopeBuilder.setServerTimestamp(13336)
} else {
envelopeBuilder.setSourceServiceID(remoteClient.serviceId.serviceIdString)
envelopeBuilder.setSourceServiceIDBinary(remoteClient.serviceId.serviceIdBinary)
envelopeBuilder.setSourceDevice(remoteClient.deviceId)
envelopeBuilder.setContent(ciphertext.serialize())
}

View File

@ -111,9 +111,9 @@ class MessageProcessingIntegrationTest: SSKBaseTest {
SSKEnvironment.shared.databaseStorageRef.databaseChangeObserver.appendDatabaseWriteDelegate(snapshotDelegate)
let envelopeBuilder = try! fakeService.envelopeBuilder(fromSenderClient: bobClient, bodyText: "Those who stands for nothing will fall for anything")
envelopeBuilder.setSourceServiceID(bobClient.serviceId.serviceIdString)
envelopeBuilder.setSourceServiceIDBinary(bobClient.serviceId.serviceIdBinary)
envelopeBuilder.setServerTimestamp(NSDate.ows_millisecondTimeStamp())
envelopeBuilder.setServerGuid(UUID().uuidString)
envelopeBuilder.setServerGuidBinary(UUID().data)
let envelopeData = try! envelopeBuilder.buildSerializedData()
SSKEnvironment.shared.messageProcessorRef.enqueueReceivedEnvelopeData(
envelopeData,
@ -156,11 +156,11 @@ class MessageProcessingIntegrationTest: SSKBaseTest {
envelopeBuilder.setContent(ciphertext.serialize())
envelopeBuilder.setType(.prekeyBundle)
envelopeBuilder.setTimestamp(timestamp)
envelopeBuilder.setSourceServiceID(bobClient.serviceId.serviceIdString)
envelopeBuilder.setSourceServiceIDBinary(bobClient.serviceId.serviceIdBinary)
envelopeBuilder.setSourceDevice(1)
envelopeBuilder.setServerTimestamp(NSDate.ows_millisecondTimeStamp())
envelopeBuilder.setServerGuid(UUID().uuidString)
envelopeBuilder.setDestinationServiceID(DependenciesBridge.shared.tsAccountManager.localIdentifiersWithMaybeSneakyTransaction!.pni!.serviceIdString)
envelopeBuilder.setServerGuidBinary(UUID().data)
envelopeBuilder.setDestinationServiceIDBinary(DependenciesBridge.shared.tsAccountManager.localIdentifiersWithMaybeSneakyTransaction!.pni!.serviceIdBinary)
let envelopeData = try! envelopeBuilder.buildSerializedData()
SSKEnvironment.shared.messageProcessorRef.enqueueReceivedEnvelopeData(
envelopeData,
@ -186,7 +186,7 @@ class MessageProcessingIntegrationTest: SSKBaseTest {
envelopeBuilder.setType(.receipt)
envelopeBuilder.setServerTimestamp(103)
envelopeBuilder.setSourceDevice(2)
envelopeBuilder.setSourceServiceID(self.bobClient.serviceId.serviceIdString)
envelopeBuilder.setSourceServiceIDBinary(self.bobClient.serviceId.serviceIdBinary)
let envelopeData = try envelopeBuilder.buildSerializedData()
await withCheckedContinuation { continuation in
SSKEnvironment.shared.messageProcessorRef.enqueueReceivedEnvelopeData(
@ -217,11 +217,11 @@ class MessageProcessingIntegrationTest: SSKBaseTest {
let envelopeBuilder = SSKProtoEnvelope.builder(timestamp: timestamp)
envelopeBuilder.setContent(ciphertext.serialize())
envelopeBuilder.setType(.prekeyBundle)
envelopeBuilder.setSourceServiceID(self.linkedClient.serviceId.serviceIdString)
envelopeBuilder.setSourceServiceIDBinary(self.linkedClient.serviceId.serviceIdBinary)
envelopeBuilder.setSourceDevice(2)
envelopeBuilder.setServerTimestamp(NSDate.ows_millisecondTimeStamp())
envelopeBuilder.setServerGuid(UUID().uuidString)
envelopeBuilder.setDestinationServiceID(self.localClient.serviceId.serviceIdString)
envelopeBuilder.setServerGuidBinary(UUID().data)
envelopeBuilder.setDestinationServiceIDBinary(self.localClient.serviceId.serviceIdBinary)
let envelopeData = try envelopeBuilder.buildSerializedData()
// Process the message
@ -275,11 +275,11 @@ class MessageProcessingIntegrationTest: SSKBaseTest {
let envelopeBuilder = SSKProtoEnvelope.builder(timestamp: deliveryTimestamp)
envelopeBuilder.setContent(ciphertextData)
envelopeBuilder.setType(.ciphertext)
envelopeBuilder.setSourceServiceID(bobClient.serviceId.serviceIdString)
envelopeBuilder.setSourceServiceIDBinary(bobClient.serviceId.serviceIdBinary)
envelopeBuilder.setSourceDevice(1)
envelopeBuilder.setServerTimestamp(NSDate.ows_millisecondTimeStamp())
envelopeBuilder.setServerGuid(UUID().uuidString)
envelopeBuilder.setDestinationServiceID(self.localClient.serviceId.serviceIdString)
envelopeBuilder.setServerGuidBinary(UUID().data)
envelopeBuilder.setDestinationServiceIDBinary(self.localClient.serviceId.serviceIdBinary)
let envelopeData = try envelopeBuilder.buildSerializedData()
await withCheckedContinuation { continuation in
@ -310,11 +310,11 @@ class MessageProcessingIntegrationTest: SSKBaseTest {
let envelopeBuilder = SSKProtoEnvelope.builder(timestamp: timestamp)
envelopeBuilder.setContent(ciphertext.serialize())
envelopeBuilder.setType(.ciphertext)
envelopeBuilder.setSourceServiceID(self.linkedClient.serviceId.serviceIdString)
envelopeBuilder.setSourceServiceIDBinary(self.linkedClient.serviceId.serviceIdBinary)
envelopeBuilder.setSourceDevice(2)
envelopeBuilder.setServerTimestamp(NSDate.ows_millisecondTimeStamp())
envelopeBuilder.setServerGuid(UUID().uuidString)
envelopeBuilder.setDestinationServiceID(self.localClient.serviceId.serviceIdString)
envelopeBuilder.setServerGuidBinary(UUID().data)
envelopeBuilder.setDestinationServiceIDBinary(self.localClient.serviceId.serviceIdBinary)
let envelopeData = try! envelopeBuilder.buildSerializedData()
await withCheckedContinuation { continuation in

View File

@ -19,10 +19,10 @@ struct ValidatedIncomingEnvelopeTest {
let envelopeBuilder = SSKProtoEnvelope.builder(timestamp: 1234)
envelopeBuilder.setServerTimestamp(2345)
envelopeBuilder.setType(.ciphertext)
envelopeBuilder.setSourceServiceID(sourceAci.serviceIdString)
envelopeBuilder.setSourceServiceIDBinary(sourceAci.serviceIdBinary)
envelopeBuilder.setSourceDevice(1)
envelopeBuilder.setServerGuid(UUID().uuidString)
envelopeBuilder.setDestinationServiceID(destinationAci.serviceIdString)
envelopeBuilder.setServerGuidBinary(UUID().data)
envelopeBuilder.setDestinationServiceIDBinary(destinationAci.serviceIdBinary)
let envelopeProto = try envelopeBuilder.build()
#expect(throws: MessageProcessingError.wrongDestinationUuid, performing: {
try ValidatedIncomingEnvelope(envelopeProto, localIdentifiers: localIdentifiers)