fix spelling of TREZOR

pull/1/head
Pavol Rusnak 8 years ago
parent c665350a35
commit f3449fcbd7
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D

@ -4,7 +4,7 @@ python-trezor
.. image:: https://travis-ci.org/trezor/python-trezor.svg?branch=master .. image:: https://travis-ci.org/trezor/python-trezor.svg?branch=master
:target: https://travis-ci.org/trezor/python-trezor :target: https://travis-ci.org/trezor/python-trezor
Client side implementation for Trezor-compatible Bitcoin hardware wallets. Client side implementation for TREZOR-compatible Bitcoin hardware wallets.
See http://bitcointrezor.com for more information. See http://bitcointrezor.com for more information.

@ -58,7 +58,7 @@ class TestZeroSig(common.TrezorTest):
(signatures, serialized_tx) = self.client.sign_tx('Bitcoin', [inp1, ], [out1, ]) (signatures, serialized_tx) = self.client.sign_tx('Bitcoin', [inp1, ], [out1, ])
siglen = ord(serialized_tx[44]) siglen = ord(serialized_tx[44])
# Trezor must strip leading zero from signature # TREZOR must strip leading zero from signature
self.assertEqual(siglen, 67) self.assertEqual(siglen, 67)
def test_two_zero_signature(self): def test_two_zero_signature(self):
@ -79,7 +79,7 @@ class TestZeroSig(common.TrezorTest):
(signatures, serialized_tx) = self.client.sign_tx('Bitcoin', [inp1, ], [out1, ]) (signatures, serialized_tx) = self.client.sign_tx('Bitcoin', [inp1, ], [out1, ])
siglen = ord(serialized_tx[44]) siglen = ord(serialized_tx[44])
# Trezor must strip leading zero from signature # TREZOR must strip leading zero from signature
self.assertEqual(siglen, 66) self.assertEqual(siglen, 66)
if __name__ == '__main__': if __name__ == '__main__':

@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
''' '''
Use Trezor as a hardware key for opening EncFS filesystem! Use TREZOR as a hardware key for opening EncFS filesystem!
Demo usage: Demo usage:
@ -20,7 +20,7 @@ from trezorlib.transport_hid import HidTransport
def wait_for_devices(): def wait_for_devices():
devices = HidTransport.enumerate() devices = HidTransport.enumerate()
while not len(devices): while not len(devices):
sys.stderr.write("Please connect Trezor to computer and press Enter...") sys.stderr.write("Please connect TREZOR to computer and press Enter...")
raw_input() raw_input()
devices = HidTransport.enumerate() devices = HidTransport.enumerate()
@ -28,7 +28,7 @@ def wait_for_devices():
def choose_device(devices): def choose_device(devices):
if not len(devices): if not len(devices):
raise Exception("No Trezor connected!") raise Exception("No TREZOR connected!")
if len(devices) == 1: if len(devices) == 1:
try: try:
@ -78,7 +78,7 @@ def main():
sys.stderr.write('Please provide label for new drive: ') sys.stderr.write('Please provide label for new drive: ')
label = raw_input() label = raw_input()
sys.stderr.write('Computer asked Trezor for new strong password.\n') sys.stderr.write('Computer asked TREZOR for new strong password.\n')
sys.stderr.write('Please confirm action on your device.\n') sys.stderr.write('Please confirm action on your device.\n')
# 32 bytes, good for AES # 32 bytes, good for AES

