def __init__(<EOL>self,<EOL>aead,<EOL>message_key_store_max,<EOL>symmetric_key_ratchet,<EOL>ad,<EOL>*args,<EOL>**kwargs<EOL>):
self.__aead    = aead<EOL>self.__mks_max = message_key_store_max<EOL>self.__skr     = symmetric_key_ratchet<EOL>self.__ad      = ad<EOL>self.__saved_message_keys = {}<EOL>super(DoubleRatchet, self).__init__(*args, **kwargs)<EOL>
Initialize a new DoubleRatchet.

:param aead: An instance of an implementation of the AEAD interface, which is used
    to provice authenticated message encryption and is fed with the message keys
    derived using the symmetric key ratchet.
:param message_key_store_max: An integer defining the maximum amount of message
    keys to store before raising an exception. This mechanism allows out-of-order
    messages, by storing message keys of out-of-order messages instead of
    discarding them.
:param symmetric_key_ratchet: An instance of the SymmetricKeyRatchet class, which
    is used to derive en- and decryption keys for message exchange.
:param ad: Some associated data to use for message authentication, encoded as a
    bytes-like object.