The Double Ratchet algorithm has other purposes than simple forward
secrecy, and is quite complicated, and rely on some prior key exchange
protocol to boot. Pointing to it wasn't good general purpose advice.
X3DH is what we were looking for. It is simple enough, and addresses
the main issues around key exchange (forward secrecy, replay attacks, and
deniability).
If either of the long term secret keys leaks, it may compromise
.Em all past messages .
This can be avoided by using protocols that provide forward secrecy,
-such as the Double Ratchet Algorithm.
+such as the X3DH key agreement protocol.
.Sh IMPLEMENTATION DETAILS
.Fn crypto_key_exchange_public_key
is an alias to
If either of the long term secret keys leaks, it may compromise
.Em all past messages .
This can be avoided by using protocols that provide forward secrecy,
-such as the Double Ratchet Algorithm.
+such as the X3DH key agreement protocol.
.Sh IMPLEMENTATION DETAILS
The most significant bit of the public key is systematically ignored.
It is not needed because every public key should be smaller than