[![License](https://img.shields.io/badge/License-BSD--2--Clause-blue.svg)](https://opensource.org/licenses/BSD-2-Clause) [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) [![Travis CI](https://travis-ci.org/KizzyCode/crypto_proto.svg?branch=master)](https://travis-ci.org/KizzyCode/crypto_proto) [![AppVeyor CI](https://ci.appveyor.com/api/projects/status/github/KizzyCode/crypto_proto?svg=true)](https://ci.appveyor.com/project/KizzyCode/crypto-proto) crypto_proto ============ Welcome to my `crypto_proto`-library 🎉 What this library is: --------------------- This library provides some abstractions for cryptographic primitives and high-level primitives based upon them. The low-level implementations are provided by [libsodium](https://github.com/jedisct1/libsodium). These traits and algorithms are implemented: - `Cipher`/`AeadCipher`: [ChaCha20 IETF](https://tools.ietf.org/html/rfc7539), [ChaCha20Poly1305 IETF](https://tools.ietf.org/html/rfc7539), [AES-GCM](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf) - `CipherStream`: [NoiseSocket (only the symmetric-encrypted payloads)](https://noiseprotocol.org/specs/noisesocket.html#encrypted-payloads) (with either AES-GCM or ChaCha20Poly1305) - `Hash`: [SHA-256, SHA-512](https://tools.ietf.org/html/rfc6234), [Blake2b](https://tools.ietf.org/html/rfc7693) - `Kdf`: [HKDF Extract & Expand](https://tools.ietf.org/html/rfc5869) (with either HMAC-SHA-256 or HMAC-SHA-512) - `Mac`: [HMAC](https://tools.ietf.org/html/rfc4868) (with either SHA-256 or SHA-512), [Poly1305](https://tools.ietf.org/html/rfc7539) - `Pbkdf`: [Argon2i v1.3, Argon2id v1.3](https://www.cryptolux.org/images/0/0d/Argon2.pdf) Most algorithms can be disabled independently from each other by using a custom feature-set (see `Cargo.toml`). Dependencies ------------ [libsodium](https://github.com/jedisct1/libsodium) for the cryptographic algorithms, [pkg-config](https://crates.io/crates/pkg-config) to find libsodium and my [`etrace`-crate](https://crates.io/crates/etrace) for error-handling. Build Documentation and Library: -------------------------------- To build and open the documentation, go into the project's root-directory and run `cargo doc --release --open` To build this library, change into the projects root-directory and run `cargo build --release`; you can find the build in `target/release`. _You should also always run the tests using `cargo test`. Use `cargo test -- --ignored` to also run the expensive tests._