def _get_primary_change_address(state: State): """ Computes primary change address for the current account index """ from trezor.messages.MoneroAccountPublicAddress import MoneroAccountPublicAddress D, C = monero.generate_sub_address_keys(state.creds.view_key_private, state.creds.spend_key_public, state.account_idx, 0) return MoneroAccountPublicAddress(view_public_key=crypto.encodepoint(C), spend_public_key=crypto.encodepoint(D))
async def get_address(ctx: wire.Context, msg: MoneroGetAddress, keychain: Keychain) -> MoneroAddress: await paths.validate_path(ctx, keychain, msg.address_n) creds = misc.get_creds(keychain, msg.address_n, msg.network_type) addr = creds.address have_subaddress = msg.account is not None and msg.minor is not None have_payment_id = msg.payment_id is not None if (msg.account is None) != (msg.minor is None): raise wire.ProcessError("Invalid subaddress indexes") if have_payment_id and have_subaddress: raise wire.DataError("Subaddress cannot be integrated") if have_payment_id: assert msg.payment_id is not None if len(msg.payment_id) != 8: raise ValueError("Invalid payment ID length") addr = addresses.encode_addr( net_version(msg.network_type, False, True), crypto_helpers.encodepoint(creds.spend_key_public), crypto_helpers.encodepoint(creds.view_key_public), msg.payment_id, ) if have_subaddress: assert msg.account is not None assert msg.minor is not None pub_spend, pub_view = monero.generate_sub_address_keys( creds.view_key_private, creds.spend_key_public, msg.account, msg.minor) addr = addresses.encode_addr( net_version(msg.network_type, True, False), crypto_helpers.encodepoint(pub_spend), crypto_helpers.encodepoint(pub_view), ) if msg.show_display: title = paths.address_n_to_str(msg.address_n) await show_address( ctx, address=addr, address_qr="monero:" + addr, title=title, ) return MoneroAddress(address=addr.encode())
async def get_address(ctx, msg, keychain): await paths.validate_path(ctx, keychain, msg.address_n) creds = misc.get_creds(keychain, msg.address_n, msg.network_type) addr = creds.address if msg.payment_id: if len(msg.payment_id) != 8: raise ValueError("Invalid payment ID length") addr = addresses.encode_addr( net_version(msg.network_type, False, True), crypto.encodepoint(creds.spend_key_public), crypto.encodepoint(creds.view_key_public), msg.payment_id, ) if msg.account or msg.minor: if msg.payment_id: raise ValueError("Subaddress cannot be integrated") pub_spend, pub_view = monero.generate_sub_address_keys( creds.view_key_private, creds.spend_key_public, msg.account, msg.minor) addr = addresses.encode_addr( net_version(msg.network_type, True, False), crypto.encodepoint(pub_spend), crypto.encodepoint(pub_view), ) if msg.show_display: title = paths.address_n_to_str(msg.address_n) await show_address( ctx, address=addr.decode(), address_qr="monero:" + addr.decode(), title=title, ) return MoneroAddress(address=addr)