diff options
| author | Melvin Keskin <melvo@olomono.de> | 2022-01-27 17:31:11 +0000 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2022-04-07 19:33:45 +0200 |
| commit | ec7a90955bc14905e966b3f08ad2de9f1fc87016 (patch) | |
| tree | 5c7980d24d79a43c25e0d0e4a2da2bf5eefb312b | |
| parent | d124408fda096d896406f1362b2e5607668e2886 (diff) | |
| download | qxmpp-ec7a90955bc14905e966b3f08ad2de9f1fc87016.tar.gz | |
OmemoDeviceBundle: Use QHash instead of QMap for public pre keys
| -rw-r--r-- | src/base/QXmppOmemoData.cpp | 6 | ||||
| -rw-r--r-- | src/base/QXmppOmemoDeviceBundle.h | 2 | ||||
| -rw-r--r-- | tests/qxmppomemodata/tst_qxmppomemodata.cpp | 36 |
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() |
