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:
- run
trezorctl -v btc get-public-node -n 'm/0h'
- on Trezor select Device
- process fails with
Error: ProcessError: Passphrase provided when it should not be
AND
- run
trezorctl -v btc get-public-node -n 'm/0h'
- on Trezor select Host
- 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.
Describe the bug
On older firmware which has passphrase enabled calling
trezorctl btc get-public-nodefails.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):
To Reproduce
Prereq:
Steps to reproduce the behavior:
trezorctl -v btc get-public-node -n 'm/0h'Error: ProcessError: Passphrase provided when it should not beAND
trezorctl -v btc get-public-node -n 'm/0h'Deprecated_PassphraseStateRequest:but does not actually allow the user to input a passphraseExpected behavior
Trezor returns
Error: Expected PublicKey but Trezor sent <Deprecated_PassphraseStateRequest: {'state': b' ... '}>Logs
Device selected
Host selected
Additional context
Warning
Your Trezor firmware does not support sessions.needs to be bypassed first.