feat(core): add verification of selected pairing methods, add NoMethod pairing for usb interface

[no changelog]
M1nd3r/thp1
M1nd3r 2 months ago
parent 5727c7e319
commit 878d03f236

@ -280,9 +280,10 @@ async def _handle_state_TH2(ctx: Channel, message_length: int, ctrl_byte: int) -
) )
if TYPE_CHECKING: if TYPE_CHECKING:
assert ThpHandshakeCompletionReqNoisePayload.is_type_of(noise_payload) assert ThpHandshakeCompletionReqNoisePayload.is_type_of(noise_payload)
for i in noise_payload.pairing_methods: enabled_methods = thp_messages.get_enabled_pairing_methods(ctx.iface)
if i not in ctx.selected_pairing_methods: for method in noise_payload.pairing_methods:
ctx.selected_pairing_methods.append(i) if method in enabled_methods and method not in ctx.selected_pairing_methods:
ctx.selected_pairing_methods.append(method)
if __debug__: if __debug__:
log.debug( log.debug(
__name__, __name__,

@ -1,5 +1,6 @@
import ustruct import ustruct
from micropython import const from micropython import const
from typing import TYPE_CHECKING
from storage.cache_thp import BROADCAST_CHANNEL_ID from storage.cache_thp import BROADCAST_CHANNEL_ID
from trezor import protobuf, utils from trezor import protobuf, utils
@ -31,6 +32,9 @@ TREZOR_STATE_PAIRED = b"\x01"
if __debug__: if __debug__:
from trezor import log from trezor import log
if TYPE_CHECKING:
from trezor.wire import WireInterface
class PacketHeader: class PacketHeader:
format_str_init = ">BHH" format_str_init = ">BHH"
@ -70,17 +74,28 @@ class PacketHeader:
_ENCODED_DEVICE_PROPERTIES: bytes | None = None _ENCODED_DEVICE_PROPERTIES: bytes | None = None
_ENABLED_PAIRING_METHODS = [ _DEFAULT_ENABLED_PAIRING_METHODS = [
ThpPairingMethod.CodeEntry, ThpPairingMethod.CodeEntry,
ThpPairingMethod.QrCode, ThpPairingMethod.QrCode,
ThpPairingMethod.NFC_Unidirectional, ThpPairingMethod.NFC_Unidirectional,
] ]
def _get_device_properties() -> ThpDeviceProperties: def get_enabled_pairing_methods(
iface: WireInterface | None = None,
) -> list[ThpPairingMethod]:
import usb
l = _DEFAULT_ENABLED_PAIRING_METHODS.copy()
if iface is not None and iface is usb.iface_wire:
l.append(ThpPairingMethod.NoMethod)
return l
def _get_device_properties(iface: WireInterface | None = None) -> ThpDeviceProperties:
# TODO define model variants # TODO define model variants
return ThpDeviceProperties( return ThpDeviceProperties(
pairing_methods=_ENABLED_PAIRING_METHODS, pairing_methods=get_enabled_pairing_methods(iface),
internal_model=utils.INTERNAL_MODEL, internal_model=utils.INTERNAL_MODEL,
model_variant=0, model_variant=0,
bootloader_mode=False, bootloader_mode=False,

Loading…
Cancel
Save