[omemo] Make sending key transport messages possible

This commit is contained in:
Philipp Hörist
2019-02-24 12:26:45 +01:00
parent 2383ac4d67
commit 0c38ee374c
3 changed files with 43 additions and 1 deletions

View File

@@ -84,3 +84,11 @@ def aes_encrypt_file(data):
key, iv, tag, payload, = _encrypt(data, 32, 16)
payload += tag
return EncryptionResult(payload=payload, key=key, iv=iv)
def get_new_key():
return os.urandom(16)
def get_new_iv():
return os.urandom(16)

View File

@@ -33,7 +33,10 @@ from axolotl.state.prekeybundle import PreKeyBundle
from axolotl.util.keyhelper import KeyHelper
from axolotl.duplicatemessagexception import DuplicateMessageException
from omemo.backend.aes import aes_decrypt, aes_encrypt
from omemo.backend.aes import aes_decrypt
from omemo.backend.aes import aes_encrypt
from omemo.backend.aes import get_new_key
from omemo.backend.aes import get_new_iv
from omemo.backend.devices import DeviceManager
from omemo.backend.devices import NoDevicesFound
from omemo.backend.liteaxolotlstore import LiteAxolotlStore
@@ -201,6 +204,26 @@ class OmemoState(DeviceManager):
iv=result.iv,
payload=result.payload)
def encrypt_key_transport(self, jid, devices):
whisper_messages = defaultdict(dict)
for device in devices:
try:
whisper_messages[jid][device] = self._get_whisper_message(
jid, device, get_new_key())
except Exception:
log.exception('Failed to encrypt')
continue
if not whisper_messages[jid]:
log.error('Encrypted keys empty')
return
log.debug('Finished Key Transport message')
return OMEMOMessage(sid=self.own_device,
keys=whisper_messages[jid],
iv=get_new_iv(),
payload=None)
def has_trusted_keys(self, jid):
inactive = self._storage.getInactiveSessionsKeys(jid)
trusted = self._storage.getTrustedFingerprints(jid)