Merge rust-bitcoin/rust-bitcoin#721: Improvements to script methods related to Taproot
d0a87bea72
Add slice 'serialize' method for TweakedPublicKey (Dr. Maxim Orlovsky)37352d1df5
Add Display and LowerHex to TweakedPublicKey (Dr. Maxim Orlovsky) Pull request description: Extraction of a portion from #696 which can be done without changes in `rust-secp256k1` ACKs for top commit: Kixunil: ACKd0a87bea72
sanket1729: ACKd0a87bea72
Tree-SHA512: d439ea1a4c4235bea9867e5d87514f928ad481f7a32403922654c33e101cfaba444eec8b61899f2aaaf1dcf5236bb618b9e14674736d3798effd56ca7097dc78
This commit is contained in:
commit
d09ef6f356
|
@ -18,9 +18,10 @@
|
|||
//!
|
||||
|
||||
pub use secp256k1::schnorrsig::{PublicKey, KeyPair};
|
||||
use secp256k1::{Secp256k1, Verification};
|
||||
use secp256k1::{Secp256k1, Verification, constants};
|
||||
use hashes::Hash;
|
||||
use util::taproot::{TapBranchHash, TapTweakHash};
|
||||
use core::fmt;
|
||||
|
||||
/// Untweaked Schnorr public key
|
||||
pub type UntweakedPublicKey = PublicKey;
|
||||
|
@ -29,6 +30,18 @@ pub type UntweakedPublicKey = PublicKey;
|
|||
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||
pub struct TweakedPublicKey(PublicKey);
|
||||
|
||||
impl fmt::LowerHex for TweakedPublicKey {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fmt::LowerHex::fmt(&self.0, f)
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for TweakedPublicKey {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fmt::Display::fmt(&self.0, f)
|
||||
}
|
||||
}
|
||||
|
||||
/// A trait for tweaking Schnorr public keys
|
||||
pub trait TapTweak {
|
||||
/// Tweaks an untweaked public key given an untweaked key and optional script tree merkle root.
|
||||
|
@ -66,7 +79,6 @@ impl TapTweak for UntweakedPublicKey {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
impl TweakedPublicKey {
|
||||
/// Creates a new [`TweakedPublicKey`] from a [`PublicKey`]. No tweak is applied, consider
|
||||
/// calling `tap_tweak` on an [`UntweakedPublicKey`] instead of using this constructor.
|
||||
|
@ -84,4 +96,11 @@ impl TweakedPublicKey {
|
|||
&self.0
|
||||
}
|
||||
|
||||
/// Serialize the key as a byte-encoded pair of values. In compressed form
|
||||
/// the y-coordinate is represented by only a single bit, as x determines
|
||||
/// it up to one bit.
|
||||
#[inline]
|
||||
pub fn serialize(&self) -> [u8; constants::SCHNORRSIG_PUBLIC_KEY_SIZE] {
|
||||
self.0.serialize()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue