An open API service indexing awesome lists of open source software.

https://github.com/codedust/proteus

Axolotl Protocol Implementation
https://github.com/codedust/proteus

Last synced: 10 months ago
JSON representation

Axolotl Protocol Implementation

Awesome Lists containing this project

README

          

= Proteus

// Links
:axolotl: https://github.com/trevp/axolotl/wiki
:whisper: https://whispersystems.org/blog/asynchronous-security/
:sodium: https://github.com/jedisct1/libsodium
:chacha: https://en.wikipedia.org/wiki/Salsa20#ChaCha_variant
:curve25519: https://en.wikipedia.org/wiki/Curve25519
:hkdf-rfc: https://tools.ietf.org/html/rfc5869
:hkdf-impl: https://github.com/twittner/hkdf
:hmac: https://en.wikipedia.org/wiki/Hash-based_message_authentication_code
:mpl: https://img.shields.io/badge/license-MPL_2.0-blue.svg
:travis: https://travis-ci.org/shared-secret/proteus.svg?branch=develop
:cbor: https://tools.ietf.org/html/rfc7049
:wiki: https://github.com/shared-secret/proteus/wiki/Serialisation-format

image:{mpl}["License: MPL-2.0", link="https://www.mozilla.org/MPL/2.0/"]
image:{travis}["Build Status", link="https://travis-ci.org/shared-secret/proteus"]

Proteus is an implementation of the link:{axolotl}[axolotl protocol] without
header keys. It is suitable for use in asynchronous environments through its
use of link:{whisper}[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 link:{sodium}[libsodium]:

- Cipher: link:{chacha}[ChaCha20]
- MAC: link:{hmac}[HMAC-SHA256]
- Diffie-Hellman: link:{curve25519}[Curve25519]
- KDF: link:{hkdf-rfc}[HKDF] (link:{hkdf-impl}[implementation])

For serialisation of messages, sessions and keys, link:{cbor}[CBOR] is used.
The precise serialisation format is described in the link:{wiki}[wiki].