1# What is this? 2 3A crypto provider that abstracts over different crypto implementations, mainly the Rust 4implementations by [RustCrypto](https://github.com/RustCrypto) and BoringSSL. 5 6## Project structure 7 8### `crypto_provider` 9 10Our own abstraction on top of crypto implementations, including functionalities 11like AES, SHA2, X25519 and P256 ECDH, HKDF, HMAC, etc. 12 13Two implementations are currently provided, `crypto_provider_rustcrypto` and 14`crypto_provider_boringssl`. 15 16#### `crypto_provider::aes` 17Abstraction on top plain AES, including AES-CTR and AES-CBC. 18 19Since we know we'll have multiple AES implementations in practice (an embedded 20device might want to use mbed, but a phone or server might use BoringSSL, etc), 21it's nice to define our own minimal AES interface that exposes only what we need 22and is easy to use from FFI (when we get to that point). 23 24### `crypto_provider_rustcrypto` 25 26Implementations of `crypto_provider` types using the convenient pure-Rust primitives 27from [Rust Crypto](https://github.com/RustCrypto). 28 29### `crypto_provider_boringssl` 30 31Implementations of `crypto_provider` types using the 32[bssl-crypto](https://boringssl.googlesource.com/boringssl/+/master/rust/bssl-crypto), which is a 33Rust binding layer for BoringSSL. 34 35## Setup 36 37See `nearby/presence/README.md` for machine setup instructions. 38