Bump to libsignal v0.71.0.

This commit is contained in:
andrew-signal
2025-05-05 09:05:58 -05:00
committed by Michelle Tang
parent a2a3dd28ee
commit 9b9888565b
10 changed files with 37 additions and 25 deletions

View File

@@ -9,6 +9,7 @@ import org.signal.libsignal.protocol.SignalProtocolAddress
import org.signal.libsignal.protocol.ecc.ECKeyPair
import org.signal.libsignal.protocol.groups.state.SenderKeyRecord
import org.signal.libsignal.protocol.state.IdentityKeyStore
import org.signal.libsignal.protocol.state.IdentityKeyStore.IdentityChange
import org.signal.libsignal.protocol.state.KyberPreKeyRecord
import org.signal.libsignal.protocol.state.PreKeyBundle
import org.signal.libsignal.protocol.state.PreKeyRecord
@@ -137,7 +138,7 @@ class BobClient(val serviceId: ServiceId, val e164: String, val identityKeyPair:
override fun getLocalRegistrationId(): Int = registrationId
override fun isTrustedIdentity(address: SignalProtocolAddress?, identityKey: IdentityKey?, direction: IdentityKeyStore.Direction?): Boolean = true
override fun loadSession(address: SignalProtocolAddress?): SessionRecord = aliceSessionRecord ?: SessionRecord()
override fun saveIdentity(address: SignalProtocolAddress?, identityKey: IdentityKey?): Boolean = false
override fun saveIdentity(address: SignalProtocolAddress?, identityKey: IdentityKey?): IdentityKeyStore.IdentityChange = IdentityChange.NEW_OR_UNCHANGED
override fun storeSession(address: SignalProtocolAddress?, record: SessionRecord?) {
aliceSessionRecord = record
}

View File

@@ -63,8 +63,12 @@ public class SignalBaseIdentityKeyStore {
return SignalStore.account().getRegistrationId();
}
public boolean saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) {
return saveIdentity(address, identityKey, false) == SaveResult.UPDATE;
public IdentityKeyStore.IdentityChange saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) {
switch (saveIdentity(address, identityKey, false)) {
case NEW, NO_CHANGE, NON_BLOCKING_APPROVAL_REQUIRED -> { return IdentityKeyStore.IdentityChange.NEW_OR_UNCHANGED; }
case UPDATE -> { return IdentityKeyStore.IdentityChange.REPLACED_EXISTING; }
}
throw new AssertionError("unhandled save result");
}
public @NonNull SaveResult saveIdentity(SignalProtocolAddress address, IdentityKey identityKey, boolean nonBlockingApproval) {

View File

@@ -42,7 +42,7 @@ public class SignalIdentityKeyStore implements IdentityKeyStore {
}
@Override
public boolean saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) {
public IdentityChange saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) {
return baseStore.saveIdentity(address, identityKey);
}

View File

@@ -68,7 +68,7 @@ public class SignalServiceAccountDataStoreImpl implements SignalServiceAccountDa
}
@Override
public boolean saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) {
public IdentityChange saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) {
return identityKeyStore.saveIdentity(address, identityKey);
}

View File

