trezor-core/src/main.py

156 lines
4.5 KiB
Python
Raw Normal View History

2017-10-24 04:59:09 -07:00
import boot
2017-08-14 02:08:47 -07:00
from trezor import io
from trezor import log
from trezor import loop
from trezor import wire
from trezor import workflow
USE_WEBUSB = False
log.level = log.DEBUG
2016-04-28 14:48:27 -07:00
2017-08-15 06:09:09 -07:00
# initialize the USB stack
2018-01-20 14:11:21 -08:00
if USE_WEBUSB:
usb_wire = io.WebUSB(
iface_num=0,
ep_in=0x81,
ep_out=0x01,
)
else:
2018-01-20 14:11:21 -08:00
usb_wire = io.HID(
iface_num=0,
ep_in=0x81,
ep_out=0x01,
2017-10-30 09:34:21 -07:00
report_desc=bytes([
2018-01-20 14:11:21 -08:00
0x06, 0x00, 0xff, # USAGE_PAGE (Vendor Defined)
2017-10-30 09:34:21 -07:00
0x09, 0x01, # USAGE (1)
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
]),
)
2018-01-20 14:11:21 -08:00
2017-08-14 02:08:47 -07:00
usb_u2f = io.HID(
2018-01-20 14:11:21 -08:00
iface_num=3,
ep_in=0x84,
ep_out=0x03,
2017-05-09 07:12:02 -07:00
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
]),
)
2018-01-20 14:11:21 -08:00
if __debug__:
if USE_WEBUSB:
usb_debug = io.WebUSB(
iface_num=4,
ep_in=0x85,
ep_out=0x04,
)
else:
2018-01-20 14:11:21 -08:00
usb_debug = io.HID(
iface_num=4,
ep_in=0x85,
ep_out=0x04,
report_desc=bytes([
0x06, 0x01, 0xff, # USAGE_PAGE (Vendor Defined)
0x09, 0x01, # USAGE (1)
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
]),
)
2018-01-20 14:11:21 -08:00
usb_vcp = io.VCP(
iface_num=1,
data_iface_num=2,
ep_in=0x82,
ep_out=0x02,
ep_cmd=0x83,
)
2017-08-14 02:08:47 -07:00
usb = io.USB(
2017-04-21 07:06:22 -07:00
vendor_id=0x1209,
product_id=0x53C1,
release_num=0x0200,
2017-08-14 02:08:47 -07:00
manufacturer="SatoshiLabs",
product="TREZOR",
serial_number="44DD6B2C788D760538A78ECA",
interface="TREZOR Interface",
2017-08-14 02:08:47 -07:00
)
2018-01-20 14:11:21 -08:00
2017-08-14 02:08:47 -07:00
usb.add(usb_wire)
2018-01-20 14:11:21 -08:00
usb.add(usb_u2f)
2017-10-30 09:34:21 -07:00
if __debug__:
usb.add(usb_debug)
2018-01-20 14:11:21 -08:00
usb.add(usb_vcp)
2017-08-15 06:09:09 -07:00
# load applications
if __debug__:
from apps import debug
from apps import homescreen
from apps import management
from apps import wallet
from apps import ethereum
from apps import fido_u2f
# boot applications
if __debug__:
debug.boot()
homescreen.boot()
management.boot()
wallet.boot()
ethereum.boot()
fido_u2f.boot(usb_u2f)
2017-08-21 04:22:44 -07:00
# initialize the wire codec and start the USB
2017-08-15 06:09:09 -07:00
wire.setup(usb_wire)
2017-10-30 09:34:21 -07:00
if __debug__:
wire.setup(usb_debug)
2017-08-21 04:22:44 -07:00
usb.open()
2017-08-15 06:09:09 -07:00
# load default homescreen
2016-12-08 07:18:58 -08:00
from apps.homescreen.homescreen import layout_homescreen
2016-04-28 14:48:27 -07:00
2017-08-15 06:09:09 -07:00
# run main even loop and specify which screen is default
workflow.startdefault(layout_homescreen)
2017-08-21 04:22:44 -07:00
loop.run()