]> nmode's Git Repositories - signal-cli/commitdiff
Update libsignal-service-java
authorAsamK <asamk@gmx.de>
Sat, 12 Jun 2021 14:22:21 +0000 (16:22 +0200)
committerAsamK <asamk@gmx.de>
Sat, 12 Jun 2021 14:22:51 +0000 (16:22 +0200)
CHANGELOG.md
graalvm-config-dir/reflect-config.json
lib/build.gradle.kts
lib/src/main/java/org/asamk/signal/manager/Manager.java
lib/src/main/java/org/asamk/signal/manager/config/ServiceConfig.java
lib/src/main/java/org/asamk/signal/manager/storage/protocol/SignalProtocolStore.java
lib/src/main/java/org/asamk/signal/manager/storage/recipients/Profile.java
lib/src/main/java/org/asamk/signal/manager/storage/sessions/SessionStore.java
lib/src/main/java/org/asamk/signal/manager/util/ProfileUtils.java

index 8dae42af9200486fff96a8bcacf77d7bdb8b249e..a4667d60d07ee3535e2e6093a54ea1c4736c8416 100644 (file)
@@ -1,7 +1,7 @@
 # Changelog
 
 ## [Unreleased]
-**Attention**: Now requires native libsignal-client version 0.5.1
+**Attention**: Now requires native libsignal-client version 0.8.1
 
 ### Added
 - Added new parameters to `updateGroup` for group v2 features:
index 2660230d359137294246adee88fbd0d943287a58..0f10babc58f42f3f4a83f70cc0ebceb77c430143 100644 (file)
     {"name":"bitField0_", "allowUnsafeAccess":true}, 
     {"name":"callMessage_", "allowUnsafeAccess":true}, 
     {"name":"dataMessage_", "allowUnsafeAccess":true}, 
+    {"name":"decryptionErrorMessage_", "allowUnsafeAccess":true}, 
     {"name":"nullMessage_", "allowUnsafeAccess":true}, 
     {"name":"receiptMessage_", "allowUnsafeAccess":true}, 
