apps: adjust to last commit

pull/25/head
Jan Pochyla 8 years ago
parent 065cbdbc3b
commit b400448b97

@ -101,11 +101,11 @@ def request_tx_finish(tx_req: TxRequest):
async def sign_tx(tx: SignTx, root): async def sign_tx(tx: SignTx, root):
tx_version = getattr(tx, 'version', 1) tx_version = tx.version if tx.version is not None else 1
tx_lock_time = getattr(tx, 'lock_time', 0) tx_lock_time = tx.lock_time or 0
tx_inputs_count = getattr(tx, 'inputs_count', 0) tx_inputs_count = tx.inputs_count or 0
tx_outputs_count = getattr(tx, 'outputs_count', 0) tx_outputs_count = tx.outputs_count or 0
coin_name = getattr(tx, 'coin_name', 'Bitcoin') coin_name = tx.coin_name or 'Bitcoin'
coin = coins.by_name(coin_name) coin = coins.by_name(coin_name)
@ -265,10 +265,10 @@ async def get_prevtx_output_value(tx_req: TxRequest, prev_hash: bytes, prev_inde
# STAGE_REQUEST_2_PREV_META # STAGE_REQUEST_2_PREV_META
tx = await request_tx_meta(tx_req, prev_hash) tx = await request_tx_meta(tx_req, prev_hash)
tx_version = getattr(tx, 'version', 0) tx_version = tx.version if tx.version is not None else 1
tx_lock_time = getattr(tx, 'lock_time', 1) tx_lock_time = tx.lock_time or 0
tx_inputs_count = getattr(tx, 'inputs_cnt', 0) tx_inputs_count = tx.inputs_cnt or 0
tx_outputs_count = getattr(tx, 'outputs_cnt', 0) tx_outputs_count = tx.outputs_cnt or 0
txh = HashWriter(sha256) txh = HashWriter(sha256)
@ -339,17 +339,16 @@ def output_derive_script(o: TxOutputType, coin: CoinType, root) -> bytes:
'Invalid output script type') 'Invalid output script type')
def output_paytoaddress_extract_raw_address(o: TxOutputType, coin: CoinType, root, p2sh=False) -> bytes: def output_paytoaddress_extract_raw_address(
o: TxOutputType, coin: CoinType, root, p2sh: bool=False) -> bytes:
addr_type = coin.address_type_p2sh if p2sh else coin.address_type addr_type = coin.address_type_p2sh if p2sh else coin.address_type
# TODO: dont encode/decode more then necessary # TODO: dont encode/decode more then necessary
address_n = getattr(o, 'address_n', None) if o.address_n is not None:
if address_n is not None: node = node_derive(root, o.address_n)
node = node_derive(root, address_n)
address = node.address(addr_type) address = node.address(addr_type)
return base58.decode_check(address) return base58.decode_check(address)
address = getattr(o, 'address', None) if o.address:
if address: raw = base58.decode_check(o.address)
raw = base58.decode_check(address)
if not address_type.check(addr_type, raw): if not address_type.check(addr_type, raw):
raise SigningError(FailureType.SyntaxError, raise SigningError(FailureType.SyntaxError,
'Invalid address type') 'Invalid address type')
@ -358,9 +357,8 @@ def output_paytoaddress_extract_raw_address(o: TxOutputType, coin: CoinType, roo
'Missing address') 'Missing address')
def output_is_change(o: TxOutputType): def output_is_change(o: TxOutputType) -> bool:
address_n = getattr(o, 'address_n', None) return bool(o.address_n)
return bool(address_n)
# Tx Inputs # Tx Inputs
@ -368,9 +366,9 @@ def output_is_change(o: TxOutputType):
def input_derive_script(i: TxInputType, pubkey: bytes, signature: bytes=None) -> bytes: def input_derive_script(i: TxInputType, pubkey: bytes, signature: bytes=None) -> bytes:
i_script_type = getattr(i, 'script_type', InputScriptType.SPENDADDRESS) script_type = i.script_type if i.script_type is not None else InputScriptType.SPENDADDRESS
if i_script_type == InputScriptType.SPENDADDRESS: if script_type == InputScriptType.SPENDADDRESS:
if signature is None: if signature is None:
return script_paytoaddress_new(ecdsa_hash_pubkey(pubkey)) return script_paytoaddress_new(ecdsa_hash_pubkey(pubkey))
else: else:
@ -452,7 +450,7 @@ def script_spendaddress_new(pubkey: bytes, signature: bytes) -> bytearray:
def write_tx_input(w, i: TxInputType): def write_tx_input(w, i: TxInputType):
i_sequence = getattr(i, 'sequence', 4294967295) i_sequence = i.sequence if i.sequence is not None else 4294967295
write_bytes_rev(w, i.prev_hash) write_bytes_rev(w, i.prev_hash)
write_uint32(w, i.prev_index) write_uint32(w, i.prev_index)
write_varint(w, len(i.script_sig)) write_varint(w, len(i.script_sig))
@ -461,7 +459,7 @@ def write_tx_input(w, i: TxInputType):
def write_tx_input_check(w, i: TxInputType): def write_tx_input_check(w, i: TxInputType):
i_sequence = getattr(i, 'sequence', 4294967295) i_sequence = i.sequence if i.sequence is not None else 4294967295
write_bytes(w, i.prev_hash) write_bytes(w, i.prev_hash)
write_uint32(w, i.prev_index) write_uint32(w, i.prev_index)
write_uint32(w, len(i.address_n)) write_uint32(w, len(i.address_n))

