Skip to content

Commit

Permalink
Update libsignal-service
Browse files Browse the repository at this point in the history
  • Loading branch information
AsamK committed Aug 6, 2023
1 parent 409a707 commit 86e1079
Show file tree
Hide file tree
Showing 27 changed files with 152 additions and 208 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Changelog

## [Unreleased]
**Attention**: Now requires native libsignal-client version 0.30.0

## [0.11.11] - 2023-05-24
**Attention**: Now requires native libsignal-client version 0.25.0
Expand Down
12 changes: 6 additions & 6 deletions graalvm-config-dir/reflect-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -1934,7 +1934,7 @@
},
{
"name":"org.signal.storageservice.protos.groups.local.DecryptedBannedMember",
"fields":[{"name":"timestamp_"}, {"name":"uuid_"}]
"fields":[{"name":"serviceIdBinary_"}, {"name":"timestamp_"}, {"name":"uuid_"}]
},
{
"name":"org.signal.storageservice.protos.groups.local.DecryptedGroup",
Expand All @@ -1958,7 +1958,7 @@
},
{
"name":"org.signal.storageservice.protos.groups.local.DecryptedPendingMember",
"fields":[{"name":"addedByUuid_"}, {"name":"role_"}, {"name":"timestamp_"}, {"name":"uuidCipherText_"}, {"name":"uuid_"}]
"fields":[{"name":"addedByUuid_"}, {"name":"role_"}, {"name":"serviceIdBinary_"}, {"name":"timestamp_"}, {"name":"uuidCipherText_"}, {"name":"uuid_"}]
},
{
"name":"org.signal.storageservice.protos.groups.local.DecryptedPendingMemberRemoval",
Expand Down Expand Up @@ -2517,7 +2517,7 @@
},
{
"name":"org.whispersystems.signalservice.internal.push.SignalServiceProtos$ContactDetails",
"fields":[{"name":"archived_"}, {"name":"avatar_"}, {"name":"bitField0_"}, {"name":"blocked_"}, {"name":"color_"}, {"name":"expireTimer_"}, {"name":"inboxPosition_"}, {"name":"name_"}, {"name":"number_"}, {"name":"profileKey_"}, {"name":"uuid_"}, {"name":"verified_"}]
"fields":[{"name":"aci_"}, {"name":"archived_"}, {"name":"avatar_"}, {"name":"bitField0_"}, {"name":"blocked_"}, {"name":"color_"}, {"name":"expireTimer_"}, {"name":"inboxPosition_"}, {"name":"name_"}, {"name":"number_"}, {"name":"profileKey_"}, {"name":"uuid_"}, {"name":"verified_"}]
},
{
"name":"org.whispersystems.signalservice.internal.push.SignalServiceProtos$ContactDetails$Avatar",
Expand Down Expand Up @@ -2661,7 +2661,7 @@
},
{
"name":"org.whispersystems.signalservice.internal.push.SignalServiceProtos$SyncMessage$Blocked",
"fields":[{"name":"groupIds_"}, {"name":"numbers_"}, {"name":"uuids_"}]
"fields":[{"name":"acis_"}, {"name":"groupIds_"}, {"name":"numbers_"}, {"name":"uuids_"}]
},
{
"name":"org.whispersystems.signalservice.internal.push.SignalServiceProtos$SyncMessage$CallEvent",
Expand Down Expand Up @@ -2745,7 +2745,7 @@
},
{
"name":"org.whispersystems.signalservice.internal.push.SignalServiceProtos$Verified",
"fields":[{"name":"bitField0_"}, {"name":"destinationUuid_"}, {"name":"identityKey_"}, {"name":"nullMessage_"}, {"name":"state_"}]
"fields":[{"name":"bitField0_"}, {"name":"destinationAci_"}, {"name":"destinationUuid_"}, {"name":"identityKey_"}, {"name":"nullMessage_"}, {"name":"state_"}]
},
{
"name":"org.whispersystems.signalservice.internal.push.StaleDevices",
Expand Down Expand Up @@ -2812,7 +2812,7 @@
},
{
"name":"org.whispersystems.signalservice.internal.storage.protos.AccountRecord$PinnedConversation$Contact",
"fields":[{"name":"e164_"}, {"name":"uuid_"}]
"fields":[{"name":"e164_"}, {"name":"serviceId_"}, {"name":"uuid_"}]
},
{
"name":"org.whispersystems.signalservice.internal.storage.protos.ContactRecord",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package org.asamk.signal.manager.api;

import org.whispersystems.signalservice.api.push.ServiceId;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
import org.whispersystems.signalservice.api.util.UuidUtil;

import java.util.Optional;
import java.util.UUID;

public record RecipientAddress(Optional<UUID> uuid, Optional<String> number, Optional<String> username) {

public static final UUID UNKNOWN_UUID = ServiceId.UNKNOWN.uuid();
public static final UUID UNKNOWN_UUID = UuidUtil.UNKNOWN_UUID;

/**
* Construct a RecipientAddress.
Expand All @@ -32,7 +32,7 @@ public RecipientAddress(UUID uuid, String e164, String username) {
}

public RecipientAddress(SignalServiceAddress address) {
this(Optional.of(address.getServiceId().uuid()), address.getNumber(), Optional.empty());
this(Optional.of(address.getServiceId().getRawUuid()), address.getNumber(), Optional.empty());
}

public RecipientAddress(UUID uuid) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package org.asamk.signal.manager.helper;

import org.whispersystems.signalservice.api.push.ACI;
import org.whispersystems.signalservice.api.push.ServiceId.ACI;

public interface AccountFileUpdater {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.whispersystems.signalservice.api.account.ChangePhoneNumberRequest;
import org.whispersystems.signalservice.api.push.ACI;
import org.whispersystems.signalservice.api.push.PNI;
import org.whispersystems.signalservice.api.push.ServiceId.ACI;
import org.whispersystems.signalservice.api.push.ServiceId.PNI;
import org.whispersystems.signalservice.api.push.ServiceIdType;
import org.whispersystems.signalservice.api.push.SignedPreKeyEntity;
import org.whispersystems.signalservice.api.push.exceptions.AlreadyVerifiedException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -447,7 +447,7 @@ private void retrieveGroupV2Avatar(

private void storeProfileKeysFromMembers(final DecryptedGroup group) {
for (var member : group.getMembersList()) {
final var serviceId = ServiceId.fromByteString(member.getUuid());
final var serviceId = ServiceId.parseOrThrow(member.getUuid());
final var recipientId = account.getRecipientResolver().resolveRecipient(serviceId);
final var profileStore = account.getProfileStore();
if (profileStore.getProfileKey(recipientId) != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@
import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations;
import org.whispersystems.signalservice.api.groupsv2.InvalidGroupStateException;
import org.whispersystems.signalservice.api.groupsv2.NotAbleToApplyGroupV2ChangeException;
import org.whispersystems.signalservice.api.push.ACI;
import org.whispersystems.signalservice.api.push.PNI;
import org.whispersystems.signalservice.api.push.ServiceId;
import org.whispersystems.signalservice.api.push.ServiceId.ACI;
import org.whispersystems.signalservice.api.push.ServiceId.PNI;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException;
import org.whispersystems.signalservice.api.util.UuidUtil;
Expand Down Expand Up @@ -124,7 +124,7 @@ GroupHistoryPage getDecryptedGroupHistoryPage(
}

int findRevisionWeWereAdded(DecryptedGroup partialDecryptedGroup) {
ByteString bytes = UuidUtil.toByteString(getSelfAci().uuid());
ByteString bytes = getSelfAci().toByteString();
for (DecryptedMember decryptedMember : partialDecryptedGroup.getMembersList()) {
if (decryptedMember.getUuid().equals(bytes)) {
return decryptedMember.getJoinedAtRevision();
Expand Down Expand Up @@ -175,11 +175,11 @@ private GroupsV2Operations.NewGroup buildNewGroup(
return null;
}

final var self = new GroupCandidate(getSelfAci().uuid(), Optional.of(profileKeyCredential));
final var self = new GroupCandidate(getSelfAci(), Optional.of(profileKeyCredential));
final var memberList = new ArrayList<>(members);
final var credentials = context.getProfileHelper().getExpiringProfileKeyCredential(memberList).stream();
final var uuids = memberList.stream()
.map(member -> context.getRecipientHelper().resolveSignalServiceAddress(member).getServiceId().uuid());
.map(member -> context.getRecipientHelper().resolveSignalServiceAddress(member).getServiceId());
var candidates = Utils.zip(uuids,
credentials,
(uuid, credential) -> new GroupCandidate(uuid, Optional.ofNullable(credential)))
Expand Down Expand Up @@ -227,18 +227,18 @@ Pair<DecryptedGroup, GroupChange> addMembers(
final var memberList = new ArrayList<>(newMembers);
final var credentials = context.getProfileHelper().getExpiringProfileKeyCredential(memberList).stream();
final var uuids = memberList.stream()
.map(member -> context.getRecipientHelper().resolveSignalServiceAddress(member).getServiceId().uuid());
.map(member -> context.getRecipientHelper().resolveSignalServiceAddress(member).getServiceId());
var candidates = Utils.zip(uuids,
credentials,
(uuid, credential) -> new GroupCandidate(uuid, Optional.ofNullable(credential)))
.collect(Collectors.toSet());
final var bannedUuids = groupInfoV2.getBannedMembers()
.stream()
.map(member -> context.getRecipientHelper().resolveSignalServiceAddress(member).getServiceId().uuid())
.map(member -> context.getRecipientHelper().resolveSignalServiceAddress(member).getServiceId())
.collect(Collectors.toSet());

final var aci = getSelfAci();
final var change = groupOperations.createModifyGroupMembershipChange(candidates, bannedUuids, aci.uuid());
final var change = groupOperations.createModifyGroupMembershipChange(candidates, bannedUuids, aci);

change.setSourceUuid(getSelfAci().toByteString());

Expand All @@ -250,7 +250,7 @@ Pair<DecryptedGroup, GroupChange> leaveGroup(
) throws IOException {
var pendingMembersList = groupInfoV2.getGroup().getPendingMembersList();
final var selfAci = getSelfAci();
var selfPendingMember = DecryptedGroupUtil.findPendingByUuid(pendingMembersList, selfAci.uuid());
var selfPendingMember = DecryptedGroupUtil.findPendingByServiceId(pendingMembersList, selfAci);

if (selfPendingMember.isPresent()) {
return revokeInvites(groupInfoV2, Set.of(selfPendingMember.get()));
Expand All @@ -259,11 +259,11 @@ Pair<DecryptedGroup, GroupChange> leaveGroup(
final var adminUuids = membersToMakeAdmin.stream()
.map(context.getRecipientHelper()::resolveSignalServiceAddress)
.map(SignalServiceAddress::getServiceId)
.map(ServiceId::uuid)
.map(ServiceId::getRawUuid)
.toList();
final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
return commitChange(groupInfoV2,
groupOperations.createLeaveAndPromoteMembersToAdmin(selfAci.uuid(), adminUuids));
groupOperations.createLeaveAndPromoteMembersToAdmin(selfAci.getRawUuid(), adminUuids));
}

Pair<DecryptedGroup, GroupChange> removeMembers(
Expand All @@ -272,7 +272,7 @@ Pair<DecryptedGroup, GroupChange> removeMembers(
final var memberUuids = members.stream()
.map(context.getRecipientHelper()::resolveSignalServiceAddress)
.map(SignalServiceAddress::getServiceId)
.map(ServiceId::uuid)
.map(ServiceId::getRawUuid)
.collect(Collectors.toSet());
return ejectMembers(groupInfoV2, memberUuids);
}
Expand All @@ -283,7 +283,7 @@ Pair<DecryptedGroup, GroupChange> approveJoinRequestMembers(
final var memberUuids = members.stream()
.map(context.getRecipientHelper()::resolveSignalServiceAddress)
.map(SignalServiceAddress::getServiceId)
.map(ServiceId::uuid)
.map(ServiceId::getRawUuid)
.collect(Collectors.toSet());
return approveJoinRequest(groupInfoV2, memberUuids);
}
Expand All @@ -294,7 +294,7 @@ Pair<DecryptedGroup, GroupChange> refuseJoinRequestMembers(
final var memberUuids = members.stream()
.map(context.getRecipientHelper()::resolveSignalServiceAddress)
.map(SignalServiceAddress::getServiceId)
.map(ServiceId::uuid)
.map(ServiceId::getRawUuid)
.collect(Collectors.toSet());
return refuseJoinRequest(groupInfoV2, memberUuids);
}
Expand All @@ -306,8 +306,7 @@ Pair<DecryptedGroup, GroupChange> revokeInvitedMembers(
final var memberUuids = members.stream()
.map(context.getRecipientHelper()::resolveSignalServiceAddress)
.map(SignalServiceAddress::getServiceId)
.map(ServiceId::uuid)
.map(uuid -> DecryptedGroupUtil.findPendingByUuid(pendingMembersList, uuid))
.map(uuid -> DecryptedGroupUtil.findPendingByServiceId(pendingMembersList, uuid))
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toSet());
Expand All @@ -320,7 +319,10 @@ Pair<DecryptedGroup, GroupChange> banMembers(
GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);

final var uuids = block.stream()
.map(member -> context.getRecipientHelper().resolveSignalServiceAddress(member).getServiceId().uuid())
.map(member -> context.getRecipientHelper()
.resolveSignalServiceAddress(member)
.getServiceId()
.getRawUuid())
.collect(Collectors.toSet());

final var change = groupOperations.createBanUuidsChange(uuids,
Expand All @@ -337,11 +339,11 @@ Pair<DecryptedGroup, GroupChange> unbanMembers(
) throws IOException {
GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);

final var uuids = block.stream()
.map(member -> context.getRecipientHelper().resolveSignalServiceAddress(member).getServiceId().uuid())
final var serviceIds = block.stream()
.map(member -> context.getRecipientHelper().resolveSignalServiceAddress(member).getServiceId())
.collect(Collectors.toSet());

final var change = groupOperations.createUnbanUuidsChange(uuids);
final var change = groupOperations.createUnbanServiceIdsChange(serviceIds);

change.setSourceUuid(getSelfAci().toByteString());

Expand Down Expand Up @@ -394,7 +396,8 @@ Pair<DecryptedGroup, GroupChange> setAddMemberPermission(
Pair<DecryptedGroup, GroupChange> updateSelfProfileKey(GroupInfoV2 groupInfoV2) throws IOException {
Optional<DecryptedMember> selfInGroup = groupInfoV2.getGroup() == null
? Optional.empty()
: DecryptedGroupUtil.findMemberByUuid(groupInfoV2.getGroup().getMembersList(), getSelfAci().uuid());
: DecryptedGroupUtil.findMemberByUuid(groupInfoV2.getGroup().getMembersList(),
getSelfAci().getRawUuid());
if (selfInGroup.isEmpty()) {
logger.trace("Not updating group, self not in group " + groupInfoV2.getGroupId().toBase64());
return null;
Expand Down Expand Up @@ -471,8 +474,12 @@ Pair<DecryptedGroup, GroupChange> setMemberAdmin(
final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
final var address = context.getRecipientHelper().resolveSignalServiceAddress(recipientId);
final var newRole = admin ? Member.Role.ADMINISTRATOR : Member.Role.DEFAULT;
final var change = groupOperations.createChangeMemberRole(address.getServiceId().uuid(), newRole);
return commitChange(groupInfoV2, change);
if (address.getServiceId() instanceof ACI aci) {
final var change = groupOperations.createChangeMemberRole(aci, newRole);
return commitChange(groupInfoV2, change);
} else {
throw new IllegalArgumentException("Can't make a PNI a group admin.");
}
}

Pair<DecryptedGroup, GroupChange> setMessageExpirationTimer(
Expand Down Expand Up @@ -558,7 +565,7 @@ private Pair<DecryptedGroup, GroupChange> commitChange(
final DecryptedGroup decryptedGroupState;

try {
decryptedChange = groupOperations.decryptChange(changeActions, getSelfAci().uuid());
decryptedChange = groupOperations.decryptChange(changeActions, getSelfAci());
decryptedGroupState = DecryptedGroupUtil.apply(previousGroupState, decryptedChange);
} catch (VerificationFailedException | InvalidGroupStateException | NotAbleToApplyGroupV2ChangeException e) {
throw new IOException(e);
Expand Down Expand Up @@ -610,7 +617,7 @@ Pair<ServiceId, ProfileKey> getAuthoritativeProfileKeyFromChange(final Decrypted
return null;
}

return new Pair<>(ServiceId.from(editor), profileKey);
return new Pair<>(ACI.from(editor), profileKey);
}

DecryptedGroup getUpdatedDecryptedGroup(DecryptedGroup group, DecryptedGroupChange decryptedGroupChange) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,9 @@
import org.whispersystems.signalservice.api.messages.SignalServiceStoryMessage;
import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage;
import org.whispersystems.signalservice.api.messages.multidevice.StickerPackOperationMessage;
import org.whispersystems.signalservice.api.push.ACI;
import org.whispersystems.signalservice.api.push.PNI;
import org.whispersystems.signalservice.api.push.ServiceId;
import org.whispersystems.signalservice.api.push.ServiceId.ACI;
import org.whispersystems.signalservice.api.push.ServiceId.PNI;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
import org.whispersystems.signalservice.internal.push.SignalServiceProtos;
import org.whispersystems.signalservice.internal.push.UnsupportedDataMessageException;
Expand Down Expand Up @@ -139,7 +139,7 @@ public Pair<List<HandleAction>, Exception> handleEnvelope(
final var actions = new ArrayList<HandleAction>();
if (envelope.hasSourceServiceId()) {
// Store uuid if we don't have it already
// address/uuid in envelope is sent by server
// uuid in envelope is sent by server
account.getRecipientTrustedResolver().resolveRecipientTrusted(envelope.getSourceAddress());
}
SignalServiceContent content = null;
Expand Down Expand Up @@ -409,7 +409,7 @@ public List<HandleAction> handleMessage(
private boolean handlePniSignatureMessage(
final SignalServicePniSignatureMessage message, final SignalServiceAddress senderAddress
) {
final var aci = ACI.from(senderAddress.getServiceId());
final var aci = senderAddress.getServiceId();
final var aciIdentity = account.getIdentityKeyStore().getIdentityInfo(aci);
final var pni = message.getPni();
final var pniIdentity = account.getIdentityKeyStore().getIdentityInfo(pni);
Expand All @@ -428,7 +428,9 @@ private boolean handlePniSignatureMessage(

logger.debug("Verified association of ACI {} with PNI {}", aci, pni);
account.getRecipientTrustedResolver()
.resolveRecipientTrusted(Optional.of(aci), Optional.of(pni), senderAddress.getNumber());
.resolveRecipientTrusted(Optional.of(ACI.from(aci.getRawUuid())),
Optional.of(pni),
senderAddress.getNumber());
return true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import org.slf4j.LoggerFactory;
import org.whispersystems.signalservice.api.SignalWebSocket;
import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
import org.whispersystems.signalservice.api.push.ServiceId;
import org.whispersystems.signalservice.api.push.ServiceId.ACI;
import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState;
import org.whispersystems.signalservice.api.websocket.WebSocketUnavailableException;

Expand Down Expand Up @@ -228,7 +228,7 @@ private void receiveMessagesInternal(
final var address = ((UntrustedIdentityException) exception).getSender();
if (!envelope.hasSourceServiceId() && address.uuid().isPresent()) {
final var recipientId = account.getRecipientResolver()
.resolveRecipient(ServiceId.from(address.uuid().get()));
.resolveRecipient(ACI.from(address.uuid().get()));
try {
cachedMessage[0] = account.getMessageCache().replaceSender(cachedMessage[0], recipientId);
} catch (IOException ioException) {
Expand Down
Loading

0 comments on commit 86e1079

Please sign in to comment.