mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-05-07 12:33:32 +02:00
ec973dd197refactor: remove un-tested early returns (josibake)72a5822d43tests: add tests for KeyPair (josibake)cebb08b121refactor: move SignSchnorr to KeyPair (josibake)c39fd39ba8crypto: add KeyPair wrapper class (josibake)5d507a0091tests: add key tweak smoke test (josibake)f14900b6e4bench: add benchmark for signing with a taptweak (josibake) Pull request description: Broken out from #28201 --- The wallet returns an untweaked internal key for taproot outputs. If the output commits to a tree of scripts, this key needs to be tweaked with the merkle root. Even if the output does not commit to a tree of scripts, BIP341/342 recommend commiting to a hash of the public key. Previously, this logic for applying the taptweak was implemented in the `CKey::SignSchnorr` method. This PR moves introduces a KeyPair class which wraps a `secp256k1_keypair` type and refactors SignSchnorr to use this new KeyPair. The KeyPair class is created with an optional merkle_root argument and the logic from BIP341 is applied depending on the state of the merkle_root argument. The motivation for this refactor is to be able to use the tap tweak logic outside of signing, e.g. in silent payments when retrieving the private key (see #28201). Outside of silent payments, since we almost always convert a `CKey` to a `secp256k1_keypair` when doing anything with taproot keys, it seems generally useful to have a way to model this type in our code base. ACKs for top commit: paplorinc: ACKec973dd197- will happily reack if you decide to apply @ismaelsadeeq's suggestions ismaelsadeeq: Code review ACKec973dd197itornaza: trACKec973dd197theStack: Code-review ACKec973dd197Tree-SHA512: 34947e3eac39bd959807fa21b6045191fc80113bd650f6f08606e4bcd89aa17d6afd48dd034f6741ac4ff304b104fa8c1c1898e297467edcf262d5f97425da7b