import org.asamk.signal.manager.helper.GroupV2Helper;
import org.asamk.signal.manager.helper.IncomingMessageHandler;
import org.asamk.signal.manager.helper.PinHelper;
+import org.asamk.signal.manager.helper.PreKeyHelper;
import org.asamk.signal.manager.helper.ProfileHelper;
import org.asamk.signal.manager.helper.SendHelper;
import org.asamk.signal.manager.helper.StorageHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.whispersystems.libsignal.IdentityKey;
-import org.whispersystems.libsignal.IdentityKeyPair;
import org.whispersystems.libsignal.InvalidKeyException;
import org.whispersystems.libsignal.ecc.ECPublicKey;
import org.whispersystems.libsignal.fingerprint.Fingerprint;
import org.whispersystems.libsignal.fingerprint.FingerprintParsingException;
import org.whispersystems.libsignal.fingerprint.FingerprintVersionMismatchException;
-import org.whispersystems.libsignal.state.PreKeyRecord;
-import org.whispersystems.libsignal.state.SignedPreKeyRecord;
import org.whispersystems.libsignal.util.Pair;
import org.whispersystems.libsignal.util.guava.Optional;
import org.whispersystems.signalservice.api.SignalSessionLock;
private final GroupHelper groupHelper;
private final ContactHelper contactHelper;
private final IncomingMessageHandler incomingMessageHandler;
+ private final PreKeyHelper preKeyHelper;
private final Context context;
private boolean hasCaughtUpWithOldMessages = false;
groupHelper,
avatarStore,
this::resolveSignalServiceAddress);
+ preKeyHelper = new PreKeyHelper(account, dependencies);
this.context = new Context(account,
dependencies,
return account.getSelfRecipientId();
}
- private IdentityKeyPair getIdentityKeyPair() {
- return account.getIdentityKeyPair();
- }
-
public int getDeviceId() {
return account.getDeviceId();
}
days);
}
}
- if (dependencies.getAccountManager().getPreKeysCount() < ServiceConfig.PREKEY_MINIMUM_COUNT) {
- refreshPreKeys();
- }
+ preKeyHelper.refreshPreKeysIfNecessary();
if (account.getUuid() == null) {
account.setUuid(dependencies.getAccountManager().getOwnUuid());
}
}
private void addDevice(String deviceIdentifier, ECPublicKey deviceKey) throws IOException, InvalidKeyException {
- var identityKeyPair = getIdentityKeyPair();
+ var identityKeyPair = account.getIdentityKeyPair();
var verificationCode = dependencies.getAccountManager().getNewDeviceVerificationCode();
dependencies.getAccountManager()
}
void refreshPreKeys() throws IOException {
- var oneTimePreKeys = generatePreKeys();
- final var identityKeyPair = getIdentityKeyPair();
- var signedPreKeyRecord = generateSignedPreKey(identityKeyPair);
-
- dependencies.getAccountManager().setPreKeys(identityKeyPair.getPublicKey(), signedPreKeyRecord, oneTimePreKeys);
- }
-
- private List<PreKeyRecord> generatePreKeys() {
- final var offset = account.getPreKeyIdOffset();
-
- var records = KeyUtils.generatePreKeyRecords(offset, ServiceConfig.PREKEY_BATCH_SIZE);
- account.addPreKeys(records);
-
- return records;
- }
-
- private SignedPreKeyRecord generateSignedPreKey(IdentityKeyPair identityKeyPair) {
- final var signedPreKeyId = account.getNextSignedPreKeyId();
-
- var record = KeyUtils.generateSignedPreKeyRecord(identityKeyPair, signedPreKeyId);
- account.addSignedPreKey(record);
-
- return record;
+ preKeyHelper.refreshPreKeys();
}
public Profile getRecipientProfile(RecipientId recipientId) {
) {
return Utils.computeSafetyNumber(capabilities.isUuid(),
account.getSelfAddress(),
- getIdentityKeyPair().getPublicKey(),
+ account.getIdentityKeyPair().getPublicKey(),
theirAddress,
theirIdentityKey);
}
--- /dev/null
+package org.asamk.signal.manager.helper;
+
+import org.asamk.signal.manager.SignalDependencies;
+import org.asamk.signal.manager.config.ServiceConfig;
+import org.asamk.signal.manager.storage.SignalAccount;
+import org.asamk.signal.manager.util.KeyUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.whispersystems.libsignal.IdentityKeyPair;
+import org.whispersystems.libsignal.state.PreKeyRecord;
+import org.whispersystems.libsignal.state.SignedPreKeyRecord;
+
+import java.io.IOException;
+import java.util.List;
+
+public class PreKeyHelper {
+
+ private final static Logger logger = LoggerFactory.getLogger(PreKeyHelper.class);
+
+ private final SignalAccount account;
+ private final SignalDependencies dependencies;
+
+ public PreKeyHelper(
+ final SignalAccount account, final SignalDependencies dependencies
+ ) {
+ this.account = account;
+ this.dependencies = dependencies;
+ }
+
+ public void refreshPreKeysIfNecessary() throws IOException {
+ if (dependencies.getAccountManager().getPreKeysCount() < ServiceConfig.PREKEY_MINIMUM_COUNT) {
+ refreshPreKeys();
+ }
+ }
+
+ public void refreshPreKeys() throws IOException {
+ var oneTimePreKeys = generatePreKeys();
+ final var identityKeyPair = account.getIdentityKeyPair();
+ var signedPreKeyRecord = generateSignedPreKey(identityKeyPair);
+
+ dependencies.getAccountManager().setPreKeys(identityKeyPair.getPublicKey(), signedPreKeyRecord, oneTimePreKeys);
+ }
+
+ private List<PreKeyRecord> generatePreKeys() {
+ final var offset = account.getPreKeyIdOffset();
+
+ var records = KeyUtils.generatePreKeyRecords(offset, ServiceConfig.PREKEY_BATCH_SIZE);
+ account.addPreKeys(records);
+
+ return records;
+ }
+
+ private SignedPreKeyRecord generateSignedPreKey(IdentityKeyPair identityKeyPair) {
+ final var signedPreKeyId = account.getNextSignedPreKeyId();
+
+ var record = KeyUtils.generateSignedPreKeyRecord(identityKeyPair, signedPreKeyId);
+ account.addSignedPreKey(record);
+
+ return record;
+ }
+}