Proteus is an implementation of the axolotl protocol (later renamed to Double Ratchet Algorithm) without header keys. It is suitable for use in asynchronous environments through its use of prekeys.
The roles of the axolotl protocol for a particular session are fixed through the use of prekeys:
-
The side that obtains a prekey and uses it to initiate a session is Alice.
-
The side that receives a prekey message and uses it to initiate a session is Bob.
All cryptographic primitives used in the implementation of the protocol are provided by libsodium:
-
Cipher: ChaCha20
-
MAC: HMAC-SHA256
-
Diffie-Hellman: Curve25519
-
KDF: HKDF (implementation)
For serialisation of messages, sessions and keys, CBOR is used. The precise serialisation format is described in the wiki.
Forked from wire-proteus