1 package org
.asamk
.signal
.manager
.storage
.senderKeys
;
3 import org
.asamk
.signal
.manager
.api
.Pair
;
4 import org
.asamk
.signal
.manager
.helper
.RecipientAddressResolver
;
5 import org
.asamk
.signal
.manager
.storage
.Database
;
6 import org
.asamk
.signal
.manager
.storage
.recipients
.RecipientId
;
7 import org
.asamk
.signal
.manager
.storage
.recipients
.RecipientIdCreator
;
8 import org
.asamk
.signal
.manager
.storage
.recipients
.RecipientResolver
;
9 import org
.signal
.libsignal
.protocol
.SignalProtocolAddress
;
10 import org
.signal
.libsignal
.protocol
.groups
.state
.SenderKeyRecord
;
11 import org
.whispersystems
.signalservice
.api
.SignalServiceSenderKeyStore
;
12 import org
.whispersystems
.signalservice
.api
.push
.DistributionId
;
14 import java
.util
.Collection
;
17 import java
.util
.UUID
;
19 public class SenderKeyStore
implements SignalServiceSenderKeyStore
{
21 private final SenderKeyRecordStore senderKeyRecordStore
;
22 private final SenderKeySharedStore senderKeySharedStore
;
24 public SenderKeyStore(
25 final Database database
,
26 final RecipientAddressResolver addressResolver
,
27 final RecipientResolver resolver
,
28 final RecipientIdCreator recipientIdCreator
30 this.senderKeyRecordStore
= new SenderKeyRecordStore(database
, resolver
);
31 this.senderKeySharedStore
= new SenderKeySharedStore(database
, recipientIdCreator
, addressResolver
, resolver
);
35 public void storeSenderKey(
36 final SignalProtocolAddress sender
, final UUID distributionId
, final SenderKeyRecord
record
38 senderKeyRecordStore
.storeSenderKey(sender
, distributionId
, record);
42 public SenderKeyRecord
loadSenderKey(final SignalProtocolAddress sender
, final UUID distributionId
) {
43 return senderKeyRecordStore
.loadSenderKey(sender
, distributionId
);
47 public Set
<SignalProtocolAddress
> getSenderKeySharedWith(final DistributionId distributionId
) {
48 return senderKeySharedStore
.getSenderKeySharedWith(distributionId
);
52 public void markSenderKeySharedWith(
53 final DistributionId distributionId
, final Collection
<SignalProtocolAddress
> addresses
55 senderKeySharedStore
.markSenderKeySharedWith(distributionId
, addresses
);
59 public void clearSenderKeySharedWith(final Collection
<SignalProtocolAddress
> addresses
) {
60 senderKeySharedStore
.clearSenderKeySharedWith(addresses
);
63 public void deleteAll() {
64 senderKeySharedStore
.deleteAll();
65 senderKeyRecordStore
.deleteAll();
68 public void deleteAll(RecipientId recipientId
) {
69 senderKeySharedStore
.deleteAllFor(recipientId
);
70 senderKeyRecordStore
.deleteAllFor(recipientId
);
73 public void deleteSharedWith(RecipientId recipientId
) {
74 senderKeySharedStore
.deleteAllFor(recipientId
);
77 public void deleteSharedWith(RecipientId recipientId
, int deviceId
, DistributionId distributionId
) {
78 senderKeySharedStore
.deleteSharedWith(recipientId
, deviceId
, distributionId
);
81 public void deleteOurKey(RecipientId selfRecipientId
, DistributionId distributionId
) {
82 senderKeySharedStore
.deleteAllFor(distributionId
);
83 senderKeyRecordStore
.deleteSenderKey(selfRecipientId
, distributionId
.asUuid());
86 public long getCreateTimeForOurKey(RecipientId selfRecipientId
, int deviceId
, DistributionId distributionId
) {
87 return senderKeyRecordStore
.getCreateTimeForKey(selfRecipientId
, deviceId
, distributionId
.asUuid());
90 public void mergeRecipients(RecipientId recipientId
, RecipientId toBeMergedRecipientId
) {
91 senderKeySharedStore
.mergeRecipients(recipientId
, toBeMergedRecipientId
);
92 senderKeyRecordStore
.mergeRecipients(recipientId
, toBeMergedRecipientId
);
95 void addLegacySenderKeys(final Collection
<Pair
<SenderKeyRecordStore
.Key
, SenderKeyRecord
>> senderKeys
) {
96 senderKeyRecordStore
.addLegacySenderKeys(senderKeys
);
99 void addLegacySenderKeysShared(final Map
<DistributionId
, Set
<SenderKeySharedStore
.SenderKeySharedEntry
>> sharedSenderKeys
) {
100 senderKeySharedStore
.addLegacySenderKeysShared(sharedSenderKeys
);