Hardware wallets are for public blockchains pretty simple, we provide them with a blob of transaction data, and our wallet uses its key to sign said blob. ZCash works with proofs though, and I’m pretty sure Ledger, Trezor, etc. don’t support Halo2. So how do things work there?
There is no official support yet but the Ywallet ledger app does just that pretty much. It generates a raw transaction and seemingly sends it to the ledger to be signed and then back to be broadcast.
The complete transaction does not have to be created on the device. It needs to calculate the transaction sighash, make sure it is not malleable and then sign it.
The ZK proof is created outside the hardware wallet, in your PC. The wallet just signs the transaction.