Skip to content

feat: ZcashDisplayAddress protocol (IDs 1308-1309)#101

Merged
pastaghost merged 1 commit intomasterfrom
features/7.15
Apr 3, 2026
Merged

feat: ZcashDisplayAddress protocol (IDs 1308-1309)#101
pastaghost merged 1 commit intomasterfrom
features/7.15

Conversation

@BitHighlander
Copy link
Copy Markdown
Collaborator

Summary

  • Adds ZcashDisplayAddress (1308) and ZcashAddress (1309) message types for on-device unified address verification
  • Host sends unified address string + FVK components (ak, nk, rivk); device re-derives Orchard keys from seed and verifies the receiver belongs to this device before displaying
  • Includes nanopb options for all new fields (address max 256 bytes, keys 32 bytes each)

Context

PR #100 landed the full 7.14.0 protocol batch (Solana, TRON, TON, Zcash Orchard PCZT, EVM metadata, BIP-85). This PR adds the one remaining Zcash feature: address display/verification, which was deferred from that batch.

Files Changed

  • messages-zcash.proto — 2 new messages (ZcashDisplayAddress, ZcashAddress)
  • messages.proto — 2 new MessageType enum entries (1308, 1309)
  • messages-zcash.options — nanopb size constraints for new fields

Test Plan

  • Proto compiles with protoc and nanopb
  • Firmware integration on feat/zcash-display-address branch uses these messages
  • Python-keepkey tests verify address derivation and display

Add unified address display and verification for Zcash Orchard.
The host provides a unified address + FVK components (ak, nk, rivk),
and the device re-derives its own keys to verify the Orchard receiver
belongs to this seed before displaying the address.

Messages:
- ZcashDisplayAddress (1308, wire_in)
- ZcashAddress (1309, wire_out)
BitHighlander added a commit to keepkey/python-keepkey that referenced this pull request Apr 3, 2026
…-sign policy

1. ZcashDisplayAddress (1308) + ZcashAddress (1309): unified address
   display and verification via FVK re-derivation on device.
   - pb2 descriptors, mapping wire IDs, client method, test file

2. Solana AdvancedMode gate: SolanaSignMessage requires AdvancedMode
   policy enabled (no domain separation -- trezor #4371).
   - test_solana_sign_message_blocked_without_advanced_mode added

3. ETH blind-sign blocked: AdvancedMode OFF + contract data = Failure.
   - test_ethereum_blind_sign_blocked (E16) restored for 7.15+

4. Recovery cipher strict: assertIsInstance(Failure) directly,
   no skipTest fallback for missing BIP-39 validation.

5. Fix duplicate test_solana_show_address in getaddress test.

Depends on: keepkey/device-protocol#101 (ZcashDisplayAddress proto)
@pastaghost pastaghost merged commit bf8646b into master Apr 3, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants