Thank you for considering contributing to pakery!
- Fork the repository and clone it locally
- Install Rust 1.79+ via rustup
- Enable the pre-commit hook:
git config core.hooksPath .githooks- Run the test suite to make sure everything works:
cargo test --workspace --all-featuresBefore submitting a PR, run the full CI suite locally:
# Build
cargo check --workspace --all-features
# Tests
cargo test --workspace --all-features
# Linting
cargo clippy --workspace --all-targets --all-features -- -D warnings
# Formatting
cargo fmt --all -- --check
# Documentation
RUSTDOCFLAGS=-Dwarnings cargo doc --workspace --all-features --no-deps| Crate | Description |
|---|---|
pakery-core |
Shared cryptographic traits (Hash, Kdf, Mac, CpaceGroup, DhGroup, Oprf, Ksf) |
pakery-cpace |
CPace balanced PAKE (draft-irtf-cfrg-cpace) |
pakery-opaque |
OPAQUE augmented PAKE (RFC 9807) |
pakery-spake2 |
SPAKE2 balanced PAKE (RFC 9382) |
pakery-spake2plus |
SPAKE2+ augmented PAKE (RFC 9383) |
pakery-crypto |
Concrete crypto implementations (Ristretto255, P-256) |
pakery-tests |
Integration tests with RFC test vectors |
- Protocol crates depend only on
pakery-coretraits, never on concrete crypto - All crates use
#![forbid(unsafe_code)] - All public API changes must maintain
no_stdcompatibility - Test against RFC test vectors where available
- Commit messages:
feat(crate): description,fix(crate): description
- Create a branch from
main - Make your changes with clear, focused commits
- Ensure all CI checks pass locally (see above)
- Open a pull request against
main
This workspace uses lockstep versioning — all crates share a single version defined in the root Cargo.toml. When releasing, every crate is published with the same version number.
All version numbers are centralized in Cargo.toml at the workspace root:
- Update
[workspace.package] version(the version of all crates) - Update
[workspace.dependencies] pakery-coreversion (the dependency version used by other crates) - Update
[workspace.dependencies] pakery-*versions for any other inter-crate dependencies - Update
CHANGELOG.mdwith the new version and changes - Commit, tag with
v<version>, and push — the publish workflow handles the rest
pakery-core(no internal dependencies)pakery-crypto(depends onpakery-core)pakery-cpace,pakery-opaque,pakery-spake2,pakery-spake2plus(depend onpakery-core)
If you discover a security vulnerability, please do not open a public issue. Instead, report it privately via GitHub's security advisory feature.
By contributing, you agree that your contributions will be licensed under the same terms as the project: MIT OR Apache-2.0.