From 6c91bd732890366a25dfab59e78b7720488bca9e Mon Sep 17 00:00:00 2001 From: scgbckbone Date: Wed, 12 Feb 2025 16:53:17 +0100 Subject: [PATCH] allow multisig descriptor with root keys --- releases/Next-ChangeLog.md | 1 + shared/descriptor.py | 1 - testing/test_multisig.py | 136 +++++++++++++++++++++++++++++++------ 3 files changed, 117 insertions(+), 21 deletions(-) diff --git a/releases/Next-ChangeLog.md b/releases/Next-ChangeLog.md index acc07ce8..de6da8fe 100644 --- a/releases/Next-ChangeLog.md +++ b/releases/Next-ChangeLog.md @@ -38,6 +38,7 @@ This lists the new changes that have not yet been published in a normal release. - Bugfix: Factory-disabled NFC was not recognized correctly. - Bugfix: Be more robust about flash filesystem holding the settings. - Bugfix: Do not include sighash in PSBT input data, if sighash value is `SIGHASH_ALL`. +- Bugfix: Allow to import multisig descriptor with root (m) keys in it. Thanks [@turkycat](https://github.com/turkycat) - Change: Do not purge settings of current active tmp seed when deleting it from Seed Vault. - Change: Rename Testnet3 -> Testnet4 (all parameters unchanged). diff --git a/shared/descriptor.py b/shared/descriptor.py index e8cf6835..76b86bb9 100644 --- a/shared/descriptor.py +++ b/shared/descriptor.py @@ -160,7 +160,6 @@ class Descriptor: raise ValueError("Key origin info is required for %s" % (key)) key_orig_info = key[1:close_index] # remove brackets key = key[close_index + 1:] - assert "/" in key_orig_info, "Malformed key derivation info" return key_orig_info, key @staticmethod diff --git a/testing/test_multisig.py b/testing/test_multisig.py index 9838bc78..55ce8913 100644 --- a/testing/test_multisig.py +++ b/testing/test_multisig.py @@ -101,6 +101,19 @@ def make_multisig(dev, sim_execfile): # - but can provide str format for deriviation, use {idx} for cosigner idx def doit(M, N, unique=0, deriv=None, dev_key=False): + + def _derive(master, origin_der, idx): + if origin_der == "m": + return master + + d = origin_der.format(idx=idx) if origin_der else "m/45h" + try: + child = master.subkey_for_path(d) + except IndexError: + # some test cases are using bogus paths + child = master + return child + keys = [] for i in range(N-1): @@ -108,16 +121,7 @@ def make_multisig(dev, sim_execfile): xfp = unpack("