Main crate: libcrux
Crates that can be used directly
- blake2
- sha2
- sha3
- ml-dsa
- ml-kem
- chacha20poly1305
- hkdf
- hmac
- curve25519
- ecdsa
- ed25519
- rsa
Additional protocols
- psq
Higher level crates
- ecdh
- kem
- hacl-rs
- traits
- macros
- poly1305
- p256
- sys/libjade
- sys/hacl
- blake2
This snippet prints a valid publishing order of the crates in the workspace:
cargo depgraph --workspace-only --all-deps |
gvpr 'E { string tl = gsub($.tail.label, " ", "-"), hl = gsub($.head.label, " ", "-"); printf("%s %s\n", hl, tl); }' |
tsort
Note
Explanation
cargo depgraph --workspace-only --all-depsgenerates a graph of all dependencies of crates in the workspace in the graphviz dot format- the
gvprscript translates the graph into a representation thattsortcan handle- i.e. lines of "$dependency $dependent" - we want the dependencies to come before
tsortperforms topological sorting
Requires cargo-depgraph and graphviz to be installed. On Linux you probably want to install graphviz through your distribution.
Initially, all crate versions in this repository were in sync, but we moved away from that model. Now, a crate may follow the workspace version, but is not required to.
We use semantic versioning. So far, all version parts except PATCH are 0. Before
releasing 0.0.X, we release 0.0.X-pre.Y, starting with 0.0.X-pre.1. Only
once we released all crates in the workspace we move on to publish the real
version.
It is most robust to update versions manually. We experimented with using
cargo-release, but its behaviour around bumping workspace versions makes it a
bit less useful in our context.
If there are crates that depend on this crate, bump the dependency in them and later update these as well.
This pushes the crate to crates.io. Before running the full push, do a dry run.
Create and push a git tag named ${crate name}-v${version} for all published
crates.