My design takes even more of a hardline approach than those three, which I have looked at. They all have centralized servers that are somewhat trusted. My clients don't trust the server whatsoever, not even to manage identities. The server is very dumb, mostly a packet router, and the regular user pool would use community-run servers (though they might not know this).
The key is having a mandatory, somewhat user-friendly way to establish identity out-of-band. You have to invite contacts via links that encode your pubkeys, or scan a code in person.
i see, you want p2p messages...