Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature request: updatefirmware command #112

Open
instagibbs opened this issue Jan 23, 2019 · 1 comment · May be fixed by #300
Open

feature request: updatefirmware command #112

instagibbs opened this issue Jan 23, 2019 · 1 comment · May be fixed by #300

Comments

@instagibbs
Copy link
Collaborator

It would be very nice to not be forced to use the centralized wallet portals to update, so putting the various python libraries to use to do the updates instead under one roof is desired.

We would likely have to put caveats on these commands since they'll likely "phone home" in some respect.

Ledger update would also have to include steps to update the bitcoin app itself(how?)

@achow101
Copy link
Member

#300 implements this, for the most part.

The thing it does not implement is support for Ledger firmware updating and downloading. The reason is that Ledger has made it difficult for third party software to install firmware onto their devices. The process of even getting ledger firmware is convoluted and requires several API calls. Then there is the fact that the firmware itself is never downloaded to your computer and uploaded to the device. Rather the software acts as a proxy between your device and Ledger's servers. The servers send APDU commands via websockets to the software, which then forwards them to the device itself, which responds. So the software is just a dumb proxy. This is done for both firmware updating and app installation. This process is also not documented. I have largely figured it out and have written up the process as well as a script that does it.

Another issue with the Ledger is that the firmware to install is dependent on the current firmware version, but does require some finagling and API calls to work out. There are multiple firmware targets for a particular firmware version, depending on the version that is being upgraded from. So for our firmware downloader to work, we would have to have it connect to the device to figure out what to download.

But then there's the question of how to download the firmware in the first place. Ledger does not provide the firmware as a single file that can be downloaded. We would have to simulate the ledger running and installing the firmware, or allow firmwaredl with a Ledger connect to install the firmware too. But I would prefer to keep the separation of having firmwaredlof just being a downloader. So I suppose we could simulate being the Ledger and dump the APDUs from the server to a file which updatefirmware will read and send to the device. But that could be prone to error.

After updating the firmware, we would also need to install the Bitcoin app for users too. Unfortunately apps are installed in the same manner. While there is a way to upload the apps to a device (a tool for developers), we can't download the official app binaries so this is not particularly helpful. We would have to do the same thing for firmware updating.

Lastly, the Ledger update process is complicated enough that I have soft bricked multiple devices trying to re-implement it myself. I was able to fix those, but it was also complicated and required using firmware versions that don't exist on the API output. I had to figure this out be reading their source code.

Thoughts or suggestions how we can handle Ledger firmware updating?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants