test deltamode works

This commit is contained in:
Peter D. Gray 2025-09-11 11:48:57 -04:00 committed by doc-hex
parent 3f24307dcd
commit 7daa67cc63
4 changed files with 82 additions and 2 deletions

View File

@ -2627,6 +2627,27 @@ def build_test_seed_vault():
return sv
return doit
@pytest.fixture
def get_deltamode(sim_exec):
# get current "deltamode" status: T or F
def doit():
return eval(sim_exec('RV.write(repr(pa.is_deltamode()))'))
return doit
@pytest.fixture
def set_deltamode(sim_exec):
# control current "deltamode" status: T or F
def doit(val):
# TC_DELTA_MODE = const(0x0400)
if val:
sim_exec('pa.delay_required |= 0x400')
else:
sim_exec('pa.delay_required &= ~0x400')
yield doit
doit(False)
# useful fixtures
from test_backup import backup_system

View File

@ -17,6 +17,7 @@ from test_ux import word_menu_entry
#
# - test_teleport.py::test_teleport_ms_sign
# - verifies: MS psbt KT should still work in hobbled mode
#
# - test_teleport.py::test_hobble_limited
# - verifies: scan a KT and have it rejected if not PSBT type: so R and E types
@ -392,8 +393,6 @@ def test_h_usbcmds(en_okeys, set_hobble, dev):
got = dev.send_recv(cmd)
assert 'Spending policy in effect' in str(ee)
# TODO: verify that PSBT can be "signed" when SP enabled and delta-mode pin is active. seed not wiped.
# TODO verify whitelist of QR types is correct when in hobbled mode
# - no private key material, no teleport starting, unless "okeys" is set

View File

@ -916,6 +916,14 @@ def build_duress_wallets(request, seed_vault=False):
return 4
def test_deltamode_toggle(get_deltamode, set_deltamode):
# check test fixture works.
assert get_deltamode() == False
set_deltamode(True)
assert get_deltamode() == True
set_deltamode(False)
assert get_deltamode() == False
# TODO
# - make trick and do login, check arrives right state?

View File

@ -566,4 +566,56 @@ def test_use_trick_pin_as_unlock(hide, setup_sssp, cap_story, new_trick_pin, pic
assert "already in use" in story
assert "PIN codes must be unique" in story
@pytest.mark.parametrize("active_policy", [False, True])
def test_deltamode_signature(active_policy, setup_sssp, bitcoind, settings_set,
start_sign, end_sign,
set_deltamode, bitcoind_d_sim_watch, settings_get):
# verify that "deltamode" trick pins will work in SSSP mode
# - and that resulting signature is bad
# - device should **not** wipe itself
dest = "bcrt1qlk39jrclgnawa42tvhu2n7se987qm96qg8v76e"
wo = bitcoind_d_sim_watch
wo.keypoolrefill(20)
settings_set("chain", "XRT")
if active_policy:
setup_sssp("11-11", mag=100)
bitcoind.supply_wallet.sendtoaddress(address=wo.getnewaddress(), amount=2)
bitcoind.supply_wallet.generatetoaddress(1, bitcoind.supply_wallet.getnewaddress())
# create funded PSBT, first tx
# - within active policy.
init_block_height = bitcoind.supply_wallet.getblockchaininfo()["blocks"] # block height
psbt_resp = wo.walletcreatefundedpsbt([], [{dest: 0.06}],
init_block_height, {"fee_rate":2, "replaceable": False})
psbt = psbt_resp.get("psbt")
po = BasicPSBT().parse(base64.b64decode(psbt))
assert po.parsed_txn.nLockTime == init_block_height
start_sign(base64.b64decode(psbt), finalize=True)
signed = end_sign(accept=True, finalize=True)
set_deltamode(True)
start_sign(base64.b64decode(psbt), finalize=True)
signed2 = end_sign(accept=True, finalize=True)
# check wrong signature happened
assert signed != signed2
probs = wo.testmempoolaccept([signed2.hex()])[0]
assert 'Signature must be zero' in probs['reject-reason'], probs
assert not probs['allowed']
# check right signature
no_probs = wo.testmempoolaccept([signed.hex()])[0]
assert no_probs['allowed']
# EOF