mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-12 01:28:10 +00:00
48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
from ubinascii import hexlify
|
|
|
|
from trezor import ui
|
|
from trezor.messages import ButtonRequestType
|
|
from trezor.messages.HDNodeType import HDNodeType
|
|
from trezor.messages.PublicKey import PublicKey
|
|
from trezor.ui.text import Text
|
|
from trezor.utils import chunks
|
|
|
|
from apps.common import coins, seed
|
|
from apps.common.confirm import require_confirm
|
|
|
|
|
|
async def get_public_key(ctx, msg):
|
|
coin_name = msg.coin_name or 'Bitcoin'
|
|
coin = coins.by_name(coin_name)
|
|
|
|
curve_name = msg.ecdsa_curve_name
|
|
if not curve_name:
|
|
curve_name = coin.curve_name
|
|
node = await seed.derive_node(ctx, msg.address_n, curve_name=curve_name)
|
|
|
|
node_xpub = node.serialize_public(coin.xpub_magic)
|
|
pubkey = node.public_key()
|
|
if pubkey[0] == 1:
|
|
pubkey = b'\x00' + pubkey[1:]
|
|
node_type = HDNodeType(
|
|
depth=node.depth(),
|
|
child_num=node.child_num(),
|
|
fingerprint=node.fingerprint(),
|
|
chain_code=node.chain_code(),
|
|
public_key=pubkey)
|
|
|
|
if msg.show_display:
|
|
await _show_pubkey(ctx, pubkey)
|
|
|
|
return PublicKey(node=node_type, xpub=node_xpub)
|
|
|
|
|
|
async def _show_pubkey(ctx, pubkey: bytes):
|
|
lines = chunks(hexlify(pubkey).decode(), 18)
|
|
text = Text('Confirm public key', ui.ICON_RECEIVE, icon_color=ui.GREEN)
|
|
text.mono(*lines)
|
|
return await require_confirm(
|
|
ctx,
|
|
text,
|
|
code=ButtonRequestType.PublicKey)
|