from trezor import io, utils from apps.common.storage.device import get_device_id # fmt: off # interface used for trezor wire protocol iface_wire = io.WebUSB( iface_num=0, ep_in=0x81, ep_out=0x01, ) # as the iface_vcp interface can have at most 3 endpoints, we cannot use it simultaneously # with the iface_webauthn interface. if __debug__: # interface used for debug messages with trezor wire protocol iface_debug = io.WebUSB( iface_num=1, ep_in=0x82, ep_out=0x02, ) # interface used for cdc/vcp console emulation (debug messages) iface_vcp = io.VCP( iface_num=2, data_iface_num=3, ep_in=0x83, ep_out=0x03, ep_cmd=0x84, ) if not utils.BITCOIN_ONLY: if not __debug__ or utils.EMULATOR: # interface used for FIDO/U2F and FIDO2/WebAuthn HID transport iface_webauthn = io.HID( iface_num=4 if __debug__ else 1, ep_in=0x85 if __debug__ else 0x82, ep_out=0x04 if __debug__ else 0x02, report_desc=bytes([ 0x06, 0xd0, 0xf1, # USAGE_PAGE (FIDO Alliance) 0x09, 0x01, # USAGE (U2F HID Authenticator Device) 0xa1, 0x01, # COLLECTION (Application) 0x09, 0x20, # USAGE (Input Report Data) 0x15, 0x00, # LOGICAL_MINIMUM (0) 0x26, 0xff, 0x00, # LOGICAL_MAXIMUM (255) 0x75, 0x08, # REPORT_SIZE (8) 0x95, 0x40, # REPORT_COUNT (64) 0x81, 0x02, # INPUT (Data,Var,Abs) 0x09, 0x21, # USAGE (Output Report Data) 0x15, 0x00, # LOGICAL_MINIMUM (0) 0x26, 0xff, 0x00, # LOGICAL_MAXIMUM (255) 0x75, 0x08, # REPORT_SIZE (8) 0x95, 0x40, # REPORT_COUNT (64) 0x91, 0x02, # OUTPUT (Data,Var,Abs) 0xc0, # END_COLLECTION ]), ) bus = io.USB( vendor_id=0x1209, product_id=0x53C1, release_num=0x0200, manufacturer="SatoshiLabs", product="TREZOR", interface="TREZOR Interface", serial_number=get_device_id(), ) bus.add(iface_wire) if __debug__: bus.add(iface_debug) bus.add(iface_vcp) if not utils.BITCOIN_ONLY: if not __debug__ or utils.EMULATOR: bus.add(iface_webauthn)