docs: def encrypt_message_data(self, data):
          """
          Encrypts the given message data using the current authorization key
          following MTProto 2.0 guidelines core.telegram.org/mtproto/description.
          """
          data = struct.pack('<qq', self.salt, self.id) + data
          padding = os.urandom(-(len(data) + 12) % 16 + 12)
  
          # Being substr(what, offset, length); x = 0 for client
          # "msg_key_large = SHA256(substr(auth_key, 88+x, 32) + pt + padding)"
          msg_key_large = sha256(
              self.auth_key.key[88:88 + 32] + data + padding).digest()
  
          # "msg_key = substr (msg_key_large, 8, 16)"
          msg_key = msg_key_large[8:24]
          aes_key, aes_iv = self._calc_key(self.auth_key.key, msg_key, True)
  
          key_id = struct.pack('<Q', self.auth_key.key_id)
          return (key_id + msg_key +
                  AES.encrypt_ige(data + padding, aes_key, aes_iv))