aboutsummaryrefslogtreecommitdiff
path: root/lib/crypto/qolmoutboundsession.h
diff options
context:
space:
mode:
authorCarl Schwan <carl@carlschwan.eu>2021-01-28 21:54:37 +0100
committerTobias Fella <fella@posteo.de>2021-12-01 21:34:52 +0100
commitdd0316ce57bd9256a093d66845e1d40cd9426ba4 (patch)
tree900996974e3bdec3a3ceda2ebdae0377dacc80e4 /lib/crypto/qolmoutboundsession.h
parent5910689306149cacf3ac644d3ea42e10f889e3fe (diff)
downloadlibquotient-dd0316ce57bd9256a093d66845e1d40cd9426ba4.tar.gz
libquotient-dd0316ce57bd9256a093d66845e1d40cd9426ba4.zip
Move files
Diffstat (limited to 'lib/crypto/qolmoutboundsession.h')
-rw-r--r--lib/crypto/qolmoutboundsession.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/lib/crypto/qolmoutboundsession.h b/lib/crypto/qolmoutboundsession.h
new file mode 100644
index 00000000..6c6c635c
--- /dev/null
+++ b/lib/crypto/qolmoutboundsession.h
@@ -0,0 +1,54 @@
+// SPDX-FileCopyrightText: 2021 Carl Schwan <carlschwan@kde.org>
+//
+// SPDX-License-Identifier: LGPL-2.1-or-later
+#pragma once
+#ifdef Quotient_E2EE_ENABLED
+
+#include "olm/olm.h" // from Olm
+#include "crypto/errors.h"
+#include "crypto/e2ee.h"
+#include <memory>
+
+namespace Quotient {
+
+
+//! An out-bound group session is responsible for encrypting outgoing
+//! communication in a Megolm session.
+class QOlmOutboundGroupSession
+{
+public:
+ ~QOlmOutboundGroupSession();
+ //! Creates a new instance of `QOlmOutboundGroupSession`.
+ //! Throw OlmError on errors
+ static std::unique_ptr<QOlmOutboundGroupSession> create();
+ //! Serialises an `QOlmOutboundGroupSession` to encrypted Base64.
+ std::variant<QByteArray, OlmError> pickle(const PicklingMode &mode);
+ //! Deserialises from encrypted Base64 that was previously obtained by
+ //! pickling a `QOlmOutboundGroupSession`.
+ static std::variant<std::unique_ptr<QOlmOutboundGroupSession>, OlmError> unpickle(QByteArray &pickled, const PicklingMode &mode);
+ //! Encrypts a plaintext message using the session.
+ std::variant<QByteArray, OlmError> encrypt(const QString &plaintext);
+
+ //! Get the current message index for this session.
+ //!
+ //! Each message is sent with an increasing index; this returns the
+ //! index for the next message.
+ uint32_t sessionMessageIndex() const;
+
+ //! Get a base64-encoded identifier for this session.
+ QByteArray sessionId() const;
+
+ //! Get the base64-encoded current ratchet key for this session.
+ //!
+ //! Each message is sent with a different ratchet key. This function returns the
+ //! ratchet key that will be used for the next message.
+ std::variant<QByteArray, OlmError> sessionKey() const;
+ QOlmOutboundGroupSession(OlmOutboundGroupSession *groupSession);
+private:
+ OlmOutboundGroupSession *m_groupSession;
+};
+
+using QOlmOutboundGroupSessionPtr = std::unique_ptr<QOlmOutboundGroupSession>;
+using OlmOutboundGroupSessionPtr = std::unique_ptr<OlmOutboundGroupSession>;
+}
+#endif