Skip to content

Using trezorctl btc get-public-node -n 'm/0h' on older FW with passphrase enabled fails #6624

@Thalarion

Description

@Thalarion

Describe the bug
On older firmware which has passphrase enabled calling trezorctl btc get-public-node fails.

Firmware version and revision
Core <2.3.5 (Trezor Model T)
Legacy <1.9.4 (Trezor Model 1)

Desktop/smartphone setup (please complete the following information):

  • trezorctl, version 0.20.1

To Reproduce
Prereq:

  • device with older firmware (see above), seeded with passphrase enabled

Steps to reproduce the behavior:

  1. run trezorctl -v btc get-public-node -n 'm/0h'
  2. on Trezor select Device
  3. process fails with Error: ProcessError: Passphrase provided when it should not be

AND

  1. run trezorctl -v btc get-public-node -n 'm/0h'
  2. on Trezor select Host
  3. process fails returns Deprecated_PassphraseStateRequest: but does not actually allow the user to input a passphrase

Expected behavior
Trezor returns Error: Expected PublicKey but Trezor sent <Deprecated_PassphraseStateRequest: {'state': b' ... '}>

Logs

Device selected

[2026-03-19 17:38:04,261] trezorlib.transport.hid INFO: HID transport is disabled: No module named 'hid'
[2026-03-19 17:38:04,274] trezorlib.transport INFO: Enumerating WebUsbTransport: found 1 devices
[2026-03-19 17:38:04,274] trezorlib.transport INFO: Opening transport: UdpTransport(udp:127.0.0.1:21324)
[2026-03-19 17:38:04,274] trezorlib.transport.udp DEBUG: Error while PINGing ('127.0.0.1', 21324): [Errno 61] Connection refused
[2026-03-19 17:38:04,274] trezorlib.transport INFO: Closing transport: UdpTransport(udp:127.0.0.1:21324)
[2026-03-19 17:38:04,274] trezorlib.transport INFO: Enumerating UdpTransport: found 0 devices
[2026-03-19 17:38:04,277] trezorlib.transport INFO: Enumerating BridgeTransport: found 0 devices
[2026-03-19 17:38:04,277] trezorlib.transport INFO: Opening transport: WebUsbTransport(webusb:001:1:4:2)
[2026-03-19 17:38:04,290] trezorlib.client INFO: creating client instance TrezorClientV1 for device: WebUsbTransport(webusb:001:1:4:2)
[2026-03-19 17:38:04,290] trezorlib.protocol_v1 INFO [s:(none:4429163216)]: Activating session SessionV1(id=(none))
[2026-03-19 17:38:04,290] trezorlib.protocol_v1 DEBUG [s:(none:4429163216)]: sending message: Initialize
Initialize (0 bytes) {
}
[2026-03-19 17:38:04,372] trezorlib.protocol_v1 DEBUG [s:(none:4429163216)]: received message: Features (158 bytes)
[2026-03-19 17:38:04,372] trezorlib.protocol_v1 ERROR: Trezor did not return a session ID. Session management is now broken.
/Users/michal.kazda/GitHub/trezor-firmware/python/src/trezorlib/protocol_v1.py:141: UserWarning: Your Trezor firmware does not support sessions.
  warnings.warn("Your Trezor firmware does not support sessions.")
[2026-03-19 17:38:04,373] trezorlib.protocol_v1 INFO: New session id (none)
/Users/michal.kazda/GitHub/trezor-firmware/python/src/trezorlib/client.py:406: UserWarning: Firmware is out of date
  self.check_firmware_version(warn_only=True)
[2026-03-19 17:38:04,373] trezorlib.protocol_v1 INFO [s:(none:4429163536)]: Activating session SessionV1(id=(none))
[2026-03-19 17:38:04,373] trezorlib.protocol_v1 DEBUG [s:(none:4429163536)]: sending message: Initialize
Initialize (2 bytes) {
    derive_cardano: False,
}
[2026-03-19 17:38:04,456] trezorlib.protocol_v1 DEBUG [s:(none:4429163536)]: received message: Features (158 bytes)
[2026-03-19 17:38:04,456] trezorlib.protocol_v1 ERROR: Trezor did not return a session ID. Session management is now broken.
[2026-03-19 17:38:04,456] trezorlib.protocol_v1 INFO: New session id (none)
[2026-03-19 17:38:04,457] trezorlib.protocol_v1 DEBUG [s:(none:4429163536)]: sending message: GetPublicKey
GetPublicKey (32 bytes) {
    address_n: [2147483648],
    coin_name: 'Bitcoin',
    ecdsa_curve_name: 'secp256k1',
    ignore_xpub_magic: True,
    script_type: SPENDADDRESS (0),
    show_display: False,
}
[2026-03-19 17:38:04,516] trezorlib.protocol_v1 DEBUG [s:(none:4429163536)]: received message: ButtonRequest
ButtonRequest (2 bytes) {
    code: _Deprecated_ButtonRequest_PassphraseType (14),
}
[2026-03-19 17:38:04,517] trezorlib.protocol_v1 DEBUG [s:(none:4429163536)]: sending message: ButtonAck
ButtonAck (0 bytes) {
}
Please confirm action on your Trezor device.
[2026-03-19 17:38:41,982] trezorlib.protocol_v1 DEBUG [s:(none:4429163536)]: received message: PassphraseRequest
PassphraseRequest (2 bytes) {
    _on_device: True,
}
[2026-03-19 17:38:41,984] trezorlib.protocol_v1 DEBUG [s:(none:4429163536)]: sending message: PassphraseAck
PassphraseAck (2 bytes) {
    passphrase: '',
}
[2026-03-19 17:38:42,352] trezorlib.protocol_v1 DEBUG [s:(none:4429163536)]: received message: Failure
Failure (45 bytes) {
    code: ProcessError (9),
    message: 'Passphrase provided when it should not be',
}
[2026-03-19 17:38:42,353] trezorlib.transport INFO: Closing transport: WebUsbTransport(webusb:001:1:4:2)
Error: ProcessError: Passphrase provided when it should not be

