What changed, and why it matters
This commit simply raises the maximum number of Zcash transactions that can be processed in one batch from 35 to 40. It updates a constant, the matching documentation, and a unit test. There is no indication of a security vulnerability being fixed.
No security action required. Treat as a normal functional change; verify that 40 PCZTs still fits within the 512 KiB budget and device memory under expected worst-case sizes.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The change increases ZCASH_BATCH_MAX_PCZTS from 35 to 40 under the cypherpunk feature flag. The 512 KiB total size limit and atomic-all-or-nothing behavior remain unchanged. A test that previously used 36 (limit+1) is updated to use 41 (new limit+1). This is a capacity/configuration adjustment, not a patch for a memory-safety, validation, or cryptographic flaw.
Changed components
rust/rust_c/src/zcash/mod.rsdocs/protocols/ur_registrys/zcash.mdInspect captured patch +3 / −3
diff --git a/docs/protocols/ur_registrys/zcash.md b/docs/protocols/ur_registrys/zcash.md
index 0812fea..eb2e821 100644
--- a/docs/protocols/ur_registrys/zcash.md
+++ b/docs/protocols/ur_registrys/zcash.md
@@ -63,7 +63,7 @@ carries the PCZT-owned response in its own opaque `data` field. It also reports
the signing firmware version once for the entire response.
Batch version 1 is supported by cypherpunk firmware and currently accepts up to
-35 PCZTs. The encoded batch data and request id together, and the canonical PCZT
+40 PCZTs. The encoded batch data and request id together, and the canonical PCZT
payloads after decoding, must each fit within 512 KiB. The operation is atomic.
If any PCZT is invalid or cannot be signed, Keystone returns an error instead of
a partial result. PCZT entries with identical canonical encodings are rejected.
diff --git a/rust/rust_c/src/zcash/mod.rs b/rust/rust_c/src/zcash/mod.rs
index 0e8ccc2..a1948b5 100644
--- a/rust/rust_c/src/zcash/mod.rs
+++ b/rust/rust_c/src/zcash/mod.rs
@@ -40,7 +40,7 @@ use zeroize::Zeroize;
// Cap both per-PCZT overhead and variable-size payload data to leave headroom
// in shared device memory while processing a batch.
#[cfg(feature = "cypherpunk")]
-const ZCASH_BATCH_MAX_PCZTS: usize = 35;
+const ZCASH_BATCH_MAX_PCZTS: usize = 40;
#[cfg(feature = "cypherpunk")]
const ZCASH_BATCH_MAX_TOTAL_BYTES: usize = 512 * 1024;
#[cfg(feature = "cypherpunk")]
@@ -1061,7 +1061,7 @@ mod tests {
overlong_small_count.push(0);
validate_zcash_batch_request_count(&overlong_small_count).unwrap();
- // The body declares 36 PCZTs but omits them. Reaching the count error
+ // The body declares 41 PCZTs but omits them. Reaching the count error
// proves the limit is enforced before the full request is parsed.
request[ZCASH_BATCH_REQUEST_HEADER_LEN] += 1;
let registry = ZcashSignBatch::new(vec![0xaa], request);
Why this scored 18/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.