Why is there a KDF for each message?
Author: @mkobetic
Since we cannot rely on the participants to preserve state between messages, we made messages fully self-contained. That requires fulls X3DH and HKDF for each message and consequently we need to preserve the nonces and salts used.