From f20625e78025c531aa72d35873558fe1cc2d9801 Mon Sep 17 00:00:00 2001 From: Max Radermacher Date: Fri, 24 Oct 2025 17:38:58 -0500 Subject: [PATCH] Add some support for binary service IDs --- Scripts/protos/ProtoWrappers.py | 2 + .../test/SSKTests/SSKProtoEnvelopeTest.swift | 5 +- Signal/test/util/ContactStreamTest.swift | 2 +- SignalServiceKit/Account/ServiceId.swift | 25 +- ...ckupArchiveTSMessageContentsArchiver.swift | 5 +- ...hiveGroupUpdateSwiftToProtoConverter.swift | 2 +- .../Contacts/ContactOutputStream.swift | 3 + .../Contacts/OWSSyncManager.swift | 7 +- .../ContactsInputStream.swift | 5 +- .../Devices/LinkingProvisioningMessage.swift | 29 +- .../OWSBlockedPhoneNumbersMessage.m | 11 + .../OWSReadReceiptsForLinkedDevicesMessage.m | 10 +- .../OWSViewOnceMessageReadSyncMessage.m | 10 +- ...OWSViewedReceiptsForLinkedDevicesMessage.m | 10 +- .../Environment/FeatureFlags.swift | 15 + .../BodyRanges/MessageBodyRanges.swift | 8 +- .../DeleteForMeOutgoingSyncMessage.swift | 22 +- ...eleteForMeOutgoingSyncMessageManager.swift | 4 +- .../DeleteForMeSyncMessageReceiver.swift | 12 +- .../OWSIncomingSentMessageTranscript.swift | 27 +- .../OWSOutgoingSentMessageTranscript.m | 3 + .../OWSOutgoingSentMessageTranscript.swift | 3 + .../OWSSyncMessageRequestResponseMessage.m | 12 +- .../Messages/GroupMessageProcessor.swift | 17 +- .../IncomingPniChangeNumberProcessor.swift | 11 +- .../Quotes/QuotedReplyManagerImpl.swift | 5 +- ...upUpdates+PersistableGroupUpdateItem.swift | 14 +- .../Messages/Interactions/TSOutgoingMessage.m | 12 +- .../Messages/MessageProcessor.swift | 6 +- .../Messages/MessageReceiver.swift | 84 ++- .../Messages/MockIdentityManager.swift | 1 - .../Messages/OWSIdentityManager.swift | 2 +- .../Messages/OWSMessageDecrypter.swift | 7 +- .../Messages/OWSReceiptManager.swift | 8 +- .../Reactions/OutgoingReactionMessage.swift | 3 + .../Messages/Reactions/ReactionManager.swift | 5 +- .../OutgoingStorySentMessageTranscript.swift | 5 +- .../Messages/Stories/StoryMessage.swift | 20 +- .../Messages/ValidatedIncomingEnvelope.swift | 37 +- .../Protos/Generated/Provisioning.pb.swift | 430 +++++++++------ .../Protos/Generated/ProvisioningProto.swift | 52 ++ .../Protos/Generated/SSKProto.swift | 510 ++++++++++++++++++ .../Protos/Generated/SignalService.pb.swift | 348 +++++++++++- SignalServiceKit/Protos/SSKProto+OWS.swift | 12 - .../Protos/Specifications/Provisioning.proto | 4 +- .../Protos/Specifications/SignalService.proto | 31 +- .../Security/OWSRecipientIdentity.swift | 3 + .../TestUtils/TestProtocolRunner.swift | 2 +- SignalServiceKit/Util/ViewOnceMessages.swift | 5 +- .../DeleteForMeOutgoingSyncMessageTest.swift | 21 +- .../Messages/MessageDecryptionTest.swift | 4 +- .../MessageProcessingIntegrationTest.swift | 30 +- .../ValidatedIncomingEnvelopeTest.swift | 6 +- 53 files changed, 1562 insertions(+), 365 deletions(-) diff --git a/Scripts/protos/ProtoWrappers.py b/Scripts/protos/ProtoWrappers.py index a144cb34e0..dc3f155e8d 100755 --- a/Scripts/protos/ProtoWrappers.py +++ b/Scripts/protos/ProtoWrappers.py @@ -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 diff --git a/Signal/test/SSKTests/SSKProtoEnvelopeTest.swift b/Signal/test/SSKTests/SSKProtoEnvelopeTest.swift index c094da9c97..aa72b10803 100644 --- a/Signal/test/SSKTests/SSKProtoEnvelopeTest.swift +++ b/Signal/test/SSKTests/SSKProtoEnvelopeTest.swift @@ -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) diff --git a/Signal/test/util/ContactStreamTest.swift b/Signal/test/util/ContactStreamTest.swift index 6eb0ac5c42..e16568f5ec 100644 --- a/Signal/test/util/ContactStreamTest.swift +++ b/Signal/test/util/ContactStreamTest.swift @@ -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( diff --git a/SignalServiceKit/Account/ServiceId.swift b/SignalServiceKit/Account/ServiceId.swift index 856fe3dee7..0330bbb831 100644 --- a/SignalServiceKit/Account/ServiceId.swift +++ b/SignalServiceKit/Account/ServiceId.swift @@ -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: 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 { .init(wrappedValue: self) } } // MARK: - Unit Tests diff --git a/SignalServiceKit/Backups/Archiving/Archivers/ChatItem/BackupArchiveTSMessageContentsArchiver.swift b/SignalServiceKit/Backups/Archiving/Archivers/ChatItem/BackupArchiveTSMessageContentsArchiver.swift index e9cb5389f6..6cfc36a683 100644 --- a/SignalServiceKit/Backups/Archiving/Archivers/ChatItem/BackupArchiveTSMessageContentsArchiver.swift +++ b/SignalServiceKit/Backups/Archiving/Archivers/ChatItem/BackupArchiveTSMessageContentsArchiver.swift @@ -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 ) diff --git a/SignalServiceKit/Backups/Archiving/Archivers/ChatItem/ChatUpdateMessages/GroupUpdates/BackupArchiveGroupUpdateSwiftToProtoConverter.swift b/SignalServiceKit/Backups/Archiving/Archivers/ChatItem/ChatUpdateMessages/GroupUpdates/BackupArchiveGroupUpdateSwiftToProtoConverter.swift index b30b9dc61b..839fd555b2 100644 --- a/SignalServiceKit/Backups/Archiving/Archivers/ChatItem/ChatUpdateMessages/GroupUpdates/BackupArchiveGroupUpdateSwiftToProtoConverter.swift +++ b/SignalServiceKit/Backups/Archiving/Archivers/ChatItem/ChatUpdateMessages/GroupUpdates/BackupArchiveGroupUpdateSwiftToProtoConverter.swift @@ -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) -> Data { return serviceId.wrappedValue.serviceIdBinary } diff --git a/SignalServiceKit/Contacts/ContactOutputStream.swift b/SignalServiceKit/Contacts/ContactOutputStream.swift index 0d23eae04c..ef0a62422d 100644 --- a/SignalServiceKit/Contacts/ContactOutputStream.swift +++ b/SignalServiceKit/Contacts/ContactOutputStream.swift @@ -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 diff --git a/SignalServiceKit/Contacts/OWSSyncManager.swift b/SignalServiceKit/Contacts/OWSSyncManager.swift index 6c61d062dd..953567db8b 100644 --- a/SignalServiceKit/Contacts/OWSSyncManager.swift +++ b/SignalServiceKit/Contacts/OWSSyncManager.swift @@ -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 diff --git a/SignalServiceKit/Devices/ConversationSync/ContactsInputStream.swift b/SignalServiceKit/Devices/ConversationSync/ContactsInputStream.swift index cab57bd8f1..1bc72af7c3 100644 --- a/SignalServiceKit/Devices/ConversationSync/ContactsInputStream.swift +++ b/SignalServiceKit/Devices/ConversationSync/ContactsInputStream.swift @@ -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( diff --git a/SignalServiceKit/Devices/LinkingProvisioningMessage.swift b/SignalServiceKit/Devices/LinkingProvisioningMessage.swift index d5903dce9d..b4f570e249 100644 --- a/SignalServiceKit/Devices/LinkingProvisioningMessage.swift +++ b/SignalServiceKit/Devices/LinkingProvisioningMessage.swift @@ -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): diff --git a/SignalServiceKit/Devices/SyncMessages/OWSBlockedPhoneNumbersMessage.m b/SignalServiceKit/Devices/SyncMessages/OWSBlockedPhoneNumbersMessage.m index b5adcf7bb4..14173c9efe 100644 --- a/SignalServiceKit/Devices/SyncMessages/OWSBlockedPhoneNumbersMessage.m +++ b/SignalServiceKit/Devices/SyncMessages/OWSBlockedPhoneNumbersMessage.m @@ -46,6 +46,17 @@ NS_ASSUME_NONNULL_BEGIN SSKProtoSyncMessageBlockedBuilder *blockedBuilder = [SSKProtoSyncMessageBlocked builder]; [blockedBuilder setNumbers:_phoneNumbers]; [blockedBuilder setAcis:_uuids]; + + NSMutableArray *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]; diff --git a/SignalServiceKit/Devices/SyncMessages/OWSReadReceiptsForLinkedDevicesMessage.m b/SignalServiceKit/Devices/SyncMessages/OWSReadReceiptsForLinkedDevicesMessage.m index 775a03a232..1dbd30162c 100644 --- a/SignalServiceKit/Devices/SyncMessages/OWSReadReceiptsForLinkedDevicesMessage.m +++ b/SignalServiceKit/Devices/SyncMessages/OWSReadReceiptsForLinkedDevicesMessage.m @@ -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]; diff --git a/SignalServiceKit/Devices/SyncMessages/OWSViewOnceMessageReadSyncMessage.m b/SignalServiceKit/Devices/SyncMessages/OWSViewOnceMessageReadSyncMessage.m index 9c9b8d48ff..ac8855481d 100644 --- a/SignalServiceKit/Devices/SyncMessages/OWSViewOnceMessageReadSyncMessage.m +++ b/SignalServiceKit/Devices/SyncMessages/OWSViewOnceMessageReadSyncMessage.m @@ -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) { diff --git a/SignalServiceKit/Devices/SyncMessages/OWSViewedReceiptsForLinkedDevicesMessage.m b/SignalServiceKit/Devices/SyncMessages/OWSViewedReceiptsForLinkedDevicesMessage.m index b8b033184b..308339a2fc 100644 --- a/SignalServiceKit/Devices/SyncMessages/OWSViewedReceiptsForLinkedDevicesMessage.m +++ b/SignalServiceKit/Devices/SyncMessages/OWSViewedReceiptsForLinkedDevicesMessage.m @@ -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]; diff --git a/SignalServiceKit/Environment/FeatureFlags.swift b/SignalServiceKit/Environment/FeatureFlags.swift index 4f26d50e61..17f1bd5a5a 100644 --- a/SignalServiceKit/Environment/FeatureFlags.swift +++ b/SignalServiceKit/Environment/FeatureFlags.swift @@ -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: - diff --git a/SignalServiceKit/Messages/BodyRanges/MessageBodyRanges.swift b/SignalServiceKit/Messages/BodyRanges/MessageBodyRanges.swift index ad82926494..482891776d 100644 --- a/SignalServiceKit/Messages/BodyRanges/MessageBodyRanges.swift +++ b/SignalServiceKit/Messages/BodyRanges/MessageBodyRanges.swift @@ -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()) } diff --git a/SignalServiceKit/Messages/DeviceSyncing/DeleteForMe/DeleteForMeOutgoingSyncMessage.swift b/SignalServiceKit/Messages/DeviceSyncing/DeleteForMe/DeleteForMeOutgoingSyncMessage.swift index c59a8a04a6..a477c97797 100644 --- a/SignalServiceKit/Messages/DeviceSyncing/DeleteForMe/DeleteForMeOutgoingSyncMessage.swift +++ b/SignalServiceKit/Messages/DeviceSyncing/DeleteForMe/DeleteForMeOutgoingSyncMessage.swift @@ -120,14 +120,19 @@ class DeleteForMeOutgoingSyncMessage: OWSOutgoingSyncMessage { extension DeleteForMeSyncMessage.Outgoing { enum ConversationIdentifier: Codable, Equatable { - case threadServiceId(serviceId: String) + case threadServiceId(serviceId: ServiceIdUppercaseString) 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) /// 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() diff --git a/SignalServiceKit/Messages/DeviceSyncing/DeleteForMe/DeleteForMeOutgoingSyncMessageManager.swift b/SignalServiceKit/Messages/DeviceSyncing/DeleteForMe/DeleteForMeOutgoingSyncMessageManager.swift index 4d0890b53d..7e769da10d 100644 --- a/SignalServiceKit/Messages/DeviceSyncing/DeleteForMe/DeleteForMeOutgoingSyncMessageManager.swift +++ b/SignalServiceKit/Messages/DeviceSyncing/DeleteForMe/DeleteForMeOutgoingSyncMessageManager.swift @@ -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 { diff --git a/SignalServiceKit/Messages/DeviceSyncing/DeleteForMe/DeleteForMeSyncMessageReceiver.swift b/SignalServiceKit/Messages/DeviceSyncing/DeleteForMe/DeleteForMeSyncMessageReceiver.swift index d1b6b29586..552d97863d 100644 --- a/SignalServiceKit/Messages/DeviceSyncing/DeleteForMe/DeleteForMeSyncMessageReceiver.swift +++ b/SignalServiceKit/Messages/DeviceSyncing/DeleteForMe/DeleteForMeSyncMessageReceiver.swift @@ -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) diff --git a/SignalServiceKit/Messages/DeviceSyncing/OWSIncomingSentMessageTranscript.swift b/SignalServiceKit/Messages/DeviceSyncing/OWSIncomingSentMessageTranscript.swift index 33491bec4e..d79f91f967 100644 --- a/SignalServiceKit/Messages/DeviceSyncing/OWSIncomingSentMessageTranscript.swift +++ b/SignalServiceKit/Messages/DeviceSyncing/OWSIncomingSentMessageTranscript.swift @@ -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 diff --git a/SignalServiceKit/Messages/DeviceSyncing/OWSOutgoingSentMessageTranscript.m b/SignalServiceKit/Messages/DeviceSyncing/OWSOutgoingSentMessageTranscript.m index 471ca0418f..450979d030 100644 --- a/SignalServiceKit/Messages/DeviceSyncing/OWSOutgoingSentMessageTranscript.m +++ b/SignalServiceKit/Messages/DeviceSyncing/OWSOutgoingSentMessageTranscript.m @@ -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]) { diff --git a/SignalServiceKit/Messages/DeviceSyncing/OWSOutgoingSentMessageTranscript.swift b/SignalServiceKit/Messages/DeviceSyncing/OWSOutgoingSentMessageTranscript.swift index b83f1630a3..f8971e779b 100644 --- a/SignalServiceKit/Messages/DeviceSyncing/OWSOutgoingSentMessageTranscript.swift +++ b/SignalServiceKit/Messages/DeviceSyncing/OWSOutgoingSentMessageTranscript.swift @@ -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()) diff --git a/SignalServiceKit/Messages/DeviceSyncing/OWSSyncMessageRequestResponseMessage.m b/SignalServiceKit/Messages/DeviceSyncing/OWSSyncMessageRequestResponseMessage.m index c4d4d1c48d..e9a54608cb 100644 --- a/SignalServiceKit/Messages/DeviceSyncing/OWSSyncMessageRequestResponseMessage.m +++ b/SignalServiceKit/Messages/DeviceSyncing/OWSSyncMessageRequestResponseMessage.m @@ -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; + } + } } } diff --git a/SignalServiceKit/Messages/GroupMessageProcessor.swift b/SignalServiceKit/Messages/GroupMessageProcessor.swift index f8147a253a..0ae645a94c 100644 --- a/SignalServiceKit/Messages/GroupMessageProcessor.swift +++ b/SignalServiceKit/Messages/GroupMessageProcessor.swift @@ -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( diff --git a/SignalServiceKit/Messages/IncomingPniChangeNumberProcessor.swift b/SignalServiceKit/Messages/IncomingPniChangeNumberProcessor.swift index 23e2693e30..c0f1354b04 100644 --- a/SignalServiceKit/Messages/IncomingPniChangeNumberProcessor.swift +++ b/SignalServiceKit/Messages/IncomingPniChangeNumberProcessor.swift @@ -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 diff --git a/SignalServiceKit/Messages/Interactions/Quotes/QuotedReplyManagerImpl.swift b/SignalServiceKit/Messages/Interactions/Quotes/QuotedReplyManagerImpl.swift index 3d61ab89fe..3d6ca0c74e 100644 --- a/SignalServiceKit/Messages/Interactions/Quotes/QuotedReplyManagerImpl.swift +++ b/SignalServiceKit/Messages/Interactions/Quotes/QuotedReplyManagerImpl.swift @@ -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 diff --git a/SignalServiceKit/Messages/Interactions/TSInfoMessage+GroupUpdates+PersistableGroupUpdateItem.swift b/SignalServiceKit/Messages/Interactions/TSInfoMessage+GroupUpdates+PersistableGroupUpdateItem.swift index f725f9af21..f64bf430dd 100644 --- a/SignalServiceKit/Messages/Interactions/TSInfoMessage+GroupUpdates+PersistableGroupUpdateItem.swift +++ b/SignalServiceKit/Messages/Interactions/TSInfoMessage+GroupUpdates+PersistableGroupUpdateItem.swift @@ -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, 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) 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) + case otherUserDeclinedInviteFromInviter(invitee: ServiceIdUppercaseString, inviterAci: AciUuid) + case otherUserDeclinedInviteFromUnknownUser(invitee: ServiceIdUppercaseString) 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) case unnamedUserInvitesWereRevokedByLocalUser(count: UInt) case unnamedUserInvitesWereRevokedByOtherUser(updaterAci: AciUuid, count: UInt) case unnamedUserInvitesWereRevokedByUnknownUser(count: UInt) diff --git a/SignalServiceKit/Messages/Interactions/TSOutgoingMessage.m b/SignalServiceKit/Messages/Interactions/TSOutgoingMessage.m index c115f8a206..65ae16de13 100644 --- a/SignalServiceKit/Messages/Interactions/TSOutgoingMessage.m +++ b/SignalServiceKit/Messages/Interactions/TSOutgoingMessage.m @@ -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]]; diff --git a/SignalServiceKit/Messages/MessageProcessor.swift b/SignalServiceKit/Messages/MessageProcessor.swift index f6099e9cfe..f8d6c6571e 100644 --- a/SignalServiceKit/Messages/MessageProcessor.swift +++ b/SignalServiceKit/Messages/MessageProcessor.swift @@ -172,7 +172,7 @@ public class MessageProcessor { } } - private var recentlyProcessedGuids = SetDeque() + private var recentlyProcessedGuids = SetDeque() /// 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( diff --git a/SignalServiceKit/Messages/MessageReceiver.swift b/SignalServiceKit/Messages/MessageReceiver.swift index dcdaa55f04..980b665192 100644 --- a/SignalServiceKit/Messages/MessageReceiver.swift +++ b/SignalServiceKit/Messages/MessageReceiver.swift @@ -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() - 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)" } } diff --git a/SignalServiceKit/Messages/MockIdentityManager.swift b/SignalServiceKit/Messages/MockIdentityManager.swift index 7d4d325a34..817b2b8d93 100644 --- a/SignalServiceKit/Messages/MockIdentityManager.swift +++ b/SignalServiceKit/Messages/MockIdentityManager.swift @@ -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() } diff --git a/SignalServiceKit/Messages/OWSIdentityManager.swift b/SignalServiceKit/Messages/OWSIdentityManager.swift index 40dfc084e3..7e89a4413c 100644 --- a/SignalServiceKit/Messages/OWSIdentityManager.swift +++ b/SignalServiceKit/Messages/OWSIdentityManager.swift @@ -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)") diff --git a/SignalServiceKit/Messages/OWSMessageDecrypter.swift b/SignalServiceKit/Messages/OWSMessageDecrypter.swift index 2955d7d2f4..05b151634c 100644 --- a/SignalServiceKit/Messages/OWSMessageDecrypter.swift +++ b/SignalServiceKit/Messages/OWSMessageDecrypter.swift @@ -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 "" + let serverGuid = ValidatedIncomingEnvelope.parseServerGuid(fromEnvelope: envelope) + return "" } } diff --git a/SignalServiceKit/Messages/OWSReceiptManager.swift b/SignalServiceKit/Messages/OWSReceiptManager.swift index 8c88fdccc7..3416bc1318 100644 --- a/SignalServiceKit/Messages/OWSReceiptManager.swift +++ b/SignalServiceKit/Messages/OWSReceiptManager.swift @@ -510,6 +510,7 @@ extension OWSReceiptManager { private func processReceiptsFromLinkedDevice( _ receiptProtos: [T], senderAci: KeyPath, + senderAciBinary: KeyPath, messageTimestamp: KeyPath, 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: { diff --git a/SignalServiceKit/Messages/Reactions/OutgoingReactionMessage.swift b/SignalServiceKit/Messages/Reactions/OutgoingReactionMessage.swift index c32a57f7d8..a56a5eaa60 100644 --- a/SignalServiceKit/Messages/Reactions/OutgoingReactionMessage.swift +++ b/SignalServiceKit/Messages/Reactions/OutgoingReactionMessage.swift @@ -31,6 +31,9 @@ extension OWSOutgoingReactionMessage { return nil } reactionBuilder.setTargetAuthorAci(messageAuthor.serviceIdString) + if FeatureFlags.serviceIdBinaryConstantOverhead { + reactionBuilder.setTargetAuthorAciBinary(messageAuthor.serviceIdBinary) + } do { return try reactionBuilder.build() diff --git a/SignalServiceKit/Messages/Reactions/ReactionManager.swift b/SignalServiceKit/Messages/Reactions/ReactionManager.swift index 3331810f69..b81f94cccd 100644 --- a/SignalServiceKit/Messages/Reactions/ReactionManager.swift +++ b/SignalServiceKit/Messages/Reactions/ReactionManager.swift @@ -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 } diff --git a/SignalServiceKit/Messages/Stories/OutgoingStorySentMessageTranscript.swift b/SignalServiceKit/Messages/Stories/OutgoingStorySentMessageTranscript.swift index 2462664195..5b2eb369d5 100644 --- a/SignalServiceKit/Messages/Stories/OutgoingStorySentMessageTranscript.swift +++ b/SignalServiceKit/Messages/Stories/OutgoingStorySentMessageTranscript.swift @@ -42,7 +42,7 @@ public class OutgoingStorySentMessageTranscript: OWSOutgoingSyncMessage { return nil } return (try? JSONDecoder().decode( - [ServiceIdUppercaseString: StoryRecipientState].self, from: encodedRecipientStates + [ServiceIdUppercaseString: 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()) diff --git a/SignalServiceKit/Messages/Stories/StoryMessage.swift b/SignalServiceKit/Messages/Stories/StoryMessage.swift index c99f8c995a..3d8468edb1 100644 --- a/SignalServiceKit/Messages/Stories/StoryMessage.swift +++ b/SignalServiceKit/Messages/Stories/StoryMessage.swift @@ -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: StoryRecipientState]) init(_ storyManifest: StoryManifest) { switch storyManifest { diff --git a/SignalServiceKit/Messages/ValidatedIncomingEnvelope.swift b/SignalServiceKit/Messages/ValidatedIncomingEnvelope.swift index aed255a272..4d3441120b 100644 --- a/SignalServiceKit/Messages/ValidatedIncomingEnvelope.swift +++ b/SignalServiceKit/Messages/ValidatedIncomingEnvelope.swift @@ -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(_ 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 diff --git a/SignalServiceKit/Protos/Generated/Provisioning.pb.swift b/SignalServiceKit/Protos/Generated/Provisioning.pb.swift index 9c61e6de68..874c0b9a08 100644 --- a/SignalServiceKit/Protos/Generated/Provisioning.pb.swift +++ b/SignalServiceKit/Protos/Generated/Provisioning.pb.swift @@ -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(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(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 } diff --git a/SignalServiceKit/Protos/Generated/ProvisioningProto.swift b/SignalServiceKit/Protos/Generated/ProvisioningProto.swift index 810ad57e3f..1957d356ac 100644 --- a/SignalServiceKit/Protos/Generated/ProvisioningProto.swift +++ b/SignalServiceKit/Protos/Generated/ProvisioningProto.swift @@ -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 } diff --git a/SignalServiceKit/Protos/Generated/SSKProto.swift b/SignalServiceKit/Protos/Generated/SSKProto.swift index 3d4562b1dc..f4d8c788ac 100644 --- a/SignalServiceKit/Protos/Generated/SSKProto.swift +++ b/SignalServiceKit/Protos/Generated/SSKProto.swift @@ -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 } diff --git a/SignalServiceKit/Protos/Generated/SignalService.pb.swift b/SignalServiceKit/Protos/Generated/SignalService.pb.swift index 5ced90ed66..073aed2d8a 100644 --- a/SignalServiceKit/Protos/Generated/SignalService.pb.swift +++ b/SignalServiceKit/Protos/Generated/SignalService.pb.swift @@ -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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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 } diff --git a/SignalServiceKit/Protos/SSKProto+OWS.swift b/SignalServiceKit/Protos/SSKProto+OWS.swift index c426093b0a..caf3fe0cff 100644 --- a/SignalServiceKit/Protos/SSKProto+OWS.swift +++ b/SignalServiceKit/Protos/SSKProto+OWS.swift @@ -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) - } - } -} diff --git a/SignalServiceKit/Protos/Specifications/Provisioning.proto b/SignalServiceKit/Protos/Specifications/Provisioning.proto index 2047c38f8c..485a7deebf 100644 --- a/SignalServiceKit/Protos/Specifications/Provisioning.proto +++ b/SignalServiceKit/Protos/Specifications/Provisioning.proto @@ -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 } diff --git a/SignalServiceKit/Protos/Specifications/SignalService.proto b/SignalServiceKit/Protos/Specifications/SignalService.proto index eab2e17185..24f5c89746 100644 --- a/SignalServiceKit/Protos/Specifications/SignalService.proto +++ b/SignalServiceKit/Protos/Specifications/SignalService.proto @@ -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 // } } diff --git a/SignalServiceKit/Security/OWSRecipientIdentity.swift b/SignalServiceKit/Security/OWSRecipientIdentity.swift index 2d9c04aa52..196c26bd23 100644 --- a/SignalServiceKit/Security/OWSRecipientIdentity.swift +++ b/SignalServiceKit/Security/OWSRecipientIdentity.swift @@ -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 { diff --git a/SignalServiceKit/TestUtils/TestProtocolRunner.swift b/SignalServiceKit/TestUtils/TestProtocolRunner.swift index a510882ceb..3cca6ccae1 100644 --- a/SignalServiceKit/TestUtils/TestProtocolRunner.swift +++ b/SignalServiceKit/TestUtils/TestProtocolRunner.swift @@ -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()) diff --git a/SignalServiceKit/Util/ViewOnceMessages.swift b/SignalServiceKit/Util/ViewOnceMessages.swift index 6b3770177b..db1fd58ccd 100644 --- a/SignalServiceKit/Util/ViewOnceMessages.swift +++ b/SignalServiceKit/Util/ViewOnceMessages.swift @@ -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 } diff --git a/SignalServiceKit/tests/Messages/DeleteForMe/DeleteForMeOutgoingSyncMessageTest.swift b/SignalServiceKit/tests/Messages/DeleteForMe/DeleteForMeOutgoingSyncMessageTest.swift index 612fed7897..a0ca46afe4 100644 --- a/SignalServiceKit/tests/Messages/DeleteForMe/DeleteForMeOutgoingSyncMessageTest.swift +++ b/SignalServiceKit/tests/Messages/DeleteForMe/DeleteForMeOutgoingSyncMessageTest.swift @@ -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 diff --git a/SignalServiceKit/tests/Messages/MessageDecryptionTest.swift b/SignalServiceKit/tests/Messages/MessageDecryptionTest.swift index 15c3bb5248..f1fe039d99 100644 --- a/SignalServiceKit/tests/Messages/MessageDecryptionTest.swift +++ b/SignalServiceKit/tests/Messages/MessageDecryptionTest.swift @@ -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()) } diff --git a/SignalServiceKit/tests/Messages/MessageProcessingIntegrationTest.swift b/SignalServiceKit/tests/Messages/MessageProcessingIntegrationTest.swift index 7f4959b05b..60780cc332 100644 --- a/SignalServiceKit/tests/Messages/MessageProcessingIntegrationTest.swift +++ b/SignalServiceKit/tests/Messages/MessageProcessingIntegrationTest.swift @@ -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 diff --git a/SignalServiceKit/tests/Messages/ValidatedIncomingEnvelopeTest.swift b/SignalServiceKit/tests/Messages/ValidatedIncomingEnvelopeTest.swift index 55e2f42b4d..a96b17e2ee 100644 --- a/SignalServiceKit/tests/Messages/ValidatedIncomingEnvelopeTest.swift +++ b/SignalServiceKit/tests/Messages/ValidatedIncomingEnvelopeTest.swift @@ -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)