This project contains several scripts for interacting with Bitcoin hardware wallets.
Python 3 is required. The libraries and udev rules for each device must also be installed.
Install all of the libraries using pip (in virtualenv or system):
pip3 install hidapi # HID API needed in general
pip3 install trezor[hidapi] # Trezor One
pip3 install btchip-python # Ledger Nano S
pip3 install keepkey # KeepKey
pip3 install ckcc-protocol # Coldcard
pip3 install pyaes # For digitalbitbox
git clone https://github.com/achow101/HWI.git
cd HWI
To use, first enumerate all devices and find the one that you want to use with
./hwi.py enumerate
Once the device type and device path is known, issue commands to it like so:
./hwi.py -t <type> -d <path> <command> <command args>
The below table lists what devices and features are supported for each device.
Please also see docs for additional information about each device.
| Feature \ Device | Ledger Nano S | Trezor One | Digital BitBox | KeepKey | Coldcard |
|---|---|---|---|---|---|
| Support Planned | Yes | Yes | Yes | Yes | Yes |
| Implemented | Partial | Partial | Partial | Partial | Partial |
| xpub retrieval | Yes | Yes | Yes | Yes | Yes |
| Message Signing | Yes | No | No | No | No |
| Device Setup | No | No | No | No | No |
| Device Recovery | No | No | No | No | No |
| Device Reset | No | No | No | No | No |
| P2PKH Inputs | Yes | Yes | Yes | Partial | Yes |
| P2SH-P2WPKH Inputs | Yes | Yes | Yes | Partial | Yes |
| P2WPKH Inputs | Yes | Yes | Yes | Partial | Yes |
| P2SH Multisig Inputs | Yes | No | Yes | No | ?? |
| P2SH-P2WSH Multisig Inputs | Yes | No | Yes | No | ?? |
| P2WSH Multisig Inputs | Yes | No | Yes | No | ?? |
| Bare Multisig Inputs | Yes | No | Yes | No | ?? |
| Aribtrary scriptPubKey Inputs | Yes | No | Yes | No | ?? |
| Aribtrary redeemScript Inputs | Yes | No | Yes | No | ?? |
| Arbitrary witnessScript Inputs | Yes | No | Yes | No | ?? |
| Non-wallet inputs | Yes | Yes | Yes | Yes | Yes |
| Mixed Segwit and Non-Segwit Inputs | No | Yes | Yes | ?? | ?? |
This project is available under the MIT License, Copyright Andrew Chow.