slixmpp-omemo/session.py
lumi 737f5eae33 Fix decryption.
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
2019-01-29 18:05:59 +01:00

61 lines
2.1 KiB
Python

import omemo
from slixmpp.plugins.xep_0384.storage import SQLiteDatabase
from omemo.util import generateDeviceID
import base64
class SessionManager:
def __init__(self, own_jid, db_path):
# Database Inferface
self._store = SQLiteDatabase(db_path)
# OmemoSessionManager
self._sm = omemo.SessionManager(own_jid, self._store, generateDeviceID())
def build_session(self, bundle):
self._store.createSession()
def get_bundle(self):
return self._sm.state.getPublicBundle()
def set_devicelist(self, device_list, jid=None):
self._sm.newDeviceList(device_list, jid)
def get_devicelist(self, jid):
return self._sm.getDevices(jid)
def get_own_device_id(self):
return self._sm.__my_device_id
def get_own_devices(self):
devices = self._sm.getDevices()['active']
if self._sm.__my_device_id not in devices:
devices = list(devices)
devices.append(self._sm.__my_device_id)
return devices
def get_devices_without_session(self, jid):
return self._store.getDevicesWithoutSession(jid)
def get_trusted_fingerprints(self, jid):
return self._store.getTrustedFingerprints(jid)
def save_bundle(self, jid, device_id, bundle):
fingerprint = bundle.fingerprint
self._store.storeBundle(jid, device_id, fingerprint)
def clear_devicelist(self):
return
def encrypt(self, jids, plaintext, bundles=None, devices=None, callback=None):
return self._sm.encryptMessage(jids, plaintext, bundles, devices, callback)
def decrypt(self, jid, sid, iv, message, payload, prekey):
iv = base64.b64decode(iv.get_value())
payload = base64.b64decode(payload.get_value())
message = base64.b64decode(message)
sid = int(sid)
if prekey:
return self._sm.decryptMessage(jid, sid, iv, message, payload)
return self._sm.decryptPreKeyMessage(jid, sid, iv, message, payload)
def buid_session(self, jid, device, bundle, callback):
return self._sm.buildSession(jid, device, bundle, callback)