@ -3,7 +3,7 @@ from trezor.utils import unimport
@unimport @unimport
async def layout_load_device(message, session_id): async def layout_load_device(msg, session_id):
from trezor.crypto import bip39 from trezor.crypto import bip39
from trezor.messages.Success import Success from trezor.messages.Success import Success
from trezor.messages.FailureType import UnexpectedMessage, Other from trezor.messages.FailureType import UnexpectedMessage, Other
@ -14,17 +14,10 @@ async def layout_load_device(message, session_id):
if storage.is_initialized(): if storage.is_initialized():
raise wire.FailureError(UnexpectedMessage, 'Already initialized') raise wire.FailureError(UnexpectedMessage, 'Already initialized')
if hasattr(message, 'node'): if msg.node is not None:
raise wire.FailureError(Other, 'LoadDevice.node is not supported') raise wire.FailureError(Other, 'LoadDevice.node is not supported')
skip_checksum = getattr(message, 'skip_checksum', False) if not msg.skip_checksum and not bip39.check(msg.mnemonic):
mnemonic = getattr(message, 'mnemonic')
pin = getattr(message, 'pin', None)
label = getattr(message, 'label', None)
language = getattr(message, 'language', None)
passphrase_protection = getattr(message, 'passphrase_protection', False)
if not skip_checksum and not bip39.check(mnemonic):
raise wire.FailureError(Other, 'Mnemonic is not valid') raise wire.FailureError(Other, 'Mnemonic is not valid')
await require_confirm(session_id, Text( await require_confirm(session_id, Text(
@ -32,10 +25,10 @@ async def layout_load_device(message, session_id):
ui.BOLD, 'Loading private seed', 'is not recommended.', ui.BOLD, 'Loading private seed', 'is not recommended.',
ui.NORMAL, 'Continue only if you', 'know what you are doing!')) ui.NORMAL, 'Continue only if you', 'know what you are doing!'))
storage.load_mnemonic(mnemonic) storage.load_mnemonic(msg.mnemonic)
storage.load_settings(pin=pin, storage.load_settings(pin=msg.pin,
passphrase_protection=passphrase_protection, passphrase_protection=msg.passphrase_protection,
language=language, language=msg.language,
label=label) label=msg.label)
return Success(message='Device loaded') return Success(message='Device loaded')

@ -4,7 +4,7 @@ from trezor.utils import unimport, chunks
@unimport @unimport
async def layout_reset_device(message, session_id): async def layout_reset_device(msg, session_id):
from trezor.messages.Success import Success from trezor.messages.Success import Success
from trezor.messages.FailureType import UnexpectedMessage from trezor.messages.FailureType import UnexpectedMessage
from ..common.request_pin import request_pin_twice from ..common.request_pin import request_pin_twice
@ -14,20 +14,20 @@ async def layout_reset_device(message, session_id):
raise wire.FailureError(UnexpectedMessage, 'Already initialized') raise wire.FailureError(UnexpectedMessage, 'Already initialized')
mnemonic = await generate_mnemonic( mnemonic = await generate_mnemonic(
message.strength, message.display_random, session_id) msg.strength, msg.display_random, session_id)
await show_mnemonic(mnemonic) await show_mnemonic(mnemonic)
if message.pin_protection: if msg.pin_protection:
pin = await request_pin_twice(session_id) pin = await request_pin_twice(session_id)
else: else:
pin = None pin = None
storage.load_mnemonic(mnemonic) storage.load_mnemonic(mnemonic)
storage.load_settings(pin=pin, storage.load_settings(pin=pin,
passphrase_protection=message.passphrase_protection, passphrase_protection=msg.passphrase_protection,
language=message.language, language=msg.language,
label=message.label) label=msg.label)
return Success(message='Initialized') return Success(message='Initialized')

