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
;
6 import org
.asamk
.signal
.TrustLevel
;
7 import org
.whispersystems
.libsignal
.IdentityKey
;
8 import org
.whispersystems
.libsignal
.IdentityKeyPair
;
9 import org
.whispersystems
.libsignal
.InvalidKeyIdException
;
10 import org
.whispersystems
.libsignal
.SignalProtocolAddress
;
11 import org
.whispersystems
.libsignal
.state
.PreKeyRecord
;
12 import org
.whispersystems
.libsignal
.state
.SessionRecord
;
13 import org
.whispersystems
.libsignal
.state
.SignalProtocolStore
;
14 import org
.whispersystems
.libsignal
.state
.SignedPreKeyRecord
;
16 import java
.util
.List
;
19 public class JsonSignalProtocolStore
implements SignalProtocolStore
{
21 @JsonProperty("preKeys")
22 @JsonDeserialize(using
= JsonPreKeyStore
.JsonPreKeyStoreDeserializer
.class)
23 @JsonSerialize(using
= JsonPreKeyStore
.JsonPreKeyStoreSerializer
.class)
24 protected JsonPreKeyStore preKeyStore
;
26 @JsonProperty("sessionStore")
27 @JsonDeserialize(using
= JsonSessionStore
.JsonSessionStoreDeserializer
.class)
28 @JsonSerialize(using
= JsonSessionStore
.JsonPreKeyStoreSerializer
.class)
29 protected JsonSessionStore sessionStore
;
31 @JsonProperty("signedPreKeyStore")
32 @JsonDeserialize(using
= JsonSignedPreKeyStore
.JsonSignedPreKeyStoreDeserializer
.class)
33 @JsonSerialize(using
= JsonSignedPreKeyStore
.JsonSignedPreKeyStoreSerializer
.class)
34 protected JsonSignedPreKeyStore signedPreKeyStore
;
36 @JsonProperty("identityKeyStore")
37 @JsonDeserialize(using
= JsonIdentityKeyStore
.JsonIdentityKeyStoreDeserializer
.class)
38 @JsonSerialize(using
= JsonIdentityKeyStore
.JsonIdentityKeyStoreSerializer
.class)
39 protected JsonIdentityKeyStore identityKeyStore
;
41 public JsonSignalProtocolStore() {
44 public JsonSignalProtocolStore(JsonPreKeyStore preKeyStore
, JsonSessionStore sessionStore
, JsonSignedPreKeyStore signedPreKeyStore
, JsonIdentityKeyStore identityKeyStore
) {
45 this.preKeyStore
= preKeyStore
;
46 this.sessionStore
= sessionStore
;
47 this.signedPreKeyStore
= signedPreKeyStore
;
48 this.identityKeyStore
= identityKeyStore
;
51 public JsonSignalProtocolStore(IdentityKeyPair identityKeyPair
, int registrationId
) {
52 preKeyStore
= new JsonPreKeyStore();
53 sessionStore
= new JsonSessionStore();
54 signedPreKeyStore
= new JsonSignedPreKeyStore();
55 this.identityKeyStore
= new JsonIdentityKeyStore(identityKeyPair
, registrationId
);
59 public IdentityKeyPair
getIdentityKeyPair() {
60 return identityKeyStore
.getIdentityKeyPair();
64 public int getLocalRegistrationId() {
65 return identityKeyStore
.getLocalRegistrationId();
69 public boolean saveIdentity(SignalProtocolAddress address
, IdentityKey identityKey
) {
70 return identityKeyStore
.saveIdentity(address
, identityKey
);
73 public void saveIdentity(String name
, IdentityKey identityKey
, TrustLevel trustLevel
) {
74 identityKeyStore
.saveIdentity(name
, identityKey
, trustLevel
, null);
77 public Map
<String
, List
<JsonIdentityKeyStore
.Identity
>> getIdentities() {
78 return identityKeyStore
.getIdentities();
81 public List
<JsonIdentityKeyStore
.Identity
> getIdentities(String name
) {
82 return identityKeyStore
.getIdentities(name
);
86 public boolean isTrustedIdentity(SignalProtocolAddress address
, IdentityKey identityKey
, Direction direction
) {
87 return identityKeyStore
.isTrustedIdentity(address
, identityKey
, direction
);
91 public PreKeyRecord
loadPreKey(int preKeyId
) throws InvalidKeyIdException
{
92 return preKeyStore
.loadPreKey(preKeyId
);
96 public void storePreKey(int preKeyId
, PreKeyRecord
record) {
97 preKeyStore
.storePreKey(preKeyId
, record);
101 public boolean containsPreKey(int preKeyId
) {
102 return preKeyStore
.containsPreKey(preKeyId
);
106 public void removePreKey(int preKeyId
) {
107 preKeyStore
.removePreKey(preKeyId
);
111 public SessionRecord
loadSession(SignalProtocolAddress address
) {
112 return sessionStore
.loadSession(address
);
116 public List
<Integer
> getSubDeviceSessions(String name
) {
117 return sessionStore
.getSubDeviceSessions(name
);
121 public void storeSession(SignalProtocolAddress address
, SessionRecord
record) {
122 sessionStore
.storeSession(address
, record);
126 public boolean containsSession(SignalProtocolAddress address
) {
127 return sessionStore
.containsSession(address
);
131 public void deleteSession(SignalProtocolAddress address
) {
132 sessionStore
.deleteSession(address
);
136 public void deleteAllSessions(String name
) {
137 sessionStore
.deleteAllSessions(name
);
141 public SignedPreKeyRecord
loadSignedPreKey(int signedPreKeyId
) throws InvalidKeyIdException
{
142 return signedPreKeyStore
.loadSignedPreKey(signedPreKeyId
);
146 public List
<SignedPreKeyRecord
> loadSignedPreKeys() {
147 return signedPreKeyStore
.loadSignedPreKeys();
151 public void storeSignedPreKey(int signedPreKeyId
, SignedPreKeyRecord
record) {
152 signedPreKeyStore
.storeSignedPreKey(signedPreKeyId
, record);
156 public boolean containsSignedPreKey(int signedPreKeyId
) {
157 return signedPreKeyStore
.containsSignedPreKey(signedPreKeyId
);
161 public void removeSignedPreKey(int signedPreKeyId
) {
162 signedPreKeyStore
.removeSignedPreKey(signedPreKeyId
);