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
.io
.IOException
;
13 import java
.util
.Collection
;
15 import java
.util
.UUID
;
17 public class SenderKeyStore
implements SignalServiceSenderKeyStore
{
19 private final SenderKeyRecordStore senderKeyRecordStore
;
20 private final SenderKeySharedStore senderKeySharedStore
;
22 public SenderKeyStore(
24 final File senderKeysPath
,
25 final RecipientAddressResolver addressResolver
,
26 final RecipientResolver resolver
27 ) throws IOException
{
28 this.senderKeyRecordStore
= new SenderKeyRecordStore(senderKeysPath
, resolver
);
29 this.senderKeySharedStore
= SenderKeySharedStore
.load(file
, addressResolver
, resolver
);
33 public void storeSenderKey(
34 final SignalProtocolAddress sender
, final UUID distributionId
, final SenderKeyRecord
record
36 senderKeyRecordStore
.storeSenderKey(sender
, distributionId
, record);
40 public SenderKeyRecord
loadSenderKey(final SignalProtocolAddress sender
, final UUID distributionId
) {
41 return senderKeyRecordStore
.loadSenderKey(sender
, distributionId
);
45 public Set
<SignalProtocolAddress
> getSenderKeySharedWith(final DistributionId distributionId
) {
46 return senderKeySharedStore
.getSenderKeySharedWith(distributionId
);
50 public void markSenderKeySharedWith(
51 final DistributionId distributionId
, final Collection
<SignalProtocolAddress
> addresses
53 senderKeySharedStore
.markSenderKeySharedWith(distributionId
, addresses
);
57 public void clearSenderKeySharedWith(final Collection
<SignalProtocolAddress
> addresses
) {
58 senderKeySharedStore
.clearSenderKeySharedWith(addresses
);
61 public void deleteAll() {
62 senderKeySharedStore
.deleteAll();
63 senderKeyRecordStore
.deleteAll();
66 public void rotateSenderKeys(RecipientId recipientId
) {
67 senderKeySharedStore
.deleteAllFor(recipientId
);
68 senderKeyRecordStore
.deleteAllFor(recipientId
);
71 public void mergeRecipients(RecipientId recipientId
, RecipientId toBeMergedRecipientId
) {
72 senderKeySharedStore
.mergeRecipients(recipientId
, toBeMergedRecipientId
);
73 senderKeyRecordStore
.mergeRecipients(recipientId
, toBeMergedRecipientId
);