1 package org
.asamk
.signal
.storage
.protocol
;
3 import com
.fasterxml
.jackson
.annotation
.JsonProperty
;
4 import com
.fasterxml
.jackson
.databind
.annotation
.JsonDeserialize
;
5 import com
.fasterxml
.jackson
.databind
.annotation
.JsonSerialize
;
7 import org
.asamk
.signal
.manager
.TrustLevel
;
8 import org
.whispersystems
.libsignal
.IdentityKey
;
9 import org
.whispersystems
.libsignal
.IdentityKeyPair
;
10 import org
.whispersystems
.libsignal
.InvalidKeyIdException
;
11 import org
.whispersystems
.libsignal
.SignalProtocolAddress
;
12 import org
.whispersystems
.libsignal
.state
.PreKeyRecord
;
13 import org
.whispersystems
.libsignal
.state
.SessionRecord
;
14 import org
.whispersystems
.libsignal
.state
.SignalProtocolStore
;
15 import org
.whispersystems
.libsignal
.state
.SignedPreKeyRecord
;
16 import org
.whispersystems
.signalservice
.api
.push
.SignalServiceAddress
;
18 import java
.util
.List
;
20 public class JsonSignalProtocolStore
implements SignalProtocolStore
{
22 @JsonProperty("preKeys")
23 @JsonDeserialize(using
= JsonPreKeyStore
.JsonPreKeyStoreDeserializer
.class)
24 @JsonSerialize(using
= JsonPreKeyStore
.JsonPreKeyStoreSerializer
.class)
25 private JsonPreKeyStore preKeyStore
;
27 @JsonProperty("sessionStore")
28 @JsonDeserialize(using
= JsonSessionStore
.JsonSessionStoreDeserializer
.class)
29 @JsonSerialize(using
= JsonSessionStore
.JsonSessionStoreSerializer
.class)
30 private JsonSessionStore sessionStore
;
32 @JsonProperty("signedPreKeyStore")
33 @JsonDeserialize(using
= JsonSignedPreKeyStore
.JsonSignedPreKeyStoreDeserializer
.class)
34 @JsonSerialize(using
= JsonSignedPreKeyStore
.JsonSignedPreKeyStoreSerializer
.class)
35 private JsonSignedPreKeyStore signedPreKeyStore
;
37 @JsonProperty("identityKeyStore")
38 @JsonDeserialize(using
= JsonIdentityKeyStore
.JsonIdentityKeyStoreDeserializer
.class)
39 @JsonSerialize(using
= JsonIdentityKeyStore
.JsonIdentityKeyStoreSerializer
.class)
40 private JsonIdentityKeyStore identityKeyStore
;
42 public JsonSignalProtocolStore() {
45 public JsonSignalProtocolStore(
46 JsonPreKeyStore preKeyStore
,
47 JsonSessionStore sessionStore
,
48 JsonSignedPreKeyStore signedPreKeyStore
,
49 JsonIdentityKeyStore identityKeyStore
51 this.preKeyStore
= preKeyStore
;
52 this.sessionStore
= sessionStore
;
53 this.signedPreKeyStore
= signedPreKeyStore
;
54 this.identityKeyStore
= identityKeyStore
;
57 public JsonSignalProtocolStore(IdentityKeyPair identityKeyPair
, int registrationId
) {
58 preKeyStore
= new JsonPreKeyStore();
59 sessionStore
= new JsonSessionStore();
60 signedPreKeyStore
= new JsonSignedPreKeyStore();
61 this.identityKeyStore
= new JsonIdentityKeyStore(identityKeyPair
, registrationId
);
64 public void setResolver(final SignalServiceAddressResolver resolver
) {
65 sessionStore
.setResolver(resolver
);
66 identityKeyStore
.setResolver(resolver
);
70 public IdentityKeyPair
getIdentityKeyPair() {
71 return identityKeyStore
.getIdentityKeyPair();
75 public int getLocalRegistrationId() {
76 return identityKeyStore
.getLocalRegistrationId();
80 public boolean saveIdentity(SignalProtocolAddress address
, IdentityKey identityKey
) {
81 return identityKeyStore
.saveIdentity(address
, identityKey
);
84 public void saveIdentity(SignalServiceAddress serviceAddress
, IdentityKey identityKey
, TrustLevel trustLevel
) {
85 identityKeyStore
.saveIdentity(serviceAddress
, identityKey
, trustLevel
, null);
88 public void setIdentityTrustLevel(
89 SignalServiceAddress serviceAddress
, IdentityKey identityKey
, TrustLevel trustLevel
91 identityKeyStore
.setIdentityTrustLevel(serviceAddress
, identityKey
, trustLevel
);
94 public List
<JsonIdentityKeyStore
.Identity
> getIdentities() {
95 return identityKeyStore
.getIdentities();
98 public List
<JsonIdentityKeyStore
.Identity
> getIdentities(SignalServiceAddress serviceAddress
) {
99 return identityKeyStore
.getIdentities(serviceAddress
);
103 public boolean isTrustedIdentity(SignalProtocolAddress address
, IdentityKey identityKey
, Direction direction
) {
104 return identityKeyStore
.isTrustedIdentity(address
, identityKey
, direction
);
108 public IdentityKey
getIdentity(SignalProtocolAddress address
) {
109 return identityKeyStore
.getIdentity(address
);
112 public JsonIdentityKeyStore
.Identity
getIdentity(SignalServiceAddress serviceAddress
) {
113 return identityKeyStore
.getIdentity(serviceAddress
);
117 public PreKeyRecord
loadPreKey(int preKeyId
) throws InvalidKeyIdException
{
118 return preKeyStore
.loadPreKey(preKeyId
);
122 public void storePreKey(int preKeyId
, PreKeyRecord
record) {
123 preKeyStore
.storePreKey(preKeyId
, record);
127 public boolean containsPreKey(int preKeyId
) {
128 return preKeyStore
.containsPreKey(preKeyId
);
132 public void removePreKey(int preKeyId
) {
133 preKeyStore
.removePreKey(preKeyId
);
137 public SessionRecord
loadSession(SignalProtocolAddress address
) {
138 return sessionStore
.loadSession(address
);
141 public List
<SessionInfo
> getSessions() {
142 return sessionStore
.getSessions();
146 public List
<Integer
> getSubDeviceSessions(String name
) {
147 return sessionStore
.getSubDeviceSessions(name
);
151 public void storeSession(SignalProtocolAddress address
, SessionRecord
record) {
152 sessionStore
.storeSession(address
, record);
156 public boolean containsSession(SignalProtocolAddress address
) {
157 return sessionStore
.containsSession(address
);
161 public void deleteSession(SignalProtocolAddress address
) {
162 sessionStore
.deleteSession(address
);
166 public void deleteAllSessions(String name
) {
167 sessionStore
.deleteAllSessions(name
);
170 public void deleteAllSessions(SignalServiceAddress serviceAddress
) {
171 sessionStore
.deleteAllSessions(serviceAddress
);
175 public SignedPreKeyRecord
loadSignedPreKey(int signedPreKeyId
) throws InvalidKeyIdException
{
176 return signedPreKeyStore
.loadSignedPreKey(signedPreKeyId
);
180 public List
<SignedPreKeyRecord
> loadSignedPreKeys() {
181 return signedPreKeyStore
.loadSignedPreKeys();
185 public void storeSignedPreKey(int signedPreKeyId
, SignedPreKeyRecord
record) {
186 signedPreKeyStore
.storeSignedPreKey(signedPreKeyId
, record);
190 public boolean containsSignedPreKey(int signedPreKeyId
) {
191 return signedPreKeyStore
.containsSignedPreKey(signedPreKeyId
);
195 public void removeSignedPreKey(int signedPreKeyId
) {
196 signedPreKeyStore
.removeSignedPreKey(signedPreKeyId
);