Giter Site home page Giter Site logo

proteus's Introduction

Wire

This repository is part of the source code of Wire. You can find more information at wire.com or by contacting [email protected].

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

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.

proteus's People

Contributors

comawill avatar dependabot[bot] avatar franziskuskiefer avatar marcoconti83 avatar mdimjasevic avatar ninebitx avatar raphaelrobert avatar romanb avatar skade avatar twittner avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

proteus's Issues

session.rs try_message_keys

Hello,

I have the following question regarding this line of session.rs:

let mk = self.message_keys.remove(i).unwrap();

According to Rust's documentation remove() removes an element from a VecDeque and returns it. To my understanding a check for InvalidSignature should happen before removing the item from the VecDeque. Please correct me If I am wrong.

Explain pros/cons of no header keys?

Very cool project! Congratulations on making what (I think) is the first Rust axolotl implementation! I see that it's slightly different, and was wondering if the README could elaborate on what exactly that difference implies?

message timer per conversation/group

I believe that setting timed messages per user is potential security problem. I'd rather set a timer per conversation or group.
Otherwise sensitive replies might be accidentally sent without timer.

Remove unnecessary dependencies

There are 2 in my opinion unnecessary dependencies in proteus.

The first one is the libc-crate which is only used to get the c_int-type. However this is completely unnecessary because the c_int-type is also defined in the std-crate: std::os::raw::c_int.
If you'd replace this dependency in "internal/ffi.rs" you could omit the entire libc-crate.
(I've done this; it also passes all tests on macOS.)

The second one is the byteorder-crate which is also used to serialize one u32 as big-endian.

And thank you very much that you make your software open-source under the GPL ๐Ÿ˜„

compiled failed with sodiumoxide 0.1.0

error[E0308]: mismatched types
--> /root/.cargo/git/checkouts/proteus-c72aed2360065c51/cda560b/src/lib.rs:28:5
|
27 | pub fn init() -> bool {
| ---- expected bool because of return type
28 | sodiumoxide::init()
| ^^^^^^^^^^^^^^^^^^^ expected bool, found enum std::result::Result
|
= note: expected type bool
found type std::result::Result<(), ()>

f-droid

I didn't find it in fdroid, is this something that is on the roadmap?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.