+    {"name":"senderKeyDistributionMessage_", "allowUnsafeAccess":true}, 
     {"name":"syncMessage_", "allowUnsafeAccess":true}, 
     {"name":"typingMessage_", "allowUnsafeAccess":true}
   ]
   "fields":[
     {"name":"address_", "allowUnsafeAccess":true}, 
     {"name":"bitField0_", "allowUnsafeAccess":true}, 
+    {"name":"groupId_", "allowUnsafeAccess":true}, 
     {"name":"needsReceipt_", "allowUnsafeAccess":true}, 
     {"name":"senderDevice_", "allowUnsafeAccess":true}, 
     {"name":"serverDeliveredTimestamp_", "allowUnsafeAccess":true}, 
index 0b385f82b2d5fca96186da498addc2e29a7c13d9..1fa399d065a6ee6a6ddc25e5db93665282f47ee8 100644 (file)
@@ -14,7 +14,7 @@ repositories {
 }
 
 dependencies {
-    api("com.github.turasa:signal-service-java:2.15.3_unofficial_23")
+    api("com.github.turasa:signal-service-java:2.15.3_unofficial_24")
     implementation("com.google.protobuf:protobuf-javalite:3.10.0")
     implementation("org.bouncycastle:bcprov-jdk15on:1.68")
     implementation("org.slf4j:slf4j-api:1.7.30")
index 55b57828eda9581904655ce4ea34532f48b706da..994d1e61f08c43cff730577b9c6fae5b7fe10b91 100644 (file)
@@ -87,6 +87,7 @@ import org.whispersystems.signalservice.api.SignalServiceMessagePipe;
 import org.whispersystems.signalservice.api.SignalServiceMessageReceiver;
 import org.whispersystems.signalservice.api.SignalServiceMessageSender;
 import org.whispersystems.signalservice.api.SignalSessionLock;
+import org.whispersystems.signalservice.api.crypto.ContentHint;
 import org.whispersystems.signalservice.api.crypto.SignalServiceCipher;
 import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException;
 import org.whispersystems.signalservice.api.groupsv2.ClientZkOperations;
@@ -1534,7 +1535,7 @@ public class Manager implements Closeable {
 
     private void sendSyncMessage(SignalServiceSyncMessage message) throws IOException, UntrustedIdentityException {
         var messageSender = createMessageSender();
-        messageSender.sendMessage(message, unidentifiedAccessHelper.getAccessForSync());
+        messageSender.sendSyncMessage(message, unidentifiedAccessHelper.getAccessForSync());
     }
 
     private Set<RecipientId> getSignalServiceAddresses(Collection<String> numbers) throws InvalidNumberException {
@@ -1614,9 +1615,10 @@ public class Manager implements Closeable {
                     final var addresses = recipientIdList.stream()
                             .map(this::resolveSignalServiceAddress)
                             .collect(Collectors.toList());
-                    var result = messageSender.sendMessage(addresses,
+                    var result = messageSender.sendDataMessage(addresses,
                             unidentifiedAccessHelper.getAccessFor(recipientIdList),
                             isRecipientUpdate,
+                            ContentHint.DEFAULT,
                             message);
 
                     for (var r : result) {
@@ -1691,7 +1693,7 @@ public class Manager implements Closeable {
 
         try {
             var startTime = System.currentTimeMillis();
-            messageSender.sendMessage(syncMessage, unidentifiedAccess);
+            messageSender.sendSyncMessage(syncMessage, unidentifiedAccess);
             return SendMessageResult.success(recipient,
                     unidentifiedAccess.isPresent(),
                     false,
@@ -1709,11 +1711,15 @@ public class Manager implements Closeable {
         final var address = resolveSignalServiceAddress(recipientId);
         try {
             try {
-                return messageSender.sendMessage(address, unidentifiedAccessHelper.getAccessFor(recipientId), message);
+                return messageSender.sendDataMessage(address,
+                        unidentifiedAccessHelper.getAccessFor(recipientId),
+                        ContentHint.DEFAULT,
+                        message);
             } catch (UnregisteredUserException e) {
                 final var newRecipientId = refreshRegisteredUser(recipientId);
-                return messageSender.sendMessage(resolveSignalServiceAddress(newRecipientId),
+                return messageSender.sendDataMessage(resolveSignalServiceAddress(newRecipientId),
                         unidentifiedAccessHelper.getAccessFor(newRecipientId),
+                        ContentHint.DEFAULT,
                         message);
             }
         } catch (UntrustedIdentityException e) {
index c3314f75ddee9b0b3382444428280a5d9e84723a..9e0a437559e6be0c3e699a45380b6bedce7ec3ea 100644 (file)
@@ -34,7 +34,7 @@ public class ServiceConfig {
         } catch (Throwable ignored) {
             zkGroupAvailable = false;
         }
-        capabilities = new AccountAttributes.Capabilities(false, zkGroupAvailable, false, zkGroupAvailable);
+        capabilities = new AccountAttributes.Capabilities(false, zkGroupAvailable, false, zkGroupAvailable, false);
 
         try {
             TrustStore contactTrustStore = new IasTrustStore();
index e308bb6660e93be5d4e78d2e4783e51b8c49d128..5e504ec6f5183ebf7febc069c5a41748a4548430 100644 (file)
@@ -3,6 +3,7 @@ package org.asamk.signal.manager.storage.protocol;
 import org.whispersystems.libsignal.IdentityKey;
 import org.whispersystems.libsignal.IdentityKeyPair;
 import org.whispersystems.libsignal.InvalidKeyIdException;
+import org.whispersystems.libsignal.NoSessionException;
 import org.whispersystems.libsignal.SignalProtocolAddress;
 import org.whispersystems.libsignal.groups.state.SenderKeyRecord;
 import org.whispersystems.libsignal.state.IdentityKeyStore;
@@ -13,8 +14,11 @@ import org.whispersystems.libsignal.state.SignedPreKeyRecord;
 import org.whispersystems.libsignal.state.SignedPreKeyStore;
 import org.whispersystems.signalservice.api.SignalServiceProtocolStore;
 import org.whispersystems.signalservice.api.SignalServiceSessionStore;
+import org.whispersystems.signalservice.api.push.DistributionId;
 
+import java.util.Collection;
 import java.util.List;
+import java.util.Set;
 import java.util.UUID;
 
 public class SignalProtocolStore implements SignalServiceProtocolStore {
@@ -86,6 +90,11 @@ public class SignalProtocolStore implements SignalServiceProtocolStore {
         return sessionStore.loadSession(address);
     }
 
+    @Override
+    public List<SessionRecord> loadExistingSessions(final List<SignalProtocolAddress> addresses) throws NoSessionException {
+        return sessionStore.loadExistingSessions(addresses);
+    }
+
     @Override
     public List<Integer> getSubDeviceSessions(String name) {
         return sessionStore.getSubDeviceSessions(name);
@@ -145,10 +154,32 @@ public class SignalProtocolStore implements SignalServiceProtocolStore {
     public void storeSenderKey(
             final SignalProtocolAddress sender, final UUID distributionId, final SenderKeyRecord record
     ) {
+        // TODO
     }
 
     @Override
     public SenderKeyRecord loadSenderKey(final SignalProtocolAddress sender, final UUID distributionId) {
+        // TODO
+        return null;
+    }
+
+    @Override
+    public Set<SignalProtocolAddress> getSenderKeySharedWith(final DistributionId distributionId) {
+        // TODO
         return null;
     }
+
+    @Override
+    public void markSenderKeySharedWith(
+            final DistributionId distributionId, final Collection<SignalProtocolAddress> addresses
+    ) {
+        // TODO
+    }
+
+    @Override
+    public void clearSenderKeySharedWith(
+            final DistributionId distributionId, final Collection<SignalProtocolAddress> addresses
+    ) {
+        // TODO
+    }
 }
index dcdc896410be43d1f2864f6084c5c11d784eb8ef..87828953fa54db2b819685675ea87c553a60fbb6 100644 (file)
@@ -133,7 +133,8 @@ public class Profile {
     public enum Capability {
         gv2,
         storage,
-        gv1Migration;
+        gv1Migration,
+        senderKey;
 
         static Capability valueOfOrNull(String value) {
             try {
index 3e5555f49afd2bb381c269b6b3fbe5e9bc569077..ef0a055bfe4f0a46c4af79777696fd2614c10d06 100644 (file)
@@ -6,6 +6,7 @@ import org.asamk.signal.manager.util.IOUtils;
 import org.asamk.signal.manager.util.Utils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.whispersystems.libsignal.NoSessionException;
 import org.whispersystems.libsignal.SignalProtocolAddress;
 import org.whispersystems.libsignal.protocol.CiphertextMessage;
 import org.whispersystems.libsignal.state.SessionRecord;
@@ -21,6 +22,7 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -55,6 +57,30 @@ public class SessionStore implements SignalServiceSessionStore {
         }
     }
 
+    @Override
+    public List<SessionRecord> loadExistingSessions(final List<SignalProtocolAddress> addresses) throws NoSessionException {
+        final var keys = addresses.stream().map(this::getKey).collect(Collectors.toList());
+
+        synchronized (cachedSessions) {
+            final var sessions = keys.stream()
+                    .map(this::loadSessionLocked)
+                    .filter(Objects::nonNull)
+                    .collect(Collectors.toList());
+
+            if (sessions.size() != addresses.size()) {
+                String message = "Mismatch! Asked for "
+                        + addresses.size()
+                        + " sessions, but only found "
+                        + sessions.size()
+                        + "!";
+                logger.warn(message);
+                throw new NoSessionException(message);
+            }
+
+            return sessions;
+        }
+    }
+
     @Override
     public List<Integer> getSubDeviceSessions(String name) {
         final var recipientId = resolveRecipient(name);
index 814bd7fa397010d059857619af0682ee58dbc303..213f516c2ca564e963210af7631c2cbb01f14911 100644 (file)
@@ -62,6 +62,9 @@ public class ProfileUtils {
         if (encryptedProfile.getCapabilities().isStorage()) {
             capabilities.add(Profile.Capability.storage);
         }
+        if (encryptedProfile.getCapabilities().isSenderKey()) {
+            capabilities.add(Profile.Capability.senderKey);
+        }
         return capabilities;
     }