Host selected

[2026-03-19 17:44:12,559] trezorlib.transport.hid INFO: HID transport is disabled: No module named 'hid'
[2026-03-19 17:44:12,567] trezorlib.transport INFO: Opening transport: UdpTransport(udp:127.0.0.1:21324)
[2026-03-19 17:44:12,567] trezorlib.transport.udp DEBUG: Error while PINGing ('127.0.0.1', 21324): [Errno 61] Connection refused
[2026-03-19 17:44:12,567] trezorlib.transport INFO: Closing transport: UdpTransport(udp:127.0.0.1:21324)
[2026-03-19 17:44:12,567] trezorlib.transport INFO: Enumerating UdpTransport: found 0 devices
[2026-03-19 17:44:12,572] trezorlib.transport INFO: Enumerating BridgeTransport: found 0 devices
[2026-03-19 17:44:12,576] trezorlib.transport INFO: Enumerating WebUsbTransport: found 1 devices
[2026-03-19 17:44:12,576] trezorlib.transport INFO: Opening transport: WebUsbTransport(webusb:001:1:4:2)
[2026-03-19 17:44:12,589] trezorlib.client INFO: creating client instance TrezorClientV1 for device: WebUsbTransport(webusb:001:1:4:2)
[2026-03-19 17:44:12,589] trezorlib.protocol_v1 INFO [s:(none:4418677136)]: Activating session SessionV1(id=(none))
[2026-03-19 17:44:12,589] trezorlib.protocol_v1 DEBUG [s:(none:4418677136)]: sending message: Initialize
Initialize (0 bytes) {
}
[2026-03-19 17:44:12,671] trezorlib.protocol_v1 DEBUG [s:(none:4418677136)]: received message: Features (158 bytes)
[2026-03-19 17:44:12,671] trezorlib.protocol_v1 ERROR: Trezor did not return a session ID. Session management is now broken.
/Users/michal.kazda/GitHub/trezor-firmware/python/src/trezorlib/protocol_v1.py:141: UserWarning: Your Trezor firmware does not support sessions.
  warnings.warn("Your Trezor firmware does not support sessions.")
[2026-03-19 17:44:12,672] trezorlib.protocol_v1 INFO: New session id (none)
/Users/michal.kazda/GitHub/trezor-firmware/python/src/trezorlib/client.py:406: UserWarning: Firmware is out of date
  self.check_firmware_version(warn_only=True)
[2026-03-19 17:44:12,673] trezorlib.protocol_v1 INFO [s:(none:4418677776)]: Activating session SessionV1(id=(none))
[2026-03-19 17:44:12,673] trezorlib.protocol_v1 DEBUG [s:(none:4418677776)]: sending message: Initialize
Initialize (2 bytes) {
    derive_cardano: False,
}
[2026-03-19 17:44:12,755] trezorlib.protocol_v1 DEBUG [s:(none:4418677776)]: received message: Features (158 bytes)
[2026-03-19 17:44:12,755] trezorlib.protocol_v1 ERROR: Trezor did not return a session ID. Session management is now broken.
[2026-03-19 17:44:12,755] trezorlib.protocol_v1 INFO: New session id (none)
[2026-03-19 17:44:12,755] trezorlib.protocol_v1 DEBUG [s:(none:4418677776)]: sending message: GetPublicKey
GetPublicKey (32 bytes) {
    address_n: [2147483648],
    coin_name: 'Bitcoin',
    ecdsa_curve_name: 'secp256k1',
    ignore_xpub_magic: True,
    script_type: SPENDADDRESS (0),
    show_display: False,
}
[2026-03-19 17:44:12,815] trezorlib.protocol_v1 DEBUG [s:(none:4418677776)]: received message: ButtonRequest
ButtonRequest (2 bytes) {
    code: _Deprecated_ButtonRequest_PassphraseType (14),
}
[2026-03-19 17:44:12,815] trezorlib.protocol_v1 DEBUG [s:(none:4418677776)]: sending message: ButtonAck
ButtonAck (0 bytes) {
}
Please confirm action on your Trezor device.
[2026-03-19 17:44:14,354] trezorlib.protocol_v1 DEBUG [s:(none:4418677776)]: received message: PassphraseRequest
PassphraseRequest (2 bytes) {
    _on_device: False,
}
[2026-03-19 17:44:14,354] trezorlib.protocol_v1 DEBUG [s:(none:4418677776)]: sending message: PassphraseAck
PassphraseAck (2 bytes) {
    passphrase: '',
}
[2026-03-19 17:44:14,367] trezorlib.protocol_v1 DEBUG [s:(none:4418677776)]: received message: Deprecated_PassphraseStateRequest
Deprecated_PassphraseStateRequest (66 bytes) {
    state: 64 bytes 0x...,
}
[2026-03-19 17:44:14,367] trezorlib.transport INFO: Closing transport: WebUsbTransport(webusb:001:1:4:2)
Error: Expected PublicKey but Trezor sent <Deprecated_PassphraseStateRequest: {'state': b' ... '}>

Additional context
Warning Your Trezor firmware does not support sessions. needs to be bypassed first.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working as expected

    Type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions