Update to libsignal 0.26.0

This commit is contained in:
Cody Henthorne 2023-06-01 14:05:03 -04:00
parent 62940893f0
commit e303570b2f
7 changed files with 36 additions and 26 deletions

View file

@ -34,28 +34,33 @@ class BufferedSessionStore(private val selfServiceId: ServiceId) : SignalService
@Throws(NoSessionException::class)
override fun loadExistingSessions(addresses: MutableList<SignalProtocolAddress>): List<SessionRecord> {
val found: MutableList<SessionRecord> = mutableListOf()
val needsDatabaseLookup: MutableList<SignalProtocolAddress> = mutableListOf()
val found: MutableList<SessionRecord?> = ArrayList(addresses.size)
val needsDatabaseLookup: MutableList<Pair<Int, SignalProtocolAddress>> = mutableListOf()
for (address in addresses) {
addresses.forEachIndexed { index, address ->
val cached: SessionRecord? = store[address]
if (cached != null) {
found += cached
found[index] = cached
} else {
needsDatabaseLookup += address
needsDatabaseLookup += (index to address)
}
}
if (needsDatabaseLookup.isNotEmpty()) {
found += SignalDatabase.sessions.load(selfServiceId, needsDatabaseLookup).filterNotNull()
val databaseRecords: List<SessionRecord?> = SignalDatabase.sessions.load(selfServiceId, needsDatabaseLookup.map { (_, address) -> address })
needsDatabaseLookup.forEachIndexed { databaseLookupIndex, (addressIndex, _) ->
found[addressIndex] = databaseRecords[databaseLookupIndex]
}
}
if (found.size != addresses.size) {
val cachedAndLoaded = found.filterNotNull()
if (cachedAndLoaded.size != addresses.size) {
throw NoSessionException("Failed to find one or more sessions.")
}
return found
return cachedAndLoaded
}
override fun storeSession(address: SignalProtocolAddress, record: SessionRecord) {

View file

@ -13,7 +13,7 @@ dependencyResolutionManagement {
version('exoplayer', '2.18.1')
version('glide', '4.13.2')
version('kotlin', '1.8.10')
version('libsignal-client', '0.25.0')
version('libsignal-client', '0.26.0')
version('mp4parser', '1.9.39')
version('android-gradle-plugin', '7.4.1')
version('accompanist', '0.28.0')

View file

@ -5872,20 +5872,20 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
<sha256 value="0f686ccff0d4842bfcc74d92e8dc780a5f159b9376e37a1189fabbcdac458bef" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.signal" name="libsignal-android" version="0.25.0">
<artifact name="libsignal-android-0.25.0.aar">
<sha256 value="6f3a4b08c6d868eb289d0499bf712383847cef7521db268a8e8951d68642f37e" origin="Generated by Gradle"/>
<component group="org.signal" name="libsignal-android" version="0.26.0">
<artifact name="libsignal-android-0.26.0.aar">
<sha256 value="5d402e4a4cccf98feab0876470f3adb71f442e25935ccf5214f8dc0d1fb9386f" origin="Generated by Gradle"/>
</artifact>
<artifact name="libsignal-android-0.25.0.module">
<sha256 value="6a0a399e3fdbbd6583da85eb12e4cb6e372778b0a8a269c932d2099bb260121b" origin="Generated by Gradle"/>
<artifact name="libsignal-android-0.26.0.module">
<sha256 value="87dd9d3fd15280aef8935b3230d891198596d7cfd0567a324a335f700fdf85c1" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.signal" name="libsignal-client" version="0.25.0">
<artifact name="libsignal-client-0.25.0.jar">
<sha256 value="b3e736078231134eaeba97bfec824cded8200ced35890b3e4286ae6a0f7ad348" origin="Generated by Gradle"/>
<component group="org.signal" name="libsignal-client" version="0.26.0">
<artifact name="libsignal-client-0.26.0.jar">
<sha256 value="1493199648838b14c27b1c9d4a8ccd42c777dd7f9ec46d509f6aae0db0ac95db" origin="Generated by Gradle"/>
</artifact>
<artifact name="libsignal-client-0.25.0.module">
<sha256 value="ac4a2fdbbaf8ac12a7d55407220fc80fa4b1b5aed0b3abd736550bb7f02585d1" origin="Generated by Gradle"/>
<artifact name="libsignal-client-0.26.0.module">
<sha256 value="c315752e06dc156184e95062ed0696582720af41d09d0ce25344aa50f7d8f6d6" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.signal" name="ringrtc-android" version="2.28.0">

View file

@ -18,7 +18,7 @@ object PinHashUtil {
*/
@JvmStatic
fun hashPin(pin: String, salt: ByteArray): PinHash {
return Pin.hash(normalize(pin), salt)
return PinHash.svr1(normalize(pin), salt)
}
/**

View file

@ -6,7 +6,6 @@
package org.whispersystems.signalservice.api.svr
import org.signal.libsignal.svr2.PinHash
import org.signal.libsignal.svr2.Svr2Client
import org.whispersystems.signalservice.internal.push.AuthCredentials
/**
@ -14,9 +13,9 @@ import org.whispersystems.signalservice.internal.push.AuthCredentials
*/
internal class Svr2PinHasher(
private val authCredentials: AuthCredentials,
private val client: Svr2Client
private val mrEnclave: ByteArray
) {
fun hash(normalizedPin: ByteArray): PinHash {
return client.hashPin(normalizedPin, authCredentials.username().toByteArray(Charsets.UTF_8))
return PinHash.svr2(normalizedPin, authCredentials.username(), mrEnclave)
}
}

View file

@ -97,8 +97,9 @@ internal class Svr2Socket(
}
Stage.WAITING_FOR_CONNECTION -> {
client = Svr2Client.create(Hex.fromStringCondensed(mrEnclave), bytes.toByteArray(), Instant.now())
pinHasher = Svr2PinHasher(authorization, client)
val mrEnclave: ByteArray = Hex.fromStringCondensed(mrEnclave)
client = Svr2Client(mrEnclave, bytes.toByteArray(), Instant.now())
pinHasher = Svr2PinHasher(authorization, mrEnclave)
Log.d(TAG, "[onMessage] Sending initial handshake...")
webSocket.send(client.initialRequest().toByteString())

View file

@ -16,6 +16,7 @@ import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.signal.libsignal.protocol.InvalidKeyException;
import org.signal.libsignal.protocol.kem.KEMPublicKey;
import org.whispersystems.util.Base64;
@ -66,7 +67,11 @@ public class KyberPreKeyEntity {
private static class KEMPublicKeyDeserializer extends JsonDeserializer<KEMPublicKey> {
@Override
public KEMPublicKey deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return new KEMPublicKey(Base64.decodeWithoutPadding(p.getValueAsString()), 0);
try {
return new KEMPublicKey(Base64.decodeWithoutPadding(p.getValueAsString()), 0);
} catch (InvalidKeyException e) {
throw new IOException(e);
}
}
}