This repository contains the Zakura Common libraries: the foundational Rust crates used in Zakura and made available for the Zcash ecosystem. Use this stack in your wallets or in other tools for better performance.
zakura-protocol, includingzcash_protocol::encodingfromzcash_encoding 0.4.0(forked fromzcash_protocol 0.10.5)zakura-address(forked fromzcash_address 0.13.0)zakura-transparent(forked fromzcash_transparent 0.10.0)zakura-zip321(forked fromzip321 0.9.0)
zakura-equihash(forked fromequihash 0.3.0)
zakura-primitives(forked fromzcash_primitives 0.30.0)zakura-keys(forked fromzcash_keys 0.16.1)
-
zakura-note-encryption(forked fromzcash_note_encryption 0.4.2): shared note encryption, trial decryption, and output recovery. -
zakura-orchard(forked fromorchard 0.15.5) -
zakura-sapling-crypto(forked fromsapling-crypto 0.7.0) -
zakura-proofs(forked fromzcash_proofs 0.30.0)
zakura-halo2-proofs(forked fromhalo2_proofs 0.3.5)zakura-halo2-gadgets(forked fromhalo2_gadgets 0.5.0)zakura-halo2-poseidon(forked fromhalo2_poseidon 0.1.0)zakura-halo2-legacy-pdqsort(forked fromhalo2_legacy_pdqsort 0.1.0)
zakura-pairing(forked frompairing 0.23.0)zakura-bls12-381(forked frombls12_381 0.8.0)zakura-jubjub(forked fromjubjub 0.10.0)zakura-bellman(forked frombellman 0.14.0)zakura-pasta-curves(forked frompasta_curves 0.5.2)zakura-sinsemilla(forked fromsinsemilla 0.1.0)zakura-reddsa(forked fromreddsa 0.5.2)zakura-reddsa-frost: threshold signing for RedJubjub and RedPallas, extracted fromzakura-reddsa.zakura-redjubjub(forked fromredjubjub 0.8.0)
zakura-redjubjub is a thin wrapper over zakura-reddsa, so the two are maintained together.
Threshold signing is a separate dependency. Consumers migrating from the
zakura-reddsa/frost feature should depend on zakura-reddsa-frost and replace
reddsa::frost::redjubjub and reddsa::frost::redpallas imports with
reddsa_frost::redjubjub and reddsa_frost::redpallas. Plain RedDSA consumers
do not resolve or compile the FROST stack. The Common workspace lockfile still
includes it for the dedicated FROST crate.
zakura-udon: Pasta field and curve arithmetic and allocation-free FFTs.zakura-bento: compile-time arithmetic and checked POD storage and embedding.zakura-bento-coreandzakura-bento-macros: Bento implementation crates.
rust-toolchain.toml pins the development toolchain to
Rust 1.97.1, so cargo in a checkout (builds, Clippy, rustfmt, and the
benchmarks in crates/orchard/benches)
uses the same compiler for everyone. The crates themselves keep a minimum
supported Rust version of 1.91 (rust-version in Cargo.toml),
which CI builds separately; raising the MSRV is a consumer-visible change,
while bumping the development pin is not. The workspace uses Cargo's
MSRV-aware resolver, so cargo update prefers dependency releases that the
1.91 toolchain can build. To reproduce the MSRV check locally:
rustup toolchain install 1.91.0 --profile minimal
cargo +1.91.0 check --locked --workspacePublished crates in this repository follow Semantic Versioning except for feature removals explicitly recorded in the permanent SemVer ignore list. All other API compatibility failures block CI. See the SemVer policy for enforcement details and local checks.
The AArch64 and x86-64 assembly field arithmetic in
zakura-pasta-curves and zakura-udon
is derived from
Semolina by
Supranational. Thank you to Supranational for
publishing this work.
All code in this repository is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.