Philipp Hörist pushed to branch master at gajim / python-nbxmpp
Commits:
bb783cb0 by Philipp Hörist at 2026-08-10T23:48:08+02:00
imprv: OMEMO: Harden bundle parser
- - - - -
2 changed files:
- nbxmpp/modules/omemo.py
- test/unit/test_omemo.py
Changes:
=====================================
nbxmpp/modules/omemo.py
=====================================
@@ -275,7 +275,9 @@ def _parse_bundle(item: Node | None, device_id: int) ->
OMEMOBundle:
raise MalformedStanzaError("No bundle node found", item)
result = {}
- signed_prekey_node = bundle.getTag("signedPreKeyPublic")
+ signed_prekey_node = bundle.getTag(
+ "signedPreKeyPublic", namespace=Namespace.OMEMO_TEMP
+ )
try:
result["spk"] = {"key": b64decode(signed_prekey_node.getData())}
except Exception as error:
@@ -288,26 +290,32 @@ def _parse_bundle(item: Node | None, device_id: int) ->
OMEMOBundle:
except Exception as error:
raise MalformedStanzaError("Invalid signedPreKeyId: %s" % error, item)
- signed_signature_node = bundle.getTag("signedPreKeySignature")
+ signed_signature_node = bundle.getTag(
+ "signedPreKeySignature", namespace=Namespace.OMEMO_TEMP
+ )
try:
result["spk_signature"] = b64decode(signed_signature_node.getData())
except Exception as error:
error = "Failed to decode signedPreKeySignature: %s" % error
raise MalformedStanzaError(error, item)
- identity_key_node = bundle.getTag("identityKey")
+ identity_key_node = bundle.getTag("identityKey",
namespace=Namespace.OMEMO_TEMP)
try:
result["ik"] = b64decode(identity_key_node.getData())
except Exception as error:
error = "Failed to decode IdentityKey: %s" % error
raise MalformedStanzaError(error, item)
- prekeys = bundle.getTag("prekeys")
- if prekeys is None or not prekeys.getChildren():
+ prekeys_node = bundle.getTag("prekeys", namespace=Namespace.OMEMO_TEMP)
+ if prekeys_node is None:
raise MalformedStanzaError("No prekeys node found", item)
+ prekeys = prekeys_node.getTags("preKeyPublic",
namespace=Namespace.OMEMO_TEMP)
+ if not prekeys:
+ raise MalformedStanzaError("No prekeys found", item)
+
result["otpks"] = []
- for prekey in prekeys.getChildren():
+ for prekey in prekeys:
try:
id_ = int(prekey.getAttr("preKeyId"))
except Exception as error:
=====================================
test/unit/test_omemo.py
=====================================
@@ -1,5 +1,6 @@
import unittest
+from nbxmpp.modules.omemo import _parse_bundle
from nbxmpp.modules.omemo import _parse_devicelist
from nbxmpp.simplexml import Node
@@ -19,3 +20,21 @@ class OMEMOTest(unittest.TestCase):
devices = _parse_devicelist(Node(node=devicelist))
self.assertEqual(devices, [912561474, 532656838])
+
+ bundle = """
+ <item id='current'>
+ <bundle xmlns='eu.siacs.conversations.axolotl'>
+ <signedPreKeyPublic
signedPreKeyId='1'>dGVzdHBheWxvYWQ=</signedPreKeyPublic>
+ <signedPreKeySignature>dGVzdHBheWxvYWQ=</signedPreKeySignature>
+ <identityKey>dGVzdHBheWxvYWQ=</identityKey>
+ <prekeys>
+ <preKeyPublic preKeyId='1'>dGVzdHBheWxvYWQ=</preKeyPublic>
+ <preKeyPublic preKeyId='2'>dGVzdHBheWxvYWQ=</preKeyPublic>
+ <preKeyPublic preKeyId='3'>dGVzdHBheWxvYWQ=</preKeyPublic>
+ <preKeyPublic preKeyId='3'
xmlns="test.namespace">dGVzdHBheWxvYWQ=</preKeyPublic>
+ </prekeys>
+ </bundle>
+ </item>"""
+
+ omemo_bundle = _parse_bundle(Node(node=bundle), 1)
+ self.assertEqual(len(omemo_bundle.otpks), 3)
View it on GitLab:
https://dev.gajim.org/gajim/python-nbxmpp/-/commit/bb783cb00888889449eb8780e0cbebcab29e51e0
--
View it on GitLab:
https://dev.gajim.org/gajim/python-nbxmpp/-/commit/bb783cb00888889449eb8780e0cbebcab29e51e0
You're receiving this email because of your account on dev.gajim.org.
_______________________________________________
Commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]