Wire's Rust implementation of the Double Ratchet Algorithm


This repository is part of the source code of Wire. You can find more information at wire.com or by contacting opensource@wire.com .

You can find the published source code at github.com/wireapp .

For licensing information, see the attached LICENSE file and the list of third-party licenses at wire.com/legal/licenses/ .


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 :

For serialisation of messages, sessions and keys, CBOR is used. The precise serialisation format is described in the wiki .