Skip to content

Commit 27b6e37

Browse files
committed
Merge #53: Fix tweak_private_key
ed38ec2 tests: add coverage for confidential::bare::tweak_*key (Leonardo Comandini) 7734755 Fix tweak_private_key (Leonardo Comandini) Pull request description: to return a `SecretKey` instead of a `PublicKey` ACKs for top commit: sanket1729: ACK ed38ec2 Tree-SHA512: 021ac5e6db9048bf0117a88a4972ae55794ef7c203cf7cf257333603b12ee9c943f79ddd3a23739b345791cbcacf039c268f61291ae68224d0380e49f7ed92a9
2 parents 4ed7605 + ed38ec2 commit 27b6e37

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

src/confidential/bare.rs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,26 +59,22 @@ where
5959
}
6060

6161
/// Tweaks a bare key using the scriptPubKey of a descriptor
62-
pub fn tweak_private_key<'a, Pk, V>(
62+
pub fn tweak_private_key<V>(
6363
secp: &secp256k1_zkp::Secp256k1<V>,
6464
spk: &elements::Script,
65-
pk: &Pk,
66-
) -> secp256k1_zkp::PublicKey
65+
sk: &secp256k1_zkp::SecretKey,
66+
) -> secp256k1_zkp::SecretKey
6767
where
68-
Pk: ToPublicKey + 'a,
69-
V: secp256k1_zkp::Verification,
68+
V: secp256k1_zkp::Signing,
7069
{
7170
let mut eng = TweakHash::engine();
72-
pk.to_public_key()
71+
bitcoin::PublicKey::new(sk.public_key(secp))
7372
.write_into(&mut eng)
7473
.expect("engines don't error");
7574
spk.consensus_encode(&mut eng).expect("engines don't error");
7675
let hash_bytes = TweakHash::from_engine(eng).to_byte_array();
7776
let hash_scalar = secp256k1_zkp::Scalar::from_be_bytes(hash_bytes).expect("bytes from hash");
78-
pk.to_public_key()
79-
.inner
80-
.add_exp_tweak(secp, &hash_scalar)
81-
.unwrap()
77+
sk.add_tweak(&hash_scalar).unwrap()
8278
}
8379

8480
#[cfg(test)]
@@ -119,4 +115,16 @@ mod tests {
119115
"e1e52419a2934d278c50e29608969d2f23c1bd1243a09bfc8026d4ed4b085e39",
120116
);
121117
}
118+
119+
#[test]
120+
fn tweak() {
121+
// Check that tweaking blinding keys produce consistent results
122+
let secp = secp256k1_zkp::Secp256k1::new();
123+
let sk = secp256k1_zkp::SecretKey::from_slice(&[1u8; 32]).unwrap();
124+
let pk = sk.public_key(&secp);
125+
let spk = elements::Script::default();
126+
let tweaked_pk = tweak_key(&secp, &spk, &pk);
127+
let tweaked_sk = tweak_private_key(&secp, &spk, &sk);
128+
assert_eq!(tweaked_pk, tweaked_sk.public_key(&secp));
129+
}
122130
}

0 commit comments

Comments
 (0)