mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-22 01:40:07 +01:00
Add mostly-working SVR3 implementation behind flag.
This commit is contained in:
committed by
Alex Hart
parent
143a61e312
commit
664c22d8f1
@@ -13,6 +13,7 @@ import org.whispersystems.signalservice.api.push.exceptions.AuthorizationFailedE
|
||||
import org.whispersystems.signalservice.api.push.exceptions.IncorrectRegistrationRecoveryPasswordException
|
||||
import org.whispersystems.signalservice.api.push.exceptions.MalformedRequestException
|
||||
import org.whispersystems.signalservice.api.push.exceptions.RateLimitException
|
||||
import org.whispersystems.signalservice.api.svr.Svr3Credentials
|
||||
import org.whispersystems.signalservice.internal.push.AuthCredentials
|
||||
import org.whispersystems.signalservice.internal.push.LockedException
|
||||
import org.whispersystems.signalservice.internal.push.VerifyAccountResponse
|
||||
@@ -33,7 +34,7 @@ sealed class ChangeNumberResult(cause: Throwable?) : RegistrationResult(cause) {
|
||||
is AuthorizationFailedException -> AuthorizationFailed(cause)
|
||||
is MalformedRequestException -> MalformedRequest(cause)
|
||||
is RateLimitException -> createRateLimitProcessor(cause)
|
||||
is LockedException -> RegistrationLocked(cause = cause, timeRemaining = cause.timeRemaining, svr2Credentials = cause.svr2Credentials)
|
||||
is LockedException -> RegistrationLocked(cause = cause, timeRemaining = cause.timeRemaining, svr2Credentials = cause.svr2Credentials, svr3Credentials = cause.svr3Credentials)
|
||||
else -> {
|
||||
if (networkResult.code == 422) {
|
||||
ValidationError(cause)
|
||||
@@ -62,7 +63,7 @@ sealed class ChangeNumberResult(cause: Throwable?) : RegistrationResult(cause) {
|
||||
class ValidationError(cause: Throwable) : ChangeNumberResult(cause)
|
||||
class RateLimited(cause: Throwable, val timeRemaining: Long) : ChangeNumberResult(cause)
|
||||
class AttemptsExhausted(cause: Throwable) : ChangeNumberResult(cause)
|
||||
class RegistrationLocked(cause: Throwable, val timeRemaining: Long, val svr2Credentials: AuthCredentials?) : ChangeNumberResult(cause)
|
||||
class RegistrationLocked(cause: Throwable, val timeRemaining: Long, val svr2Credentials: AuthCredentials?, val svr3Credentials: Svr3Credentials?) : ChangeNumberResult(cause)
|
||||
class UnknownError(cause: Throwable) : ChangeNumberResult(cause)
|
||||
|
||||
class SvrNoData(cause: SvrNoDataException) : ChangeNumberResult(cause)
|
||||
|
||||
@@ -8,6 +8,7 @@ package org.thoughtcrime.securesms.components.settings.app.changenumber.v2
|
||||
import org.thoughtcrime.securesms.registration.v2.data.network.Challenge
|
||||
import org.thoughtcrime.securesms.registration.v2.data.network.VerificationCodeRequestResult
|
||||
import org.thoughtcrime.securesms.registration.viewmodel.NumberViewState
|
||||
import org.whispersystems.signalservice.api.svr.Svr3Credentials
|
||||
import org.whispersystems.signalservice.internal.push.AuthCredentials
|
||||
|
||||
/**
|
||||
@@ -21,7 +22,8 @@ data class ChangeNumberState(
|
||||
val sessionId: String? = null,
|
||||
val changeNumberOutcome: ChangeNumberOutcome? = null,
|
||||
val lockedTimeRemaining: Long = 0L,
|
||||
val svrCredentials: AuthCredentials? = null,
|
||||
val svr2Credentials: AuthCredentials? = null,
|
||||
val svr3Credentials: Svr3Credentials? = null,
|
||||
val svrTriesRemaining: Int = 10,
|
||||
val incorrectCodeAttempts: Int = 0,
|
||||
val nextSmsTimestamp: Long = 0L,
|
||||
|
||||
@@ -253,7 +253,15 @@ class ChangeNumberV2ViewModel : ViewModel() {
|
||||
val result: ChangeNumberResult = if (pin == null) {
|
||||
repository.changeNumberWithoutRegistrationLock(sessionId = sessionId, newE164 = number.e164Number)
|
||||
} else {
|
||||
repository.changeNumberWithRegistrationLock(sessionId = sessionId, newE164 = number.e164Number, pin, SvrAuthCredentialSet(null, store.value.svrCredentials))
|
||||
repository.changeNumberWithRegistrationLock(
|
||||
sessionId = sessionId,
|
||||
newE164 = number.e164Number,
|
||||
pin = pin,
|
||||
svrAuthCredentials = SvrAuthCredentialSet(
|
||||
svr2Credentials = store.value.svr2Credentials,
|
||||
svr3Credentials = store.value.svr3Credentials
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
if (result is ChangeNumberResult.Success) {
|
||||
@@ -422,7 +430,8 @@ class ChangeNumberV2ViewModel : ViewModel() {
|
||||
is VerificationCodeRequestResult.RegistrationLocked ->
|
||||
store.update {
|
||||
it.copy(
|
||||
svrCredentials = result.svr2Credentials
|
||||
svr2Credentials = result.svr2Credentials,
|
||||
svr3Credentials = result.svr3Credentials
|
||||
)
|
||||
}
|
||||
else -> Log.i(TAG, "Received exception during verification.", result.getCause())
|
||||
@@ -438,7 +447,8 @@ class ChangeNumberV2ViewModel : ViewModel() {
|
||||
is ChangeNumberResult.RegistrationLocked ->
|
||||
store.update {
|
||||
it.copy(
|
||||
svrCredentials = result.svr2Credentials
|
||||
svr2Credentials = result.svr2Credentials,
|
||||
svr3Credentials = result.svr3Credentials
|
||||
)
|
||||
}
|
||||
is ChangeNumberResult.SvrWrongPin -> {
|
||||
|
||||
@@ -21,7 +21,6 @@ import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.input.key.Key.Companion.Tab
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.fragment.app.viewModels
|
||||
|
||||
@@ -19,7 +19,6 @@ import org.thoughtcrime.securesms.BuildConfig
|
||||
import org.thoughtcrime.securesms.dependencies.AppDependencies
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.whispersystems.signalservice.api.svr.SecureValueRecovery
|
||||
import org.whispersystems.signalservice.api.svr.SecureValueRecoveryV3
|
||||
|
||||
class InternalSvrPlaygroundViewModel : ViewModel() {
|
||||
|
||||
@@ -105,22 +104,7 @@ class InternalSvrPlaygroundViewModel : ViewModel() {
|
||||
private fun SvrImplementation.toImplementation(): SecureValueRecovery {
|
||||
return when (this) {
|
||||
SvrImplementation.SVR2 -> AppDependencies.signalServiceAccountManager.getSecureValueRecoveryV2(BuildConfig.SVR2_MRENCLAVE)
|
||||
SvrImplementation.SVR3 -> AppDependencies.signalServiceAccountManager.getSecureValueRecoveryV3(AppDependencies.libsignalNetwork, TestShareSetStorage())
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Temporary implementation of share set storage. Only useful for testing.
|
||||
*/
|
||||
private class TestShareSetStorage : SecureValueRecoveryV3.ShareSetStorage {
|
||||
private var shareSet: ByteArray? = null
|
||||
|
||||
override fun write(data: ByteArray) {
|
||||
shareSet = data
|
||||
}
|
||||
|
||||
override fun read(): ByteArray? {
|
||||
return shareSet
|
||||
SvrImplementation.SVR3 -> AppDependencies.signalServiceAccountManager.getSecureValueRecoveryV3(AppDependencies.libsignalNetwork)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user