fix: zcash transparent is not signing
What changed, and why it matters
This is a one-line build-configuration fix for the Keystone hardware wallet's Zcash signing code. Previously, transparent Zcash transaction signing was only enabled when the 'multi_coins' feature was active. The change also enables it when the 'cypherpunk' feature is active. Without this fix, Zcash transparent signing simply fails to compile or run in cypherpunk-only builds. There is no direct evidence in the commit of a security vulnerability; it appears to be a missing-feature bug.
Treat as a routine functional bug fix. Verify via CI that the cypherpunk build variant can successfully sign transparent Zcash transactions. No urgent security response is indicated by the commit itself.
Security signals we found
No memory-safety issues visible in the diff
No cryptographic algorithm changes
No input validation changes
No privilege boundary changes
Change is a feature-gate correction, not a vulnerability patch
Evidence from the diff
The patch changes a conditional compilation guard in rust/apps/zcash/src/pczt/sign.rs from #[cfg(feature = “multi_coins”)] to #[cfg(any(feature = “multi_coins”, feature = “cypherpunk”))]. This ensures the pczt_ext::sign_transparent call is included when the firmware is built with only the cypherpunk feature. The subsequent shielded signing block already had #[cfg(feature = “cypherpunk”)]. The change restores functional parity for transparent Zcash inputs under the cypherpunk build variant.
Changed components
rust/apps/zcash/src/pczt/sign.rsZcash transparent PCZT signing pathcypherpunk firmware build variantInspect captured patch +1 / −1
diff --git a/rust/apps/zcash/src/pczt/sign.rs b/rust/apps/zcash/src/pczt/sign.rs
index 0134843..d8fadf8 100644
--- a/rust/apps/zcash/src/pczt/sign.rs
+++ b/rust/apps/zcash/src/pczt/sign.rs
@@ -105,7 +105,7 @@ impl PcztSigner for SeedSigner<'_> {
pub fn sign_pczt(pczt: Pczt, seed: &[u8]) -> crate::Result<Vec<u8>> {
let signer = low_level_signer::Signer::new(pczt);
- #[cfg(feature = "multi_coins")]
+ #[cfg(any(feature = "multi_coins", feature = "cypherpunk"))]
let signer = pczt_ext::sign_transparent(signer, &SeedSigner { seed })
.map_err(|e| ZcashError::SigningError(e.to_string()))?;
#[cfg(feature = "cypherpunk")]
Why this scored 20/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.