x3dh-ke 0.1.5

Implementation of X3DH
Documentation
[![Crate](https://img.shields.io/crates/v/x3dh-ke)](https://crates.io/crates/x3dh-ke)
[![License](https://img.shields.io/github/license/Dione-Software/x3dh-ke)](https://github.com/Dione-Software/x3dh-ke/blob/main/LICENSE)
[![Coverage Status](https://coveralls.io/repos/github/Dione-Software/x3dh-ke/badge.svg?branch=master)](https://coveralls.io/github/Dione-Software/x3dh-ke?branch=master)
[![Workflow Status](https://github.com/Dione-Software/x3dh-ke/actions/workflows/rust.yml/badge.svg)](https://github.com/Dione-Software/x3dh-ke/actions/workflows/rust.yml)
![Maintenance](https://img.shields.io/badge/maintenance-activly--developed-brightgreen.svg)

# x3dh-ke

## Implementation of X3DH
Implementation of extended triple diffie hellman written in Rust, as described by [Signal][1].
WARNING! This crate hasn't been reviewed and may include serious faults. Use with care.

## Example Usage:

### Standard:
```rust
use x3dh_ke::{IdentityKey, SignedPreKey, EphemeralKey, OneTimePreKey, Key, x3dh_a, x3dh_b};
let ika = IdentityKey::default();
let ikas = ika.strip();
let ikb = IdentityKey::default();
let ikbs = ikb.strip();
let spkb = SignedPreKey::default();
let spkbs = spkb.strip();
let eka = EphemeralKey::default();
let ekas = eka.strip();
let opkb = OneTimePreKey::default();
let opkbs = opkb.strip();
let signature = ikb.sign(&spkbs.pk_to_bytes());
let cka = x3dh_a(&signature, &ika, &spkbs, &eka, &ikbs, &opkbs).unwrap();
let ckb = x3dh_b(&ikas, &spkb, &ekas, &ikb, &opkb);
assert_eq!(cka, ckb)
```

### Serialize and Deserialize
Every key described by this library can be turned into bytes and created from them too.
```rust
use x3dh_ke::{IdentityKey, Key};
let ika = IdentityKey::default();
let data = ika.to_bytes();
let ikr = IdentityKey::from_bytes(&data).unwrap();
assert_eq!(ika.to_bytes(), ikr.to_bytes())
```

### Strip Private Key
To share a key, the private part has to be striped previously from that.
```rust
use x3dh_ke::{IdentityKey, Key};
let ika = IdentityKey::default();
let _iks = ika.strip(); // Without private key
```

### WASM
This crate supports WASM. In order to do that, enable the `wasm` feature.

[1]: https://signal.org/docs/specifications/x3dh/

Current version: 0.1.3

License: MIT