]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/storage/protocol/SignalProtocolStore.java
849234232ef2181d4082af13bc3a1aeb9732dc5d
[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.whispersystems.libsignal.IdentityKey;
4 import org.whispersystems.libsignal.IdentityKeyPair;
5 import org.whispersystems.libsignal.InvalidKeyIdException;
6 import org.whispersystems.libsignal.NoSessionException;
7 import org.whispersystems.libsignal.SignalProtocolAddress;
8 import org.whispersystems.libsignal.groups.state.SenderKeyRecord;
9 import org.whispersystems.libsignal.state.IdentityKeyStore;
10 import org.whispersystems.libsignal.state.PreKeyRecord;
11 import org.whispersystems.libsignal.state.PreKeyStore;
12 import org.whispersystems.libsignal.state.SessionRecord;
13 import org.whispersystems.libsignal.state.SignedPreKeyRecord;
14 import org.whispersystems.libsignal.state.SignedPreKeyStore;
15 import org.whispersystems.signalservice.api.SignalServiceDataStore;
16 import org.whispersystems.signalservice.api.SignalServiceSessionStore;
17 import org.whispersystems.signalservice.api.push.DistributionId;
18
19 import java.util.Collection;
20 import java.util.List;
21 import java.util.Set;
22 import java.util.UUID;
23 import java.util.function.Supplier;
24
25 public class SignalProtocolStore implements SignalServiceDataStore {
26
27 private final PreKeyStore preKeyStore;
28 private final SignedPreKeyStore signedPreKeyStore;
29 private final SignalServiceSessionStore sessionStore;
30 private final IdentityKeyStore identityKeyStore;
31 private final Supplier<Boolean> isMultiDevice;
32
33 public SignalProtocolStore(
34 final PreKeyStore preKeyStore,
35 final SignedPreKeyStore signedPreKeyStore,
36 final SignalServiceSessionStore sessionStore,
37 final IdentityKeyStore identityKeyStore,
38 final Supplier<Boolean> isMultiDevice
39 ) {
40 this.preKeyStore = preKeyStore;
41 this.signedPreKeyStore = signedPreKeyStore;
42 this.sessionStore = sessionStore;
43 this.identityKeyStore = identityKeyStore;
44 this.isMultiDevice = isMultiDevice;
45 }
46
47 @Override
48 public IdentityKeyPair getIdentityKeyPair() {
49 return identityKeyStore.getIdentityKeyPair();
50 }
51
52 @Override
53 public int getLocalRegistrationId() {
54 return identityKeyStore.getLocalRegistrationId();
55 }
56
57 @Override
58 public boolean saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) {
59 return identityKeyStore.saveIdentity(address, identityKey);
60 }
61
62 @Override
63 public boolean isTrustedIdentity(SignalProtocolAddress address, IdentityKey identityKey, Direction direction) {
64 return identityKeyStore.isTrustedIdentity(address, identityKey, direction);
65 }
66
67 @Override
68 public IdentityKey getIdentity(SignalProtocolAddress address) {
69 return identityKeyStore.getIdentity(address);
70 }
71
72 @Override
73 public PreKeyRecord loadPreKey(int preKeyId) throws InvalidKeyIdException {
74 return preKeyStore.loadPreKey(preKeyId);
75 }
76
77 @Override
78 public void storePreKey(int preKeyId, PreKeyRecord record) {
79 preKeyStore.storePreKey(preKeyId, record);
80 }
81
82 @Override
83 public boolean containsPreKey(int preKeyId) {
84 return preKeyStore.containsPreKey(preKeyId);
85 }
86
87 @Override
88 public void removePreKey(int preKeyId) {
89 preKeyStore.removePreKey(preKeyId);
90 }
91
92 @Override
93 public SessionRecord loadSession(SignalProtocolAddress address) {
94 return sessionStore.loadSession(address);
95 }
96
97 @Override
98 public List<SessionRecord> loadExistingSessions(final List<SignalProtocolAddress> addresses) throws NoSessionException {
99 return sessionStore.loadExistingSessions(addresses);
100 }
101
102 @Override
103 public List<Integer> getSubDeviceSessions(String name) {
104 return sessionStore.getSubDeviceSessions(name);
105 }
106
107 @Override
108 public void storeSession(SignalProtocolAddress address, SessionRecord record) {
109 sessionStore.storeSession(address, record);
110 }
111
112 @Override
113 public boolean containsSession(SignalProtocolAddress address) {
114 return sessionStore.containsSession(address);
115 }
116
117 @Override
118 public void deleteSession(SignalProtocolAddress address) {
119 sessionStore.deleteSession(address);
120 }
121
122 @Override
123 public void deleteAllSessions(String name) {
124 sessionStore.deleteAllSessions(name);
125 }
126
127 @Override
128 public void archiveSession(final SignalProtocolAddress address) {
129 sessionStore.archiveSession(address);
130 }
131
132 @Override
133 public SignedPreKeyRecord loadSignedPreKey(int signedPreKeyId) throws InvalidKeyIdException {
134 return signedPreKeyStore.loadSignedPreKey(signedPreKeyId);
135 }
136
137 @Override
138 public List<SignedPreKeyRecord> loadSignedPreKeys() {
139 return signedPreKeyStore.loadSignedPreKeys();
140 }
141
142 @Override
143 public void storeSignedPreKey(int signedPreKeyId, SignedPreKeyRecord record) {
144 signedPreKeyStore.storeSignedPreKey(signedPreKeyId, record);
145 }
146
147 @Override
148 public boolean containsSignedPreKey(int signedPreKeyId) {
149 return signedPreKeyStore.containsSignedPreKey(signedPreKeyId);
150 }
151
152 @Override
153 public void removeSignedPreKey(int signedPreKeyId) {
154 signedPreKeyStore.removeSignedPreKey(signedPreKeyId);
155 }
156
157 @Override
158 public void storeSenderKey(
159 final SignalProtocolAddress sender, final UUID distributionId, final SenderKeyRecord record
160 ) {
161 // TODO
162 }
163
164 @Override
165 public SenderKeyRecord loadSenderKey(final SignalProtocolAddress sender, final UUID distributionId) {
166 // TODO
167 return null;
168 }
169
170 @Override
171 public Set<SignalProtocolAddress> getSenderKeySharedWith(final DistributionId distributionId) {
172 // TODO
173 return null;
174 }
175
176 @Override
177 public void markSenderKeySharedWith(
178 final DistributionId distributionId, final Collection<SignalProtocolAddress> addresses
179 ) {
180 // TODO
181 }
182
183 @Override
184 public void clearSenderKeySharedWith(final Collection<SignalProtocolAddress> addresses) {
185 // TODO
186 }
187
188 @Override
189 public boolean isMultiDevice() {
190 return isMultiDevice.get();
191 }
192 }