aboutsummaryrefslogtreecommitdiff
path: root/lib/e2ee/qolmoutboundsession.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/e2ee/qolmoutboundsession.cpp')
-rw-r--r--lib/e2ee/qolmoutboundsession.cpp81
1 files changed, 47 insertions, 34 deletions
diff --git a/lib/e2ee/qolmoutboundsession.cpp b/lib/e2ee/qolmoutboundsession.cpp
index a2eff2c8..79c16e01 100644
--- a/lib/e2ee/qolmoutboundsession.cpp
+++ b/lib/e2ee/qolmoutboundsession.cpp
@@ -3,12 +3,20 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
#include "e2ee/qolmoutboundsession.h"
+
#include "e2ee/qolmutils.h"
+#include <olm/olm.h>
+
using namespace Quotient;
-QOlmError lastError(OlmOutboundGroupSession *session) {
- return fromString(olm_outbound_group_session_last_error(session));
+OlmErrorCode QOlmOutboundGroupSession::lastErrorCode() const {
+ return olm_outbound_group_session_last_error_code(m_groupSession);
+}
+
+const char* QOlmOutboundGroupSession::lastError() const
+{
+ return olm_outbound_group_session_last_error(m_groupSession);
}
QOlmOutboundGroupSession::QOlmOutboundGroupSession(OlmOutboundGroupSession *session)
@@ -27,11 +35,12 @@ QOlmOutboundGroupSessionPtr QOlmOutboundGroupSession::create()
const auto randomLength = olm_init_outbound_group_session_random_length(olmOutboundGroupSession);
QByteArray randomBuf = getRandom(randomLength);
- const auto error = olm_init_outbound_group_session(olmOutboundGroupSession,
- reinterpret_cast<uint8_t *>(randomBuf.data()), randomBuf.length());
-
- if (error == olm_error()) {
- throw lastError(olmOutboundGroupSession);
+ if (olm_init_outbound_group_session(
+ olmOutboundGroupSession,
+ reinterpret_cast<uint8_t*>(randomBuf.data()), randomBuf.length())
+ == olm_error()) {
+ // FIXME: create the session object earlier and use lastError()
+ throw olm_outbound_group_session_last_error_code(olmOutboundGroupSession);
}
const auto keyMaxLength = olm_outbound_group_session_key_length(olmOutboundGroupSession);
@@ -48,12 +57,11 @@ QOlmExpected<QByteArray> QOlmOutboundGroupSession::pickle(const PicklingMode &mo
{
QByteArray pickledBuf(olm_pickle_outbound_group_session_length(m_groupSession), '0');
QByteArray key = toKey(mode);
- const auto error = olm_pickle_outbound_group_session(m_groupSession, key.data(), key.length(),
- pickledBuf.data(), pickledBuf.length());
-
- if (error == olm_error()) {
- return lastError(m_groupSession);
- }
+ if (olm_pickle_outbound_group_session(m_groupSession, key.data(),
+ key.length(), pickledBuf.data(),
+ pickledBuf.length())
+ == olm_error())
+ return lastErrorCode();
key.clear();
@@ -65,10 +73,13 @@ QOlmExpected<QOlmOutboundGroupSessionPtr> QOlmOutboundGroupSession::unpickle(con
QByteArray pickledBuf = pickled;
auto *olmOutboundGroupSession = olm_outbound_group_session(new uint8_t[olm_outbound_group_session_size()]);
QByteArray key = toKey(mode);
- const auto error = olm_unpickle_outbound_group_session(olmOutboundGroupSession, key.data(), key.length(),
- pickledBuf.data(), pickledBuf.length());
- if (error == olm_error()) {
- return lastError(olmOutboundGroupSession);
+ if (olm_unpickle_outbound_group_session(olmOutboundGroupSession, key.data(),
+ key.length(), pickledBuf.data(),
+ pickledBuf.length())
+ == olm_error()) {
+ // FIXME: create the session object earlier and use lastError()
+ return olm_outbound_group_session_last_error_code(
+ olmOutboundGroupSession);
}
const auto idMaxLength = olm_outbound_group_session_id_length(olmOutboundGroupSession);
QByteArray idBuffer(idMaxLength, '0');
@@ -84,12 +95,13 @@ QOlmExpected<QByteArray> QOlmOutboundGroupSession::encrypt(const QString &plaint
QByteArray plaintextBuf = plaintext.toUtf8();
const auto messageMaxLength = olm_group_encrypt_message_length(m_groupSession, plaintextBuf.length());
QByteArray messageBuf(messageMaxLength, '0');
- const auto error = olm_group_encrypt(m_groupSession, reinterpret_cast<uint8_t *>(plaintextBuf.data()),
- plaintextBuf.length(), reinterpret_cast<uint8_t *>(messageBuf.data()), messageBuf.length());
-
- if (error == olm_error()) {
- return lastError(m_groupSession);
- }
+ if (olm_group_encrypt(m_groupSession,
+ reinterpret_cast<uint8_t*>(plaintextBuf.data()),
+ plaintextBuf.length(),
+ reinterpret_cast<uint8_t*>(messageBuf.data()),
+ messageBuf.length())
+ == olm_error())
+ return lastErrorCode();
return messageBuf;
}
@@ -103,11 +115,12 @@ QByteArray QOlmOutboundGroupSession::sessionId() const
{
const auto idMaxLength = olm_outbound_group_session_id_length(m_groupSession);
QByteArray idBuffer(idMaxLength, '0');
- const auto error = olm_outbound_group_session_id(m_groupSession, reinterpret_cast<uint8_t *>(idBuffer.data()),
- idBuffer.length());
- if (error == olm_error()) {
- throw lastError(m_groupSession);
- }
+ if (olm_outbound_group_session_id(
+ m_groupSession, reinterpret_cast<uint8_t*>(idBuffer.data()),
+ idBuffer.length())
+ == olm_error())
+ throw lastError();
+
return idBuffer;
}
@@ -115,12 +128,12 @@ QOlmExpected<QByteArray> QOlmOutboundGroupSession::sessionKey() const
{
const auto keyMaxLength = olm_outbound_group_session_key_length(m_groupSession);
QByteArray keyBuffer(keyMaxLength, '0');
- const auto error = olm_outbound_group_session_key(
- m_groupSession, reinterpret_cast<uint8_t*>(keyBuffer.data()),
- keyMaxLength);
- if (error == olm_error()) {
- return lastError(m_groupSession);
- }
+ if (olm_outbound_group_session_key(
+ m_groupSession, reinterpret_cast<uint8_t*>(keyBuffer.data()),
+ keyMaxLength)
+ == olm_error())
+ return lastErrorCode();
+
return keyBuffer;
}