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