diff options
author | Philipp Hörist <philipp@hoerist.com> | 2019-02-24 14:05:04 +0300 |
---|---|---|
committer | Philipp Hörist <philipp@hoerist.com> | 2019-02-24 19:20:17 +0300 |
commit | f6f6895e19da899c229f15561925743d15beca59 (patch) | |
tree | 25b7c045b3d438e8fb4ea0b8c3eb25ffa5481811 /nbxmpp | |
parent | 92b6173d6f0c42ca5b5f38fd55787ad65306a116 (diff) |
OMEMO: Add support for key transport messages
Diffstat (limited to 'nbxmpp')
-rw-r--r-- | nbxmpp/modules/omemo.py | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/nbxmpp/modules/omemo.py b/nbxmpp/modules/omemo.py index 4c138ed..39716da 100644 --- a/nbxmpp/modules/omemo.py +++ b/nbxmpp/modules/omemo.py @@ -25,6 +25,7 @@ from nbxmpp.protocol import NS_EME from nbxmpp.protocol import NS_HINTS from nbxmpp.protocol import NodeProcessed from nbxmpp.protocol import Node +from nbxmpp.protocol import Message from nbxmpp.protocol import isResultNode from nbxmpp.protocol import StanzaMalformed from nbxmpp.util import call_on_response @@ -435,6 +436,25 @@ def create_omemo_message(stanza, omemo_message, store_hint=True, stanza.addChild(node=Node('store', attrs={'xmlns': NS_HINTS})) +def get_key_transport_message(typ, jid, omemo_message): + message = Message(typ=typ, to=jid) + + encrypted = Node('encrypted', attrs={'xmlns': NS_OMEMO_TEMP}) + header = Node('header', attrs={'sid': omemo_message.sid}) + for rid, (key, prekey) in omemo_message.keys.items(): + attrs = {'rid': rid} + if prekey: + attrs['prekey'] = 'true' + child = header.addChild('key', attrs=attrs) + child.addData(b64encode(key)) + + header.addChild('iv').addData(b64encode(omemo_message.iv)) + encrypted.addChild(node=header) + + message.addChild(node=encrypted) + return message + + def cleanup_stanza(stanza, node_whitelist): whitelisted_nodes = [] for tag, ns in node_whitelist: |