mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-04 13:52:35 +00:00
57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
from typing import TYPE_CHECKING
|
|
|
|
if TYPE_CHECKING:
|
|
from trezor.enums import MoneroNetworkType
|
|
|
|
from apps.common.keychain import Keychain
|
|
from apps.common.paths import Bip32Path
|
|
|
|
from .xmr.credentials import AccountCreds
|
|
from .xmr.crypto import Scalar
|
|
|
|
|
|
def get_creds(
|
|
keychain: Keychain, address_n: Bip32Path, network_type: MoneroNetworkType
|
|
) -> AccountCreds:
|
|
from apps.monero.xmr import monero
|
|
from apps.monero.xmr.credentials import AccountCreds
|
|
|
|
node = keychain.derive(address_n)
|
|
|
|
key_seed = node.private_key()
|
|
spend_sec, _, view_sec, _ = monero.generate_monero_keys(key_seed)
|
|
|
|
creds = AccountCreds.new_wallet(view_sec, spend_sec, network_type)
|
|
return creds
|
|
|
|
|
|
def compute_tx_key(
|
|
spend_key_private: Scalar,
|
|
tx_prefix_hash: bytes,
|
|
salt: bytes,
|
|
rand_mult_num: Scalar,
|
|
) -> bytes:
|
|
from apps.monero.xmr import crypto, crypto_helpers
|
|
|
|
rand_inp = crypto.sc_add_into(None, spend_key_private, rand_mult_num)
|
|
passwd = crypto_helpers.keccak_2hash(
|
|
crypto_helpers.encodeint(rand_inp) + tx_prefix_hash
|
|
)
|
|
tx_key = crypto_helpers.compute_hmac(salt, passwd)
|
|
return tx_key
|
|
|
|
|
|
def compute_enc_key_host(
|
|
view_key_private: Scalar, tx_prefix_hash: bytes
|
|
) -> tuple[bytes, bytes]:
|
|
from trezor.crypto import random
|
|
|
|
from apps.monero.xmr import crypto_helpers
|
|
|
|
salt = random.bytes(32)
|
|
passwd = crypto_helpers.keccak_2hash(
|
|
crypto_helpers.encodeint(view_key_private) + tx_prefix_hash
|
|
)
|
|
tx_key = crypto_helpers.compute_hmac(salt, passwd)
|
|
return tx_key, salt
|