strobe-rs
This is a pure Rust, no_std implementation of the Strobe protocol framework. It is intended to be used as a library to build other protocols and frameworks. This implementation currently only supports Keccak-f[1600] as the internal permutation function, which is the largest possible block size, so big deal.
Example
A simple program that does authenticated encryption and decryption:
use ;
use RngCore;
// NOTE: This is just a simple authenticated encryption scheme. For a robust AEAD construction,
// see the example at https://strobe.sourceforge.io/examples/aead/
Features
Default features flags: [none]
Feature flag list:
std- Implementsstd::error::ErrorforAuthError.serialize_secret_state- Implementsserde'sSerializeandDeserializetraits for theStrobestruct. SECURITY NOTE: Serializing Strobe state outputs security sensitive data that MUST be kept private. Treat the data as you would a private encryption/decryption key.
For info on how to omit or include feature flags, see the cargo docs on features.
MSRV
The current minimum supported Rust version (MSRV) is 1.60.0 (2022-04-04).
Tests
To run tests, execute
cargo test --all-features
This includes known-answer tests, which test against JSON-encoded test vectors in the kat/ directory. To verify these test vectors against the reference Python implementation, cd into kat/, run python2 verify_test_vector.py and follow the included instructions.
Benchmarks
To benchmark, run
cargo bench
This will produce a summary with plots in target/crieteron/report/index.html. These won't be very interesting, since almost every function in STROBE has the same runtime.
TODO
- Contribute an asm impelmentation of Keccak-f[1600] to tiny-keccak and expose a feature flag that lets
strobe-rsusers choose which implementation they prefer.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
at your option.
Warning
This code has not been audited in any sense of the word. Use at your own discretion.