Upgrade to libsignal 0.56.0
This commit is contained in:
parent
9b23264502
commit
a76d400bd1
5 changed files with 79 additions and 53 deletions
|
@ -77,7 +77,7 @@ public final class PreKeyMigrationHelper {
|
|||
contentValues.put(SignedPreKeyTable.TIMESTAMP, signedPreKey.getTimestamp());
|
||||
database.insert(SignedPreKeyTable.TABLE_NAME, null, contentValues);
|
||||
Log.i(TAG, "Migrated signed prekey: " + signedPreKey.getId());
|
||||
} catch (IOException | InvalidMessageException e) {
|
||||
} catch (IOException | InvalidMessageException | InvalidKeyException e) {
|
||||
Log.w(TAG, e);
|
||||
clean = false;
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.jobs
|
|||
import androidx.annotation.VisibleForTesting
|
||||
import org.signal.core.util.logging.Log
|
||||
import org.signal.core.util.roundedString
|
||||
import org.signal.libsignal.protocol.InvalidKeyException
|
||||
import org.signal.libsignal.protocol.state.KyberPreKeyRecord
|
||||
import org.signal.libsignal.protocol.state.PreKeyRecord
|
||||
import org.signal.libsignal.protocol.state.SignalProtocolStore
|
||||
|
@ -258,18 +259,23 @@ class PreKeysSyncJob private constructor(
|
|||
|
||||
@Throws(IOException::class)
|
||||
private fun checkPreKeyConsistency(serviceIdType: ServiceIdType, protocolStore: SignalServiceAccountDataStore, metadataStore: PreKeyMetadataStore): Boolean {
|
||||
val result: NetworkResult<Unit> = AppDependencies.signalServiceAccountManager.keysApi.checkRepeatedUseKeys(
|
||||
serviceIdType = serviceIdType,
|
||||
identityKey = protocolStore.identityKeyPair.publicKey,
|
||||
signedPreKeyId = metadataStore.activeSignedPreKeyId,
|
||||
signedPreKey = protocolStore.loadSignedPreKey(metadataStore.activeSignedPreKeyId).keyPair.publicKey,
|
||||
lastResortKyberKeyId = metadataStore.lastResortKyberPreKeyId,
|
||||
lastResortKyberKey = protocolStore.loadKyberPreKey(metadataStore.lastResortKyberPreKeyId).keyPair.publicKey
|
||||
)
|
||||
val result: NetworkResult<Unit> = try {
|
||||
AppDependencies.signalServiceAccountManager.keysApi.checkRepeatedUseKeys(
|
||||
serviceIdType = serviceIdType,
|
||||
identityKey = protocolStore.identityKeyPair.publicKey,
|
||||
signedPreKeyId = metadataStore.activeSignedPreKeyId,
|
||||
signedPreKey = protocolStore.loadSignedPreKey(metadataStore.activeSignedPreKeyId).keyPair.publicKey,
|
||||
lastResortKyberKeyId = metadataStore.lastResortKyberPreKeyId,
|
||||
lastResortKyberKey = protocolStore.loadKyberPreKey(metadataStore.lastResortKyberPreKeyId).keyPair.publicKey
|
||||
)
|
||||
} catch (e: InvalidKeyException) {
|
||||
Log.w(TAG, "Unable to load keys", e)
|
||||
return false
|
||||
}
|
||||
|
||||
return when (result) {
|
||||
is NetworkResult.Success -> true
|
||||
is NetworkResult.NetworkError -> throw result.exception ?: PushNetworkException("Network error")
|
||||
is NetworkResult.NetworkError -> throw result.exception
|
||||
is NetworkResult.ApplicationError -> throw result.throwable
|
||||
is NetworkResult.StatusCodeError -> if (result.code == 409) {
|
||||
false
|
||||
|
|
|
@ -15,7 +15,7 @@ dependencyResolutionManagement {
|
|||
version("exoplayer", "2.19.0")
|
||||
version("glide", "4.15.1")
|
||||
version("kotlin", "1.9.20")
|
||||
version("libsignal-client", "0.55.0")
|
||||
version("libsignal-client", "0.56.0")
|
||||
version("mp4parser", "1.9.39")
|
||||
version("android-gradle-plugin", "8.4.0")
|
||||
version("accompanist", "0.28.0")
|
||||
|
|
|
@ -8831,20 +8831,20 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
|
|||
<sha256 value="6eb4422e8a618b3b76cb2096a3619d251f9e27989dc68307a1e5414c3710f2d1" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="org.signal" name="libsignal-android" version="0.55.0">
|
||||
<artifact name="libsignal-android-0.55.0.aar">
|
||||
<sha256 value="f99e0af861795f103a867d3d7448b6923620a91ee075891a0d258a18fa213756" origin="Generated by Gradle"/>
|
||||
<component group="org.signal" name="libsignal-android" version="0.56.0">
|
||||
<artifact name="libsignal-android-0.56.0.aar">
|
||||
<sha256 value="c7eb52e3f3f61d407db1c7913e36b121216a67b07852748d7fd933cc15874f07" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
<artifact name="libsignal-android-0.55.0.module">
|
||||
<sha256 value="3d0b9381cad484337e88e734c6f21ec0246659b23027029645a6fa779bf65e37" origin="Generated by Gradle"/>
|
||||
<artifact name="libsignal-android-0.56.0.module">
|
||||
<sha256 value="a0831ab319465625dc4cb55694cd7be124dc7d97570551533a6a43d4067c63fe" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="org.signal" name="libsignal-client" version="0.55.0">
|
||||
<artifact name="libsignal-client-0.55.0.jar">
|
||||
<sha256 value="83f2202af279b3765212e9864539ccdad188fa090c372bf9ae3e78b2da7c1857" origin="Generated by Gradle"/>
|
||||
<component group="org.signal" name="libsignal-client" version="0.56.0">
|
||||
<artifact name="libsignal-client-0.56.0.jar">
|
||||
<sha256 value="225327aaae41e2bfb8cdd97a7ea4a1eaf2831afc52e34e4459ce878ee56bc247" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
<artifact name="libsignal-client-0.55.0.module">
|
||||
<sha256 value="58d3cf1ef4dca00592ae6030f0d596981c747771a9d48676a296ed9f0c71aad8" origin="Generated by Gradle"/>
|
||||
<artifact name="libsignal-client-0.56.0.module">
|
||||
<sha256 value="1377528f87f8e55b519ea97efc82c91b679f52f3bc49b8d9d52d5b42f2410f96" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="org.signal" name="ringrtc-android" version="2.46.1">
|
||||
|
|
|
@ -447,30 +447,36 @@ public class PushServiceSocket {
|
|||
gcmRegistrationId = new GcmRegistrationId(fcmToken, true);
|
||||
}
|
||||
|
||||
final SignedPreKeyEntity aciSignedPreKey = new SignedPreKeyEntity(Objects.requireNonNull(aciPreKeys.getSignedPreKey()).getId(),
|
||||
aciPreKeys.getSignedPreKey().getKeyPair().getPublicKey(),
|
||||
aciPreKeys.getSignedPreKey().getSignature());
|
||||
final SignedPreKeyEntity pniSignedPreKey = new SignedPreKeyEntity(Objects.requireNonNull(pniPreKeys.getSignedPreKey()).getId(),
|
||||
pniPreKeys.getSignedPreKey().getKeyPair().getPublicKey(),
|
||||
pniPreKeys.getSignedPreKey().getSignature());
|
||||
final KyberPreKeyEntity aciLastResortKyberPreKey = new KyberPreKeyEntity(Objects.requireNonNull(aciPreKeys.getLastResortKyberPreKey()).getId(),
|
||||
aciPreKeys.getLastResortKyberPreKey().getKeyPair().getPublicKey(),
|
||||
aciPreKeys.getLastResortKyberPreKey().getSignature());
|
||||
final KyberPreKeyEntity pniLastResortKyberPreKey = new KyberPreKeyEntity(Objects.requireNonNull(pniPreKeys.getLastResortKyberPreKey()).getId(),
|
||||
pniPreKeys.getLastResortKyberPreKey().getKeyPair().getPublicKey(),
|
||||
pniPreKeys.getLastResortKyberPreKey().getSignature());
|
||||
RegistrationSessionRequestBody body = new RegistrationSessionRequestBody(sessionId,
|
||||
recoveryPassword,
|
||||
attributes,
|
||||
Base64.encodeWithoutPadding(aciPreKeys.getIdentityKey().serialize()),
|
||||
Base64.encodeWithoutPadding(pniPreKeys.getIdentityKey().serialize()),
|
||||
aciSignedPreKey,
|
||||
pniSignedPreKey,
|
||||
aciLastResortKyberPreKey,
|
||||
pniLastResortKyberPreKey,
|
||||
gcmRegistrationId,
|
||||
skipDeviceTransfer,
|
||||
true);
|
||||
RegistrationSessionRequestBody body;
|
||||
try {
|
||||
final SignedPreKeyEntity aciSignedPreKey = new SignedPreKeyEntity(Objects.requireNonNull(aciPreKeys.getSignedPreKey()).getId(),
|
||||
aciPreKeys.getSignedPreKey().getKeyPair().getPublicKey(),
|
||||
aciPreKeys.getSignedPreKey().getSignature());
|
||||
final SignedPreKeyEntity pniSignedPreKey = new SignedPreKeyEntity(Objects.requireNonNull(pniPreKeys.getSignedPreKey()).getId(),
|
||||
pniPreKeys.getSignedPreKey().getKeyPair().getPublicKey(),
|
||||
pniPreKeys.getSignedPreKey().getSignature());
|
||||
final KyberPreKeyEntity aciLastResortKyberPreKey = new KyberPreKeyEntity(Objects.requireNonNull(aciPreKeys.getLastResortKyberPreKey()).getId(),
|
||||
aciPreKeys.getLastResortKyberPreKey().getKeyPair().getPublicKey(),
|
||||
aciPreKeys.getLastResortKyberPreKey().getSignature());
|
||||
final KyberPreKeyEntity pniLastResortKyberPreKey = new KyberPreKeyEntity(Objects.requireNonNull(pniPreKeys.getLastResortKyberPreKey()).getId(),
|
||||
pniPreKeys.getLastResortKyberPreKey().getKeyPair().getPublicKey(),
|
||||
pniPreKeys.getLastResortKyberPreKey().getSignature());
|
||||
|
||||
body = new RegistrationSessionRequestBody(sessionId,
|
||||
recoveryPassword,
|
||||
attributes,
|
||||
Base64.encodeWithoutPadding(aciPreKeys.getIdentityKey().serialize()),
|
||||
Base64.encodeWithoutPadding(pniPreKeys.getIdentityKey().serialize()),
|
||||
aciSignedPreKey,
|
||||
pniSignedPreKey,
|
||||
aciLastResortKyberPreKey,
|
||||
pniLastResortKyberPreKey,
|
||||
gcmRegistrationId,
|
||||
skipDeviceTransfer,
|
||||
true);
|
||||
} catch (InvalidKeyException e) {
|
||||
throw new AssertionError("unexpected invalid key", e);
|
||||
}
|
||||
|
||||
String response = makeServiceRequest(path, "POST", JsonUtil.toJson(body), NO_HEADERS, new RegistrationSessionResponseHandler(), SealedSenderAccess.NONE);
|
||||
return JsonUtil.fromJson(response, VerifyAccountResponse.class);
|
||||
|
@ -817,10 +823,14 @@ public class PushServiceSocket {
|
|||
KyberPreKeyEntity lastResortKyberPreKey = null;
|
||||
List<KyberPreKeyEntity> oneTimeKyberPreKeys = null;
|
||||
|
||||
if (preKeyUpload.getSignedPreKey() != null) {
|
||||
signedPreKey = new SignedPreKeyEntity(preKeyUpload.getSignedPreKey().getId(),
|
||||
preKeyUpload.getSignedPreKey().getKeyPair().getPublicKey(),
|
||||
preKeyUpload.getSignedPreKey().getSignature());
|
||||
try {
|
||||
if (preKeyUpload.getSignedPreKey() != null) {
|
||||
signedPreKey = new SignedPreKeyEntity(preKeyUpload.getSignedPreKey().getId(),
|
||||
preKeyUpload.getSignedPreKey().getKeyPair().getPublicKey(),
|
||||
preKeyUpload.getSignedPreKey().getSignature());
|
||||
}
|
||||
} catch (InvalidKeyException e) {
|
||||
throw new AssertionError("unexpected invalid key", e);
|
||||
}
|
||||
|
||||
if (preKeyUpload.getOneTimeEcPreKeys() != null) {
|
||||
|
@ -838,16 +848,26 @@ public class PushServiceSocket {
|
|||
}
|
||||
|
||||
if (preKeyUpload.getLastResortKyberPreKey() != null) {
|
||||
lastResortKyberPreKey = new KyberPreKeyEntity(preKeyUpload.getLastResortKyberPreKey().getId(),
|
||||
preKeyUpload.getLastResortKyberPreKey().getKeyPair().getPublicKey(),
|
||||
preKeyUpload.getLastResortKyberPreKey().getSignature());
|
||||
try {
|
||||
lastResortKyberPreKey = new KyberPreKeyEntity(preKeyUpload.getLastResortKyberPreKey().getId(),
|
||||
preKeyUpload.getLastResortKyberPreKey().getKeyPair().getPublicKey(),
|
||||
preKeyUpload.getLastResortKyberPreKey().getSignature());
|
||||
} catch (InvalidKeyException e) {
|
||||
throw new AssertionError("unexpected invalid key", e);
|
||||
}
|
||||
}
|
||||
|
||||
if (preKeyUpload.getOneTimeKyberPreKeys() != null) {
|
||||
oneTimeKyberPreKeys = preKeyUpload
|
||||
.getOneTimeKyberPreKeys()
|
||||
.stream()
|
||||
.map(it -> new KyberPreKeyEntity(it.getId(), it.getKeyPair().getPublicKey(), it.getSignature()))
|
||||
.map(it -> {
|
||||
try {
|
||||
return new KyberPreKeyEntity(it.getId(), it.getKeyPair().getPublicKey(), it.getSignature());
|
||||
} catch (InvalidKeyException e) {
|
||||
throw new AssertionError("unexpected invalid key", e);
|
||||
}
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue