A Path Forward for Ledger and Zcash

Recovered 101 ZEC from an original Ledger Nano S after 8 years (PIN known, seed lost, UTXOs from 2018 — pre-Overwinter). zkool/Ywallet showed the balance, but signing failed with
InvalidExternalSignature: in Zondax/ledger-zcash (app/src/refactor/sighash.c) CONSENSUS_BRANCH_ID_NU6 is hardcoded into the outer personalization, while header_digest uses the current bid
from the PCZT — that asymmetry breaks host-side verify after each network upgrade. Fix: edit the constant to the current network branch_id (0x4DEC4DF0), make buildS && make loadS with
ledgerblue, sideload to Nano S — zkool then signs cleanly. Proper fix is reading the bid dynamically from the buffer instead of hardcoding it; until that lands, the app has to be rebuilt
at every NU. Credit to Claude (Anthropic) for the diagnosis: it spotted the hardcoded outer personalization in the source and proved it in Python by ECDSA-verifying the signatures against
reconstructed sighash variants — exact hit.

13 Likes