aboutsummaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
authorMelvin Keskin <melvo@olomono.de>2022-05-09 21:45:49 +0200
committerLinus Jahn <lnj@kaidan.im>2022-08-13 15:55:03 +0200
commitceb62dd9d0d86bc8327ace116930962cf7fad1e9 (patch)
tree35bdcccf3e1bebddadcdab6205383975ca66e4c4 /src/base
parentec0669845b9072ea6cdc0fefb66f1d07511386a4 (diff)
downloadqxmpp-ceb62dd9d0d86bc8327ace116930962cf7fad1e9.tar.gz
Implement XEP-0384: OMEMO Encryption v0.8
This implements XEP-0384 in version v0.8 with a manager and storage classes to be user-implemented for persistant storage. The license of the code is LGPL-2.1-or-later as usual. However since libomemo-c (libsignal-protocol-c) is GPL-3.0, the built binary is always licensed under GPL-3.0. Having our code LGPL licensed will make it avoids relicensing in the future in case we port it to an LGPL compatible omemo library. Closes #133. Co-authored-by: Linus Jahn <lnj@kaidan.im>
Diffstat (limited to 'src/base')
-rw-r--r--src/base/QXmppConstants.cpp2
-rw-r--r--src/base/QXmppConstants_p.h2
-rw-r--r--src/base/QXmppMessage.cpp14
-rw-r--r--src/base/QXmppMessage.h12
-rw-r--r--src/base/QXmppOmemoData.cpp2
5 files changed, 25 insertions, 7 deletions
diff --git a/src/base/QXmppConstants.cpp b/src/base/QXmppConstants.cpp
index 29b3862c..7864d229 100644
--- a/src/base/QXmppConstants.cpp
+++ b/src/base/QXmppConstants.cpp
@@ -170,6 +170,8 @@ const char *ns_spoiler = "urn:xmpp:spoiler:0";
const char *ns_omemo = "eu.siacs.conversations.axolotl";
const char *ns_omemo_1 = "urn:xmpp:omemo:1";
const char *ns_omemo_2 = "urn:xmpp:omemo:2";
+const char *ns_omemo_2_bundles = "urn:xmpp:omemo:2:bundles";
+const char *ns_omemo_2_devices = "urn:xmpp:omemo:2:devices";
// XEP-0405: Mediated Information eXchange (MIX): Participant Server Requirements
const char *ns_mix_pam = "urn:xmpp:mix:pam:1";
const char *ns_mix_roster = "urn:xmpp:mix:roster:0";
diff --git a/src/base/QXmppConstants_p.h b/src/base/QXmppConstants_p.h
index 6583cfdb..3bfff544 100644
--- a/src/base/QXmppConstants_p.h
+++ b/src/base/QXmppConstants_p.h
@@ -182,6 +182,8 @@ extern const char *ns_spoiler;
extern const char *ns_omemo;
extern const char *ns_omemo_1;
extern const char *ns_omemo_2;
+extern const char *ns_omemo_2_bundles;
+extern const char *ns_omemo_2_devices;
// XEP-0405: Mediated Information eXchange (MIX): Participant Server Requirements
extern const char *ns_mix_pam;
extern const char *ns_mix_roster;
diff --git a/src/base/QXmppMessage.cpp b/src/base/QXmppMessage.cpp
index d583fd7e..2f0fb5fe 100644
--- a/src/base/QXmppMessage.cpp
+++ b/src/base/QXmppMessage.cpp
@@ -11,8 +11,10 @@
#include "QXmppConstants_p.h"
#include "QXmppGlobal_p.h"
#include "QXmppMixInvitation.h"
+#ifdef BUILD_OMEMO
#include "QXmppOmemoElement_p.h"
#include "QXmppOmemoEnvelope_p.h"
+#endif
#include "QXmppTrustMessageElement.h"
#include "QXmppUtils.h"
@@ -136,10 +138,10 @@ public:
// XEP-0382: Spoiler messages
bool isSpoiler;
QString spoilerHint;
-
+#ifdef BUILD_OMEMO
// XEP-0384: OMEMO Encryption
std::optional<QXmppOmemoElement> omemoElement;
-
+#endif
// XEP-0407: Mediated Information eXchange (MIX): Miscellaneous Capabilities
std::optional<QXmppMixInvitation> mixInvitation;
@@ -1078,6 +1080,8 @@ void QXmppMessage::setSpoilerHint(const QString &spoilerHint)
d->isSpoiler = true;
}
+#ifdef BUILD_OMEMO
+/// \cond
///
/// Returns an included OMEMO element as defined by \xep{0384, OMEMO Encryption}.
///
@@ -1097,6 +1101,8 @@ void QXmppMessage::setOmemoElement(const std::optional<QXmppOmemoElement> &omemo
{
d->omemoElement = omemoElement;
}
+/// \endcond
+#endif
///
/// Returns an included \xep{0369}: Mediated Information eXchange (MIX)
@@ -1297,6 +1303,7 @@ bool QXmppMessage::parseExtension(const QDomElement &element, QXmpp::SceMode sce
d->encryptionName = element.attribute(QStringLiteral("name"));
return true;
}
+#ifdef BUILD_OMEMO
// XEP-0384: OMEMO Encryption
if (QXmppOmemoElement::isOmemoElement(element)) {
QXmppOmemoElement omemoElement;
@@ -1304,6 +1311,7 @@ bool QXmppMessage::parseExtension(const QDomElement &element, QXmpp::SceMode sce
d->omemoElement = omemoElement;
return true;
}
+#endif
// XEP-0428: Fallback Indication
if (checkElement(element, QStringLiteral("fallback"), ns_fallback_indication)) {
d->isFallback = true;
@@ -1523,10 +1531,12 @@ void QXmppMessage::serializeExtensions(QXmlStreamWriter *writer, QXmpp::SceMode
writer->writeEndElement();
}
+#ifdef BUILD_OMEMO
// XEP-0384: OMEMO Encryption
if (d->omemoElement) {
d->omemoElement->toXml(writer);
}
+#endif
// XEP-0428: Fallback Indication
if (d->isFallback) {
diff --git a/src/base/QXmppMessage.h b/src/base/QXmppMessage.h
index e9d442c1..ba6917c4 100644
--- a/src/base/QXmppMessage.h
+++ b/src/base/QXmppMessage.h
@@ -18,7 +18,9 @@
class QXmppMessagePrivate;
class QXmppBitsOfBinaryDataList;
class QXmppMixInvitation;
+#ifdef BUILD_OMEMO
class QXmppOmemoElement;
+#endif
class QXmppTrustMessageElement;
///
@@ -232,10 +234,6 @@ public:
QString spoilerHint() const;
void setSpoilerHint(const QString &);
- // XEP-0384: OMEMO Encryption
- std::optional<QXmppOmemoElement> omemoElement() const;
- void setOmemoElement(const std::optional<QXmppOmemoElement> &omemoElement);
-
// XEP-0407: Mediated Information eXchange (MIX): Miscellaneous Capabilities
std::optional<QXmppMixInvitation> mixInvitation() const;
void setMixInvitation(const std::optional<QXmppMixInvitation> &mixInvitation);
@@ -249,6 +247,12 @@ public:
void setTrustMessageElement(const std::optional<QXmppTrustMessageElement> &trustMessageElement);
/// \cond
+#ifdef BUILD_OMEMO
+ // XEP-0384: OMEMO Encryption
+ std::optional<QXmppOmemoElement> omemoElement() const;
+ void setOmemoElement(const std::optional<QXmppOmemoElement> &omemoElement);
+#endif
+
void parse(const QDomElement &element) override final;
virtual void parse(const QDomElement &element, QXmpp::SceMode);
void toXml(QXmlStreamWriter *writer) const override final;
diff --git a/src/base/QXmppOmemoData.cpp b/src/base/QXmppOmemoData.cpp
index 33215d67..dd99eefd 100644
--- a/src/base/QXmppOmemoData.cpp
+++ b/src/base/QXmppOmemoData.cpp
@@ -247,7 +247,7 @@ QByteArray QXmppOmemoDeviceBundle::signedPublicPreKeySignature() const
}
///
-/// Returns the signature of the public pre key that is signed.
+/// Sets the signature of the public pre key that is signed.
///
/// \param signature signature of the signed public pre key
///