What changed, and why it matters
This commit is a small follow-up patch that fixes automated test scripts and a simulator boot helper after a previous code change. It does not change the actual COLDCARD firmware that runs on the device. The edits adjust test expectations, add a missing cleanup step in a multisig test, add short delays in a QR-code test, and ensure the Unix simulator falls back to default settings when no saved settings exist. There is no direct security fix visible in the diff, and no security relevance is claimed by the vendor.
No security action required. Treat as routine test/maintenance follow-up. If reviewing the parent '--eff changes' commit, ensure that the production code changes it introduced were themselves security-reviewed, since this commit only adjusts tests and simulator behavior.
Security signals we found
No security-relevant signals in the diff
Changes are confined to test code and simulator bootstrap
No mention of vulnerability, CVE, bug class, or attack vector in commit message
Evidence from the diff
The commit modifies only test files and the Unix simulator bootstrap. Changes include: (1) tightening a conditional in test_ephemeral.py so a Seed Vault menu assertion runs only when seed_vault is explicitly False; (2) passing seed_vault=None in test_hobble.py to skip an irrelevant Seed Vault check; (3) adding clear_ms() before repeated signing attempts in test_multisig.py when incl_xpubs is true, likely to avoid stale multisig state between iterations; (4) removing an unused import and adding time.sleep(.1) calls in test_teleport.py before reading the simulator screen; (5) making sim_boot.py default to sim_defaults when NVSTORE_FAKE returns an empty dict. None of these alter on-device firmware behavior.
Changed components
testing/test_ephemeral.pytesting/test_hobble.pytesting/test_multisig.pytesting/test_teleport.pyunix/sim_boot.pyInspect captured patch +9 / −4
diff --git a/testing/test_ephemeral.py b/testing/test_ephemeral.py
index 87a1f38..332a283 100644
--- a/testing/test_ephemeral.py
+++ b/testing/test_ephemeral.py
@@ -336,7 +336,7 @@ def verify_ephemeral_secret_ui(cap_story, cap_menu, dev, fake_txn, goto_home,
assert "Seed In Use" in m
pick_menu_item("Seed In Use") # noop
- else:
+ elif seed_vault is False:
# Seed Vault disabled
m = cap_menu()
assert "Seed Vault" not in m
diff --git a/testing/test_hobble.py b/testing/test_hobble.py
index e5b546a..63914af 100644
--- a/testing/test_hobble.py
+++ b/testing/test_hobble.py
@@ -361,7 +361,8 @@ def test_h_tempseeds(mode, set_hobble, pick_menu_item, cap_menu, settings_set, i
# different UX for passphrase - verified above
confirm_tmp_seed(seedvault=False, check_sv_not_offered=True)
- verify_ephemeral_secret_ui(expected_xfp=expect_xfp, mnemonic=None, seed_vault=False)
+ # do not verify presence of Seed Vault menu item - irrelevant
+ verify_ephemeral_secret_ui(expected_xfp=expect_xfp, mnemonic=None, seed_vault=None)
pick_menu_item("Restore Master")
press_select()
diff --git a/testing/test_multisig.py b/testing/test_multisig.py
index 3b4c5e1..31341ba 100644
--- a/testing/test_multisig.py
+++ b/testing/test_multisig.py
@@ -1487,6 +1487,8 @@ def test_ms_sign_myself(M, use_regtest, make_myself_wallet, segwit, num_ins, dev
f.write(b64encode(psbt).decode())
for idx in range(M):
select_wallet(idx)
+ if incl_xpubs:
+ clear_ms()
_, updated = try_sign(psbt, accept_ms_import=incl_xpubs)
with open(f'{sim_root_dir}/debug/myself-after.psbt', 'w') as f:
f.write(b64encode(updated).decode())
diff --git a/testing/test_teleport.py b/testing/test_teleport.py
index b48d40e..2171e39 100644
--- a/testing/test_teleport.py
+++ b/testing/test_teleport.py
@@ -741,16 +741,17 @@ def test_hobble_limited(set_hobble, scan_a_qr, cap_menu, cap_screen, pick_menu_i
set_hobble(True)
- from bbqr.split import split_qrs
- from bbqr import split_qrs, join_qrs
+ from bbqr import split_qrs
_, parts = split_qrs(b's'*33, 'R')
rx_complete(parts[0], '12345678', expect_fail=True)
+ time.sleep(.1)
last = cap_screen().split('\n')[-1]
assert last == 'KT Blocked'
_, parts = split_qrs(b's'*33, 'S')
rx_complete(parts[0], 'abcdefgh', expect_fail=True)
+ time.sleep(.1)
last = cap_screen().split('\n')[-1]
assert last == 'KT Blocked'
diff --git a/unix/sim_boot.py b/unix/sim_boot.py
index a86e198..b731686 100644
--- a/unix/sim_boot.py
+++ b/unix/sim_boot.py
@@ -34,6 +34,7 @@ if '--sflash' not in sys.argv:
def _monkey_load(self, *a):
self.current = dict(NVSTORE_FAKE.get(self.nvram_key, {}))
+ self.current = self.current or sim_defaults
def _monkey_save(self, *a):
NVSTORE_FAKE[self.nvram_key] = dict(self.current)
Why this scored 17/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.