]> nmode's Git Repositories - signal-cli/commitdiff
Update libsignal-service
authorAsamK <asamk@gmx.de>
Fri, 1 Sep 2023 09:31:41 +0000 (11:31 +0200)
committerAsamK <asamk@gmx.de>
Fri, 1 Sep 2023 09:31:41 +0000 (11:31 +0200)
12 files changed:
graalvm-config-dir/reflect-config.json
lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/GroupHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/GroupV2Helper.java
lib/src/main/java/org/asamk/signal/manager/helper/StorageHelper.java
lib/src/main/java/org/asamk/signal/manager/internal/RegistrationManagerImpl.java
lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java
lib/src/main/java/org/asamk/signal/manager/storage/groups/GroupInfoV2.java
lib/src/main/java/org/asamk/signal/manager/storage/prekeys/KyberPreKeyStore.java
lib/src/main/java/org/asamk/signal/manager/storage/protocol/SignalProtocolStore.java
lib/src/main/java/org/asamk/signal/manager/util/AttachmentUtils.java
settings.gradle.kts

index 8e2e8100a9b31121bb2fe738c0ef51c76443741b..989e6b905ccc3228b12e1e680eb6f47087460047 100644 (file)
 },
 {
   "name":"org.signal.storageservice.protos.groups.local.DecryptedBannedMember",
-  "fields":[{"name":"serviceIdBinary_"}, {"name":"timestamp_"}]
+  "fields":[{"name":"serviceIdBinary_"}, {"name":"serviceIdBytes_"}, {"name":"timestamp_"}]
 },
 {
   "name":"org.signal.storageservice.protos.groups.local.DecryptedGroup",
 },
 {
   "name":"org.signal.storageservice.protos.groups.local.DecryptedMember",
-  "fields":[{"name":"joinedAtRevision_"}, {"name":"pni_"}, {"name":"profileKey_"}, {"name":"role_"}, {"name":"uuid_"}]
+  "fields":[{"name":"aciBytes_"}, {"name":"joinedAtRevision_"}, {"name":"pniBytes_"}, {"name":"pni_"}, {"name":"profileKey_"}, {"name":"role_"}, {"name":"uuid_"}]
 },
 {
   "name":"org.signal.storageservice.protos.groups.local.DecryptedModifyMemberRole",
 },
 {
   "name":"org.signal.storageservice.protos.groups.local.DecryptedPendingMember",
-  "fields":[{"name":"addedByUuid_"}, {"name":"role_"}, {"name":"serviceIdBinary_"}, {"name":"timestamp_"}, {"name":"uuidCipherText_"}]
+  "fields":[{"name":"addedByAci_"}, {"name":"addedByUuid_"}, {"name":"role_"}, {"name":"serviceIdBinary_"}, {"name":"serviceIdBytes_"}, {"name":"serviceIdCipherText_"}, {"name":"timestamp_"}, {"name":"uuidCipherText_"}]
 },
 {
   "name":"org.signal.storageservice.protos.groups.local.DecryptedPendingMemberRemoval",
 },
 {
   "name":"org.signal.storageservice.protos.groups.local.DecryptedRequestingMember",
-  "fields":[{"name":"profileKey_"}, {"name":"timestamp_"}, {"name":"uuid_"}]
+  "fields":[{"name":"aciBytes_"}, {"name":"profileKey_"}, {"name":"timestamp_"}, {"name":"uuid_"}]
 },
 {
   "name":"org.signal.storageservice.protos.groups.local.DecryptedString",
index 1b1de9416e682915d433aa768cef7e4a9a7d2e56..5ff11b34fd4a99d3a812ff92dfd9f96ee80f4b9f 100644 (file)
@@ -102,7 +102,7 @@ public class AccountHelper {
         final var whoAmI = dependencies.getAccountManager().getWhoAmI();
         final var number = whoAmI.getNumber();
         final var aci = ACI.parseOrThrow(whoAmI.getAci());
-        final var pni = PNI.parseUnPrefixedOrThrow(whoAmI.getPni());
+        final var pni = PNI.parseOrThrow(whoAmI.getPni());
         if (number.equals(account.getNumber()) && aci.equals(account.getAci()) && pni.equals(account.getPni())) {
             return;
         }
index eb54780ed64ab41a2ed195fab7188921dd6851df..d30c79e420ed98e53b588ae91115cb445e8a4f90 100644 (file)
@@ -447,7 +447,7 @@ public class GroupHelper {
 
     private void storeProfileKeysFromMembers(final DecryptedGroup group) {
         for (var member : group.getMembersList()) {
-            final var serviceId = ServiceId.parseOrThrow(member.getUuid());
+            final var serviceId = ServiceId.parseOrThrow(member.getAciBytes());
             final var recipientId = account.getRecipientResolver().resolveRecipient(serviceId);
             final var profileStore = account.getProfileStore();
             if (profileStore.getProfileKey(recipientId) != null) {
index c817f01fe0b57ef6fbaaf927bd99501c47bd2101..30de7b19a62d2240429b7e1b71e035c29572c5ab 100644 (file)
@@ -124,9 +124,10 @@ class GroupV2Helper {
     }
 
     int findRevisionWeWereAdded(DecryptedGroup partialDecryptedGroup) {
-        ByteString bytes = getSelfAci().toByteString();
+        ByteString aciBytes = getSelfAci().toByteString();
+        ByteString pniBytes = getSelfPni().toByteString();
         for (DecryptedMember decryptedMember : partialDecryptedGroup.getMembersList()) {
-            if (decryptedMember.getUuid().equals(bytes)) {
+            if (decryptedMember.getAciBytes().equals(aciBytes) || decryptedMember.getPniBytes().equals(pniBytes)) {
                 return decryptedMember.getJoinedAtRevision();
             }
         }
@@ -214,7 +215,7 @@ class GroupV2Helper {
             change.setModifyAvatar(GroupChange.Actions.ModifyAvatarAction.newBuilder().setAvatar(avatarCdnKey));
         }
 
-        change.setSourceUuid(getSelfAci().toByteString());
+        change.setSourceServiceId(getSelfAci().toByteString());
 
         return commitChange(groupInfoV2, change);
     }
@@ -240,7 +241,7 @@ class GroupV2Helper {
         final var aci = getSelfAci();
         final var change = groupOperations.createModifyGroupMembershipChange(candidates, bannedUuids, aci);
 
-        change.setSourceUuid(getSelfAci().toByteString());
+        change.setSourceServiceId(getSelfAci().toByteString());
 
         return commitChange(groupInfoV2, change);
     }
@@ -262,8 +263,7 @@ class GroupV2Helper {
                 .map(ServiceId::getRawUuid)
                 .toList();
         final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
-        return commitChange(groupInfoV2,
-                groupOperations.createLeaveAndPromoteMembersToAdmin(selfAci.getRawUuid(), adminUuids));
+        return commitChange(groupInfoV2, groupOperations.createLeaveAndPromoteMembersToAdmin(selfAci, adminUuids));
     }
 
     Pair<DecryptedGroup, GroupChange> removeMembers(
@@ -272,7 +272,8 @@ class GroupV2Helper {
         final var memberUuids = members.stream()
                 .map(context.getRecipientHelper()::resolveSignalServiceAddress)
                 .map(SignalServiceAddress::getServiceId)
-                .map(ServiceId::getRawUuid)
+                .filter(m -> m instanceof ACI)
+                .map(m -> (ACI) m)
                 .collect(Collectors.toSet());
         return ejectMembers(groupInfoV2, memberUuids);
     }
@@ -294,7 +295,6 @@ class GroupV2Helper {
         final var memberUuids = members.stream()
                 .map(context.getRecipientHelper()::resolveSignalServiceAddress)
                 .map(SignalServiceAddress::getServiceId)
-                .map(ServiceId::getRawUuid)
                 .collect(Collectors.toSet());
         return refuseJoinRequest(groupInfoV2, memberUuids);
     }
@@ -318,18 +318,15 @@ class GroupV2Helper {
     ) throws IOException {
         GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
 
-        final var uuids = block.stream()
-                .map(member -> context.getRecipientHelper()
-                        .resolveSignalServiceAddress(member)
-                        .getServiceId()
-                        .getRawUuid())
+        final var serviceIds = block.stream()
+                .map(member -> context.getRecipientHelper().resolveSignalServiceAddress(member).getServiceId())
                 .collect(Collectors.toSet());
 
-        final var change = groupOperations.createBanUuidsChange(uuids,
+        final var change = groupOperations.createBanServiceIdsChange(serviceIds,
                 false,
                 groupInfoV2.getGroup().getBannedMembersList());
 
-        change.setSourceUuid(getSelfAci().toByteString());
+        change.setSourceServiceId(getSelfAci().toByteString());
 
         return commitChange(groupInfoV2, change);
     }
@@ -345,7 +342,7 @@ class GroupV2Helper {
 
         final var change = groupOperations.createUnbanServiceIdsChange(serviceIds);
 
-        change.setSourceUuid(getSelfAci().toByteString());
+        change.setSourceServiceId(getSelfAci().toByteString());
 
         return commitChange(groupInfoV2, change);
     }
@@ -396,8 +393,7 @@ class GroupV2Helper {
     Pair<DecryptedGroup, GroupChange> updateSelfProfileKey(GroupInfoV2 groupInfoV2) throws IOException {
         Optional<DecryptedMember> selfInGroup = groupInfoV2.getGroup() == null
                 ? Optional.empty()
-                : DecryptedGroupUtil.findMemberByUuid(groupInfoV2.getGroup().getMembersList(),
-                        getSelfAci().getRawUuid());
+                : DecryptedGroupUtil.findMemberByAci(groupInfoV2.getGroup().getMembersList(), getSelfAci());
         if (selfInGroup.isEmpty()) {
             logger.trace("Not updating group, self not in group " + groupInfoV2.getGroupId().toBase64());
             return null;
@@ -420,7 +416,7 @@ class GroupV2Helper {
 
         final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
         final var change = groupOperations.createUpdateProfileKeyCredentialChange(profileKeyCredential);
-        change.setSourceUuid(getSelfAci().toByteString());
+        change.setSourceServiceId(getSelfAci().toByteString());
         return commitChange(groupInfoV2, change);
     }
 
@@ -443,7 +439,7 @@ class GroupV2Helper {
                 ? groupOperations.createGroupJoinRequest(profileKeyCredential)
                 : groupOperations.createGroupJoinDirect(profileKeyCredential);
 
-        change.setSourceUuid(context.getRecipientHelper()
+        change.setSourceServiceId(context.getRecipientHelper()
                 .resolveSignalServiceAddress(selfRecipientId)
                 .getServiceId()
                 .toByteString());
@@ -463,7 +459,7 @@ class GroupV2Helper {
         final var change = groupOperations.createAcceptInviteChange(profileKeyCredential);
 
         final var aci = context.getRecipientHelper().resolveSignalServiceAddress(selfRecipientId).getServiceId();
-        change.setSourceUuid(aci.toByteString());
+        change.setSourceServiceId(aci.toByteString());
 
         return commitChange(groupInfoV2, change);
     }
@@ -524,7 +520,7 @@ class GroupV2Helper {
         final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
         final var uuidCipherTexts = pendingMembers.stream().map(member -> {
             try {
-                return new UuidCiphertext(member.getUuidCipherText().toByteArray());
+                return new UuidCiphertext(member.getServiceIdCipherText().toByteArray());
             } catch (InvalidInputException e) {
                 throw new AssertionError(e);
             }
@@ -540,17 +536,17 @@ class GroupV2Helper {
     }
 
     private Pair<DecryptedGroup, GroupChange> refuseJoinRequest(
-            GroupInfoV2 groupInfoV2, Set<UUID> uuids
+            GroupInfoV2 groupInfoV2, Set<ServiceId> serviceIds
     ) throws IOException {
         final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
-        return commitChange(groupInfoV2, groupOperations.createRefuseGroupJoinRequest(uuids, false, List.of()));
+        return commitChange(groupInfoV2, groupOperations.createRefuseGroupJoinRequest(serviceIds, false, List.of()));
     }
 
     private Pair<DecryptedGroup, GroupChange> ejectMembers(
-            GroupInfoV2 groupInfoV2, Set<UUID> uuids
+            GroupInfoV2 groupInfoV2, Set<ACI> members
     ) throws IOException {
         final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
-        return commitChange(groupInfoV2, groupOperations.createRemoveMembersChange(uuids, false, List.of()));
+        return commitChange(groupInfoV2, groupOperations.createRemoveMembersChange(members, false, List.of()));
     }
 
     private Pair<DecryptedGroup, GroupChange> commitChange(
@@ -593,16 +589,16 @@ class GroupV2Helper {
     }
 
     Pair<ServiceId, ProfileKey> getAuthoritativeProfileKeyFromChange(final DecryptedGroupChange change) {
-        UUID editor = UuidUtil.fromByteStringOrNull(change.getEditor());
+        UUID editor = UuidUtil.fromByteStringOrNull(change.getEditorServiceIdBytes());
         final var editorProfileKeyBytes = Stream.concat(Stream.of(change.getNewMembersList().stream(),
                                 change.getPromotePendingMembersList().stream(),
                                 change.getModifiedProfileKeysList().stream())
                         .flatMap(Function.identity())
-                        .filter(m -> UuidUtil.fromByteString(m.getUuid()).equals(editor))
+                        .filter(m -> UuidUtil.fromByteString(m.getAciBytes()).equals(editor))
                         .map(DecryptedMember::getProfileKey),
                 change.getNewRequestingMembersList()
                         .stream()
-                        .filter(m -> UuidUtil.fromByteString(m.getUuid()).equals(editor))
+                        .filter(m -> UuidUtil.fromByteString(m.getAciBytes()).equals(editor))
                         .map(DecryptedRequestingMember::getProfileKey)).findFirst();
 
         if (editorProfileKeyBytes.isEmpty()) {
index 863bdf99f40454440fcc0ee85d495cc5e8ec8b74..a8eb7f5007062481e7ea78b77741096d7d8f5b5e 100644 (file)
@@ -101,14 +101,14 @@ public class StorageHelper {
         }
 
         final var contactRecord = record.getContact().get();
-        final var aci = contactRecord.getAci();
+        final var aci = contactRecord.getAci().orElse(null);
         final var pni = contactRecord.getPni().orElse(null);
-        if (contactRecord.getNumber().isEmpty() && aci.isUnknown()) {
+        if (contactRecord.getNumber().isEmpty() && aci == null && pni == null) {
             return;
         }
         final var address = new RecipientAddress(aci, pni, contactRecord.getNumber().orElse(null));
         var recipientId = account.getRecipientResolver().resolveRecipient(address);
-        if (aci.isValid() && contactRecord.getUsername().isPresent()) {
+        if (aci != null && contactRecord.getUsername().isPresent()) {
             recipientId = account.getRecipientTrustedResolver()
                     .resolveRecipientTrusted(aci, contactRecord.getUsername().get());
         }
@@ -171,7 +171,7 @@ public class StorageHelper {
                 logger.warn("Received invalid contact profile key from storage");
             }
         }
-        if (contactRecord.getIdentityKey().isPresent() && aci.isValid()) {
+        if (contactRecord.getIdentityKey().isPresent() && aci != null) {
             try {
                 logger.trace("Storing identity key {}", recipientId);
                 final var identityKey = new IdentityKey(contactRecord.getIdentityKey().get());
index a216237c3a6feb997ea3dd304da3e8f1aec01877..3e9536317ed82aa6a29ab3fb37331e7e274fdfa0 100644 (file)
@@ -165,7 +165,7 @@ public class RegistrationManagerImpl implements RegistrationManager {
 
         //accountManager.setGcmId(Optional.of(GoogleCloudMessaging.getInstance(this).register(REGISTRATION_ID)));
         final var aci = ACI.parseOrThrow(response.getUuid());
-        final var pni = PNI.parseUnPrefixedOrThrow(response.getPni());
+        final var pni = PNI.parseOrThrow(response.getPni());
         account.finishRegistration(aci, pni, masterKey, pin, aciPreKeys, pniPreKeys);
         accountFileUpdater.updateAccountIdentifiers(account.getNumber(), aci);
 
index 8d719ea33a28baa40d4fab9f4a5a5a9650eae020..6ae2aaa477d624acf8d194c47b92a8b955ec5101 100644 (file)
@@ -556,7 +556,7 @@ public class SignalAccount implements Closeable {
         }
         if (rootNode.hasNonNull("pni")) {
             try {
-                pni = PNI.parseUnPrefixedOrThrow(rootNode.get("pni").asText());
+                pni = PNI.parseOrThrow(rootNode.get("pni").asText());
             } catch (IllegalArgumentException e) {
                 throw new IOException("Config file contains an invalid pni, needs to be a valid UUID", e);
             }
index 199a9da0cb2926dd6f5d81b486569c78f4a0d4d9..6a8de5924e8425d2a5901e92d0558674d98dec02 100644 (file)
@@ -3,6 +3,7 @@ package org.asamk.signal.manager.storage.groups;
 import org.asamk.signal.manager.api.GroupIdV2;
 import org.asamk.signal.manager.api.GroupInviteLinkUrl;
 import org.asamk.signal.manager.api.GroupPermission;
+import org.asamk.signal.manager.storage.recipients.RecipientAddress;
 import org.asamk.signal.manager.storage.recipients.RecipientId;
 import org.asamk.signal.manager.storage.recipients.RecipientResolver;
 import org.signal.libsignal.zkgroup.groups.GroupMasterKey;
@@ -114,7 +115,7 @@ public final class GroupInfoV2 extends GroupInfo {
         }
         return group.getMembersList()
                 .stream()
-                .map(m -> ServiceId.parseOrThrow(m.getUuid()))
+                .map(m -> ServiceId.parseOrThrow(m.getAciBytes()))
                 .map(recipientResolver::resolveRecipient)
                 .collect(Collectors.toSet());
     }
@@ -126,7 +127,7 @@ public final class GroupInfoV2 extends GroupInfo {
         }
         return group.getBannedMembersList()
                 .stream()
-                .map(m -> ServiceId.parseOrThrow(m.getServiceIdBinary()))
+                .map(m -> ServiceId.parseOrThrow(m.getServiceIdBytes()))
                 .map(recipientResolver::resolveRecipient)
                 .collect(Collectors.toSet());
     }
@@ -138,7 +139,7 @@ public final class GroupInfoV2 extends GroupInfo {
         }
         return group.getPendingMembersList()
                 .stream()
-                .map(m -> ServiceId.parseOrThrow(m.getServiceIdBinary()))
+                .map(m -> ServiceId.parseOrThrow(m.getServiceIdBytes()))
                 .map(recipientResolver::resolveRecipient)
                 .collect(Collectors.toSet());
     }
@@ -150,7 +151,7 @@ public final class GroupInfoV2 extends GroupInfo {
         }
         return group.getRequestingMembersList()
                 .stream()
-                .map(m -> ServiceId.parseOrThrow(m.getUuid()))
+                .map(m -> ServiceId.parseOrThrow(m.getAciBytes()))
                 .map(recipientResolver::resolveRecipient)
                 .collect(Collectors.toSet());
     }
@@ -163,7 +164,9 @@ public final class GroupInfoV2 extends GroupInfo {
         return group.getMembersList()
                 .stream()
                 .filter(m -> m.getRole() == Member.Role.ADMINISTRATOR)
-                .map(m -> ServiceId.parseOrThrow(m.getUuid()))
+                .map(m -> new RecipientAddress(ServiceId.ACI.parseOrNull(m.getAciBytes()),
+                        ServiceId.PNI.parseOrNull(m.getPniBytes()),
+                        null))
                 .map(recipientResolver::resolveRecipient)
                 .collect(Collectors.toSet());
     }
index 54fbba438674bf31d442410e8b93db9f78c49eb7..9ce660b205718f2b400463b2bf777be7963a5c7f 100644 (file)
@@ -208,4 +208,14 @@ public class KyberPreKeyStore implements SignalServiceKyberPreKeyStore {
             return null;
         }
     }
+
+    @Override
+    public void deleteAllStaleOneTimeKyberPreKeys(final long threshold, final int minCount) {
+        //TODO
+    }
+
+    @Override
+    public void markAllOneTimeKyberPreKeysStaleIfNecessary(final long staleTime) {
+        //TODO
+    }
 }
index e565e915761175d0d53e09df8aacea1ca2cab073..f042f0e28dd990170b5fe4632de7534aa2c663f7 100644 (file)
@@ -242,4 +242,24 @@ public class SignalProtocolStore implements SignalServiceAccountDataStore {
     public void storeLastResortKyberPreKey(final int i, final KyberPreKeyRecord kyberPreKeyRecord) {
         kyberPreKeyStore.storeLastResortKyberPreKey(i, kyberPreKeyRecord);
     }
+
+    @Override
+    public void deleteAllStaleOneTimeKyberPreKeys(final long threshold, final int minCount) {
+        kyberPreKeyStore.deleteAllStaleOneTimeKyberPreKeys(threshold, minCount);
+    }
+
+    @Override
+    public void markAllOneTimeKyberPreKeysStaleIfNecessary(final long staleTime) {
+        kyberPreKeyStore.markAllOneTimeKyberPreKeysStaleIfNecessary(staleTime);
+    }
+
+    @Override
+    public void deleteAllStaleOneTimeEcPreKeys(final long l, final int i) {
+        // TODO
+    }
+
+    @Override
+    public void markAllOneTimeEcPreKeysStaleIfNecessary(final long l) {
+        // TODO
+    }
 }
index 3abcefbb74dab43258c857f13a78046fe50eaa3b..a535d82ba0750c8cb809d570ccfd54d6658e8476 100644 (file)
@@ -57,7 +57,6 @@ public class AttachmentUtils {
                 blurHash,
                 null,
                 null,
-                resumableUploadSpec,
-                false);
+                resumableUploadSpec);
     }
 }
index b21930baff374aa68f1742874e6dce950804c462..d47e327254aa9febe3b57cbf3f5ef812872da08c 100644 (file)
@@ -16,7 +16,7 @@ dependencyResolutionManagement {
             library("logback", "ch.qos.logback", "logback-classic").version("1.4.11")
 
 
-            library("signalservice", "com.github.turasa", "signal-service-java").version("2.15.3_unofficial_78")
+            library("signalservice", "com.github.turasa", "signal-service-java").version("2.15.3_unofficial_79")
             library("protobuf", "com.google.protobuf", "protobuf-javalite").version("3.24.0")
             library("sqlite", "org.xerial", "sqlite-jdbc").version("3.42.0.1")
             library("hikari", "com.zaxxer", "HikariCP").version("5.0.1")