Crate libwhisper [] [src]

Angel Whisper

Gitter Build Status codecov The reference implementation of Angel Whisper Wire Protocol under development. As of today, this is the only documentation of protocol available. This is refactoring of my first attempt to write this thing. However my first attempt was too broad, so I've made a decision to separate llsd module into its own crate to allow the creation of implementation in other languages.

Angel Whisper is my attempt to build light and fast wire protocol that is suitable in IoT world and the just regular world. However, no promises. This library meant to handle encryption as well and decoding/encoding of frames. This library doesn't handle anything else like request routing, RPC, etc. The plan is to build a framework on top of this.

This library in no way production or even development ready. Meaning everything including wire format is subject to change. The goal is to have at least three languages talking to each other using this protocol by the end of 2017.

Usage

TODO: Write usage instructions here

Development

Right now I'm using taskwarrior for task management, which is obviously won't scale for more than one developer. I use @andoriyu handle pretty much everywhere you can find me either on gitter, IRC, //!twitter, whatever and ask for a task or tell me how much this library suck.

Questions I would be asking

Do I need any help?

Yes.

Is it secure?

Maybe, maybe not. I'm not a cryptographer. However, this protocol is based on CurveZMQ. I didn't write my own implementation of cryptographic primitives. This library relies on libsodium.

Why does it use secp256k1 at the beginning instead of Curve25519?

Because I had a dream where I built ethereum wallet with p2p direct messaging. Therefore, I ended up using secp256k1 public keys for identity. First attempt was using Curve25519. After some discussions, I've decided to switch back to Curve25519.

What other languages it supports?

Right now — only rust. In a very close feature — C via rust library. Next step is Ruby via c library. After that pure Kotlin implementation.

Modules

errors

This module contain error type returned by this library.

frame

This is how frames look on the wire. This module doesn't handle Frame generation — generation is done in session module.

session

This module handles Session (singular) management. The session is responsible for Frame generation and encryption.