Source code for omemo.message

from abc import ABC, abstractmethod
from typing import FrozenSet, NamedTuple, Optional, Tuple


__all__ = [
    "Content",
    "EncryptedKeyMaterial",
    "KeyExchange",
    "Message",
    "PlainKeyMaterial"
]


[docs] class Content(ABC): """ The encrypted content of an OMEMO-encrypted message. Contains for example the ciphertext, but can contain other backend-specific data that is shared between all recipients. """ @property @abstractmethod def empty(self) -> bool: """ Returns: Whether this instance corresponds to an empty OMEMO message purely used for protocol stability reasons. """
[docs] class PlainKeyMaterial(ABC): """ Key material which be used to decrypt the content. Defails are backend-specific. """
[docs] class EncryptedKeyMaterial(ABC): """ Encrypted key material. When decrypted, the key material can in turn be used to decrypt the content. One collection of key material is included in an OMEMO-encrypted message per recipient. Defails are backend-specific. """ @property @abstractmethod def bare_jid(self) -> str: pass @property @abstractmethod def device_id(self) -> int: pass
[docs] class KeyExchange(ABC): """ Key exchange information, generated by the active part of the session building process, then transferred to and consumed by the passive part of the session building process. Details are backend-specific. """ @property @abstractmethod def identity_key(self) -> bytes: pass
[docs] @abstractmethod def builds_same_session(self, other: "KeyExchange") -> bool: """ Args: other: The other key exchange instance to compare to this instance. Returns: Whether the key exchange information stored in this instance and the key exchange information stored in the other instance would build the same session. """
[docs] class Message(NamedTuple): """ Simple structure representing an OMEMO-encrypted message. """ namespace: str bare_jid: str device_id: int content: Content keys: FrozenSet[Tuple[EncryptedKeyMaterial, Optional[KeyExchange]]]