passes test_ccc_magnitude

This commit is contained in:
Peter D. Gray 2025-08-19 12:16:48 -04:00 committed by doc-hex
parent 335df666ab
commit 9d54e261ec
2 changed files with 21 additions and 15 deletions

View File

@ -68,6 +68,7 @@ from utils import call_later_ms
# ccc = (complex) If present, CCC feature is enabled and key details stored here.
# ktrx = (privkey) Key teleport Rx has been started, this will be our keypair
# sssp = (complex) If present, spending-policy (single signer) feature are defined
# lfr = (string) If present, the reason why Spending Policy blocked last transaction
# Stored w/ key=00 for access before login
# _skip_pin = hard code a PIN value (dangerous, only for debug)

View File

@ -21,6 +21,16 @@ from psbt import BasicPSBT
# pubkey for production server.
SERVER_PUBKEY = '0231301ec4acec08c1c7d0181f4ffb8be70d693acccc86cccb8f00bf2e00fcabfd'
@pytest.fixture
def goto_ccc_menu(goto_home, pick_menu_item, is_mark4):
def doit():
goto_home()
pick_menu_item("Advanced/Tools")
pick_menu_item("Spending Policy")
pick_menu_item("Co-Sign Multi." if is_mark4 else "Co-Sign Multisig (CCC)")
return doit
def make_session_key(his_pubkey=None):
# - second call: given the pubkey of far side, calculate the shared pt on curve
@ -168,24 +178,22 @@ def test_2fa_links(shared_secret, label_len, q_mode, roundtrip_2fa, sim_exec, re
assert ans == f'CCC-AUTH:{nonce}'.upper() if q_mode else nonce
@pytest.fixture
def get_last_violation(sim_exec):
def get_last_violation(settings_get):
def doit():
return sim_exec('from ccc import CCCFeature; RV.write(CCCFeature.last_fail_reason)')
return settings_get('lfr')
return doit
_skip_quiz = False
@pytest.fixture
def setup_ccc(goto_home, pick_menu_item, cap_story, press_select, pass_word_quiz, is_q1,
def setup_ccc(goto_ccc_menu, pick_menu_item, cap_story, press_select, pass_word_quiz, is_q1,
seed_story_to_words, cap_menu, OK, word_menu_entry, press_cancel, press_delete,
enter_number, scan_a_qr, cap_screen, settings_get, need_keypress, microsd_path,
master_settings_get):
def doit(c_words=None, mag=None, vel=None, whitelist=None, w2fa=None, first_time=True):
if first_time:
goto_home()
pick_menu_item("Advanced/Tools")
pick_menu_item("Coldcard Co-Signing")
goto_ccc_menu()
time.sleep(.1)
title, story = cap_story()
assert title == ("Coldcard Co-Signing" if is_q1 else "CC Co-Sign")
@ -242,7 +250,7 @@ def setup_ccc(goto_home, pick_menu_item, cap_story, press_select, pass_word_quiz
m = cap_menu()
assert m[0] == f"CCC [{xfp}]"
assert f"[{xfp}]" in m[0]
assert "Spending Policy" in m
assert "Export CCC XPUBs" in m
assert "Multisig Wallets" in m
@ -274,6 +282,7 @@ def setup_ccc(goto_home, pick_menu_item, cap_story, press_select, pass_word_quiz
assert f"{mag} {'BTC' if int(mag) < 1000 else 'SATS'}" in story
press_select()
time.sleep(.1)
assert settings_get("ccc")["pol"]["mag"] == mag
if vel:
@ -362,12 +371,10 @@ def setup_ccc(goto_home, pick_menu_item, cap_story, press_select, pass_word_quiz
return doit
@pytest.fixture
def enter_enabled_ccc(goto_home, pick_menu_item, cap_story, press_select, is_q1,
def enter_enabled_ccc(goto_ccc_menu, pick_menu_item, cap_story, press_select, is_q1,
word_menu_entry, cap_menu):
def doit(c_words, seed_vault=False):
goto_home()
pick_menu_item("Advanced/Tools")
pick_menu_item("Coldcard Co-Signing")
goto_ccc_menu()
time.sleep(.1)
title, story = cap_story()
if seed_vault:
@ -1159,7 +1166,7 @@ def test_remove_ccc(settings_set, setup_ccc, ccc_ms_setup, settings_get, policy_
@pytest.mark.parametrize("has_candidates", [True, False])
def test_c_key_from_seed_vault(has_candidates, setup_ccc, build_test_seed_vault, settings_set,
goto_home, pick_menu_item, press_select, need_keypress, cap_menu,
goto_ccc_menu, pick_menu_item, press_select, need_keypress, cap_menu,
cap_story, press_cancel, enter_enabled_ccc):
goto_home()
settings_set("ccc", None)
@ -1173,9 +1180,7 @@ def test_c_key_from_seed_vault(has_candidates, setup_ccc, build_test_seed_vault,
settings_set("seeds", sv)
goto_home()
pick_menu_item("Advanced/Tools")
pick_menu_item("Coldcard Co-Signing")
goto_ccc_menu()
press_select()
time.sleep(.1)