Skip Ratchet Logo

Skip Ratchet

Crate Information Code Coverage Build Status License Docs Discord

This library implements the [Skip Ratchet paper][paper]. Skip ratchet is a data structure for deriving keys that maintain backward secrecy. Unlike hash chains, this data structure is capable of efficiently making large leaps in hash count. ## Outline - [Usage](#usage) - [Building the Project](#building-the-project) - [Testing the Project](#testing-the-project) - [Contributing](#contributing) - [Getting Help](#getting-help) - [License](#license) ## Usage #### Creating a new ratchet and advancing it. ```rust use skip_ratchet::Ratchet; let mut ratchet = Ratchet::new(); ratchet.inc_by(10); println!("{:?}", ratchet.derive_key()); ``` #### Getting the previous versions of a ratchet. ```rust use skip_ratchet::Ratchet; let mut old_ratchet = Ratchet::new(); old_ratchet.inc_by(5); let mut recent_ratchet = old_ratchet.clone(); recent_ratchet.inc_by(10); for revision in recent_ratchet.previous(&old_ratchet, 10).unwrap() { println!("{:#?}", revision); } ``` ## Building the Project - Clone the repository. ```bash git clone https://github.com/WebNativeFileSystem/rs-skip-ratchet.git ``` - Change directory ```bash cd rs-skip-ratchet ``` - Build the project ```bash cargo build ``` ## Testing the Project - Run tests ```bash cargo test ``` ## Contributing ### Pre-commit Hook This library recommends using [pre-commit][pre-commit] for running pre-commit hooks. Please run this before every commit and/or push. - Once installed, Run `pre-commit install` to setup the pre-commit hooks locally. This will reduce failed CI builds. - If you are doing interim commits locally, and for some reason if you _don't_ want pre-commit hooks to fire, you can run `git commit -a -m "Your message here" --no-verify`. ### Conventional Commits This project *lightly* follows the [Conventional Commits convention][commit-spec-site] to help explain commit history and tie in with our release process. The full specification can be found [here][commit-spec]. We recommend prefixing your commits with a type of `fix`, `feat`, `docs`, `ci`, `refactor`, etc..., structured like so: ``` [optional scope]: [optional body] [optional footer(s)] ``` ## Getting Help For usage questions, usecases, or issues reach out to us in our [Discord webnative-fs channel](https://discord.gg/YbT6x7Wkvk). We would be happy to try to answer your question or try opening a new issue on Github. ## License This project is licensed under the [Apache License 2.0](https://github.com/wnfs-wg/rs-skip-ratchet/blob/main/LICENSE). [commit-spec]: https://www.conventionalcommits.org/en/v1.0.0/#specification [commit-spec-site]: https://www.conventionalcommits.org/ [paper]: https://eprint.iacr.org/2022/1078.pdf [pre-commit]: https://pre-commit.com/