@ -9,23 +9,18 @@ async def layout_get_address(msg, session_id):
from ..common.seed import get_node from ..common.seed import get_node
from ..common import coins from ..common import coins
address_n = getattr(msg, 'address_n', ()) if msg.multisig:
coin_name = getattr(msg, 'coin_name', 'Bitcoin')
multisig = getattr(msg, 'multisig', None)
show_display = getattr(msg, 'show_display', False)
# TODO: support multisig addresses
if multisig:
raise wire.FailureError(Other, 'GetAddress.multisig is unsupported') raise wire.FailureError(Other, 'GetAddress.multisig is unsupported')
address_n = msg.address_n or ()
coin_name = msg.coin_name or 'Bitcoin'
node = await get_node(session_id, address_n) node = await get_node(session_id, address_n)
coin = coins.by_name(coin_name) coin = coins.by_name(coin_name)
address = node.address(coin.address_type) address = node.address(coin.address_type)
if show_display: if msg.show_display:
await _show_address(session_id, address) await _show_address(session_id, address)
return Address(address=address) return Address(address=address)

@ -7,8 +7,7 @@ async def layout_get_public_key(msg, session_id):
from trezor.messages.HDNodeType import HDNodeType from trezor.messages.HDNodeType import HDNodeType
from trezor.messages.PublicKey import PublicKey from trezor.messages.PublicKey import PublicKey
address_n = getattr(msg, 'address_n', ()) address_n = msg.address_n or ()
node = await seed.get_node(session_id, address_n) node = await seed.get_node(session_id, address_n)
node_xpub = node.serialize_public() node_xpub = node.serialize_public()

@ -1,4 +1,4 @@
from trezor import wire, ui from trezor import ui
from trezor.utils import unimport from trezor.utils import unimport
@unimport @unimport
@ -12,18 +12,18 @@ async def layout_sign_identity(msg, session_id):
from ..common.signverify import message_digest from ..common.signverify import message_digest
identity = '' identity = ''
if hasattr(msg.identity, 'proto') and msg.identity.proto: if msg.identity.proto:
identity += msg.identity.proto + '://' identity += msg.identity.proto + '://'
if hasattr(msg.identity, 'user') and msg.identity.user: if msg.identity.user:
identity += msg.identity.user + '@' identity += msg.identity.user + '@'
if hasattr(msg.identity, 'host') and msg.identity.host: if msg.identity.host:
identity += msg.identity.host identity += msg.identity.host
if hasattr(msg.identity, 'port') and msg.identity.port: if msg.identity.port:
identity += ':' + msg.identity.port identity += ':' + msg.identity.port
if hasattr(msg.identity, 'path') and msg.identity.path: if msg.identity.path:
identity += msg.identity.path identity += msg.identity.path
index = getattr(msg.identity, 'index', 0) index = msg.identity.index or 0
identity_hash = sha256(pack('<I', index) + identity).digest() identity_hash = sha256(pack('<I', index) + identity).digest()
address_n = (13, ) + unpack('<IIII', identity_hash[:16]) address_n = (13, ) + unpack('<IIII', identity_hash[:16])

@ -1,4 +1,4 @@
from trezor import wire, ui from trezor import ui
from trezor.utils import unimport from trezor.utils import unimport
@ -15,7 +15,7 @@ async def layout_sign_message(msg, session_id):
ui.BOLD, ui.LIGHT_GREEN, ui.BLACK) ui.BOLD, ui.LIGHT_GREEN, ui.BLACK)
ui.display.text(10, 60, msg.message, ui.MONO, ui.WHITE, ui.BLACK) ui.display.text(10, 60, msg.message, ui.MONO, ui.WHITE, ui.BLACK)
coin_name = getattr(msg, 'coin_name', 'Bitcoin') coin_name = msg.coin_name or 'Bitcoin'
coin = coins.by_name(coin_name) coin = coins.by_name(coin_name)
node = await get_node(session_id, msg.address_n) node = await get_node(session_id, msg.address_n)

