solokeys / solo1-cli

Solo 1 library and CLI in Python
https://pypi.org/project/solo-python
Apache License 2.0
182 stars 69 forks source link

solo key update fails with problem flashing firmware #161

Closed olof-nord closed 1 year ago

olof-nord commented 1 year ago

Hello Solokeys,

I wanted to upgrade my Solokey firmware, but the update failed.

What do I need to do to correctly update to the latest firmware?

$ solo key version
3.1.2 unlocked
$ solo key update
Wrote temporary copy of firmware-4.1.5.json to /tmp/tmpigfaxwjb.json
sha256sums coincide: f36bb365bfddf75004f28af392ae1439192ca0ed821ef496084a75a00d05087a
Switching into bootloader mode...
using signature version >2.5.3
erasing firmware...
error:ng firmware 100.00%...
problem flashing firmware!
(27264, b'')
$ solo key version
3.1.2 unlocked
olof-nord commented 1 year ago

Now it seems that the Solokey does not work anymore?

$ solo1 key verify
Please press the button on your Solo key
Traceback (most recent call last):
  File "/usr/bin/solo1", line 8, in <module>
    sys.exit(solo_cli())
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3.10/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/usr/lib/python3.10/site-packages/solo/cli/key.py", line 363, in verify
    cert = key.make_credential(pin=pin)
  File "/usr/lib/python3.10/site-packages/solo/devices/base.py", line 100, in make_credential
    result = client.make_credential(options, pin=pin)
TypeError: Fido2Client.make_credential() got an unexpected keyword argument 'pin'

$ solo key ping   
Traceback (most recent call last):
  File "/usr/bin/solo", line 8, in <module>
    sys.exit(solo_cli())
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3.10/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/usr/lib/python3.10/site-packages/solo/cli/key.py", line 484, in ping
    res = client.ping(ping_data)
  File "/usr/lib/python3.10/site-packages/solo/devices/base.py", line 74, in ping
    return self.send_data_hid(CTAPHID.PING, data)
  File "/usr/lib/python3.10/site-packages/solo/devices/base.py", line 53, in send_data_hid
    return self.get_current_hid_device().call(cmd, data, event)
  File "/usr/lib/python3.10/site-packages/fido2/hid/__init__.py", line 214, in call
    raise CtapError(struct.unpack_from(">B", recv)[0])
fido2.ctap.CtapError: CTAP error: 0x01 - INVALID_COMMAND
➜  node git:(main) ✗
olof-nord commented 1 year ago

Trying to use the key to logging in unfortunately confirms that the device is no longer usable.

olof-nord commented 1 year ago

Here is the version info:

$ solo version
0.1.1
$ solo key version
3.1.2 unlocked
olof-nord commented 1 year ago

Problem solved! Just execute the update command once more and the device is back working again. https://github.com/solokeys/solo1/issues/580