]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/storage/protocol/JsonSignalProtocolStore.java
0085f0c7d3db7a915e12357ee6c0032045afab62
[signal-cli] / src / main / java / org / asamk / signal / storage / protocol / JsonSignalProtocolStore.java
1 package org.asamk.signal.storage.protocol;
2
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;
15
16 import java.util.List;
17 import java.util.Map;
18
19 public class JsonSignalProtocolStore implements SignalProtocolStore {
20
21 @JsonProperty("preKeys")
22 @JsonDeserialize(using = JsonPreKeyStore.JsonPreKeyStoreDeserializer.class)
23 @JsonSerialize(using = JsonPreKeyStore.JsonPreKeyStoreSerializer.class)
24 protected JsonPreKeyStore preKeyStore;
25
26 @JsonProperty("sessionStore")
27 @JsonDeserialize(using = JsonSessionStore.JsonSessionStoreDeserializer.class)
28 @JsonSerialize(using = JsonSessionStore.JsonPreKeyStoreSerializer.class)
29 protected JsonSessionStore sessionStore;
30
31 @JsonProperty("signedPreKeyStore")
32 @JsonDeserialize(using = JsonSignedPreKeyStore.JsonSignedPreKeyStoreDeserializer.class)
33 @JsonSerialize(using = JsonSignedPreKeyStore.JsonSignedPreKeyStoreSerializer.class)
34 protected JsonSignedPreKeyStore signedPreKeyStore;
35
36 @JsonProperty("identityKeyStore")
37 @JsonDeserialize(using = JsonIdentityKeyStore.JsonIdentityKeyStoreDeserializer.class)
38 @JsonSerialize(using = JsonIdentityKeyStore.JsonIdentityKeyStoreSerializer.class)
39 protected JsonIdentityKeyStore identityKeyStore;
40
41 public JsonSignalProtocolStore() {
42 }
43
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;
49 }
50
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);
56 }
57
58 @Override
59 public IdentityKeyPair getIdentityKeyPair() {
60 return identityKeyStore.getIdentityKeyPair();
61 }
62
63 @Override
64 public int getLocalRegistrationId() {
65 return identityKeyStore.getLocalRegistrationId();
66 }
67
68 @Override
69 public boolean saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) {
70 return identityKeyStore.saveIdentity(address, identityKey);
71 }
72
73 public void saveIdentity(String name, IdentityKey identityKey, TrustLevel trustLevel) {
74 identityKeyStore.saveIdentity(name, identityKey, trustLevel, null);
75 }
76
77 public Map<String, List<JsonIdentityKeyStore.Identity>> getIdentities() {
78 return identityKeyStore.getIdentities();
79 }
80
81 public List<JsonIdentityKeyStore.Identity> getIdentities(String name) {
82 return identityKeyStore.getIdentities(name);
83 }
84
85 @Override
86 public boolean isTrustedIdentity(SignalProtocolAddress address, IdentityKey identityKey, Direction direction) {
87 return identityKeyStore.isTrustedIdentity(address, identityKey, direction);
88 }
89
90 @Override
91 public PreKeyRecord loadPreKey(int preKeyId) throws InvalidKeyIdException {
92 return preKeyStore.loadPreKey(preKeyId);
93 }
94
95 @Override
96 public void storePreKey(int preKeyId, PreKeyRecord record) {
97 preKeyStore.storePreKey(preKeyId, record);
98 }
99
100 @Override
101 public boolean containsPreKey(int preKeyId) {
102 return preKeyStore.containsPreKey(preKeyId);
103 }
104
105 @Override
106 public void removePreKey(int preKeyId) {
107 preKeyStore.removePreKey(preKeyId);
108 }
109
110 @Override
111 public SessionRecord loadSession(SignalProtocolAddress address) {
112 return sessionStore.loadSession(address);
113 }
114
115 @Override
116 public List<Integer> getSubDeviceSessions(String name) {
117 return sessionStore.getSubDeviceSessions(name);
118 }
119
120 @Override
121 public void storeSession(SignalProtocolAddress address, SessionRecord record) {
122 sessionStore.storeSession(address, record);
123 }
124
125 @Override
126 public boolean containsSession(SignalProtocolAddress address) {
127 return sessionStore.containsSession(address);
128 }
129
130 @Override
131 public void deleteSession(SignalProtocolAddress address) {
132 sessionStore.deleteSession(address);
133 }
134
135 @Override
136 public void deleteAllSessions(String name) {
137 sessionStore.deleteAllSessions(name);
138 }
139
140 @Override
141 public SignedPreKeyRecord loadSignedPreKey(int signedPreKeyId) throws InvalidKeyIdException {
142 return signedPreKeyStore.loadSignedPreKey(signedPreKeyId);
143 }
144
145 @Override
146 public List<SignedPreKeyRecord> loadSignedPreKeys() {
147 return signedPreKeyStore.loadSignedPreKeys();
148 }
149
150 @Override
151 public void storeSignedPreKey(int signedPreKeyId, SignedPreKeyRecord record) {
152 signedPreKeyStore.storeSignedPreKey(signedPreKeyId, record);
153 }
154
155 @Override
156 public boolean containsSignedPreKey(int signedPreKeyId) {
157 return signedPreKeyStore.containsSignedPreKey(signedPreKeyId);
158 }
159
160 @Override
161 public void removeSignedPreKey(int signedPreKeyId) {
162 signedPreKeyStore.removeSignedPreKey(signedPreKeyId);
163 }
164 }