Update libsignal-service-java

This commit is contained in:
AsamK 2021-09-03 20:12:59 +02:00
parent e83bfb9e03
commit b903102407
5 changed files with 66 additions and 27 deletions

View file

@ -35,7 +35,9 @@ import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations;
import org.whispersystems.signalservice.api.kbs.MasterKey;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
import org.whispersystems.signalservice.api.util.UuidUtil;
import org.whispersystems.signalservice.internal.ServiceResponse;
import org.whispersystems.signalservice.internal.push.LockedException;
import org.whispersystems.signalservice.internal.push.RequestVerificationCodeResponse;
import org.whispersystems.signalservice.internal.push.VerifyAccountResponse;
import org.whispersystems.signalservice.internal.util.DynamicCredentialsProvider;
@ -115,13 +117,19 @@ public class RegistrationManager implements Closeable {
}
public void register(boolean voiceVerification, String captcha) throws IOException {
final ServiceResponse<RequestVerificationCodeResponse> response;
if (voiceVerification) {
accountManager.requestVoiceVerificationCode(getDefaultLocale(),
response = accountManager.requestVoiceVerificationCode(getDefaultLocale(),
Optional.fromNullable(captcha),
Optional.absent(),
Optional.absent());
} else {
accountManager.requestSmsVerificationCode(false, Optional.fromNullable(captcha), Optional.absent());
response = accountManager.requestSmsVerificationCode(false,
Optional.fromNullable(captcha),
Optional.absent(),
Optional.absent());
}
handleResponseException(response);
}
private Locale getDefaultLocale() {
@ -143,7 +151,7 @@ public class RegistrationManager implements Closeable {
VerifyAccountResponse response;
MasterKey masterKey;
try {
response = verifyAccountWithCode(verificationCode, null, null);
response = verifyAccountWithCode(verificationCode, null);
masterKey = null;
pin = null;
@ -154,17 +162,16 @@ public class RegistrationManager implements Closeable {
var registrationLockData = pinHelper.getRegistrationLockData(pin, e);
if (registrationLockData == null) {
response = verifyAccountWithCode(verificationCode, pin, null);
masterKey = null;
} else {
var registrationLock = registrationLockData.getMasterKey().deriveRegistrationLock();
try {
response = verifyAccountWithCode(verificationCode, null, registrationLock);
} catch (LockedException _e) {
throw new AssertionError("KBS Pin appeared to matched but reg lock still failed!");
}
masterKey = registrationLockData.getMasterKey();
throw e;
}
var registrationLock = registrationLockData.getMasterKey().deriveRegistrationLock();
try {
response = verifyAccountWithCode(verificationCode, registrationLock);
} catch (LockedException _e) {
throw new AssertionError("KBS Pin appeared to matched but reg lock still failed!");
}
masterKey = registrationLockData.getMasterKey();
}
// TODO response.isStorageCapable()
@ -192,18 +199,29 @@ public class RegistrationManager implements Closeable {
}
private VerifyAccountResponse verifyAccountWithCode(
final String verificationCode, final String legacyPin, final String registrationLock
final String verificationCode, final String registrationLock
) throws IOException {
return accountManager.verifyAccountWithCode(verificationCode,
null,
account.getLocalRegistrationId(),
true,
legacyPin,
registrationLock,
account.getSelfUnidentifiedAccessKey(),
account.isUnrestrictedUnidentifiedAccess(),
ServiceConfig.capabilities,
account.isDiscoverableByPhoneNumber());
final ServiceResponse<VerifyAccountResponse> response;
if (registrationLock == null) {
response = accountManager.verifyAccount(verificationCode,
account.getLocalRegistrationId(),
true,
account.getSelfUnidentifiedAccessKey(),
account.isUnrestrictedUnidentifiedAccess(),
ServiceConfig.capabilities,
account.isDiscoverableByPhoneNumber());
} else {
response = accountManager.verifyAccountWithRegistrationLockPin(verificationCode,
account.getLocalRegistrationId(),
true,
registrationLock,
account.getSelfUnidentifiedAccessKey(),
account.isUnrestrictedUnidentifiedAccess(),
ServiceConfig.capabilities,
account.isDiscoverableByPhoneNumber());
}
handleResponseException(response);
return response.getResult().get();
}
@Override
@ -213,4 +231,15 @@ public class RegistrationManager implements Closeable {
account = null;
}
}
private void handleResponseException(final ServiceResponse<?> response) throws IOException {
final var throwableOptional = response.getExecutionError().or(response.getApplicationError());
if (throwableOptional.isPresent()) {
if (throwableOptional.get() instanceof IOException) {
throw (IOException) throwableOptional.get();
} else {
throw new IOException(throwableOptional.get());
}
}
}
}

View file

@ -29,7 +29,7 @@ class SandboxConfig {
private final static String KEY_BACKUP_ENCLAVE_NAME = "823a3b2c037ff0cbe305cc48928cfcc97c9ed4a8ca6d49af6f7d6981fb60a4e9";
private final static byte[] KEY_BACKUP_SERVICE_ID = Hex.decode(
"51a56084c0b21c6b8f62b1bc792ec9bedac4c7c3964bb08ddcab868158c09982");
"16b94ac6d2b7f7b9d72928f36d798dbb35ed32e7bb14c42b4301ad0344b46f29");
private final static String KEY_BACKUP_MRENCLAVE = "a3baab19ef6ce6f34ab9ebb25ba722725ae44a8872dc0ff08ad6d83a9489de87";
private final static String URL = "https://chat.staging.signal.org";

View file

@ -58,6 +58,16 @@ public class SendHelper {
}
};
private final SignalServiceMessageSender.LegacyGroupEvents legacyGroupEvents = new SignalServiceMessageSender.LegacyGroupEvents() {
@Override
public void onMessageSent() {
}
@Override
public void onSyncMessageSent() {
}
};
public SendHelper(
final SignalAccount account,
final SignalDependencies dependencies,
@ -267,6 +277,7 @@ public class SendHelper {
isRecipientUpdate,
ContentHint.DEFAULT,
message,
legacyGroupEvents,
sendResult -> logger.trace("Partial message send result: {}", sendResult.isSuccess()),
() -> false);
} catch (org.whispersystems.signalservice.api.crypto.UntrustedIdentityException e) {