1 package org
.asamk
.signal
.manager
.storage
.senderKeys
;
3 import org
.asamk
.signal
.manager
.helper
.RecipientAddressResolver
;
4 import org
.asamk
.signal
.manager
.storage
.recipients
.RecipientId
;
5 import org
.asamk
.signal
.manager
.storage
.recipients
.RecipientResolver
;
6 import org
.whispersystems
.libsignal
.SignalProtocolAddress
;
7 import org
.whispersystems
.libsignal
.groups
.state
.SenderKeyRecord
;
8 import org
.whispersystems
.signalservice
.api
.SignalServiceSenderKeyStore
;
9 import org
.whispersystems
.signalservice
.api
.push
.DistributionId
;
12 import java
.util
.Collection
;
14 import java
.util
.UUID
;
16 public class SenderKeyStore
implements SignalServiceSenderKeyStore
{
18 private final SenderKeyRecordStore senderKeyRecordStore
;
19 private final SenderKeySharedStore senderKeySharedStore
;
21 public SenderKeyStore(
23 final File senderKeysPath
,
24 final RecipientAddressResolver addressResolver
,
25 final RecipientResolver resolver
27 this.senderKeyRecordStore
= new SenderKeyRecordStore(senderKeysPath
, resolver
);
28 this.senderKeySharedStore
= SenderKeySharedStore
.load(file
, addressResolver
, resolver
);
32 public void storeSenderKey(
33 final SignalProtocolAddress sender
, final UUID distributionId
, final SenderKeyRecord
record
35 senderKeyRecordStore
.storeSenderKey(sender
, distributionId
, record);
39 public SenderKeyRecord
loadSenderKey(final SignalProtocolAddress sender
, final UUID distributionId
) {
40 return senderKeyRecordStore
.loadSenderKey(sender
, distributionId
);
44 public Set
<SignalProtocolAddress
> getSenderKeySharedWith(final DistributionId distributionId
) {
45 return senderKeySharedStore
.getSenderKeySharedWith(distributionId
);
49 public void markSenderKeySharedWith(
50 final DistributionId distributionId
, final Collection
<SignalProtocolAddress
> addresses
52 senderKeySharedStore
.markSenderKeySharedWith(distributionId
, addresses
);
56 public void clearSenderKeySharedWith(final Collection
<SignalProtocolAddress
> addresses
) {
57 senderKeySharedStore
.clearSenderKeySharedWith(addresses
);
60 public void deleteAll() {
61 senderKeySharedStore
.deleteAll();
62 senderKeyRecordStore
.deleteAll();
65 public void deleteAll(RecipientId recipientId
) {
66 senderKeySharedStore
.deleteAllFor(recipientId
);
67 senderKeyRecordStore
.deleteAllFor(recipientId
);
70 public void deleteSharedWith(RecipientId recipientId
) {
71 senderKeySharedStore
.deleteAllFor(recipientId
);
74 public void deleteOurKey(RecipientId selfRecipientId
, DistributionId distributionId
) {
75 senderKeySharedStore
.deleteAllFor(distributionId
);
76 senderKeyRecordStore
.deleteSenderKey(selfRecipientId
, distributionId
.asUuid());
79 public long getCreateTimeForOurKey(RecipientId selfRecipientId
, int deviceId
, DistributionId distributionId
) {
80 return senderKeyRecordStore
.getCreateTimeForKey(selfRecipientId
, deviceId
, distributionId
.asUuid());
83 public void mergeRecipients(RecipientId recipientId
, RecipientId toBeMergedRecipientId
) {
84 senderKeySharedStore
.mergeRecipients(recipientId
, toBeMergedRecipientId
);
85 senderKeyRecordStore
.mergeRecipients(recipientId
, toBeMergedRecipientId
);