From ee39733978159646a087846cd064bc31506d6dd0 Mon Sep 17 00:00:00 2001 From: AsamK Date: Thu, 7 Mar 2024 17:44:19 +0100 Subject: [PATCH] Update libsignal-service --- .../org/asamk/signal/manager/api/Profile.java | 5 +---- .../asamk/signal/manager/config/LiveConfig.java | 7 +++++-- .../manager/config/ServiceEnvironmentConfig.java | 2 ++ .../signal/manager/config/StagingConfig.java | 7 +++++-- .../manager/helper/IncomingMessageHandler.java | 16 +--------------- .../signal/manager/helper/RecipientHelper.java | 1 + .../asamk/signal/manager/helper/SendHelper.java | 12 ------------ .../manager/internal/SignalDependencies.java | 3 ++- .../signal/manager/storage/SignalAccount.java | 3 --- .../storage/profiles/LegacySignalProfile.java | 2 +- .../asamk/signal/manager/util/ProfileUtils.java | 9 --------- settings.gradle.kts | 2 +- 12 files changed, 19 insertions(+), 50 deletions(-) diff --git a/lib/src/main/java/org/asamk/signal/manager/api/Profile.java b/lib/src/main/java/org/asamk/signal/manager/api/Profile.java index 3eb58a55..33117188 100644 --- a/lib/src/main/java/org/asamk/signal/manager/api/Profile.java +++ b/lib/src/main/java/org/asamk/signal/manager/api/Profile.java @@ -152,10 +152,7 @@ public class Profile { } public enum Capability { - storage, - gv1Migration, - senderKey, - announcementGroup; + storage; public static Capability valueOfOrNull(String value) { try { diff --git a/lib/src/main/java/org/asamk/signal/manager/config/LiveConfig.java b/lib/src/main/java/org/asamk/signal/manager/config/LiveConfig.java index 3c477299..2bbdfe19 100644 --- a/lib/src/main/java/org/asamk/signal/manager/config/LiveConfig.java +++ b/lib/src/main/java/org/asamk/signal/manager/config/LiveConfig.java @@ -1,5 +1,6 @@ package org.asamk.signal.manager.config; +import org.signal.libsignal.net.Network.Environment; import org.signal.libsignal.protocol.InvalidKeyException; import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECPublicKey; @@ -28,7 +29,6 @@ class LiveConfig { .decode("BXu6QIKVz5MA8gstzfOgRQGqyLqOwNKHL6INkv3IHWMF"); private static final String CDSI_MRENCLAVE = "0f6fd79cdfdaa5b2e6337f534d3baf999318b0c462a7ac1f41297a3e4b424a57"; private static final String SVR2_MRENCLAVE = "a6622ad4656e1abcd0bc0ff17c229477747d2ded0495c4ebee7ed35c1789fa97"; - private static final String SVR2_MRENCLAVE_DEPRECATED = "6ee1042f9e20f880326686dd4ba50c25359f01e9f733eeba4382bca001d45094"; private static final String URL = "https://chat.signal.org"; private static final String CDN_URL = "https://cdn.signal.org"; @@ -49,6 +49,8 @@ class LiveConfig { private static final byte[] backupServerPublicParams = Base64.getDecoder() .decode("AJwNSU55fsFCbgaxGRD11wO1juAs8Yr5GF8FPlGzzvdJJIKH5/4CC7ZJSOe3yL2vturVaRU2Cx0n751Vt8wkj1bozK3CBV1UokxV09GWf+hdVImLGjXGYLLhnI1J2TWEe7iWHyb553EEnRb5oxr9n3lUbNAJuRmFM7hrr0Al0F0wrDD4S8lo2mGaXe0MJCOM166F8oYRQqpFeEHfiLnxA1O8ZLh7vMdv4g9jI5phpRBTsJ5IjiJrWeP0zdIGHEssUeprDZ9OUJ14m0v61eYJMKsf59Bn+mAT2a7YfB+Don9O"); + private static Environment LIBSIGNAL_NET_ENV = Environment.PRODUCTION; + static SignalServiceConfiguration createDefaultServiceConfiguration( final List interceptors ) { @@ -78,10 +80,11 @@ class LiveConfig { static ServiceEnvironmentConfig getServiceEnvironmentConfig(List interceptors) { return new ServiceEnvironmentConfig(LIVE, + LIBSIGNAL_NET_ENV, createDefaultServiceConfiguration(interceptors), getUnidentifiedSenderTrustRoot(), CDSI_MRENCLAVE, - List.of(SVR2_MRENCLAVE, SVR2_MRENCLAVE_DEPRECATED)); + List.of(SVR2_MRENCLAVE)); } private LiveConfig() { diff --git a/lib/src/main/java/org/asamk/signal/manager/config/ServiceEnvironmentConfig.java b/lib/src/main/java/org/asamk/signal/manager/config/ServiceEnvironmentConfig.java index f4622064..8f9f8ce3 100644 --- a/lib/src/main/java/org/asamk/signal/manager/config/ServiceEnvironmentConfig.java +++ b/lib/src/main/java/org/asamk/signal/manager/config/ServiceEnvironmentConfig.java @@ -1,6 +1,7 @@ package org.asamk.signal.manager.config; import org.asamk.signal.manager.api.ServiceEnvironment; +import org.signal.libsignal.net.Network; import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration; @@ -8,6 +9,7 @@ import java.util.List; public record ServiceEnvironmentConfig( ServiceEnvironment type, + Network.Environment netEnvironment, SignalServiceConfiguration signalServiceConfiguration, ECPublicKey unidentifiedSenderTrustRoot, String cdsiMrenclave, diff --git a/lib/src/main/java/org/asamk/signal/manager/config/StagingConfig.java b/lib/src/main/java/org/asamk/signal/manager/config/StagingConfig.java index 83bb7be6..e99b049c 100644 --- a/lib/src/main/java/org/asamk/signal/manager/config/StagingConfig.java +++ b/lib/src/main/java/org/asamk/signal/manager/config/StagingConfig.java @@ -1,5 +1,6 @@ package org.asamk.signal.manager.config; +import org.signal.libsignal.net.Network; import org.signal.libsignal.protocol.InvalidKeyException; import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECPublicKey; @@ -28,7 +29,6 @@ class StagingConfig { .decode("BbqY1DzohE4NUZoVF+L18oUPrK3kILllLEJh2UnPSsEx"); private static final String CDSI_MRENCLAVE = "0f6fd79cdfdaa5b2e6337f534d3baf999318b0c462a7ac1f41297a3e4b424a57"; private static final String SVR2_MRENCLAVE = "acb1973aa0bbbd14b3b4e06f145497d948fd4a98efc500fcce363b3b743ec482"; - private static final String SVR2_MRENCLAVE_DEPRECATED = "a8a261420a6bb9b61aa25bf8a79e8bd20d7652531feb3381cbffd446d270be95"; private static final String URL = "https://chat.staging.signal.org"; private static final String CDN_URL = "https://cdn-staging.signal.org"; @@ -49,6 +49,8 @@ class StagingConfig { private static final byte[] backupServerPublicParams = Base64.getDecoder() .decode("AHYrGb9IfugAAJiPKp+mdXUx+OL9zBolPYHYQz6GI1gWjpEu5me3zVNSvmYY4zWboZHif+HG1sDHSuvwFd0QszSwuSF4X4kRP3fJREdTZ5MCR0n55zUppTwfHRW2S4sdQ0JGz7YDQIJCufYSKh0pGNEHL6hv79Agrdnr4momr3oXdnkpVBIp3HWAQ6IbXQVSG18X36GaicI1vdT0UFmTwU2KTneluC2eyL9c5ff8PcmiS+YcLzh0OKYQXB5ZfQ06d6DiINvDQLy75zcfUOniLAj0lGJiHxGczin/RXisKSR8"); + private static Network.Environment LIBSIGNAL_NET_ENV = Network.Environment.STAGING; + static SignalServiceConfiguration createDefaultServiceConfiguration( final List interceptors ) { @@ -78,10 +80,11 @@ class StagingConfig { static ServiceEnvironmentConfig getServiceEnvironmentConfig(List interceptors) { return new ServiceEnvironmentConfig(STAGING, + LIBSIGNAL_NET_ENV, createDefaultServiceConfiguration(interceptors), getUnidentifiedSenderTrustRoot(), CDSI_MRENCLAVE, - List.of(SVR2_MRENCLAVE, SVR2_MRENCLAVE_DEPRECATED)); + List.of(SVR2_MRENCLAVE)); } private StagingConfig() { diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java b/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java index f7b978ab..fbd719b9 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java @@ -22,7 +22,6 @@ import org.asamk.signal.manager.api.GroupId; import org.asamk.signal.manager.api.GroupNotFoundException; import org.asamk.signal.manager.api.MessageEnvelope; import org.asamk.signal.manager.api.Pair; -import org.asamk.signal.manager.api.Profile; import org.asamk.signal.manager.api.ReceiveConfig; import org.asamk.signal.manager.api.StickerPackId; import org.asamk.signal.manager.api.TrustLevel; @@ -161,24 +160,11 @@ public final class IncomingMessageHandler { if (context.getContactHelper().isContactBlocked(sender)) { logger.debug("Received invalid message from blocked contact, ignoring."); } else { - final var senderProfile = context.getProfileHelper().getRecipientProfile(sender); - final var selfProfile = context.getProfileHelper().getSelfProfile(); var serviceId = ServiceId.parseOrNull(e.getSender()); - if (serviceId == null) { - // Workaround for libsignal-client issue #492 - serviceId = account.getRecipientAddressResolver() - .resolveRecipientAddress(sender) - .serviceId() - .orElse(null); - } if (serviceId != null) { final var isSelf = sender.equals(account.getSelfRecipientId()) && e.getSenderDevice() == account.getDeviceId(); - final var isSenderSenderKeyCapable = senderProfile != null && senderProfile.getCapabilities() - .contains(Profile.Capability.senderKey); - final var isSelfSenderKeyCapable = selfProfile != null && selfProfile.getCapabilities() - .contains(Profile.Capability.senderKey); - if (!isSelf && isSenderSenderKeyCapable && isSelfSenderKeyCapable) { + if (!isSelf) { logger.debug("Received invalid message, requesting message resend."); actions.add(new SendRetryMessageRequestAction(sender, serviceId, e, envelope, destination)); } else { diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/RecipientHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/RecipientHelper.java index 947c251b..905bbd5a 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/RecipientHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/RecipientHelper.java @@ -213,6 +213,7 @@ public class RecipientHelper { token, serviceEnvironmentConfig.cdsiMrenclave(), null, + dependencies.getServiceEnvironmentConfig().netEnvironment(), newToken -> { if (isPartialRefresh) { account.getCdsiStore().updateAfterPartialCdsQuery(newNumbers); diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/SendHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/SendHelper.java index d3068fc4..a066c851 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/SendHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/SendHelper.java @@ -523,21 +523,9 @@ public class SendHelper { } private Set getSenderKeyCapableRecipientIds(final Set recipientIds) { - final var selfProfile = context.getProfileHelper().getSelfProfile(); - if (selfProfile == null || !selfProfile.getCapabilities().contains(Profile.Capability.senderKey)) { - logger.debug("Not all of our devices support sender key. Using legacy."); - return Set.of(); - } - final var senderKeyTargets = new HashSet(); final var recipientList = new ArrayList<>(recipientIds); - final var profiles = context.getProfileHelper().getRecipientProfiles(recipientList).iterator(); for (final var recipientId : recipientList) { - final var profile = profiles.next(); - if (profile == null || !profile.getCapabilities().contains(Profile.Capability.senderKey)) { - continue; - } - final var access = context.getUnidentifiedAccessHelper().getAccessFor(recipientId); if (access.isEmpty() || access.get().getTargetUnidentifiedAccess().isEmpty()) { continue; diff --git a/lib/src/main/java/org/asamk/signal/manager/internal/SignalDependencies.java b/lib/src/main/java/org/asamk/signal/manager/internal/SignalDependencies.java index 9488c75e..561534c5 100644 --- a/lib/src/main/java/org/asamk/signal/manager/internal/SignalDependencies.java +++ b/lib/src/main/java/org/asamk/signal/manager/internal/SignalDependencies.java @@ -189,7 +189,8 @@ public class SignalDependencies { Optional.empty(), executor, ServiceConfig.MAX_ENVELOPE_SIZE, - pushServiceSocket)); + pushServiceSocket, + false)); } public List getSecureValueRecoveryV2() { diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java b/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java index e8f2db45..0076f314 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java @@ -895,9 +895,6 @@ public class SignalAccount implements Closeable { if (profile != null) { final var capabilities = new HashSet(); if (profile.getCapabilities() != null) { - if (profile.getCapabilities().gv1Migration) { - capabilities.add(Profile.Capability.gv1Migration); - } if (profile.getCapabilities().storage) { capabilities.add(Profile.Capability.storage); } diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/profiles/LegacySignalProfile.java b/lib/src/main/java/org/asamk/signal/manager/storage/profiles/LegacySignalProfile.java index e3e18b1e..4114df60 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/profiles/LegacySignalProfile.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/profiles/LegacySignalProfile.java @@ -94,7 +94,7 @@ public class LegacySignalProfile { @JsonProperty public boolean storage; - @JsonProperty + @JsonIgnore public boolean gv1Migration; } } diff --git a/lib/src/main/java/org/asamk/signal/manager/util/ProfileUtils.java b/lib/src/main/java/org/asamk/signal/manager/util/ProfileUtils.java index 85c9fdd6..82ffc861 100644 --- a/lib/src/main/java/org/asamk/signal/manager/util/ProfileUtils.java +++ b/lib/src/main/java/org/asamk/signal/manager/util/ProfileUtils.java @@ -76,18 +76,9 @@ public class ProfileUtils { public static HashSet getCapabilities(final SignalServiceProfile encryptedProfile) { final var capabilities = new HashSet(); - if (encryptedProfile.getCapabilities().isGv1Migration()) { - capabilities.add(Profile.Capability.gv1Migration); - } if (encryptedProfile.getCapabilities().isStorage()) { capabilities.add(Profile.Capability.storage); } - if (encryptedProfile.getCapabilities().isSenderKey()) { - capabilities.add(Profile.Capability.senderKey); - } - if (encryptedProfile.getCapabilities().isAnnouncementGroup()) { - capabilities.add(Profile.Capability.announcementGroup); - } return capabilities; } diff --git a/settings.gradle.kts b/settings.gradle.kts index a98ac404..b219a1ea 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -15,7 +15,7 @@ dependencyResolutionManagement { library("slf4j.jul", "org.slf4j", "jul-to-slf4j").versionRef("slf4j") library("logback", "ch.qos.logback", "logback-classic").version("1.5.0") - library("signalservice", "com.github.turasa", "signal-service-java").version("2.15.3_unofficial_97") + library("signalservice", "com.github.turasa", "signal-service-java").version("2.15.3_unofficial_98") library("sqlite", "org.xerial", "sqlite-jdbc").version("3.45.1.0") library("hikari", "com.zaxxer", "HikariCP").version("5.1.0") library("junit.jupiter", "org.junit.jupiter", "junit-jupiter").version("5.10.2") -- 2.50.1