Update to libsignal 0.26.0
This commit is contained in:
parent
62940893f0
commit
e303570b2f
7 changed files with 36 additions and 26 deletions
|
@ -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) {
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue