1 package org
.asamk
.signal
.manager
.storage
.protocol
;
3 import org
.whispersystems
.libsignal
.IdentityKey
;
4 import org
.whispersystems
.libsignal
.IdentityKeyPair
;
5 import org
.whispersystems
.libsignal
.InvalidKeyIdException
;
6 import org
.whispersystems
.libsignal
.NoSessionException
;
7 import org
.whispersystems
.libsignal
.SignalProtocolAddress
;
8 import org
.whispersystems
.libsignal
.groups
.state
.SenderKeyRecord
;
9 import org
.whispersystems
.libsignal
.state
.IdentityKeyStore
;
10 import org
.whispersystems
.libsignal
.state
.PreKeyRecord
;
11 import org
.whispersystems
.libsignal
.state
.PreKeyStore
;
12 import org
.whispersystems
.libsignal
.state
.SessionRecord
;
13 import org
.whispersystems
.libsignal
.state
.SignedPreKeyRecord
;
14 import org
.whispersystems
.libsignal
.state
.SignedPreKeyStore
;
15 import org
.whispersystems
.signalservice
.api
.SignalServiceProtocolStore
;
16 import org
.whispersystems
.signalservice
.api
.SignalServiceSessionStore
;
17 import org
.whispersystems
.signalservice
.api
.push
.DistributionId
;
19 import java
.util
.Collection
;
20 import java
.util
.List
;
22 import java
.util
.UUID
;
24 public class SignalProtocolStore
implements SignalServiceProtocolStore
{
26 private final PreKeyStore preKeyStore
;
27 private final SignedPreKeyStore signedPreKeyStore
;
28 private final SignalServiceSessionStore sessionStore
;
29 private final IdentityKeyStore identityKeyStore
;
31 public SignalProtocolStore(
32 final PreKeyStore preKeyStore
,
33 final SignedPreKeyStore signedPreKeyStore
,
34 final SignalServiceSessionStore sessionStore
,
35 final IdentityKeyStore identityKeyStore
37 this.preKeyStore
= preKeyStore
;
38 this.signedPreKeyStore
= signedPreKeyStore
;
39 this.sessionStore
= sessionStore
;
40 this.identityKeyStore
= identityKeyStore
;
44 public IdentityKeyPair
getIdentityKeyPair() {
45 return identityKeyStore
.getIdentityKeyPair();
49 public int getLocalRegistrationId() {
50 return identityKeyStore
.getLocalRegistrationId();
54 public boolean saveIdentity(SignalProtocolAddress address
, IdentityKey identityKey
) {
55 return identityKeyStore
.saveIdentity(address
, identityKey
);
59 public boolean isTrustedIdentity(SignalProtocolAddress address
, IdentityKey identityKey
, Direction direction
) {
60 return identityKeyStore
.isTrustedIdentity(address
, identityKey
, direction
);
64 public IdentityKey
getIdentity(SignalProtocolAddress address
) {
65 return identityKeyStore
.getIdentity(address
);
69 public PreKeyRecord
loadPreKey(int preKeyId
) throws InvalidKeyIdException
{
70 return preKeyStore
.loadPreKey(preKeyId
);
74 public void storePreKey(int preKeyId
, PreKeyRecord
record) {
75 preKeyStore
.storePreKey(preKeyId
, record);
79 public boolean containsPreKey(int preKeyId
) {
80 return preKeyStore
.containsPreKey(preKeyId
);
84 public void removePreKey(int preKeyId
) {
85 preKeyStore
.removePreKey(preKeyId
);
89 public SessionRecord
loadSession(SignalProtocolAddress address
) {
90 return sessionStore
.loadSession(address
);
94 public List
<SessionRecord
> loadExistingSessions(final List
<SignalProtocolAddress
> addresses
) throws NoSessionException
{
95 return sessionStore
.loadExistingSessions(addresses
);
99 public List
<Integer
> getSubDeviceSessions(String name
) {
100 return sessionStore
.getSubDeviceSessions(name
);
104 public void storeSession(SignalProtocolAddress address
, SessionRecord
record) {
105 sessionStore
.storeSession(address
, record);
109 public boolean containsSession(SignalProtocolAddress address
) {
110 return sessionStore
.containsSession(address
);
114 public void deleteSession(SignalProtocolAddress address
) {
115 sessionStore
.deleteSession(address
);
119 public void deleteAllSessions(String name
) {
120 sessionStore
.deleteAllSessions(name
);
124 public void archiveSession(final SignalProtocolAddress address
) {
125 sessionStore
.archiveSession(address
);
129 public SignedPreKeyRecord
loadSignedPreKey(int signedPreKeyId
) throws InvalidKeyIdException
{
130 return signedPreKeyStore
.loadSignedPreKey(signedPreKeyId
);
134 public List
<SignedPreKeyRecord
> loadSignedPreKeys() {
135 return signedPreKeyStore
.loadSignedPreKeys();
139 public void storeSignedPreKey(int signedPreKeyId
, SignedPreKeyRecord
record) {
140 signedPreKeyStore
.storeSignedPreKey(signedPreKeyId
, record);
144 public boolean containsSignedPreKey(int signedPreKeyId
) {
145 return signedPreKeyStore
.containsSignedPreKey(signedPreKeyId
);
149 public void removeSignedPreKey(int signedPreKeyId
) {
150 signedPreKeyStore
.removeSignedPreKey(signedPreKeyId
);
154 public void storeSenderKey(
155 final SignalProtocolAddress sender
, final UUID distributionId
, final SenderKeyRecord
record
161 public SenderKeyRecord
loadSenderKey(final SignalProtocolAddress sender
, final UUID distributionId
) {
167 public Set
<SignalProtocolAddress
> getSenderKeySharedWith(final DistributionId distributionId
) {
173 public void markSenderKeySharedWith(
174 final DistributionId distributionId
, final Collection
<SignalProtocolAddress
> addresses
180 public void clearSenderKeySharedWith(
181 final DistributionId distributionId
, final Collection
<SignalProtocolAddress
> addresses