1 package org
.asamk
.signal
.manager
.storage
.protocol
;
3 import com
.fasterxml
.jackson
.annotation
.JsonIgnoreProperties
;
4 import com
.fasterxml
.jackson
.annotation
.JsonProperty
;
5 import com
.fasterxml
.jackson
.databind
.annotation
.JsonDeserialize
;
6 import com
.fasterxml
.jackson
.databind
.annotation
.JsonSerialize
;
8 import org
.asamk
.signal
.manager
.TrustLevel
;
9 import org
.whispersystems
.libsignal
.IdentityKey
;
10 import org
.whispersystems
.libsignal
.IdentityKeyPair
;
11 import org
.whispersystems
.libsignal
.InvalidKeyIdException
;
12 import org
.whispersystems
.libsignal
.SignalProtocolAddress
;
13 import org
.whispersystems
.libsignal
.state
.PreKeyRecord
;
14 import org
.whispersystems
.libsignal
.state
.PreKeyStore
;
15 import org
.whispersystems
.libsignal
.state
.SessionRecord
;
16 import org
.whispersystems
.libsignal
.state
.SignedPreKeyRecord
;
17 import org
.whispersystems
.libsignal
.state
.SignedPreKeyStore
;
18 import org
.whispersystems
.signalservice
.api
.SignalServiceProtocolStore
;
19 import org
.whispersystems
.signalservice
.api
.SignalServiceSessionStore
;
20 import org
.whispersystems
.signalservice
.api
.push
.SignalServiceAddress
;
22 import java
.util
.List
;
24 @JsonIgnoreProperties(value
= {"sessionStore", "preKeys", "signedPreKeyStore"}, allowSetters
= true)
25 public class JsonSignalProtocolStore
implements SignalServiceProtocolStore
{
27 @JsonProperty("preKeys")
28 @JsonDeserialize(using
= LegacyJsonPreKeyStore
.JsonPreKeyStoreDeserializer
.class)
29 private LegacyJsonPreKeyStore legacyPreKeyStore
;
31 @JsonProperty("sessionStore")
32 @JsonDeserialize(using
= LegacyJsonSessionStore
.JsonSessionStoreDeserializer
.class)
33 private LegacyJsonSessionStore legacySessionStore
;
35 @JsonProperty("signedPreKeyStore")
36 @JsonDeserialize(using
= LegacyJsonSignedPreKeyStore
.JsonSignedPreKeyStoreDeserializer
.class)
37 private LegacyJsonSignedPreKeyStore legacySignedPreKeyStore
;
39 @JsonProperty("identityKeyStore")
40 @JsonDeserialize(using
= JsonIdentityKeyStore
.JsonIdentityKeyStoreDeserializer
.class)
41 @JsonSerialize(using
= JsonIdentityKeyStore
.JsonIdentityKeyStoreSerializer
.class)
42 private JsonIdentityKeyStore identityKeyStore
;
44 private PreKeyStore preKeyStore
;
45 private SignedPreKeyStore signedPreKeyStore
;
46 private SignalServiceSessionStore sessionStore
;
48 public JsonSignalProtocolStore() {
51 public JsonSignalProtocolStore(
52 IdentityKeyPair identityKeyPair
,
54 PreKeyStore preKeyStore
,
55 SignedPreKeyStore signedPreKeyStore
,
56 SignalServiceSessionStore sessionStore
58 this.preKeyStore
= preKeyStore
;
59 this.signedPreKeyStore
= signedPreKeyStore
;
60 this.sessionStore
= sessionStore
;
61 this.identityKeyStore
= new JsonIdentityKeyStore(identityKeyPair
, registrationId
);
64 public void setResolver(final SignalServiceAddressResolver resolver
) {
65 identityKeyStore
.setResolver(resolver
);
68 public void setPreKeyStore(final PreKeyStore preKeyStore
) {
69 this.preKeyStore
= preKeyStore
;
72 public void setSignedPreKeyStore(final SignedPreKeyStore signedPreKeyStore
) {
73 this.signedPreKeyStore
= signedPreKeyStore
;
76 public void setSessionStore(final SignalServiceSessionStore sessionStore
) {
77 this.sessionStore
= sessionStore
;
80 public LegacyJsonPreKeyStore
getLegacyPreKeyStore() {
81 return legacyPreKeyStore
;
84 public LegacyJsonSignedPreKeyStore
getLegacySignedPreKeyStore() {
85 return legacySignedPreKeyStore
;
88 public LegacyJsonSessionStore
getLegacySessionStore() {
89 return legacySessionStore
;
93 public IdentityKeyPair
getIdentityKeyPair() {
94 return identityKeyStore
.getIdentityKeyPair();
98 public int getLocalRegistrationId() {
99 return identityKeyStore
.getLocalRegistrationId();
103 public boolean saveIdentity(SignalProtocolAddress address
, IdentityKey identityKey
) {
104 return identityKeyStore
.saveIdentity(address
, identityKey
);
107 public void saveIdentity(SignalServiceAddress serviceAddress
, IdentityKey identityKey
, TrustLevel trustLevel
) {
108 identityKeyStore
.saveIdentity(serviceAddress
, identityKey
, trustLevel
, null);
111 public void setIdentityTrustLevel(
112 SignalServiceAddress serviceAddress
, IdentityKey identityKey
, TrustLevel trustLevel
114 identityKeyStore
.setIdentityTrustLevel(serviceAddress
, identityKey
, trustLevel
);
117 public void removeIdentity(SignalServiceAddress serviceAddress
, IdentityKey identityKey
) {
118 identityKeyStore
.removeIdentity(serviceAddress
, identityKey
);
121 public List
<IdentityInfo
> getIdentities() {
122 return identityKeyStore
.getIdentities();
125 public List
<IdentityInfo
> getIdentities(SignalServiceAddress serviceAddress
) {
126 return identityKeyStore
.getIdentities(serviceAddress
);
130 public boolean isTrustedIdentity(SignalProtocolAddress address
, IdentityKey identityKey
, Direction direction
) {
131 return identityKeyStore
.isTrustedIdentity(address
, identityKey
, direction
);
135 public IdentityKey
getIdentity(SignalProtocolAddress address
) {
136 return identityKeyStore
.getIdentity(address
);
139 public IdentityInfo
getIdentity(SignalServiceAddress serviceAddress
) {
140 return identityKeyStore
.getIdentity(serviceAddress
);
144 public PreKeyRecord
loadPreKey(int preKeyId
) throws InvalidKeyIdException
{
145 return preKeyStore
.loadPreKey(preKeyId
);
149 public void storePreKey(int preKeyId
, PreKeyRecord
record) {
150 preKeyStore
.storePreKey(preKeyId
, record);
154 public boolean containsPreKey(int preKeyId
) {
155 return preKeyStore
.containsPreKey(preKeyId
);
159 public void removePreKey(int preKeyId
) {
160 preKeyStore
.removePreKey(preKeyId
);
164 public SessionRecord
loadSession(SignalProtocolAddress address
) {
165 return sessionStore
.loadSession(address
);
169 public List
<Integer
> getSubDeviceSessions(String name
) {
170 return sessionStore
.getSubDeviceSessions(name
);
174 public void storeSession(SignalProtocolAddress address
, SessionRecord
record) {
175 sessionStore
.storeSession(address
, record);
179 public boolean containsSession(SignalProtocolAddress address
) {
180 return sessionStore
.containsSession(address
);
184 public void deleteSession(SignalProtocolAddress address
) {
185 sessionStore
.deleteSession(address
);
189 public void deleteAllSessions(String name
) {
190 sessionStore
.deleteAllSessions(name
);
194 public void archiveSession(final SignalProtocolAddress address
) {
195 sessionStore
.archiveSession(address
);
199 public SignedPreKeyRecord
loadSignedPreKey(int signedPreKeyId
) throws InvalidKeyIdException
{
200 return signedPreKeyStore
.loadSignedPreKey(signedPreKeyId
);
204 public List
<SignedPreKeyRecord
> loadSignedPreKeys() {
205 return signedPreKeyStore
.loadSignedPreKeys();
209 public void storeSignedPreKey(int signedPreKeyId
, SignedPreKeyRecord
record) {
210 signedPreKeyStore
.storeSignedPreKey(signedPreKeyId
, record);
214 public boolean containsSignedPreKey(int signedPreKeyId
) {
215 return signedPreKeyStore
.containsSignedPreKey(signedPreKeyId
);
219 public void removeSignedPreKey(int signedPreKeyId
) {
220 signedPreKeyStore
.removeSignedPreKey(signedPreKeyId
);