The RustCrypto Project has just completed another round of crate releases. We wanted to highlight some of the work we've been doing which has gone into this round of releases.
Symmetric Ciphers
Our project repos can be found at:
 AEADs: GitHub  RustCrypto/AEADs: Authenticated Encryption with Associated Data Algorithms: highlevel encryption ciphers
 Block ciphers: GitHub  RustCrypto/blockciphers: Collection of block cipher algorithms written in pure Rust
 Stream ciphers: GitHub  RustCrypto/streamciphers: Collection of stream cipher algorithms
Release highlights
Some crates to highlight from this release:
Traits

aead
v0.4: highlevel authenticated encryption support 
cipher
v0.3: lowlevel block and stream cipher traits
Ciphers

aes
v0.7: Advanced Encryption Standard (lowlevel crate) 
chacha20
v0.7: ChaCha20 family of ciphers (lowlevel crate)
AEADs
These are the recommended crates to use for enduser encryption applications:

aesgcm
v0.9 
aesgcmsiv
v0.10 
chacha20poly1305
v0.8
CPU feature detection
We implement several symmetric cipher crates with SIMD backends, such as aes
and chacha20
, along with universal hash function crates like ghash
, polyval
, and poly1305
. Before, in order to get optimum performance, you used to have to explicitly specify RUSTFLAGS with the correct C targetfeatures
to activate the performanceoriented backends.
Not anymore: CPU features like AESNI, AVX2, and CLMUL, are now automatically detected on i686/x86_64 CPUs. This means on these CPUs you should get optimal performance out of the box.
This applies to higherlevel AEAD constructions like the aesgcm
and chacha20poly1305
crates as well.
Unified aes
crate
Regarding the aes
crate specifically: previously it served as a facade for the aesni
and aessoft
crates. We have since combined all of these crates into the aes
crate and will be retiring the aesni
and aessoft
crates.
The aes
crate will now autodetect AESNI (and in the future, other CPUspecific instructions) and use it if available, and if it isn't, will fall back to a software implementation.
The forcesoft
feature can be used to always use the software implementation, avoiding CPUspecific instructions.
To force AESNI all of the time, pass C targetfeatures=+aes
in the RUSTFLAGS. This will assume AESNI is always available, and will crash with an invalid instruction if it is disabled.
AEAD streaming
A common question we get with AEAD ciphers like aesgcm
and chacha20poly1305
is how to securely operate over large plaintexts/ciphertexts, particularly ones too big to process in RAM.
In the aead
v0.4 crate, we have introduced a stream
module which implements the STREAM noncebased online authenticated encryption protocol designed by Phil Rogaway:
https://docs.rs/aead/latest/aead/stream/
STREAM allows any AEAD cipher to be used in an incremental/streaming manner, with every chunk's integrity verified before it is decrypted. It provably defends against reordering and truncation attacks.
Elliptic Curves
See the project repo at: GitHub  RustCrypto/ellipticcurves: Collection of pure Rust elliptic curve implementations (e.g. P256, P384, secp256k1)
Release highlights

ellipticcurve
v0.9: traits for generic programming over elliptic curves 
ecdsa
v0.11: Elliptic Curve Digital Signature Algorithm
Curves

bp256
v0.1: Brainpool P256 elliptic curves 
bp384
v0.1: Brainpool P384 elliptic curves 
k256
v0.8: secp256k1 elliptic curve 
p256
v0.8: NIST P256 elliptic curve 
p384
v0.7: NIST P384 elliptic curve
JWK Support
The ellipticcurve
crate now natively implements JSON Web Keys (JWKs) in the form of the elliptic_curve::JwkEcKey
type.
You will need to enable the jwk
feature of your desired crate to use it.
When enabled, the corresponding SecretKey
type for a given curve (e.g. p256::SecretKey
) will have methods such as:

SecretKey::from_jwk_str
: decode a secret key from a string containing a serialized JWK 
SecretKey::to_jwk_string
: serialize an elliptic curve secret key as a JWK string
crypto
crate v0.2
Last but not least, we've cut a new release of the crypto
crate, which provides a highlevel facade over our other trait crates.