QXmpp  Version: 1.5.3
QXmppOmemoStorage.h
1 // SPDX-FileCopyrightText: 2022 Melvin Keskin <melvo@olomono.de>
2 //
3 // SPDX-License-Identifier: LGPL-2.1-or-later
4 
5 #ifndef QXMPPOMEMOSTORAGE_H
6 #define QXMPPOMEMOSTORAGE_H
7 
8 #include "QXmppTask.h"
9 #include "qxmppomemo_export.h"
10 
11 #include <optional>
12 
13 #include <QDateTime>
14 #include <QFuture>
15 
16 class QXMPPOMEMO_EXPORT QXmppOmemoStorage
17 {
18 public:
22  struct OwnDevice
23  {
30  uint32_t id = 0;
31 
37  QString label;
38 
42  QByteArray privateIdentityKey;
43 
47  QByteArray publicIdentityKey;
48 
55  uint32_t latestSignedPreKeyId = 1;
56 
63  uint32_t latestPreKeyId = 1;
64  };
65 
71  struct Device
72  {
76  QString label;
77 
81  QByteArray keyId;
82 
86  QByteArray session;
87 
94  int unrespondedSentStanzasCount = 0;
95 
103  int unrespondedReceivedStanzasCount = 0;
104 
111  };
112 
117  {
121  QDateTime creationDate;
122 
126  QByteArray data;
127  };
128 
132  struct OmemoData
133  {
137  std::optional<OwnDevice> ownDevice;
138 
142  QHash<uint32_t, SignedPreKeyPair> signedPreKeyPairs;
143 
147  QHash<uint32_t, QByteArray> preKeyPairs;
148 
153  QHash<QString, QHash<uint32_t, Device>> devices;
154  };
155 
156  virtual ~QXmppOmemoStorage() = default;
157 
158  virtual QXmppTask<OmemoData> allData() = 0;
159 
160  virtual QXmppTask<void> setOwnDevice(const std::optional<OwnDevice> &device) = 0;
161 
162  virtual QXmppTask<void> addSignedPreKeyPair(uint32_t keyId, const SignedPreKeyPair &keyPair) = 0;
163  virtual QXmppTask<void> removeSignedPreKeyPair(uint32_t keyId) = 0;
164 
165  virtual QXmppTask<void> addPreKeyPairs(const QHash<uint32_t, QByteArray> &keyPairs) = 0;
166  virtual QXmppTask<void> removePreKeyPair(uint32_t keyId) = 0;
167 
168  virtual QXmppTask<void> addDevice(const QString &jid, uint32_t deviceId, const Device &device) = 0;
169  virtual QXmppTask<void> removeDevice(const QString &jid, uint32_t deviceId) = 0;
170  virtual QXmppTask<void> removeDevices(const QString &jid) = 0;
171 
172  virtual QXmppTask<void> resetAll() = 0;
173 };
174 
175 #endif // QXMPPOMEMOSTORAGE_H
QByteArray keyId
Definition: QXmppOmemoStorage.h:81
QHash< QString, QHash< uint32_t, Device > > devices
Definition: QXmppOmemoStorage.h:153
QString label
Definition: QXmppOmemoStorage.h:76
Definition: QXmppOmemoStorage.h:132
The QXmppOmemoStorage class stores data used by XEP-0384: OMEMO Encryption.
Definition: QXmppOmemoStorage.h:16
QHash< uint32_t, QByteArray > preKeyPairs
Definition: QXmppOmemoStorage.h:147
Definition: QXmppStream.h:20
QString label
Definition: QXmppOmemoStorage.h:37
QDateTime creationDate
Definition: QXmppOmemoStorage.h:121
QByteArray publicIdentityKey
Definition: QXmppOmemoStorage.h:47
Definition: QXmppOmemoStorage.h:116
std::optional< OwnDevice > ownDevice
Definition: QXmppOmemoStorage.h:137
QByteArray data
Definition: QXmppOmemoStorage.h:126
Definition: QXmppOmemoStorage.h:71
QByteArray session
Definition: QXmppOmemoStorage.h:86
QDateTime removalFromDeviceListDate
Definition: QXmppOmemoStorage.h:110
Definition: QXmppOmemoStorage.h:22
QByteArray privateIdentityKey
Definition: QXmppOmemoStorage.h:42
QHash< uint32_t, SignedPreKeyPair > signedPreKeyPairs
Definition: QXmppOmemoStorage.h:142