The first vulnerability alone is awful!
Clients don't require signatures on keys from the server and don't validate signatures if present, so the server can just lie about keys used to encrypt conversations.
If the server can substitute participants, you don't have a secure messaging system.