]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/storage/protocol/JsonSignalProtocolStore.java
3dc15cca256dbbf359baf8b719c0bd7baaed82c3
[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
7 import org.asamk.signal.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;
17
18 import java.util.List;
19
20 public class JsonSignalProtocolStore implements SignalProtocolStore {
21
22 @JsonProperty("preKeys")
23 @JsonDeserialize(using = JsonPreKeyStore.JsonPreKeyStoreDeserializer.class)
24 @JsonSerialize(using = JsonPreKeyStore.JsonPreKeyStoreSerializer.class)
25 private JsonPreKeyStore preKeyStore;
26
27 @JsonProperty("sessionStore")
28 @JsonDeserialize(using = JsonSessionStore.JsonSessionStoreDeserializer.class)
29 @JsonSerialize(using = JsonSessionStore.JsonSessionStoreSerializer.class)
30 private JsonSessionStore sessionStore;
31
32 @JsonProperty("signedPreKeyStore")
33 @JsonDeserialize(using = JsonSignedPreKeyStore.JsonSignedPreKeyStoreDeserializer.class)
34 @JsonSerialize(using = JsonSignedPreKeyStore.JsonSignedPreKeyStoreSerializer.class)
35 private JsonSignedPreKeyStore signedPreKeyStore;
36
37 @JsonProperty("identityKeyStore")
38 @JsonDeserialize(using = JsonIdentityKeyStore.JsonIdentityKeyStoreDeserializer.class)
39 @JsonSerialize(using = JsonIdentityKeyStore.JsonIdentityKeyStoreSerializer.class)
40 private JsonIdentityKeyStore identityKeyStore;
41
42 public JsonSignalProtocolStore() {
43 }
44
45 public JsonSignalProtocolStore(JsonPreKeyStore preKeyStore, JsonSessionStore sessionStore, JsonSignedPreKeyStore signedPreKeyStore, JsonIdentityKeyStore identityKeyStore) {
46 this.preKeyStore = preKeyStore;
47 this.sessionStore = sessionStore;
48 this.signedPreKeyStore = signedPreKeyStore;
49 this.identityKeyStore = identityKeyStore;
50 }
51
52 public JsonSignalProtocolStore(IdentityKeyPair identityKeyPair, int registrationId) {
53 preKeyStore = new JsonPreKeyStore();
54 sessionStore = new JsonSessionStore();
55 signedPreKeyStore = new JsonSignedPreKeyStore();
56 this.identityKeyStore = new JsonIdentityKeyStore(identityKeyPair, registrationId);
57 }
58
59 public void setResolver(final SignalServiceAddressResolver resolver) {
60 sessionStore.setResolver(resolver);
61 identityKeyStore.setResolver(resolver);
62 }
63
64 @Override
65 public IdentityKeyPair getIdentityKeyPair() {
66 return identityKeyStore.getIdentityKeyPair();
67 }
68
69 @Override
70 public int getLocalRegistrationId() {
71 return identityKeyStore.getLocalRegistrationId();
72 }
73
74 @Override
75 public boolean saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) {
76 return identityKeyStore.saveIdentity(address, identityKey);
77 }
78
79 public void saveIdentity(SignalServiceAddress serviceAddress, IdentityKey identityKey, TrustLevel trustLevel) {
80 identityKeyStore.saveIdentity(serviceAddress, identityKey, trustLevel, null);
81 }
82
83 public void setIdentityTrustLevel(SignalServiceAddress serviceAddress, IdentityKey identityKey, TrustLevel trustLevel) {
84 identityKeyStore.setIdentityTrustLevel(serviceAddress, identityKey, trustLevel);
85 }
86
87 public List<JsonIdentityKeyStore.Identity> getIdentities() {
88 return identityKeyStore.getIdentities();
89 }
90
91 public List<JsonIdentityKeyStore.Identity> getIdentities(SignalServiceAddress serviceAddress) {
92 return identityKeyStore.getIdentities(serviceAddress);
93 }
94
95 @Override
96 public boolean isTrustedIdentity(SignalProtocolAddress address, IdentityKey identityKey, Direction direction) {
97 return identityKeyStore.isTrustedIdentity(address, identityKey, direction);
98 }
99
100 @Override
101 public IdentityKey getIdentity(SignalProtocolAddress address) {
102 return identityKeyStore.getIdentity(address);
103 }
104
105 public JsonIdentityKeyStore.Identity getIdentity(SignalServiceAddress serviceAddress) {
106 return identityKeyStore.getIdentity(serviceAddress);
107 }
108
109 @Override
110 public PreKeyRecord loadPreKey(int preKeyId) throws InvalidKeyIdException {
111 return preKeyStore.loadPreKey(preKeyId);
112 }
113
114 @Override
115 public void storePreKey(int preKeyId, PreKeyRecord record) {
116 preKeyStore.storePreKey(preKeyId, record);
117 }
118
119 @Override
120 public boolean containsPreKey(int preKeyId) {
121 return preKeyStore.containsPreKey(preKeyId);
122 }
123
124 @Override
125 public void removePreKey(int preKeyId) {
126 preKeyStore.removePreKey(preKeyId);
127 }
128
129 @Override
130 public SessionRecord loadSession(SignalProtocolAddress address) {
131 return sessionStore.loadSession(address);
132 }
133
134 public List<SessionInfo> getSessions() {
135 return sessionStore.getSessions();
136 }
137
138 @Override
139 public List<Integer> getSubDeviceSessions(String name) {
140 return sessionStore.getSubDeviceSessions(name);
141 }
142
143 @Override
144 public void storeSession(SignalProtocolAddress address, SessionRecord record) {
145 sessionStore.storeSession(address, record);
146 }
147
148 @Override
149 public boolean containsSession(SignalProtocolAddress address) {
150 return sessionStore.containsSession(address);
151 }
152
153 @Override
154 public void deleteSession(SignalProtocolAddress address) {
155 sessionStore.deleteSession(address);
156 }
157
158 @Override
159 public void deleteAllSessions(String name) {
160 sessionStore.deleteAllSessions(name);
161 }
162
163 public void deleteAllSessions(SignalServiceAddress serviceAddress) {
164 sessionStore.deleteAllSessions(serviceAddress);
165 }
166
167 @Override
168 public SignedPreKeyRecord loadSignedPreKey(int signedPreKeyId) throws InvalidKeyIdException {
169 return signedPreKeyStore.loadSignedPreKey(signedPreKeyId);
170 }
171
172 @Override
173 public List<SignedPreKeyRecord> loadSignedPreKeys() {
174 return signedPreKeyStore.loadSignedPreKeys();
175 }
176
177 @Override
178 public void storeSignedPreKey(int signedPreKeyId, SignedPreKeyRecord record) {
179 signedPreKeyStore.storeSignedPreKey(signedPreKeyId, record);
180 }
181
182 @Override
183 public boolean containsSignedPreKey(int signedPreKeyId) {
184 return signedPreKeyStore.containsSignedPreKey(signedPreKeyId);
185 }
186
187 @Override
188 public void removeSignedPreKey(int signedPreKeyId) {
189 signedPreKeyStore.removeSignedPreKey(signedPreKeyId);
190 }
191 }