def test_wallet_addr(self): addr = monero.encode_addr( monero.net_version(), binascii.unhexlify( b"3bec484c5d7f0246af520aab550452b5b6013733feabebd681c4a60d457b7fc1" ), binascii.unhexlify( b"2d5918e31d3c003da3c778592c07b398ad6f961a67082a75fd49394d51e69bbe" ), ) self.assertEqual( addr, b"43tpGG9PKbwCpjRvNLn1jwXPpnacw2uVUcszAtgmDiVcZK4VgHwjJT9BJz1WGF9eMxSYASp8yNMkuLjeQfWqJn3CNWdWfzV", ) w = monero.AccountCreds.new_wallet( crypto.b16_to_scalar( b"4ce88c168e0f5f8d6524f712d5f8d7d83233b1e7a2a60b5aba5206cc0ea2bc08" ), crypto.b16_to_scalar( b"f2644a3dd97d43e87887e74d1691d52baa0614206ad1b0c239ff4aa3b501750a" ), network_type=monero.NetworkTypes.TESTNET, ) self.assertEqual( w.address, b"9vacMKaj8JJV6MnwDzh2oNVdwTLJfTDyNRiB6NzV9TT7fqvzLivH2dB8Tv7VYR3ncn8vCb3KdNMJzQWrPAF1otYJ9cPKpkr", )
async def open_account(self): """ Handles account open / management :return: """ self.update_intro() self.update_prompt() priv_spend_key = None priv_view_key = None if not self.args.account_file and not self.args.spend_key: logger.debug( "No account file nor spend key. Please generate new account") return acc_file_exists = False if self.args.account_file: acc_file_exists = os.path.exists(self.args.account_file) if acc_file_exists and self.args.spend_key: logger.error("Account file exists, spend key is ignored") if acc_file_exists and self.args.view_key: logger.error("Account file exists, view key is ignored") if acc_file_exists: with open(self.args.account_file) as fh: self.account_data = json.load(fh) priv_spend_key = crypto.decodeint( binascii.unhexlify( self.account_data["spend_key"].encode("ascii"))) priv_view_key = crypto.decodeint( binascii.unhexlify( self.account_data["view_key"].encode("ascii"))) if not acc_file_exists and self.args.spend_key: priv_view = self.args.view_key.encode("utf8") priv_spend = self.args.spend_key.encode("utf8") priv_view_key = crypto.b16_to_scalar(priv_view) priv_spend_key = crypto.b16_to_scalar(priv_spend) self.account_data = { "spend_key": priv_spend_key, "view_key": priv_view_key } with open(self.args.account_file, "w") as fh: json.dump( { "spend_key": priv_spend.decode("ascii"), "view_key": priv_view.decode("ascii"), }, fh, indent=2, ) if priv_spend_key and priv_view_key: self.init_with_keys(priv_spend_key, priv_view_key)
def get_creds(self): """ Wallet credentials :return: """ return monero.AccountCreds.new_wallet( priv_view_key=crypto.b16_to_scalar( b"4ce88c168e0f5f8d6524f712d5f8d7d83233b1e7a2a60b5aba5206cc0ea2bc08" ), priv_spend_key=crypto.b16_to_scalar( b"f2644a3dd97d43e87887e74d1691d52baa0614206ad1b0c239ff4aa3b501750a" ), )
def get_creds_02(self): """ Wallet 01 credentials :return: """ return monero.AccountCreds.new_wallet( priv_view_key=crypto.b16_to_scalar( b"9e7aba8ae9ee134e5d5464d9145a4db26793d7411af7d06f20e755cb2a5ad50f" ), priv_spend_key=crypto.b16_to_scalar( b"283d8bab1aeaee8f8b5aed982fc894c67d3e03db9006e488321c053f5183310d" ), network_type=monero.NetworkTypes.TESTNET, )
def get_creds_01(self): """ Wallet 02 credentials :return: """ return monero.AccountCreds.new_wallet( priv_view_key=crypto.b16_to_scalar( b"42ba20adb337e5eca797565be11c9adb0a8bef8c830bccc2df712535d3b8f608" ), priv_spend_key=crypto.b16_to_scalar( b"b0ef6bd527b9b23b9ceef70dc8b4cd1ee83ca14541964e764ad23f5151204f0f" ), network_type=monero.NetworkTypes.TESTNET, )
def get_creds(self): """ Wallet credentials :return: """ return monero.AccountCreds.new_wallet( # slip0010 priv_view_key=crypto.b16_to_scalar( b"a6ccd4ac344a295d1387f8d18c81bdd394f1845de84188e204514ef9370fd403" ), priv_spend_key=crypto.b16_to_scalar( b"14821d0bc5659b24cafbc889dc4fc60785ee08b65d71c525f81eeaba4f3a570f" ), network_type=monero.NetworkTypes.TESTNET, )
def get_creds_old2(self): """ Wallet credentials :return: """ return monero.AccountCreds.new_wallet( priv_view_key=crypto.b16_to_scalar( b"6b8a47bdc2bd9923b1684abdbbed56a4e834b101011e4c28585ae1d01281030d" ), priv_spend_key=crypto.b16_to_scalar( b"85148a19717a505fe4fc84219a79c4b4fdc35772ecb03b71385dc6572845d809" ), network_type=monero.NetworkTypes.TESTNET, )
def test_get_subaddress_secret_key(self): a = crypto.b16_to_scalar( b"4ce88c168e0f5f8d6524f712d5f8d7d83233b1e7a2a60b5aba5206cc0ea2bc08" ) m = monero.get_subaddress_secret_key(secret_key=a, major=0, minor=1) self.assertEqual( crypto.encodeint(m), binascii.unhexlify( b"b6ff4d689b95e3310efbf683850c075bcde46361923054e42ef30016b287ff0c" ), )
async def open_account_passed(self): """ Loads passed credentials :return: """ priv_view = self.args.view_key.encode("ascii") self.priv_view = crypto.b16_to_scalar(priv_view) self.address = self.args.address.encode("ascii") self.set_network_type(monero.NetworkTypes.TESTNET if self.args. testnet else monero.NetworkTypes.MAINNET) self.wallet_file = self.args.watch_wallet self.monero_bin = self.args.monero_bin await self.open_with_keys(self.priv_view, self.address)
def test_get_subaddress_secret_key(self): a = crypto.b16_to_scalar( b"4ce88c168e0f5f8d6524f712d5f8d7d83233b1e7a2a60b5aba5206cc0ea2bc08" ) m = monero.get_subaddress_secret_key(secret_key=a, major=0, minor=1) self.assertEqual( crypto.encodeint(m), bytes( [ 0xb6, 0xff, 0x4d, 0x68, 0x9b, 0x95, 0xe3, 0x31, 0x0e, 0xfb, 0xf6, 0x83, 0x85, 0x0c, 0x07, 0x5b, 0xcd, 0xe4, 0x63, 0x61, 0x92, 0x30, 0x54, 0xe4, 0x2e, 0xf3, 0x00, 0x16, 0xb2, 0x87, 0xff, 0x0c, ] ), )
async def open_account_file(self, file): """ Opens account file :param file: :return: """ with open(file) as fh: js = json.load(fh) # Wallet key encryption self.wallet_password = await self.prompt_password() self.wallet_salt = common.defvalkey(js, "wallet_salt") if self.wallet_salt is None: self.wallet_salt = crypto.random_bytes(32) else: self.wallet_salt = binascii.unhexlify(self.wallet_salt) # Wallet view key dec. if "view_key" in js: self.priv_view = crypto.b16_to_scalar( js["view_key"].encode("utf8")) elif "view_key_enc" in js: wallet_enc_key = misc.wallet_enc_key(self.wallet_salt, self.wallet_password) plain = chacha_poly.decrypt_pack( wallet_enc_key, binascii.unhexlify(js["view_key_enc"])) self.priv_view = crypto.decodeint(plain) self.address = js["address"].encode("utf8") self.wallet_file = js["wallet_file"] self.monero_bin = js["monero_bin"] self.set_network_type(js["network_type"]) self.rpc_addr = js["rpc_addr"] await self.open_with_keys(self.priv_view, self.address)