@ -6,6 +6,11 @@ def format_amount(amount, coin):
return '%s %s' % (amount / 1e8, coin.coin_shortcut) return '%s %s' % (amount / 1e8, coin.coin_shortcut)
def split_address(address):
from trezor.utils import chunks
return chunks(address, 17)
async def confirm_output(session_id, output, coin): async def confirm_output(session_id, output, coin):
from trezor import ui from trezor import ui
from trezor.ui.text import Text from trezor.ui.text import Text
@ -15,8 +20,7 @@ async def confirm_output(session_id, output, coin):
content = Text('Confirm output', ui.ICON_RESET, content = Text('Confirm output', ui.ICON_RESET,
ui.BOLD, format_amount(output.amount, coin), ui.BOLD, format_amount(output.amount, coin),
ui.NORMAL, 'to', ui.NORMAL, 'to',
ui.MONO, output.address[0:17], ui.MONO, *split_address(output.address))
ui.MONO, output.address[17:])
return await confirm(session_id, content, ConfirmOutput) return await confirm(session_id, content, ConfirmOutput)
@ -44,17 +48,16 @@ async def confirm_feeoverthreshold(session_id, fee, coin):
@unimport @unimport
async def layout_sign_tx(message, session_id): async def layout_sign_tx(msg, session_id):
from ..common.seed import get_root_node from ..common.seed import get_root_node
from ..common import signtx from ..common import signtx
from trezor.messages import RequestType from trezor.messages.RequestType import TXFINISHED
from trezor.messages.TxRequest import TxRequest
from trezor.messages.wire_types import TxAck from trezor.messages.wire_types import TxAck
root = await get_root_node(session_id) root = await get_root_node(session_id)
signer = signtx.sign_tx(message, root) signer = signtx.sign_tx(msg, root)
res = None res = None
while True: while True:
try: try:
@ -62,7 +65,7 @@ async def layout_sign_tx(message, session_id):
except signtx.SigningError as e: except signtx.SigningError as e:
raise wire.FailureError(*e.args) raise wire.FailureError(*e.args)
if req.__qualname__ == 'TxRequest': if req.__qualname__ == 'TxRequest':
if req.request_type == RequestType.TXFINISHED: if req.request_type == TXFINISHED:
break break
res = await wire.reply_message(session_id, req, TxAck) res = await wire.reply_message(session_id, req, TxAck)
elif req.__qualname__ == 'UiConfirmOutput': elif req.__qualname__ == 'UiConfirmOutput':
@ -71,6 +74,6 @@ async def layout_sign_tx(message, session_id):
res = await confirm_total(session_id, req.spending, req.fee, req.coin) res = await confirm_total(session_id, req.spending, req.fee, req.coin)
elif req.__qualname__ == 'UiConfirmFeeOverThreshold': elif req.__qualname__ == 'UiConfirmFeeOverThreshold':
res = await confirm_feeoverthreshold(session_id, req.fee, req.coin) res = await confirm_feeoverthreshold(session_id, req.fee, req.coin)
else: else:
raise ValueError('Invalid signing instruction') raise TypeError('Invalid signing instruction')
return req return req

@ -1,6 +1,7 @@
from trezor import wire, ui from trezor import ui
from trezor.utils import unimport from trezor.utils import unimport
@unimport @unimport
async def layout_verify_message(msg, session_id): async def layout_verify_message(msg, session_id):
from trezor.messages.Success import Success from trezor.messages.Success import Success
@ -11,7 +12,7 @@ async def layout_verify_message(msg, session_id):
from ..common import coins from ..common import coins
from ..common.signverify import message_digest from ..common.signverify import message_digest
coin_name = getattr(msg, 'coin_name', 'Bitcoin') coin_name = msg.coin_name or 'Bitcoin'
coin = coins.by_name(coin_name) coin = coins.by_name(coin_name)
digest = message_digest(coin, msg.message) digest = message_digest(coin, msg.message)

Loading…
Cancel
Save