@ -10,7 +10,7 @@ import tempfile
from trezorlib.client import TrezorClient, TrezorClientDebug from trezorlib.client import TrezorClient, TrezorClientDebug
def parse_args(commands): def parse_args(commands):
parser = argparse.ArgumentParser(description='Commandline tool for Trezor devices.') parser = argparse.ArgumentParser(description='Commandline tool for TREZOR devices.')
parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', help='Prints communication to device') parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', help='Prints communication to device')
parser.add_argument('-t', '--transport', dest='transport', choices=['usb', 'serial', 'pipe', 'socket', 'bridge'], default='usb', help="Transport used for talking with the device") parser.add_argument('-t', '--transport', dest='transport', choices=['usb', 'serial', 'pipe', 'socket', 'bridge'], default='usb', help="Transport used for talking with the device")
parser.add_argument('-p', '--path', dest='path', default='', help="Path used by the transport (usually serial port)") parser.add_argument('-p', '--path', dest='path', default='', help="Path used by the transport (usually serial port)")
@ -46,7 +46,7 @@ def get_transport(transport_string, path, **kwargs):
try: try:
path = list_usb()[0][0] path = list_usb()[0][0]
except IndexError: except IndexError:
raise Exception("No Trezor found on USB") raise Exception("No TREZOR found on USB")
for d in HidTransport.enumerate(): for d in HidTransport.enumerate():
# Two-tuple of (normal_interface, debug_interface) # Two-tuple of (normal_interface, debug_interface)
@ -237,14 +237,14 @@ class Commands(object):
fp.seek(0) fp.seek(0)
if fp.read(4) != 'TRZR': if fp.read(4) != 'TRZR':
raise Exception("Trezor firmware header expected") raise Exception("TREZOR firmware header expected")
print "Please confirm action on device..." print "Please confirm action on device..."
fp.seek(0) fp.seek(0)
return self.client.firmware_update(fp=fp) return self.client.firmware_update(fp=fp)
list.help = 'List connected Trezor USB devices' list.help = 'List connected TREZOR USB devices'
ping.help = 'Send ping message' ping.help = 'Send ping message'
get_address.help = 'Get bitcoin address in base58 encoding' get_address.help = 'Get bitcoin address in base58 encoding'
get_entropy.help = 'Get example entropy' get_entropy.help = 'Get example entropy'

@ -105,6 +105,9 @@ class BaseClient(object):
self.transport = transport self.transport = transport
super(BaseClient, self).__init__() # *args, **kwargs) super(BaseClient, self).__init__() # *args, **kwargs)
def cancel(self):
self.transport.write(proto.Cancel())
def call_raw(self, msg): def call_raw(self, msg):
try: try:
self.transport.session_begin() self.transport.session_begin()

@ -21,7 +21,7 @@ class PinMatrixWidget(QWidget):
''' '''
Displays widget with nine blank buttons and password box. Displays widget with nine blank buttons and password box.
Encodes button clicks into sequence of numbers for passing Encodes button clicks into sequence of numbers for passing
into PinAck messages of Trezor. into PinAck messages of TREZOR.
show_strength=True may be useful for entering new PIN show_strength=True may be useful for entering new PIN
''' '''

@ -12,31 +12,31 @@ class Transport(object):
self.device = device self.device = device
self.session_depth = 0 self.session_depth = 0
self._open() self._open()
def _open(self): def _open(self):
raise NotImplementedException("Not implemented") raise NotImplementedException("Not implemented")
def _close(self): def _close(self):
raise NotImplementedException("Not implemented") raise NotImplementedException("Not implemented")
def _write(self, msg, protobuf_msg): def _write(self, msg, protobuf_msg):
raise NotImplementedException("Not implemented") raise NotImplementedException("Not implemented")
def _read(self): def _read(self):
raise NotImplementedException("Not implemented") raise NotImplementedException("Not implemented")
def _session_begin(self): def _session_begin(self):
pass pass
def _session_end(self): def _session_end(self):
pass pass
def ready_to_read(self): def ready_to_read(self):
""" """
Returns True if there is data to be read from the transport. Otherwise, False. Returns True if there is data to be read from the transport. Otherwise, False.
""" """
raise NotImplementedException("Not implemented") raise NotImplementedException("Not implemented")
def session_begin(self): def session_begin(self):
""" """
Apply a lock to the device in order to preform synchronous multistep "conversations" with the device. For example, before entering the transaction signing workflow, one begins a session. After the transaction is complete, the session may be ended. Apply a lock to the device in order to preform synchronous multistep "conversations" with the device. For example, before entering the transaction signing workflow, one begins a session. After the transaction is complete, the session may be ended.
@ -44,7 +44,7 @@ class Transport(object):
if self.session_depth == 0: if self.session_depth == 0:
self._session_begin() self._session_begin()
self.session_depth += 1 self.session_depth += 1
def session_end(self): def session_end(self):
""" """
End a session. Se session_begin for an in depth description of TREZOR sessions. End a session. Se session_begin for an in depth description of TREZOR sessions.
@ -53,13 +53,13 @@ class Transport(object):
self.session_depth = max(0, self.session_depth) self.session_depth = max(0, self.session_depth)
if self.session_depth == 0: if self.session_depth == 0:
self._session_end() self._session_end()
def close(self): def close(self):
""" """
Close the connection to the physical device or file descriptor represented by the Transport. Close the connection to the physical device or file descriptor represented by the Transport.
""" """
self._close() self._close()
def write(self, msg): def write(self, msg):
""" """
Write mesage to tansport. msg should be a member of a valid `protobuf class <https://developers.google.com/protocol-buffers/docs/pythontutorial>`_ with a SerializeToString() method. Write mesage to tansport. msg should be a member of a valid `protobuf class <https://developers.google.com/protocol-buffers/docs/pythontutorial>`_ with a SerializeToString() method.
@ -79,9 +79,9 @@ class Transport(object):
data = self._read() data = self._read()
if data == None: if data == None:
return None return None
return self._parse_message(data) return self._parse_message(data)
def read_blocking(self): def read_blocking(self):
""" """
Same as read, except blocks untill data is available to be read. Same as read, except blocks untill data is available to be read.
@ -90,7 +90,7 @@ class Transport(object):
data = self._read() data = self._read()
if data != None: if data != None:
break break
return self._parse_message(data) return self._parse_message(data)
def _parse_message(self, data): def _parse_message(self, data):
@ -101,7 +101,7 @@ class Transport(object):
inst = mapping.get_class(msg_type)() inst = mapping.get_class(msg_type)()
inst.ParseFromString(data) inst.ParseFromString(data)
return inst return inst
def _read_headers(self, read_f): def _read_headers(self, read_f):
# Try to read headers until some sane value are detected # Try to read headers until some sane value are detected
is_ok = False is_ok = False
@ -129,5 +129,5 @@ class Transport(object):
break break
except: except:
raise Exception("Cannot parse header length") raise Exception("Cannot parse header length")
return (msg_type, datalen) return (msg_type, datalen)

