1 package org
.asamk
.signal
.manager
.helper
;
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
;
13 import java
.io
.IOException
;
14 import java
.util
.List
;
16 public class PreKeyHelper
{
18 private final static Logger logger
= LoggerFactory
.getLogger(PreKeyHelper
.class);
20 private final SignalAccount account
;
21 private final SignalDependencies dependencies
;
24 final SignalAccount account
, final SignalDependencies dependencies
26 this.account
= account
;
27 this.dependencies
= dependencies
;
30 public void refreshPreKeysIfNecessary() throws IOException
{
31 if (dependencies
.getAccountManager().getPreKeysCount() < ServiceConfig
.PREKEY_MINIMUM_COUNT
) {
36 public void refreshPreKeys() throws IOException
{
37 var oneTimePreKeys
= generatePreKeys();
38 final var identityKeyPair
= account
.getIdentityKeyPair();
39 var signedPreKeyRecord
= generateSignedPreKey(identityKeyPair
);
41 dependencies
.getAccountManager().setPreKeys(identityKeyPair
.getPublicKey(), signedPreKeyRecord
, oneTimePreKeys
);
44 private List
<PreKeyRecord
> generatePreKeys() {
45 final var offset
= account
.getPreKeyIdOffset();
47 var records
= KeyUtils
.generatePreKeyRecords(offset
, ServiceConfig
.PREKEY_BATCH_SIZE
);
48 account
.addPreKeys(records
);
53 private SignedPreKeyRecord
generateSignedPreKey(IdentityKeyPair identityKeyPair
) {
54 final var signedPreKeyId
= account
.getNextSignedPreKeyId();
56 var record = KeyUtils
.generateSignedPreKeyRecord(identityKeyPair
, signedPreKeyId
);
57 account
.addSignedPreKey(record);