aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMelvin Keskin <melvo@olomono.de>2022-01-27 17:31:11 +0000
committerLinus Jahn <lnj@kaidan.im>2022-04-07 19:33:45 +0200
commitec7a90955bc14905e966b3f08ad2de9f1fc87016 (patch)
tree5c7980d24d79a43c25e0d0e4a2da2bf5eefb312b
parentd124408fda096d896406f1362b2e5607668e2886 (diff)
downloadqxmpp-ec7a90955bc14905e966b3f08ad2de9f1fc87016.tar.gz
OmemoDeviceBundle: Use QHash instead of QMap for public pre keys
-rw-r--r--src/base/QXmppOmemoData.cpp6
-rw-r--r--src/base/QXmppOmemoDeviceBundle.h2
-rw-r--r--tests/qxmppomemodata/tst_qxmppomemodata.cpp36
3 files changed, 35 insertions, 9 deletions
diff --git a/src/base/QXmppOmemoData.cpp b/src/base/QXmppOmemoData.cpp
index 206e78f2..1ab62b3e 100644
--- a/src/base/QXmppOmemoData.cpp
+++ b/src/base/QXmppOmemoData.cpp
@@ -13,7 +13,7 @@
#include "QXmppUtils.h"
#include <QDomElement>
-#include <QMap>
+#include <QHash>
///
/// \class QXmppOmemoDeviceElement
@@ -237,7 +237,7 @@ public:
QByteArray signedPublicPreKey;
uint32_t signedPublicPreKeyId = 0;
QByteArray signedPublicPreKeySignature;
- QMap<uint32_t, QByteArray> publicPreKeys;
+ QHash<uint32_t, QByteArray> publicPreKeys;
};
///
@@ -359,7 +359,7 @@ void QXmppOmemoDeviceBundle::setSignedPublicPreKeySignature(const QByteArray &si
///
/// \return the public pre keys
///
-QMap<uint32_t, QByteArray> QXmppOmemoDeviceBundle::publicPreKeys() const
+QHash<uint32_t, QByteArray> QXmppOmemoDeviceBundle::publicPreKeys() const
{
return d->publicPreKeys;
}
diff --git a/src/base/QXmppOmemoDeviceBundle.h b/src/base/QXmppOmemoDeviceBundle.h
index 73100c08..f36776ca 100644
--- a/src/base/QXmppOmemoDeviceBundle.h
+++ b/src/base/QXmppOmemoDeviceBundle.h
@@ -35,7 +35,7 @@ public:
QByteArray signedPublicPreKeySignature() const;
void setSignedPublicPreKeySignature(const QByteArray &signature);
- QMap<uint32_t, QByteArray> publicPreKeys() const;
+ QHash<uint32_t, QByteArray> publicPreKeys() const;
void setPublicPreKeys(const QMap<uint32_t, QByteArray> &keys);
/// \cond
diff --git a/tests/qxmppomemodata/tst_qxmppomemodata.cpp b/tests/qxmppomemodata/tst_qxmppomemodata.cpp
index be89a93c..7f288441 100644
--- a/tests/qxmppomemodata/tst_qxmppomemodata.cpp
+++ b/tests/qxmppomemodata/tst_qxmppomemodata.cpp
@@ -212,7 +212,7 @@ void tst_QXmppOmemoData::testIsOmemoDeviceBundle()
void tst_QXmppOmemoData::testOmemoDeviceBundle()
{
- const QByteArray xml(QByteArrayLiteral(
+ const QByteArray xml1(QByteArrayLiteral(
"<bundle xmlns=\"urn:xmpp:omemo:2\">"
"<ik>a012U0R9WixWKUYhYipucnZOWG06akFOR3Q1NGNOOmUK</ik>"
"<spk id=\"1\">Oy5TSG9vVVV4Wz9wUkUvI1lUXiVLIU5bbGIsUV0wRngK</spk>"
@@ -223,19 +223,45 @@ void tst_QXmppOmemoData::testOmemoDeviceBundle()
"</prekeys>"
"</bundle>"));
- const QMap<uint32_t, QByteArray> expectedPublicPreKeys = {
+ // The pre keys can be sorted in the reverse order since it is not fixed.
+ // Thus, another representation is used for the comparision made by
+ // serializePacket().
+ const QByteArray xml2(QByteArrayLiteral(
+ "<bundle xmlns=\"urn:xmpp:omemo:2\">"
+ "<ik>a012U0R9WixWKUYhYipucnZOWG06akFOR3Q1NGNOOmUK</ik>"
+ "<spk id=\"1\">Oy5TSG9vVVV4Wz9wUkUvI1lUXiVLIU5bbGIsUV0wRngK</spk>"
+ "<spks>PTEoSk91VnRZSXBzcFlPXy4jZ3NKcGVZZ2d3YVJbVj8K</spks>"
+ "<prekeys>"
+ "<pk id=\"2\">aDRHdkcxNDNYUmJSNWVObnNWd0RCSzE1QlVKVGQ1RVEK</pk>"
+ "<pk id=\"1\">eDM2cnBiTmo4MmRGQ1RYTkZ0YnVwajJtNWdPdzkxZ0gK</pk>"
+ "</prekeys>"
+ "</bundle>"));
+
+ const QByteArray xmlWithSinglePreKey(QByteArrayLiteral(
+ "<bundle xmlns=\"urn:xmpp:omemo:2\">"
+ "<ik>a012U0R9WixWKUYhYipucnZOWG06akFOR3Q1NGNOOmUK</ik>"
+ "<spk id=\"1\">Oy5TSG9vVVV4Wz9wUkUvI1lUXiVLIU5bbGIsUV0wRngK</spk>"
+ "<spks>PTEoSk91VnRZSXBzcFlPXy4jZ3NKcGVZZ2d3YVJbVj8K</spks>"
+ "<prekeys>"
+ "<pk id=\"1\">eDM2cnBiTmo4MmRGQ1RYTkZ0YnVwajJtNWdPdzkxZ0gK</pk>"
+ "</prekeys>"
+ "</bundle>"));
+
+ const auto xmls = QVector({ xml1, xml2 });
+
+ QHash<uint32_t, QByteArray> expectedPublicPreKeys = {
{ 1, QByteArray::fromBase64(QByteArrayLiteral("eDM2cnBiTmo4MmRGQ1RYTkZ0YnVwajJtNWdPdzkxZ0gK")) },
{ 2, QByteArray::fromBase64(QByteArrayLiteral("aDRHdkcxNDNYUmJSNWVObnNWd0RCSzE1QlVKVGQ1RVEK")) }
};
QXmppOmemoDeviceBundle deviceBundle1;
- parsePacket(deviceBundle1, xml);
+ parsePacket(deviceBundle1, xml1);
QCOMPARE(deviceBundle1.publicIdentityKey().toBase64(), QByteArrayLiteral("a012U0R9WixWKUYhYipucnZOWG06akFOR3Q1NGNOOmUK"));
QCOMPARE(deviceBundle1.signedPublicPreKeyId(), uint32_t(1));
QCOMPARE(deviceBundle1.signedPublicPreKey().toBase64(), QByteArrayLiteral("Oy5TSG9vVVV4Wz9wUkUvI1lUXiVLIU5bbGIsUV0wRngK"));
QCOMPARE(deviceBundle1.signedPublicPreKeySignature().toBase64(), QByteArrayLiteral("PTEoSk91VnRZSXBzcFlPXy4jZ3NKcGVZZ2d3YVJbVj8K"));
QCOMPARE(deviceBundle1.publicPreKeys(), expectedPublicPreKeys);
- serializePacket(deviceBundle1, xml);
+ serializePacket(deviceBundle1, xmls);
QXmppOmemoDeviceBundle deviceBundle2;
deviceBundle2.setPublicIdentityKey(QByteArray::fromBase64(QByteArrayLiteral("a012U0R9WixWKUYhYipucnZOWG06akFOR3Q1NGNOOmUK")));
@@ -248,7 +274,7 @@ void tst_QXmppOmemoData::testOmemoDeviceBundle()
QCOMPARE(deviceBundle2.signedPublicPreKey().toBase64(), QByteArrayLiteral("Oy5TSG9vVVV4Wz9wUkUvI1lUXiVLIU5bbGIsUV0wRngK"));
QCOMPARE(deviceBundle2.signedPublicPreKeySignature().toBase64(), QByteArrayLiteral("PTEoSk91VnRZSXBzcFlPXy4jZ3NKcGVZZ2d3YVJbVj8K"));
QCOMPARE(deviceBundle2.publicPreKeys(), expectedPublicPreKeys);
- serializePacket(deviceBundle2, xml);
+ serializePacket(deviceBundle2, xmls);
}
void tst_QXmppOmemoData::testIsOmemoEnvelope_data()