@ -50,7 +50,7 @@ class BridgeTransport(Transport):
enum = r.json() enum = r.json()
return enum; return enum
def _open(self): def _open(self):

@ -7,18 +7,18 @@ from transport import Transport, NotImplementedException
class FakeTransport(Transport): class FakeTransport(Transport):
def __init__(self, device, *args, **kwargs): def __init__(self, device, *args, **kwargs):
super(FakeTransport, self).__init__(device, *args, **kwargs) super(FakeTransport, self).__init__(device, *args, **kwargs)
def _open(self): def _open(self):
pass pass
def _close(self): def _close(self):
pass pass
def ready_to_read(self): def ready_to_read(self):
return False return False
def _write(self, msg, protobuf_msg): def _write(self, msg, protobuf_msg):
pass pass
def _read(self): def _read(self):
raise NotImplementedException("Not implemented") raise NotImplementedException("Not implemented")

@ -6,8 +6,8 @@ import platform
from transport import Transport, ConnectionError, NotImplementedException from transport import Transport, ConnectionError, NotImplementedException
DEVICE_IDS = [ DEVICE_IDS = [
# (0x10c4, 0xea80), # Shield # (0x10c4, 0xea80), # TREZOR Shield
(0x534c, 0x0001), # Trezor (0x534c, 0x0001), # TREZOR
(0x2b24, 0x0001), # KeepKey (0x2b24, 0x0001), # KeepKey
] ]
@ -15,7 +15,7 @@ class FakeRead(object):
# Let's pretend we have a file-like interface # Let's pretend we have a file-like interface
def __init__(self, func): def __init__(self, func):
self.func = func self.func = func
def read(self, size): def read(self, size):
return self.func(size) return self.func(size)
@ -65,35 +65,35 @@ class HidTransport(Transport):
if d['path'] == self.device: if d['path'] == self.device:
return True return True
return False return False
def _open(self): def _open(self):
self.buffer = '' self.buffer = ''
self.hid = hid.device() self.hid = hid.device()
self.hid.open_path(self.device) self.hid.open_path(self.device)
self.hid.set_nonblocking(True) self.hid.set_nonblocking(True)
# the following was needed just for Trezor Shield # the following was needed just for TREZOR Shield
# self.hid.send_feature_report([0x41, 0x01]) # enable UART # self.hid.send_feature_report([0x41, 0x01]) # enable UART
# self.hid.send_feature_report([0x43, 0x03]) # purge TX/RX FIFOs # self.hid.send_feature_report([0x43, 0x03]) # purge TX/RX FIFOs
def _close(self): def _close(self):
self.hid.close() self.hid.close()
self.buffer = '' self.buffer = ''
self.hid = None self.hid = None
def ready_to_read(self): def ready_to_read(self):
return False return False
def _write(self, msg, protobuf_msg): def _write(self, msg, protobuf_msg):
msg = bytearray(msg) msg = bytearray(msg)
while len(msg): while len(msg):
# Report ID, data padded to 63 bytes # Report ID, data padded to 63 bytes
self.hid.write([63, ] + list(msg[:63]) + [0] * (63 - len(msg[:63]))) self.hid.write([63, ] + list(msg[:63]) + [0] * (63 - len(msg[:63])))
msg = msg[63:] msg = msg[63:]
def _read(self): def _read(self):
(msg_type, datalen) = self._read_headers(FakeRead(self._raw_read)) (msg_type, datalen) = self._read_headers(FakeRead(self._raw_read))
return (msg_type, self._raw_read(datalen)) return (msg_type, self._raw_read(datalen))
def _raw_read(self, length): def _raw_read(self, length):
start = time.time() start = time.time()
while len(self.buffer) < length: while len(self.buffer) < length:
@ -112,11 +112,11 @@ class HidTransport(Transport):
continue continue
report_id = data[0] report_id = data[0]
if report_id > 63: if report_id > 63:
# Command report # Command report
raise Exception("Not implemented") raise Exception("Not implemented")
# Payload received, skip the report ID # Payload received, skip the report ID
self.buffer += str(bytearray(data[1:])) self.buffer += str(bytearray(data[1:]))

