]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/helper/PreKeyHelper.java
Extract PreKeyHelper from Manager
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / helper / PreKeyHelper.java
1 package org.asamk.signal.manager.helper;
2
3 import org.asamk.signal.manager.SignalDependencies;
4 import org.asamk.signal.manager.config.ServiceConfig;
5 import org.asamk.signal.manager.storage.SignalAccount;
6 import org.asamk.signal.manager.util.KeyUtils;
7 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory;
9 import org.whispersystems.libsignal.IdentityKeyPair;
10 import org.whispersystems.libsignal.state.PreKeyRecord;
11 import org.whispersystems.libsignal.state.SignedPreKeyRecord;
12
13 import java.io.IOException;
14 import java.util.List;
15
16 public class PreKeyHelper {
17
18 private final static Logger logger = LoggerFactory.getLogger(PreKeyHelper.class);
19
20 private final SignalAccount account;
21 private final SignalDependencies dependencies;
22
23 public PreKeyHelper(
24 final SignalAccount account, final SignalDependencies dependencies
25 ) {
26 this.account = account;
27 this.dependencies = dependencies;
28 }
29
30 public void refreshPreKeysIfNecessary() throws IOException {
31 if (dependencies.getAccountManager().getPreKeysCount() < ServiceConfig.PREKEY_MINIMUM_COUNT) {
32 refreshPreKeys();
33 }
34 }
35
36 public void refreshPreKeys() throws IOException {
37 var oneTimePreKeys = generatePreKeys();
38 final var identityKeyPair = account.getIdentityKeyPair();
39 var signedPreKeyRecord = generateSignedPreKey(identityKeyPair);
40
41 dependencies.getAccountManager().setPreKeys(identityKeyPair.getPublicKey(), signedPreKeyRecord, oneTimePreKeys);
42 }
43
44 private List<PreKeyRecord> generatePreKeys() {
45 final var offset = account.getPreKeyIdOffset();
46
47 var records = KeyUtils.generatePreKeyRecords(offset, ServiceConfig.PREKEY_BATCH_SIZE);
48 account.addPreKeys(records);
49
50 return records;
51 }
52
53 private SignedPreKeyRecord generateSignedPreKey(IdentityKeyPair identityKeyPair) {
54 final var signedPreKeyId = account.getNextSignedPreKeyId();
55
56 var record = KeyUtils.generateSignedPreKeyRecord(identityKeyPair, signedPreKeyId);
57 account.addSignedPreKey(record);
58
59 return record;
60 }
61 }