From 4d1223e5123e60be93b5ad42ba0aee72d0612ea7 Mon Sep 17 00:00:00 2001 From: Andrew Chow Date: Mon, 19 Jul 2021 15:29:55 -0400 Subject: Fetch key origins for Taproot keys --- src/script/sign.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/script') diff --git a/src/script/sign.cpp b/src/script/sign.cpp index 2d569d674a..e46d9be7d4 100644 --- a/src/script/sign.cpp +++ b/src/script/sign.cpp @@ -169,6 +169,17 @@ static bool SignTaprootScript(const SigningProvider& provider, const BaseSignatu // OP_CHECKSIG if (script.size() == 34 && script[33] == OP_CHECKSIG && script[0] == 0x20) { XOnlyPubKey pubkey{Span{script}.subspan(1, 32)}; + + KeyOriginInfo info; + if (provider.GetKeyOriginByXOnly(pubkey, info)) { + auto it = sigdata.taproot_misc_pubkeys.find(pubkey); + if (it == sigdata.taproot_misc_pubkeys.end()) { + sigdata.taproot_misc_pubkeys.emplace(pubkey, std::make_pair(std::set({leaf_hash}), info)); + } else { + it->second.first.insert(leaf_hash); + } + } + std::vector sig; if (CreateTaprootScriptSig(creator, sigdata, provider, sig, pubkey, leaf_hash, sigversion)) { result = Vector(std::move(sig)); @@ -213,6 +224,14 @@ static bool SignTaproot(const SigningProvider& provider, const BaseSignatureCrea // Try key path spending. { + KeyOriginInfo info; + if (provider.GetKeyOriginByXOnly(spenddata.internal_key, info)) { + auto it = sigdata.taproot_misc_pubkeys.find(spenddata.internal_key); + if (it == sigdata.taproot_misc_pubkeys.end()) { + sigdata.taproot_misc_pubkeys.emplace(spenddata.internal_key, std::make_pair(std::set(), info)); + } + } + std::vector sig; if (sigdata.taproot_key_path_sig.size() == 0) { if (creator.CreateSchnorrSig(provider, sig, spenddata.internal_key, nullptr, &spenddata.merkle_root, SigVersion::TAPROOT)) { -- cgit v1.2.3