]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/storage/protocol/SignalProtocolStore.java
ea1a5c6fc795bdddeedf5b16303be09096fb7c7d
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / storage / protocol / SignalProtocolStore.java
1 package org.asamk.signal.manager.storage.protocol;
2
3 import org.signal.libsignal.protocol.IdentityKey;
4 import org.signal.libsignal.protocol.IdentityKeyPair;
5 import org.signal.libsignal.protocol.InvalidKeyIdException;
6 import org.signal.libsignal.protocol.NoSessionException;
7 import org.signal.libsignal.protocol.SignalProtocolAddress;
8 import org.signal.libsignal.protocol.groups.state.SenderKeyRecord;
9 import org.signal.libsignal.protocol.state.IdentityKeyStore;
10 import org.signal.libsignal.protocol.state.KyberPreKeyRecord;
11 import org.signal.libsignal.protocol.state.PreKeyRecord;
12 import org.signal.libsignal.protocol.state.SessionRecord;
13 import org.signal.libsignal.protocol.state.SignedPreKeyRecord;
14 import org.signal.libsignal.protocol.state.SignedPreKeyStore;
15 import org.whispersystems.signalservice.api.SignalServiceAccountDataStore;
16 import org.whispersystems.signalservice.api.SignalServiceKyberPreKeyStore;
17 import org.whispersystems.signalservice.api.SignalServicePreKeyStore;
18 import org.whispersystems.signalservice.api.SignalServiceSenderKeyStore;
19 import org.whispersystems.signalservice.api.SignalServiceSessionStore;
20 import org.whispersystems.signalservice.api.push.DistributionId;
21
22 import java.util.Collection;
23 import java.util.List;
24 import java.util.Set;
25 import java.util.UUID;
26 import java.util.function.Supplier;
27
28 public class SignalProtocolStore implements SignalServiceAccountDataStore {
29
30 private final SignalServicePreKeyStore preKeyStore;
31 private final SignedPreKeyStore signedPreKeyStore;
32 private final SignalServiceKyberPreKeyStore kyberPreKeyStore;
33 private final SignalServiceSessionStore sessionStore;
34 private final IdentityKeyStore identityKeyStore;
35 private final SignalServiceSenderKeyStore senderKeyStore;
36 private final Supplier<Boolean> isMultiDevice;
37
38 public SignalProtocolStore(
39 final SignalServicePreKeyStore preKeyStore,
40 final SignedPreKeyStore signedPreKeyStore,
41 final SignalServiceKyberPreKeyStore kyberPreKeyStore,
42 final SignalServiceSessionStore sessionStore,
43 final IdentityKeyStore identityKeyStore,
44 final SignalServiceSenderKeyStore senderKeyStore,
45 final Supplier<Boolean> isMultiDevice
46 ) {
47 this.preKeyStore = preKeyStore;
48 this.signedPreKeyStore = signedPreKeyStore;
49 this.kyberPreKeyStore = kyberPreKeyStore;
50 this.sessionStore = sessionStore;
51 this.identityKeyStore = identityKeyStore;
52 this.senderKeyStore = senderKeyStore;
53 this.isMultiDevice = isMultiDevice;
54 }
55
56 @Override
57 public IdentityKeyPair getIdentityKeyPair() {
58 return identityKeyStore.getIdentityKeyPair();
59 }
60
61 @Override
62 public int getLocalRegistrationId() {
63 return identityKeyStore.getLocalRegistrationId();
64 }
65
66 @Override
67 public boolean saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) {
68 return identityKeyStore.saveIdentity(address, identityKey);
69 }
70
71 @Override
72 public boolean isTrustedIdentity(SignalProtocolAddress address, IdentityKey identityKey, Direction direction) {
73 return identityKeyStore.isTrustedIdentity(address, identityKey, direction);
74 }
75
76 @Override
77 public IdentityKey getIdentity(SignalProtocolAddress address) {
78 return identityKeyStore.getIdentity(address);
79 }
80
81 @Override
82 public PreKeyRecord loadPreKey(int preKeyId) throws InvalidKeyIdException {
83 return preKeyStore.loadPreKey(preKeyId);
84 }
85
86 @Override
87 public void storePreKey(int preKeyId, PreKeyRecord record) {
88 preKeyStore.storePreKey(preKeyId, record);
89 }
90
91 @Override
92 public boolean containsPreKey(int preKeyId) {
93 return preKeyStore.containsPreKey(preKeyId);
94 }
95
96 @Override
97 public void removePreKey(int preKeyId) {
98 preKeyStore.removePreKey(preKeyId);
99 }
100
101 @Override
102 public SessionRecord loadSession(SignalProtocolAddress address) {
103 return sessionStore.loadSession(address);
104 }
105
106 @Override
107 public List<SessionRecord> loadExistingSessions(final List<SignalProtocolAddress> addresses) throws NoSessionException {
108 return sessionStore.loadExistingSessions(addresses);
109 }
110
111 @Override
112 public List<Integer> getSubDeviceSessions(String name) {
113 return sessionStore.getSubDeviceSessions(name);
114 }
115
116 @Override
117 public void storeSession(SignalProtocolAddress address, SessionRecord record) {
118 sessionStore.storeSession(address, record);
119 }
120
121 @Override
122 public boolean containsSession(SignalProtocolAddress address) {
123 return sessionStore.containsSession(address);
124 }
125
126 @Override
127 public void deleteSession(SignalProtocolAddress address) {
128 sessionStore.deleteSession(address);
129 }
130
131 @Override
132 public void deleteAllSessions(String name) {
133 sessionStore.deleteAllSessions(name);
134 }
135
136 @Override
137 public void archiveSession(final SignalProtocolAddress address) {
138 sessionStore.archiveSession(address);
139 senderKeyStore.clearSenderKeySharedWith(List.of(address));
140 }
141
142 @Override
143 public Set<SignalProtocolAddress> getAllAddressesWithActiveSessions(final List<String> addressNames) {
144 return sessionStore.getAllAddressesWithActiveSessions(addressNames);
145 }
146
147 @Override
148 public SignedPreKeyRecord loadSignedPreKey(int signedPreKeyId) throws InvalidKeyIdException {
149 return signedPreKeyStore.loadSignedPreKey(signedPreKeyId);
150 }
151
152 @Override
153 public List<SignedPreKeyRecord> loadSignedPreKeys() {
154 return signedPreKeyStore.loadSignedPreKeys();
155 }
156
157 @Override
158 public void storeSignedPreKey(int signedPreKeyId, SignedPreKeyRecord record) {
159 signedPreKeyStore.storeSignedPreKey(signedPreKeyId, record);
160 }
161
162 @Override
163 public boolean containsSignedPreKey(int signedPreKeyId) {
164 return signedPreKeyStore.containsSignedPreKey(signedPreKeyId);
165 }
166
167 @Override
168 public void removeSignedPreKey(int signedPreKeyId) {
169 signedPreKeyStore.removeSignedPreKey(signedPreKeyId);
170 }
171
172 @Override
173 public void storeSenderKey(
174 final SignalProtocolAddress sender, final UUID distributionId, final SenderKeyRecord record
175 ) {
176 senderKeyStore.storeSenderKey(sender, distributionId, record);
177 }
178
179 @Override
180 public SenderKeyRecord loadSenderKey(final SignalProtocolAddress sender, final UUID distributionId) {
181 return senderKeyStore.loadSenderKey(sender, distributionId);
182 }
183
184 @Override
185 public Set<SignalProtocolAddress> getSenderKeySharedWith(final DistributionId distributionId) {
186 return senderKeyStore.getSenderKeySharedWith(distributionId);
187 }
188
189 @Override
190 public void markSenderKeySharedWith(
191 final DistributionId distributionId, final Collection<SignalProtocolAddress> addresses
192 ) {
193 senderKeyStore.markSenderKeySharedWith(distributionId, addresses);
194 }
195
196 @Override
197 public void clearSenderKeySharedWith(final Collection<SignalProtocolAddress> addresses) {
198 senderKeyStore.clearSenderKeySharedWith(addresses);
199 }
200
201 @Override
202 public boolean isMultiDevice() {
203 return isMultiDevice.get();
204 }
205
206 @Override
207 public KyberPreKeyRecord loadKyberPreKey(final int kyberPreKeyId) throws InvalidKeyIdException {
208 return kyberPreKeyStore.loadKyberPreKey(kyberPreKeyId);
209 }
210
211 @Override
212 public List<KyberPreKeyRecord> loadKyberPreKeys() {
213 return kyberPreKeyStore.loadKyberPreKeys();
214 }
215
216 @Override
217 public void storeKyberPreKey(final int kyberPreKeyId, final KyberPreKeyRecord record) {
218 kyberPreKeyStore.storeKyberPreKey(kyberPreKeyId, record);
219 }
220
221 @Override
222 public boolean containsKyberPreKey(final int kyberPreKeyId) {
223 return kyberPreKeyStore.containsKyberPreKey(kyberPreKeyId);
224 }
225
226 @Override
227 public void markKyberPreKeyUsed(final int kyberPreKeyId) {
228 kyberPreKeyStore.markKyberPreKeyUsed(kyberPreKeyId);
229 }
230
231 @Override
232 public List<KyberPreKeyRecord> loadLastResortKyberPreKeys() {
233 return kyberPreKeyStore.loadLastResortKyberPreKeys();
234 }
235
236 @Override
237 public void removeKyberPreKey(final int i) {
238 kyberPreKeyStore.removeKyberPreKey(i);
239 }
240
241 @Override
242 public void storeLastResortKyberPreKey(final int i, final KyberPreKeyRecord kyberPreKeyRecord) {
243 kyberPreKeyStore.storeLastResortKyberPreKey(i, kyberPreKeyRecord);
244 }
245
246 @Override
247 public void deleteAllStaleOneTimeKyberPreKeys(final long threshold, final int minCount) {
248 kyberPreKeyStore.deleteAllStaleOneTimeKyberPreKeys(threshold, minCount);
249 }
250
251 @Override
252 public void markAllOneTimeKyberPreKeysStaleIfNecessary(final long staleTime) {
253 kyberPreKeyStore.markAllOneTimeKyberPreKeysStaleIfNecessary(staleTime);
254 }
255
256 @Override
257 public void deleteAllStaleOneTimeEcPreKeys(final long threshold, final int minCount) {
258 preKeyStore.deleteAllStaleOneTimeEcPreKeys(threshold, minCount);
259 }
260
261 @Override
262 public void markAllOneTimeEcPreKeysStaleIfNecessary(final long staleTime) {
263 preKeyStore.markAllOneTimeEcPreKeysStaleIfNecessary(staleTime);
264 }
265 }