aboutsummaryrefslogtreecommitdiff
path: root/src/base/QXmppEncryptedFileSource_p.h
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2022-09-16 19:08:02 +0200
committerGitHub <noreply@github.com>2022-09-16 19:08:02 +0200
commitd858e4ae6e0adeaad8d03b055883f411e6d19ab0 (patch)
treee306f607339bd553ba79030fcc90686c5d1422e3 /src/base/QXmppEncryptedFileSource_p.h
parent7878aeb22cc49b31ae527dfc683f2f16b0f79075 (diff)
downloadqxmpp-d858e4ae6e0adeaad8d03b055883f411e6d19ab0.tar.gz
Implement XEP-0448: Encryption for stateless file sharing parsing (#463)
https://xmpp.org/extensions/xep-0448.html Co-authored-by: Jonah BrĂ¼chert <jbb@kaidan.im>
Diffstat (limited to 'src/base/QXmppEncryptedFileSource_p.h')
-rw-r--r--src/base/QXmppEncryptedFileSource_p.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/base/QXmppEncryptedFileSource_p.h b/src/base/QXmppEncryptedFileSource_p.h
new file mode 100644
index 00000000..21270de2
--- /dev/null
+++ b/src/base/QXmppEncryptedFileSource_p.h
@@ -0,0 +1,59 @@
+// SPDX-FileCopyrightText: 2022 Linus Jahn <lnj@kaidan.im>
+// SPDX-FileCopyrightText: 2022 Jonah BrĂ¼chert <jbb@kaidan.im>
+//
+// SPDX-License-Identifier: LGPL-2.1-or-later
+
+#ifndef QXMPPENCRYPTEDFILESOURCE_H
+#define QXMPPENCRYPTEDFILESOURCE_H
+
+#include "QXmppGlobal.h"
+#include "QXmppHash.h"
+#include "QXmppHttpFileSource.h"
+
+#include <QSharedDataPointer>
+#include <QUrl>
+#include <QVector>
+
+class QXmppEncryptedFileSourcePrivate;
+
+// exported for tests
+class QXMPP_EXPORT QXmppEncryptedFileSource
+{
+public:
+ enum Cipher {
+ Aes128GcmNopadding,
+ Aes256GcmNopadding,
+ Aes256CbcPkcs7,
+ };
+
+ QXmppEncryptedFileSource();
+
+ Cipher cipher() const;
+ void setCipher(Cipher newCipher);
+
+ const QByteArray &key() const;
+ void setKey(const QByteArray &newKey);
+
+ const QByteArray &iv() const;
+ void setIv(const QByteArray &newIv);
+
+ const QVector<QXmppHash> &hashes() const;
+ void setHashes(const QVector<QXmppHash> &newHashes);
+
+ const QVector<QXmppHttpFileSource> &httpSources() const;
+ void setHttpSources(const QVector<QXmppHttpFileSource> &newHttpSources);
+
+ /// \cond
+ bool parse(const QDomElement &el);
+ void toXml(QXmlStreamWriter *writer) const;
+ /// \endcond
+
+private:
+ Cipher m_cipher = Aes128GcmNopadding;
+ QByteArray m_key;
+ QByteArray m_iv;
+ QVector<QXmppHash> m_hashes;
+ QVector<QXmppHttpFileSource> m_httpSources;
+};
+
+#endif // QXMPPENCRYPTEDFILESOURCE_H