From 6e61bc2000a587a542427fc05f15142c6e0e2d5c Mon Sep 17 00:00:00 2001 From: AsamK Date: Thu, 18 May 2023 11:00:22 +0200 Subject: [PATCH] Update dependencies --- CHANGELOG.md | 1 + graalvm-config-dir/jni-config.json | 3 ++ graalvm-config-dir/reflect-config.json | 7 ++++- graalvm-config-dir/resource-config.json | 8 ++--- .../actions/SendPniIdentityKeyAction.java | 20 ------------ .../signal/manager/config/ServiceConfig.java | 12 +------ .../signal/manager/helper/IdentityHelper.java | 2 +- .../helper/IncomingMessageHandler.java | 11 ------- .../signal/manager/helper/PinHelper.java | 6 ++-- .../signal/manager/helper/SyncHelper.java | 11 ------- .../helper/UnidentifiedAccessHelper.java | 8 +++-- .../storage/protocol/SignalProtocolStore.java | 29 +++++++++++++++++ .../asamk/signal/manager/util/PinHashing.java | 31 ------------------- settings.gradle.kts | 4 +-- 14 files changed, 55 insertions(+), 98 deletions(-) delete mode 100644 lib/src/main/java/org/asamk/signal/manager/actions/SendPniIdentityKeyAction.java delete mode 100644 lib/src/main/java/org/asamk/signal/manager/util/PinHashing.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 011fedc5..fe72cadf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Changelog ## [Unreleased] +**Attention**: Now requires native libsignal-client version 0.24.0 ## [0.11.10] - 2023-05-11 **Attention**: Now requires native libsignal-client version 0.23.1 diff --git a/graalvm-config-dir/jni-config.json b/graalvm-config-dir/jni-config.json index 9f1cab28..98c05c7c 100644 --- a/graalvm-config-dir/jni-config.json +++ b/graalvm-config-dir/jni-config.json @@ -170,6 +170,9 @@ {"name":"SENDING"} ] }, +{ + "name":"org.signal.libsignal.protocol.state.KyberPreKeyStore" +}, { "name":"org.signal.libsignal.protocol.state.PreKeyRecord", "fields":[{"name":"unsafeHandle"}] diff --git a/graalvm-config-dir/reflect-config.json b/graalvm-config-dir/reflect-config.json index f4a975bc..5ace3d39 100644 --- a/graalvm-config-dir/reflect-config.json +++ b/graalvm-config-dir/reflect-config.json @@ -1142,7 +1142,12 @@ "name":"org.asamk.signal.json.JsonTypingMessage", "allDeclaredFields":true, "allDeclaredMethods":true, - "allDeclaredConstructors":true + "allDeclaredConstructors":true, + "methods":[ + {"name":"action","parameterTypes":[] }, + {"name":"groupId","parameterTypes":[] }, + {"name":"timestamp","parameterTypes":[] } + ] }, { "name":"org.asamk.signal.jsonrpc.JsonRpcBatchMessage", diff --git a/graalvm-config-dir/resource-config.json b/graalvm-config-dir/resource-config.json index bd88f0bc..2ebe8973 100644 --- a/graalvm-config-dir/resource-config.json +++ b/graalvm-config-dir/resource-config.json @@ -211,14 +211,11 @@ { "pattern":"\\Qjni/x86_64-Linux/libjffi-1.2.so\\E" }, - { - "pattern":"\\Qlibsignal_jni.so\\E" - }, { "pattern":"\\Qlibsignal_jni.dylib\\E" }, { - "pattern":"\\Qsignal_jni.dll\\E" + "pattern":"\\Qlibsignal_jni.so\\E" }, { "pattern":"\\Qorg/asamk/signal/manager/config/ias.store\\E" @@ -232,6 +229,9 @@ { "pattern":"\\Qorg/sqlite/native/Linux/x86_64/libsqlitejdbc.so\\E" }, + { + "pattern":"\\Qsignal_jni.dll\\E" + }, { "pattern":"\\Qsqlite-jdbc.properties\\E" }, diff --git a/lib/src/main/java/org/asamk/signal/manager/actions/SendPniIdentityKeyAction.java b/lib/src/main/java/org/asamk/signal/manager/actions/SendPniIdentityKeyAction.java deleted file mode 100644 index fe70a661..00000000 --- a/lib/src/main/java/org/asamk/signal/manager/actions/SendPniIdentityKeyAction.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.asamk.signal.manager.actions; - -import org.asamk.signal.manager.helper.Context; - -public class SendPniIdentityKeyAction implements HandleAction { - - private static final SendPniIdentityKeyAction INSTANCE = new SendPniIdentityKeyAction(); - - private SendPniIdentityKeyAction() { - } - - public static SendPniIdentityKeyAction create() { - return INSTANCE; - } - - @Override - public void execute(Context context) throws Throwable { - context.getSyncHelper().sendPniIdentity(); - } -} diff --git a/lib/src/main/java/org/asamk/signal/manager/config/ServiceConfig.java b/lib/src/main/java/org/asamk/signal/manager/config/ServiceConfig.java index c56d9e86..7100c326 100644 --- a/lib/src/main/java/org/asamk/signal/manager/config/ServiceConfig.java +++ b/lib/src/main/java/org/asamk/signal/manager/config/ServiceConfig.java @@ -44,17 +44,7 @@ public class ServiceConfig { public static AccountAttributes.Capabilities getCapabilities(boolean isPrimaryDevice) { final var giftBadges = !isPrimaryDevice; - return new AccountAttributes.Capabilities(false, - true, - false, - true, - true, - true, - true, - true, - giftBadges, - false, - false); + return new AccountAttributes.Capabilities(false, true, true, true, true, giftBadges, false, false); } public static boolean isSignalClientAvailable() { diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/IdentityHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/IdentityHelper.java index c9cfaedc..c150abed 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/IdentityHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/IdentityHelper.java @@ -73,7 +73,7 @@ public class IdentityHelper { final var recipientId = account.getRecipientResolver().resolveRecipient(serviceId); final var address = account.getRecipientAddressResolver().resolveRecipientAddress(recipientId); - if (account.getAccountCapabilities().getUuid()) { + if (false) { if (serviceId.isUnknown()) { return null; } 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 5261ad73..d0a6a5c0 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 @@ -10,7 +10,6 @@ import org.asamk.signal.manager.actions.RetrieveProfileAction; import org.asamk.signal.manager.actions.RetrieveStorageDataAction; import org.asamk.signal.manager.actions.SendGroupInfoAction; import org.asamk.signal.manager.actions.SendGroupInfoRequestAction; -import org.asamk.signal.manager.actions.SendPniIdentityKeyAction; import org.asamk.signal.manager.actions.SendProfileKeyAction; import org.asamk.signal.manager.actions.SendReceiptAction; import org.asamk.signal.manager.actions.SendRetryMessageRequestAction; @@ -35,7 +34,6 @@ import org.asamk.signal.manager.storage.groups.GroupInfoV1; import org.asamk.signal.manager.storage.recipients.Profile; import org.asamk.signal.manager.storage.recipients.RecipientId; import org.asamk.signal.manager.storage.stickers.StickerPack; -import org.asamk.signal.manager.util.KeyUtils; import org.signal.libsignal.metadata.ProtocolInvalidKeyException; import org.signal.libsignal.metadata.ProtocolInvalidKeyIdException; import org.signal.libsignal.metadata.ProtocolInvalidMessageException; @@ -525,9 +523,6 @@ public final class IncomingMessageHandler { if (rm.isConfigurationRequest()) { actions.add(SendSyncConfigurationAction.create()); } - if (rm.isPniIdentityRequest()) { - actions.add(SendPniIdentityKeyAction.create()); - } } if (syncMessage.getGroups().isPresent()) { try { @@ -631,12 +626,6 @@ public final class IncomingMessageHandler { .get()); } } - if (syncMessage.getPniIdentity().isPresent()) { - final var pniIdentity = syncMessage.getPniIdentity().get(); - account.setPniIdentityKeyPair(KeyUtils.getIdentityKeyPair(pniIdentity.getPublicKey().toByteArray(), - pniIdentity.getPrivateKey().toByteArray())); - actions.add(RefreshPreKeysAction.create()); - } if (syncMessage.getPniChangeNumber().isPresent()) { final var pniChangeNumber = syncMessage.getPniChangeNumber().get(); logger.debug("Received PNI change number sync message, applying."); diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/PinHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/PinHelper.java index 6b925c69..6bc3978f 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/PinHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/PinHelper.java @@ -2,7 +2,6 @@ package org.asamk.signal.manager.helper; import org.asamk.signal.manager.api.IncorrectPinException; import org.asamk.signal.manager.api.Pair; -import org.asamk.signal.manager.util.PinHashing; import org.signal.libsignal.protocol.InvalidKeyException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -11,6 +10,7 @@ import org.whispersystems.signalservice.api.KeyBackupService; import org.whispersystems.signalservice.api.KeyBackupServicePinException; import org.whispersystems.signalservice.api.KeyBackupSystemNoDataException; import org.whispersystems.signalservice.api.kbs.MasterKey; +import org.whispersystems.signalservice.api.kbs.PinHashUtil; import org.whispersystems.signalservice.internal.contacts.crypto.UnauthenticatedResponseException; import org.whispersystems.signalservice.internal.contacts.entities.TokenResponse; import org.whispersystems.signalservice.internal.push.LockedException; @@ -37,7 +37,7 @@ public class PinHelper { String pin, MasterKey masterKey ) throws IOException { final var pinChangeSession = keyBackupService.newPinChangeSession(); - final var hashedPin = PinHashing.hashPin(pin, pinChangeSession); + final var hashedPin = PinHashUtil.hashPin(pin, pinChangeSession.hashSalt()); try { pinChangeSession.setPin(hashedPin, masterKey); @@ -128,7 +128,7 @@ public class PinHelper { var session = keyBackupService.newRegistrationSession(basicStorageCredentials, tokenResponse); try { - var hashedPin = PinHashing.hashPin(pin, session); + var hashedPin = PinHashUtil.hashPin(pin, session.hashSalt()); var kbsData = session.restorePin(hashedPin); if (kbsData == null) { throw new AssertionError("Null not expected"); diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/SyncHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/SyncHelper.java index bad2efce..a005f07d 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/SyncHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/SyncHelper.java @@ -1,7 +1,5 @@ package org.asamk.signal.manager.helper; -import com.google.protobuf.ByteString; - import org.asamk.signal.manager.api.TrustLevel; import org.asamk.signal.manager.groups.GroupId; import org.asamk.signal.manager.storage.SignalAccount; @@ -233,15 +231,6 @@ public class SyncHelper { context.getSendHelper().sendSyncMessage(SignalServiceSyncMessage.forConfiguration(configurationMessage)); } - public void sendPniIdentity() { - final var pniIdentityKeyPair = account.getPniIdentityKeyPair(); - var pniIdentity = SignalServiceProtos.SyncMessage.PniIdentity.newBuilder() - .setPrivateKey(ByteString.copyFrom(pniIdentityKeyPair.getPrivateKey().serialize())) - .setPublicKey(ByteString.copyFrom(pniIdentityKeyPair.getPublicKey().serialize())) - .build(); - context.getSendHelper().sendSyncMessage(SignalServiceSyncMessage.forPniIdentity(pniIdentity)); - } - public void handleSyncDeviceGroups(final InputStream input) { final var s = new DeviceGroupsInputStream(input); DeviceGroup g; diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/UnidentifiedAccessHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/UnidentifiedAccessHelper.java index 0f0da15c..92031576 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/UnidentifiedAccessHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/UnidentifiedAccessHelper.java @@ -71,7 +71,8 @@ public class UnidentifiedAccessHelper { try { return Optional.of(new UnidentifiedAccessPair(new UnidentifiedAccess(recipientUnidentifiedAccessKey, - senderCertificate), new UnidentifiedAccess(selfUnidentifiedAccessKey, senderCertificate))); + senderCertificate, + false), new UnidentifiedAccess(selfUnidentifiedAccessKey, senderCertificate, false))); } catch (InvalidCertificateException e) { return Optional.empty(); } @@ -87,8 +88,9 @@ public class UnidentifiedAccessHelper { try { return Optional.of(new UnidentifiedAccessPair(new UnidentifiedAccess(selfUnidentifiedAccessKey, - selfUnidentifiedAccessCertificate), - new UnidentifiedAccess(selfUnidentifiedAccessKey, selfUnidentifiedAccessCertificate))); + selfUnidentifiedAccessCertificate, + false), + new UnidentifiedAccess(selfUnidentifiedAccessKey, selfUnidentifiedAccessCertificate, false))); } catch (InvalidCertificateException e) { return Optional.empty(); } diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/protocol/SignalProtocolStore.java b/lib/src/main/java/org/asamk/signal/manager/storage/protocol/SignalProtocolStore.java index f804bc6d..223f39fc 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/protocol/SignalProtocolStore.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/protocol/SignalProtocolStore.java @@ -7,6 +7,7 @@ import org.signal.libsignal.protocol.NoSessionException; import org.signal.libsignal.protocol.SignalProtocolAddress; import org.signal.libsignal.protocol.groups.state.SenderKeyRecord; import org.signal.libsignal.protocol.state.IdentityKeyStore; +import org.signal.libsignal.protocol.state.KyberPreKeyRecord; import org.signal.libsignal.protocol.state.PreKeyRecord; import org.signal.libsignal.protocol.state.PreKeyStore; import org.signal.libsignal.protocol.state.SessionRecord; @@ -197,4 +198,32 @@ public class SignalProtocolStore implements SignalServiceAccountDataStore { public boolean isMultiDevice() { return isMultiDevice.get(); } + + @Override + public KyberPreKeyRecord loadKyberPreKey(final int kyberPreKeyId) throws InvalidKeyIdException { + // TODO + throw new InvalidKeyIdException("Missing kyber prekey with ID: $kyberPreKeyId"); + } + + @Override + public List loadKyberPreKeys() { + // TODO + return List.of(); + } + + @Override + public void storeKyberPreKey(final int kyberPreKeyId, final KyberPreKeyRecord record) { + // TODO + } + + @Override + public boolean containsKyberPreKey(final int kyberPreKeyId) { + // TODO + return false; + } + + @Override + public void markKyberPreKeyUsed(final int kyberPreKeyId) { + // TODO + } } diff --git a/lib/src/main/java/org/asamk/signal/manager/util/PinHashing.java b/lib/src/main/java/org/asamk/signal/manager/util/PinHashing.java deleted file mode 100644 index 5dc5a5bc..00000000 --- a/lib/src/main/java/org/asamk/signal/manager/util/PinHashing.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.asamk.signal.manager.util; - -import org.bouncycastle.crypto.generators.Argon2BytesGenerator; -import org.bouncycastle.crypto.params.Argon2Parameters; -import org.whispersystems.signalservice.api.KeyBackupService; -import org.whispersystems.signalservice.api.kbs.HashedPin; -import org.whispersystems.signalservice.internal.registrationpin.PinHasher; - -public final class PinHashing { - - private PinHashing() { - } - - public static HashedPin hashPin(String pin, KeyBackupService.HashSession hashSession) { - final var params = new Argon2Parameters.Builder(Argon2Parameters.ARGON2_id).withParallelism(1) - .withIterations(32) - .withVersion(Argon2Parameters.ARGON2_VERSION_13) - .withMemoryAsKB(16 * 1024) - .withSalt(hashSession.hashSalt()) - .build(); - - final var generator = new Argon2BytesGenerator(); - generator.init(params); - - return PinHasher.hashPin(PinHasher.normalize(pin), password -> { - var output = new byte[64]; - generator.generateBytes(password, output); - return output; - }); - } -} diff --git a/settings.gradle.kts b/settings.gradle.kts index 5bf0bc99..45a40d11 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,7 +7,7 @@ dependencyResolutionManagement { versionCatalogs { create("libs") { library("bouncycastle", "org.bouncycastle", "bcprov-jdk15on").version("1.70") - library("jackson.databind", "com.fasterxml.jackson.core", "jackson-databind").version("2.15.0") + library("jackson.databind", "com.fasterxml.jackson.core", "jackson-databind").version("2.15.1") library("argparse4j", "net.sourceforge.argparse4j", "argparse4j").version("0.9.0") library("dbusjava", "com.github.hypfvieh", "dbus-java-transport-native-unixsocket").version("4.3.0") version("slf4j", "2.0.7") @@ -16,7 +16,7 @@ dependencyResolutionManagement { library("logback", "ch.qos.logback", "logback-classic").version("1.4.7") - library("signalservice", "com.github.turasa", "signal-service-java").version("2.15.3_unofficial_70") + library("signalservice", "com.github.turasa", "signal-service-java").version("2.15.3_unofficial_71") library("protobuf", "com.google.protobuf", "protobuf-javalite").version("3.23.0") library("sqlite", "org.xerial", "sqlite-jdbc").version("3.41.2.1") library("hikari", "com.zaxxer", "HikariCP").version("5.0.1") -- 2.50.1