aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMelvin Keskin <melvo@olomono.de>2021-09-17 01:35:59 +0200
committerLinus Jahn <lnj@kaidan.im>2021-09-25 15:50:45 +0200
commitd071f033c8298fb159eb8f2fb24462e4d0371dc4 (patch)
tree2218e7f22773447a5605325820e631bbff5c4364
parentceff219b2b7fec21a5feac0b9606a2ebad8c4822 (diff)
downloadqxmpp-d071f033c8298fb159eb8f2fb24462e4d0371dc4.tar.gz
TrustMemoryStorage: Add security policies
-rw-r--r--src/client/QXmppTrustMemoryStorage.cpp21
-rw-r--r--src/client/QXmppTrustMemoryStorage.h3
-rw-r--r--tests/qxmpptrustmemorystorage/tst_qxmpptrustmemorystorage.cpp36
3 files changed, 60 insertions, 0 deletions
diff --git a/src/client/QXmppTrustMemoryStorage.cpp b/src/client/QXmppTrustMemoryStorage.cpp
index 1d9d1909..c6d80179 100644
--- a/src/client/QXmppTrustMemoryStorage.cpp
+++ b/src/client/QXmppTrustMemoryStorage.cpp
@@ -72,6 +72,9 @@ struct UnprocessedKey
class QXmppTrustMemoryStoragePrivate
{
public:
+ // encryption protocols mapped to security policies
+ QMap<QString, QXmppTrustStorage::SecurityPolicy> securityPolicies;
+
// encryption protocols mapped to keys of this client instance
QMap<QString, QString> ownKeys;
@@ -94,6 +97,24 @@ QXmppTrustMemoryStorage::QXmppTrustMemoryStorage()
QXmppTrustMemoryStorage::~QXmppTrustMemoryStorage() = default;
/// \cond
+QFuture<void> QXmppTrustMemoryStorage::setSecurityPolicies(const QString &encryption, const QXmppTrustStorage::SecurityPolicy securityPolicy)
+{
+ if (encryption.isEmpty()) {
+ d->securityPolicies.clear();
+ } else if (securityPolicy == QXmppTrustStorage::NoSecurityPolicy) {
+ d->securityPolicies.remove(encryption);
+ } else {
+ d->securityPolicies.insert(encryption, securityPolicy);
+ }
+
+ return makeReadyFuture();
+}
+
+QFuture<QXmppTrustStorage::SecurityPolicy> QXmppTrustMemoryStorage::securityPolicy(const QString &encryption)
+{
+ return makeReadyFuture(std::move(d->securityPolicies.value(encryption)));
+}
+
QFuture<void> QXmppTrustMemoryStorage::addOwnKey(const QString &encryption, const QString &keyId)
{
d->ownKeys.insert(encryption, keyId);
diff --git a/src/client/QXmppTrustMemoryStorage.h b/src/client/QXmppTrustMemoryStorage.h
index 6c1eb668..eecbaa33 100644
--- a/src/client/QXmppTrustMemoryStorage.h
+++ b/src/client/QXmppTrustMemoryStorage.h
@@ -38,6 +38,9 @@ public:
~QXmppTrustMemoryStorage();
/// \cond
+ QFuture<void> setSecurityPolicies(const QString &encryption = {}, SecurityPolicy securityPolicy = QXmppTrustStorage::NoSecurityPolicy) override;
+ QFuture<SecurityPolicy> securityPolicy(const QString &encryption) override;
+
QFuture<void> addOwnKey(const QString &encryption, const QString &keyId) override;
QFuture<void> removeOwnKey(const QString &encryption) override;
QFuture<QString> ownKey(const QString &encryption) const override;
diff --git a/tests/qxmpptrustmemorystorage/tst_qxmpptrustmemorystorage.cpp b/tests/qxmpptrustmemorystorage/tst_qxmpptrustmemorystorage.cpp
index 63932f07..9d803752 100644
--- a/tests/qxmpptrustmemorystorage/tst_qxmpptrustmemorystorage.cpp
+++ b/tests/qxmpptrustmemorystorage/tst_qxmpptrustmemorystorage.cpp
@@ -33,6 +33,7 @@ class tst_QXmppTrustMemoryStorage : public QObject
Q_OBJECT
private slots:
+ void testSecurityPolicies();
void testOwnKeys();
void testKeys();
void testTrustLevels();
@@ -42,6 +43,41 @@ private:
QXmppTrustMemoryStorage m_trustStorage;
};
+void tst_QXmppTrustMemoryStorage::testSecurityPolicies()
+{
+ auto future = m_trustStorage.securityPolicy(ns_ox);
+ QVERIFY(future.isFinished());
+ auto result = future.result();
+ QCOMPARE(result, QXmppTrustStorage::NoSecurityPolicy);
+
+ m_trustStorage.setSecurityPolicies(ns_ox, QXmppTrustStorage::Toakafa);
+ m_trustStorage.setSecurityPolicies(ns_omemo, QXmppTrustStorage::Toakafa);
+
+ future = m_trustStorage.securityPolicy(ns_ox);
+ QVERIFY(future.isFinished());
+ result = future.result();
+ QCOMPARE(result, QXmppTrustStorage::Toakafa);
+
+ future = m_trustStorage.securityPolicy(ns_omemo);
+ QVERIFY(future.isFinished());
+ result = future.result();
+ QCOMPARE(result, QXmppTrustStorage::Toakafa);
+
+ m_trustStorage.setSecurityPolicies(ns_ox);
+
+ future = m_trustStorage.securityPolicy(ns_ox);
+ QVERIFY(future.isFinished());
+ result = future.result();
+ QCOMPARE(result, QXmppTrustStorage::NoSecurityPolicy);
+
+ m_trustStorage.setSecurityPolicies();
+
+ future = m_trustStorage.securityPolicy(ns_omemo);
+ QVERIFY(future.isFinished());
+ result = future.result();
+ QCOMPARE(result, QXmppTrustStorage::NoSecurityPolicy);
+}
+
void tst_QXmppTrustMemoryStorage::testOwnKeys()
{
m_trustStorage.addOwnKey(ns_ox, QStringLiteral("6850019d7ed0feb6d3823072498ceb4f616c6025586f8f666dc6b9c81ef7e0a4"));