@ -8,14 +8,14 @@ from transport import Transport
class PipeTransport(Transport): class PipeTransport(Transport):
def __init__(self, device, is_device, *args, **kwargs): def __init__(self, device, is_device, *args, **kwargs):
self.is_device = is_device # Set True if act as device self.is_device = is_device # Set True if act as device
super(PipeTransport, self).__init__(device, *args, **kwargs) super(PipeTransport, self).__init__(device, *args, **kwargs)
def _open(self): def _open(self):
if self.is_device: if self.is_device:
self.filename_read = self.device+'.to' self.filename_read = self.device+'.to'
self.filename_write = self.device+'.from' self.filename_write = self.device+'.from'
os.mkfifo(self.filename_read, 0600) os.mkfifo(self.filename_read, 0600)
os.mkfifo(self.filename_write, 0600) os.mkfifo(self.filename_write, 0600)
else: else:
@ -24,13 +24,13 @@ class PipeTransport(Transport):
if not os.path.exists(self.filename_write): if not os.path.exists(self.filename_write):
raise Exception("Not connected") raise Exception("Not connected")
self.write_fd = os.open(self.filename_write, os.O_RDWR)#|os.O_NONBLOCK) self.write_fd = os.open(self.filename_write, os.O_RDWR)#|os.O_NONBLOCK)
self.write_f = os.fdopen(self.write_fd, 'w+') self.write_f = os.fdopen(self.write_fd, 'w+')
self.read_fd = os.open(self.filename_read, os.O_RDWR)#|os.O_NONBLOCK) self.read_fd = os.open(self.filename_read, os.O_RDWR)#|os.O_NONBLOCK)
self.read_f = os.fdopen(self.read_fd, 'rb') self.read_f = os.fdopen(self.read_fd, 'rb')
def _close(self): def _close(self):
self.read_f.close() self.read_f.close()
self.write_f.close() self.write_f.close()
@ -41,7 +41,7 @@ class PipeTransport(Transport):
def ready_to_read(self): def ready_to_read(self):
rlist, _, _ = select([self.read_f], [], [], 0) rlist, _, _ = select([self.read_f], [], [], 0)
return len(rlist) > 0 return len(rlist) > 0
def _write(self, msg, protobuf_msg): def _write(self, msg, protobuf_msg):
try: try:
self.write_f.write(msg) self.write_f.write(msg)
@ -49,7 +49,7 @@ class PipeTransport(Transport):
except OSError: except OSError:
print "Error while writing to socket" print "Error while writing to socket"
raise raise
def _read(self): def _read(self):
try: try:
(msg_type, datalen) = self._read_headers(self.read_f) (msg_type, datalen) = self._read_headers(self.read_f)

