xep_0384: First attempt at decrypting messages

Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
Maxime “pep” Buquet 2018-05-23 21:13:06 +01:00
parent f38fbc6b60
commit deba255cb0

View file

@ -12,7 +12,7 @@ import base64
import asyncio
from slixmpp.plugins.xep_0384.stanza import OMEMO_BASE_NS
from slixmpp.plugins.xep_0384.stanza import OMEMO_DEVICES_NS, OMEMO_BUNDLES_NS
from slixmpp.plugins.xep_0384.stanza import Devices, Device, PreKeyPublic
from slixmpp.plugins.xep_0384.stanza import Devices, Device, Key, PreKeyPublic
from slixmpp.plugins.base import BasePlugin, register_plugin
log = logging.getLogger(__name__)
@ -24,6 +24,8 @@ try:
except ImportError as e:
HAS_OMEMO = False
TRUE_VALUES = {True, 'true', '1'}
def b64enc(data):
return base64.b64encode(bytes(bytearray(data))).decode('ASCII')
@ -179,5 +181,25 @@ class XEP_0384(BasePlugin):
def is_encrypted(self, msg):
return msg.xml.find('{%s}encrypted' % OMEMO_BASE_NS) is not None
def decrypt_message(self, msg):
header = msg['omemo_encrypted']['header']
payload = msg['omemo_encrypted']['payload']
jid = msg['from']
sid = header['sid']
key = header.xml.find("{%s}key[@rid='%s']" % (
OMEMO_BASE_NS, self._device_id))
if key is None:
log.debug("Saw encrypted message that wasn't for me, ignoring.")
return
key = Key(key)
prekey = key['prekey'] in TRUE_VALUES
message = key['value']
iv = header['iv']
return self._omemo.decrypt(jid, sid, iv, message, payload, prekey)
register_plugin(XEP_0384)