@@ -4,6 +4,7 @@ import org.signal.libsignal.protocol.IdentityKey
import org.signal.libsignal.protocol.IdentityKeyPair
import org.signal.libsignal.protocol.SignalProtocolAddress
import org.signal.libsignal.protocol.state.IdentityKeyStore
import org.signal.libsignal.protocol.state.IdentityKeyStore.IdentityChange
import org.thoughtcrime.securesms.database.SignalDatabase
import org.whispersystems.signalservice.api.SignalServiceAccountDataStore
import org.whispersystems.signalservice.api.push.ServiceId
@@ -30,16 +31,16 @@ class BufferedIdentityKeyStore(
return selfRegistrationId
}
override fun saveIdentity(address: SignalProtocolAddress, identityKey: IdentityKey): Boolean {
override fun saveIdentity(address: SignalProtocolAddress, identityKey: IdentityKey): IdentityChange {
val existing: IdentityKey? = getIdentity(address)
store[address] = identityKey
return if (identityKey != existing) {
updatedKeys[address] = identityKey
true
IdentityChange.REPLACED_EXISTING
} else {
false
IdentityChange.NEW_OR_UNCHANGED
}
}

View File

@@ -5,6 +5,7 @@ import org.signal.libsignal.protocol.IdentityKeyPair
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.IdentityKeyStore.IdentityChange
import org.signal.libsignal.protocol.state.KyberPreKeyRecord
import org.signal.libsignal.protocol.state.PreKeyRecord
import org.signal.libsignal.protocol.state.SessionRecord
@@ -41,7 +42,7 @@ class BufferedSignalServiceAccountDataStore(selfServiceId: ServiceId) : SignalSe
return identityStore.localRegistrationId
}
override fun saveIdentity(address: SignalProtocolAddress, identityKey: IdentityKey): Boolean {
override fun saveIdentity(address: SignalProtocolAddress, identityKey: IdentityKey): IdentityChange {
return identityStore.saveIdentity(address, identityKey)
}

View File

@@ -14,6 +14,7 @@ import org.signal.core.util.logging.Log;
import org.signal.libsignal.protocol.IdentityKey;
import org.signal.libsignal.protocol.InvalidKeyException;
import org.signal.libsignal.protocol.SignalProtocolAddress;
import org.signal.libsignal.protocol.state.IdentityKeyStore;
import org.signal.libsignal.protocol.state.SessionRecord;
import org.signal.libsignal.protocol.state.SessionStore;
import org.thoughtcrime.securesms.R;
@@ -172,7 +173,7 @@ public final class IdentityUtil {
SessionStore sessionStore = AppDependencies.getProtocolStore().aci();
SignalProtocolAddress address = new SignalProtocolAddress(user, SignalServiceAddress.DEFAULT_DEVICE_ID);
if (AppDependencies.getProtocolStore().aci().identities().saveIdentity(address, identityKey)) {
if (AppDependencies.getProtocolStore().aci().identities().saveIdentity(address, identityKey) == IdentityKeyStore.IdentityChange.REPLACED_EXISTING) {
if (sessionStore.containsSession(address)) {
SessionRecord sessionRecord = sessionStore.loadSession(address);
sessionRecord.archiveCurrentState();

View File

@@ -13,7 +13,7 @@ androidx-window = "1.3.0"
glide = "4.15.1"
gradle = "8.9.0"
kotlin = "2.1.0"
libsignal-client = "0.70.1"
libsignal-client = "0.71.0"
mp4parser = "1.9.39"
android-gradle-plugin = "8.7.2"
accompanist = "0.28.0"

View File

@@ -7172,20 +7172,20 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
<sha256 value="57b3cf8f247f1990211110734a7d1af413db145c8f17eb1b2cdc9b9321188c2b" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.signal" name="libsignal-android" version="0.70.1">
<artifact name="libsignal-android-0.70.1.aar">
<sha256 value="e58049528b4bed3829a2196f867f1125592928225bb9736899d316cf61de75e1" origin="Generated by Gradle"/>
<component group="org.signal" name="libsignal-android" version="0.71.0">
<artifact name="libsignal-android-0.71.0.aar">
<sha256 value="5bb3b3e384efa96b9b7244567eb44cf660adced187818caca0bdc19411b3fabe" origin="Generated by Gradle"/>
</artifact>
<artifact name="libsignal-android-0.70.1.module">
<sha256 value="144c56787fb912c93a13aa798ccdd5be7c3b7a70a7b80e9ffe864a0ec3110400" origin="Generated by Gradle"/>
<artifact name="libsignal-android-0.71.0.module">
<sha256 value="1733be074121d61524f7dd52c0d8b4856489c7f53828cc37ed9c74b1f1a3b71f" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.signal" name="libsignal-client" version="0.70.1">
<artifact name="libsignal-client-0.70.1.jar">
<sha256 value="d488a974270e79ad3100dc6eb775f5e74bc9e4cec979345ffab303d0d011af39" origin="Generated by Gradle"/>
<component group="org.signal" name="libsignal-client" version="0.71.0">
<artifact name="libsignal-client-0.71.0.jar">
<sha256 value="96e4890a8af0c51c63e447e1b05f5c66f571d4a1518e733c3f8e6d6c7a17c053" origin="Generated by Gradle"/>
</artifact>
<artifact name="libsignal-client-0.70.1.module">
<sha256 value="2da2042da8308840e177bff4a14b8d12b7fa36c62a19b1120e3dda67a1098bc9" origin="Generated by Gradle"/>
<artifact name="libsignal-client-0.71.0.module">
<sha256 value="9e3ef9803a6b8bec91bef0e917fcdbb75978b2f75d93300d524ffb6327394e5a" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.signal" name="ringrtc-android" version="2.52.1">

View File

@@ -5,6 +5,7 @@ import org.signal.libsignal.protocol.IdentityKeyPair
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.IdentityKeyStore.IdentityChange
import org.signal.libsignal.protocol.state.KyberPreKeyRecord
import org.signal.libsignal.protocol.state.PreKeyRecord
import org.signal.libsignal.protocol.state.SessionRecord
@@ -34,10 +35,13 @@ class InMemorySignalServiceAccountDataStore : SignalServiceAccountDataStore {
return 1
}
override fun saveIdentity(address: SignalProtocolAddress, identityKey: IdentityKey): Boolean {
val hadPrevious = identities.containsKey(address)
identities[address] = identityKey
return hadPrevious
override fun saveIdentity(address: SignalProtocolAddress, identityKey: IdentityKey): IdentityChange {
val previous = identities.put(address, identityKey)
return if (previous == null || previous == identityKey) {
IdentityChange.NEW_OR_UNCHANGED
} else {
IdentityChange.REPLACED_EXISTING
}
}
override fun isTrustedIdentity(address: SignalProtocolAddress?, identityKey: IdentityKey?, direction: IdentityKeyStore.Direction?): Boolean {