# (c) Copyright 2020 by Coinkite Inc. This file is covered by license found in COPYING-CC. # # load up the simulator w/ indicated test master key from sim_settings import sim_defaults import stash, chains from h import b2a_hex from pincodes import pa from nvstore import settings from stash import SecretStash, SensitiveValues from utils import xfp2str import main rs = main.RAW_SECRET print("New raw secret: %s" % b2a_hex(rs)) if 1: settings.current = dict(sim_defaults) settings.overrides.clear() settings.set('chain', 'XTN') pa.change(new_secret=rs) pa.new_main_secret(rs) print("New key in effect: %s" % settings.get('xpub', 'MISSING')) print("Fingerprint: %s" % xfp2str(settings.get('xfp', 0)))
from sffile import SFFile # NOTE: not a psbt, just a txn # - 2 ins, 2 outs unsigned = a2b_hex('0100000002fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f0000000000eeffffffef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a0100000000ffffffff02202cb206000000001976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac9093510d000000001976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa815988ac11000000') fd = SFFile(0, max_size=65536) list(fd.erase()) fd.write(b'psbt\xff\x01\x00' + bytes([len(unsigned)]) + unsigned + (b'\0'*8)) psbt_len = fd.tell() rfd = SFFile(0, psbt_len) p = psbtObject.read_psbt(rfd) #p.validate() # failed because no subpaths; don't care amt = 600000000 sc = a2b_hex('1976a9141d0f172a0ecb48aee1be1f2687d2963ae33f71a188ac') outpt2 = a2b_hex('ef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a0100000000ffffffff') replacement = CTxIn() replacement.deserialize(BytesIO(outpt2)) digest = p.make_txn_segwit_sighash(0, replacement, amt, sc, 0x01) print('Got: ' + b2a_hex(digest).decode('ascii')) assert digest == a2b_hex('c37af31116d1b27caf68aae9e3ac82f1477929014d5b917657d0eb49478cb670')