Rust implementation of message tracing for E2E encrypted messaging
CCS 2019: Nirvan Tyagi, Ian Miers, Thomas Ristenpart. Traceback for End-to-End Encrypted Messaging. CCS 2019.
ePrint: Nirvan Tyagi, Ian Miers, Thomas Ristenpart. Traceback for End-to-End Encrypted Messaging. Cryptology ePrint Archive, Report 2019/981. http://eprint.iacr.org/2019/981. 2019.
This repository is organized as a Rust workspace including two crates.
tracing
: Rust library that provides client and server algorithms for path and tree tracebacktracing-server
: Rust binary that provides a server implementation to process messages and perform traceback.
The server binary compiles on the nightly
toolchain of the Rust compiler, while the library can compile on stable
.
Since both packages will work with nightly
, we will describe the installation with nightly
.
Install the latest version of Rust using rustup
by following the instructions here.
Then, install the Rust nightly
toolchain:
rustup install nightly
Clone the repository:
git clone https://github.com/nirvantyagi/tracing.git
cd tracing/
Either set your default Rust toolchain to nightly
or create a directory specific override for tracing/
:
rustup default nightly
rustup override set nightly
Build using cargo
:
cargo build
The tracing
library comes with a suite of tests and benchmarks for the path and tree traceback protocol implementations.
To run the tests, unfortunately, you must first spin up a Redis instance.
Install Redis by following the instructions here.
In a separate terminal, start a Redis server listening on port 6379 (default configuration).
redis-server
Due to tests clearing the Redis database after their execution, the tests must be run sequentially as follows where cargo test
runs all tests and benchmarks and cargo bench
runs only benchmarks:
cargo test -p tracing -- --test-threads=1
cargo bench -p tracing -- --test-threads=1