@ -10,18 +10,18 @@ class SerialTransport(Transport):
def __init__(self, device, *args, **kwargs): def __init__(self, device, *args, **kwargs):
self.serial = None self.serial = None
super(SerialTransport, self).__init__(device, *args, **kwargs) super(SerialTransport, self).__init__(device, *args, **kwargs)
def _open(self): def _open(self):
self.serial = serial.Serial(self.device, 115200, timeout=10, writeTimeout=10) self.serial = serial.Serial(self.device, 115200, timeout=10, writeTimeout=10)
def _close(self): def _close(self):
self.serial.close() self.serial.close()
self.serial = None self.serial = None
def ready_to_read(self): def ready_to_read(self):
rlist, _, _ = select([self.serial], [], [], 0) rlist, _, _ = select([self.serial], [], [], 0)
return len(rlist) > 0 return len(rlist) > 0
def _write(self, msg, protobuf_msg): def _write(self, msg, protobuf_msg):
try: try:
self.serial.write(msg) self.serial.write(msg)
@ -29,7 +29,7 @@ class SerialTransport(Transport):
except serial.SerialException: except serial.SerialException:
print "Error while writing to socket" print "Error while writing to socket"
raise raise
def _read(self): def _read(self):
try: try:
(msg_type, datalen) = self._read_headers(self.serial) (msg_type, datalen) = self._read_headers(self.serial)

@ -12,26 +12,26 @@ class SocketTransportClient(Transport):
else: else:
device = (device[0], int(device[1])) device = (device[0], int(device[1]))
self.socket = None self.socket = None
super(SocketTransportClient, self).__init__(device, *args, **kwargs) super(SocketTransportClient, self).__init__(device, *args, **kwargs)
def _open(self): def _open(self):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect(self.device) self.socket.connect(self.device)
self.filelike = self.socket.makefile() self.filelike = self.socket.makefile()
def _close(self): def _close(self):
self.socket.close() self.socket.close()
self.socket = None self.socket = None
self.filelike = None self.filelike = None
def ready_to_read(self): def ready_to_read(self):
rlist, _, _ = select([self.socket], [], [], 0) rlist, _, _ = select([self.socket], [], [], 0)
return len(rlist) > 0 return len(rlist) > 0
def _write(self, msg, protobuf_msg): def _write(self, msg, protobuf_msg):
self.socket.sendall(msg) self.socket.sendall(msg)
def _read(self): def _read(self):
try: try:
(msg_type, datalen) = self._read_headers(self.filelike) (msg_type, datalen) = self._read_headers(self.filelike)
@ -53,27 +53,27 @@ class SocketTransport(Transport):
self.filelike = None self.filelike = None
super(SocketTransport, self).__init__(device, *args, **kwargs) super(SocketTransport, self).__init__(device, *args, **kwargs)
def _open(self): def _open(self):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
#self.socket.setblocking(0) #self.socket.setblocking(0)
self.socket.bind(self.device) self.socket.bind(self.device)
self.socket.listen(5) self.socket.listen(5)
def _disconnect_client(self): def _disconnect_client(self):
print "Disconnecting client" print "Disconnecting client"
if self.client != None: if self.client != None:
self.client.close() self.client.close()
self.client = None self.client = None
self.filelike = None self.filelike = None
def _close(self): def _close(self):
self._disconnect_client() self._disconnect_client()
self.socket.close() self.socket.close()
self.socket = None self.socket = None
def ready_to_read(self): def ready_to_read(self):
if self.filelike: if self.filelike:
# Connected # Connected
@ -88,18 +88,18 @@ class SocketTransport(Transport):
self.filelike = self.client.makefile() self.filelike = self.client.makefile()
return self.ready_to_read() return self.ready_to_read()
return False return False
def _write(self, msg, protobuf_msg): def _write(self, msg, protobuf_msg):
if self.filelike: if self.filelike:
# None on disconnected client # None on disconnected client
try: try:
self.filelike.write(msg) self.filelike.write(msg)
self.filelike.flush() self.filelike.flush()
except socket.error: except socket.error:
print "Socket error" print "Socket error"
self._disconnect_client() self._disconnect_client()
def _read(self): def _read(self):
try: try:
(msg_type, datalen) = self._read_headers(self.filelike) (msg_type, datalen) = self._read_headers(self.filelike)

Loading…
Cancel
Save