Skip to content

Commit 7b9a84e

Browse files
committed
refactor: use add_exp_tweak instead of combine for NUMS key randomization
1 parent 791a775 commit 7b9a84e

File tree

1 file changed

+3
-4
lines changed

1 file changed

+3
-4
lines changed

src/handlers.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ use bdk_wallet::{
4343
bitcoin::{
4444
XOnlyPublicKey,
4545
key::{Parity, rand},
46-
secp256k1::PublicKey,
46+
secp256k1::{PublicKey, Scalar, SecretKey},
4747
},
4848
descriptor::{Descriptor, Legacy, Miniscript},
4949
miniscript::{Tap, descriptor::TapTree, policy::Concrete},
@@ -915,15 +915,14 @@ pub(crate) fn handle_compile_subcommand(
915915
// This improves privacy by preventing observers from determining if key path spending is disabled.
916916
// See BIP-341: https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#constructing-and-spending-taproot-outputs
917917

918-
// Generate random scalar r and compute rG (r times the generator point G)
919918
let secp = Secp256k1::new();
920-
let (r_secret, r_point) = secp.generate_keypair(&mut rand::thread_rng());
919+
let r_secret = SecretKey::new(&mut rand::thread_rng());
921920
r = Some(r_secret.display_secret().to_string());
922921

923922
let nums_key = XOnlyPublicKey::from_str(NUMS_UNSPENDABLE_KEY_HEX)?;
924923
let nums_point = PublicKey::from_x_only_public_key(nums_key, Parity::Even);
925924

926-
let internal_key_point = nums_point.combine(&r_point)?;
925+
let internal_key_point = nums_point.add_exp_tweak(&secp, &Scalar::from(r_secret))?;
927926
let (xonly_internal_key, _) = internal_key_point.x_only_public_key();
928927

929928
let tree = TapTree::Leaf(Arc::new(taproot_policy));

0 commit comments

Comments
 (0)