Hi everyone! we (Eryx) have just submitted a new Zcash Community Grant proposal and wanted to share it here for feedback: Grant Application - Constant-Time Hardening and Explicit Timing Semantics for Zcash Rust Cryptography · Issue #342 · ZcashCommunityGrants/zcashcommunitygrants · GitHub .
A bit about us. Eryx is a worker-owned labor cooperative with almost 15 years of experience solving complex problems involving mathematics and software development. We have a solid background in math and computer science, and our team has extensive experience in blockchain development, cryptography, and privacy-focused protocols, as well as many years building and maintaining large-scale software systems with a strong focus on scalability, reliability, and long-term maintainability. We’re interested in the Zcash ecosystem because we value its work on privacy-preserving technologies and rigorous cryptographic engineering. We think Zcash’s focus on sound cryptography, explicit security guarantees, and long-term sustainability strongly aligns with our own values and experience.
We first approached the ecosystem with an earlier grant proposal. That proposal was not accepted, and we were encouraged to begin by making concrete contributions to librustzcash to become familiar with the protocol and build trust through delivered work. We took that feedback and over the following months we contributed several well-scoped improvements to the codebase:
- support for spending transparent UTXOs in propose_transaction (later included in this PR solving issue #2350),
- redacting sensitive material in Debug implementations
- an address-to-account lookup with UA conflict detection (later included in #2312, solving issue #1944).
These contributions let us familiarize ourselves with the Zcash protocol, integrate into the maintainers’ review process, and consistently deliver quality work. We think this proposal is a good next step: a focused, well-scoped project that builds on that familiarity to strengthen the cryptographic foundations of librustzcash, while continuing to collaborate closely with the community.
About the proposal. librustzcash already implements careful constant-time behavior in its most privacy-critical paths, but those guarantees are implicit: they aren’t documented as invariants, labeled in the code, or protected by tests. The architecture docs themselves note that “nothing is labeled as constant/variable time.” Our goal is not to make everything constant-time (Zcash’s process separation and asynchronous data flow mean that’s neither required nor desirable everywhere), but to make the existing timing semantics explicit, testable, and resistant to regression. Concretely, that means a documented threat model and timing policy, inline labels distinguishing constant-time from intentionally variable-time paths (with rationale), compile-time guards on secret-handling types, and statistical (dudect-style) timing tests so future refactors can’t silently break these invariants.
The work is a focused, one-month effort ($10k) split into two milestones: (1) research + threat-model/timing-policy documentation and an agreed-upon list of target types and functions, and (2) in-code labeling, tests, contributor guidelines, and targeted fixes only where the audit surfaces a real gap — all delivered as reviewable PRs to zcash/librustzcash. This relates to existing open issues like #120 and #1114 in the Scan performance milestone.
We’d love feedback from maintainers and the community, especially on scope and on which code paths you consider most valuable to document first. We plan to validate the threat model iteratively through the R&D Discord #libraries channel as we go.