1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//! # Secure Frame (`SFrame`)
//! This library is an implementation of [draft-ietf-sframe-enc-09](https://www.ietf.org/archive/id/draft-ietf-sframe-enc-09.html).
//!
//! # Optional features
//!
//! Using optional features `sframe` allows to configure different crypto libraries.
//! Be aware that those features are mutually exlusive, if multiple are configured `sframe` issues a compiler error.
//!
//! - **`ring`** *(enabled by default)* — Uses the [ring](https://crates.io/crates/ring) library which allows compilation to Wasm32.
//! AES-CTR mode ciphers are not supported.
//! - **`openssl`** — Uses the [rust-openssl](https://crates.io/crates/openssl) crate, which provides bindings to OpenSSL.
//! Per default the OpenSSL library is locally compiled and then statically linked. The build process requires a C compiler,
//! `perl` (and `perl-core`), and `make`. For further options see the [openssl crate documentation](https://docs.rs/openssl/0.10.55/openssl/).
//! Compilation to Wasm32 is not yet supported.

#![deny(clippy::missing_panics_doc)]
#![deny(
    missing_copy_implementations,
    trivial_casts,
    trivial_numeric_casts,
    unsafe_code,
    unused_import_braces,
    unused_qualifications
)]
#![warn(
    missing_docs,
    clippy::doc_markdown,
    clippy::semicolon_if_nothing_returned,
    clippy::single_match_else,
    clippy::inconsistent_struct_constructor,
    clippy::map_unwrap_or,
    clippy::match_same_arms
)]

mod crypto;
mod frame_count_generator;
mod util;

/// error definitions
pub mod error;
pub mod frame;
/// Sframe header definitions as of [sframe draft 09 4.3](https://www.ietf.org/archive/id/draft-ietf-sframe-enc-09.html#name-sframe-header)
pub mod header;
/// sframe key definitions as of [sframe draft 09 4.4.2](https://www.ietf.org/archive/id/draft-ietf-sframe-enc-09.html#section-4.4.2)
pub mod key;
/// Sframe MLS definitions as of [sframe draft 09 5.2](https://www.ietf.org/archive/id/draft-ietf-sframe-enc-09.html#name-mls)
pub mod mls;
/// Ratchet support as of [sframe draft 09 5.1](https://www.ietf.org/archive/id/draft-ietf-sframe-enc-09.html#section-5.1)
pub mod ratchet;
/// Receiver API: models the sframe decryption block in the receiver path, see [sframe draft 09 4.1](https://www.ietf.org/archive/id/draft-ietf-sframe-enc-09.html#name-application-context)
pub mod receiver;
/// Sender API: models the sframe encryption block in the sender path, [sframe draft 09 4.1](https://www.ietf.org/archive/id/draft-ietf-sframe-enc-09.html#name-application-context)
pub mod sender;

pub use crypto::cipher_suite::CipherSuiteVariant;

#[cfg(test)]
pub mod test_vectors;