Implementation of the Recursive Record Registry data format in Rust.
This repository contains a basic command-line tool for reading Recursive Record Registries, as well as a Rust library for reading and creating record registries.
A specification for the secure storage of digital information in a tree structure, where each subtree is password-protected. Without knowing the passwords (and thus being able to browse the registry), the structure and the contents of the tree is unknown to the user. The intention is for the registry to be distributed with 3rd parties. The specification guarantees integrity, authentication, and non-repudiation of the stored records, from the author of the registry. The aim of this project is to provide an interesting platform for storytelling and the creation of puzzles.
- Install Rust via rustup.rs
- Clone this repository using Git or download it as an archive
- Open the repository in your shell, and compile the executable binary by running:
cargo build --release --bin rrr --features cmd
- If the compilation was successful, the executable binary is now located in the
target/release
directory. Launch it by running the following:# On Windows target\release\rrr.exe # On Unix target/release/rrr
- Splitting records into multiple files.
- Basic library implementation
- Pad contents to a registry-wide constant length.
- Record splitting strategies
- Tests
- Command line implementation
- Support multiple versions of records.
- Basic library implementation
- Version listing
- Tests
- Command line implementation
- Support multiple encryption algorithms, that are supported by the COSE and PEM specs.
- AES-256-GCM
- ChaCha20-Poly1305
- Make them optional at compile-time.
- Support multiple signing algorithms, that are supported by the COSE and PEM specs.
- Ed25519
- Ed448 -- No RustCrypto implementation available yet.
- Make them optional at compile-time.
- Support multiple KDF algorithms.
- HKDF
- SHA256
- SHA512
- An alternative
- Make them optional at compile-time.
- HKDF
- Support multiple password hashing algorithms.
- Argon2
- Argon2d
- Argon2id
- Argon2i
- An alternative
- Make them optional at compile-time.
- Argon2
- Versioning of formats of registries and record fragments.
- Use
cargo-mutants
to test proper handling and reporting of malformed data - Address the
unwrap
situation. - More granularity in errors.
- Feature for proptest stuff
- Consider making the encryption algorithm a config parameter
- Register IANA CBOR tags for
registry.cbor
, record, segment and fragment. Files should have the form #6.55799(#MYTAG(_)), as per https://www.rfc-editor.org/rfc/rfc9277.html#section-2.2.1 See https://www.rfc-editor.org/rfc/rfc9277.html#name-the-cbor-protocol-specific- for registration instructions. - Make it possible to read a record with missing fragments.
- Fragment compression
- Segment Content-Type header parameter