diff options
| author | Melvin Keskin <melvo@olomono.de> | 2022-05-09 21:45:49 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2022-08-13 15:55:03 +0200 |
| commit | ceb62dd9d0d86bc8327ace116930962cf7fad1e9 (patch) | |
| tree | 35bdcccf3e1bebddadcdab6205383975ca66e4c4 /src/base | |
| parent | ec0669845b9072ea6cdc0fefb66f1d07511386a4 (diff) | |
| download | qxmpp-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.cpp | 2 | ||||
| -rw-r--r-- | src/base/QXmppConstants_p.h | 2 | ||||
| -rw-r--r-- | src/base/QXmppMessage.cpp | 14 | ||||
| -rw-r--r-- | src/base/QXmppMessage.h | 12 | ||||
| -rw-r--r-- | src/base/QXmppOmemoData.cpp | 2 |
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 /// |
