From f0e0e1cd227c08ffd97aa42813a479b8c3ca6d23 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Tue, 31 May 2022 12:22:48 +0200 Subject: Split up OMEMO into extra module --- src/omemo/QXmppOmemoMemoryStorage.cpp | 119 ++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 src/omemo/QXmppOmemoMemoryStorage.cpp (limited to 'src/omemo/QXmppOmemoMemoryStorage.cpp') diff --git a/src/omemo/QXmppOmemoMemoryStorage.cpp b/src/omemo/QXmppOmemoMemoryStorage.cpp new file mode 100644 index 00000000..6ff81002 --- /dev/null +++ b/src/omemo/QXmppOmemoMemoryStorage.cpp @@ -0,0 +1,119 @@ +// SPDX-FileCopyrightText: 2022 Melvin Keskin +// +// SPDX-License-Identifier: LGPL-2.1-or-later + +#include "QXmppOmemoMemoryStorage.h" + +#include "QXmppFutureUtils_p.h" + +using namespace QXmpp::Private; + +/// +/// \class QXmppOmemoMemoryStorage +/// +/// \brief The QXmppOmemoMemoryStorage class stores data used by +/// \xep{0384, OMEMO Encryption} in the memory. +/// +/// \warning THIS API IS NOT FINALIZED YET! +/// +/// \since QXmpp 1.5 +/// + +class QXmppOmemoMemoryStoragePrivate +{ +public: + bool isSetUp = false; + + std::optional ownDevice; + + // IDs of pre key pairs mapped to pre key pairs + QHash preKeyPairs; + + // IDs of signed pre key pairs mapped to signed pre key pairs + QHash signedPreKeyPairs; + + // recipient JID mapped to device ID mapped to device + QHash> devices; +}; + +/// +/// Constructs an OMEMO memory storage. +/// +QXmppOmemoMemoryStorage::QXmppOmemoMemoryStorage() + : d(new QXmppOmemoMemoryStoragePrivate) +{ +} + +QXmppOmemoMemoryStorage::~QXmppOmemoMemoryStorage() = default; + +/// \cond +QFuture QXmppOmemoMemoryStorage::allData() +{ + return makeReadyFuture(std::move(OmemoData { d->ownDevice, + d->signedPreKeyPairs, + d->preKeyPairs, + d->devices })); +} + +QFuture QXmppOmemoMemoryStorage::setOwnDevice(const std::optional &device) +{ + d->ownDevice = device; + return makeReadyFuture(); +} + +QFuture QXmppOmemoMemoryStorage::addSignedPreKeyPair(const uint32_t keyId, const SignedPreKeyPair &keyPair) +{ + d->signedPreKeyPairs.insert(keyId, keyPair); + return makeReadyFuture(); +} + +QFuture QXmppOmemoMemoryStorage::removeSignedPreKeyPair(const uint32_t keyId) +{ + d->signedPreKeyPairs.remove(keyId); + return makeReadyFuture(); +} + +QFuture QXmppOmemoMemoryStorage::addPreKeyPairs(const QHash &keyPairs) +{ + d->preKeyPairs.insert(keyPairs); + return makeReadyFuture(); +} + +QFuture QXmppOmemoMemoryStorage::removePreKeyPair(const uint32_t keyId) +{ + d->preKeyPairs.remove(keyId); + return makeReadyFuture(); +} + +QFuture QXmppOmemoMemoryStorage::addDevice(const QString &jid, const uint32_t deviceId, const QXmppOmemoStorage::Device &device) +{ + d->devices[jid].insert(deviceId, device); + return makeReadyFuture(); +} + +QFuture QXmppOmemoMemoryStorage::removeDevice(const QString &jid, const uint32_t deviceId) +{ + auto &devices = d->devices[jid]; + devices.remove(deviceId); + + // Remove the container for the passed JID if the container stores no + // devices anymore. + if (devices.isEmpty()) { + d->devices.remove(jid); + } + + return makeReadyFuture(); +} + +QFuture QXmppOmemoMemoryStorage::removeDevices(const QString &jid) +{ + d->devices.remove(jid); + return makeReadyFuture(); +} + +QFuture QXmppOmemoMemoryStorage::resetAll() +{ + d.reset(new QXmppOmemoMemoryStoragePrivate()); + return makeReadyFuture(); +} +/// \endcond -- cgit v1.2.3