Struct secp256k1::XOnlyPublicKey
source · pub struct XOnlyPublicKey(_);
Expand description
An x-only public key, used for verification of Schnorr signatures and serialized according to BIP-340.
Serde support
Implements de/serialization with the serde
feature enabled. We treat the byte value as a tuple
of 32 u8
s for non-human-readable formats. This representation is optimal for for some formats
(e.g. bincode
) however other formats may be less optimal (e.g. cbor
).
Examples
Basic usage:
use secp256k1::{rand, Secp256k1, KeyPair, XOnlyPublicKey};
let secp = Secp256k1::new();
let key_pair = KeyPair::new(&secp, &mut rand::thread_rng());
let xonly = XOnlyPublicKey::from_keypair(&key_pair);
Implementations§
source§impl XOnlyPublicKey
impl XOnlyPublicKey
sourcepub fn as_ptr(&self) -> *const XOnlyPublicKey
pub fn as_ptr(&self) -> *const XOnlyPublicKey
Obtains a raw const pointer suitable for use with FFI functions.
sourcepub fn as_mut_ptr(&mut self) -> *mut XOnlyPublicKey
pub fn as_mut_ptr(&mut self) -> *mut XOnlyPublicKey
Obtains a raw mutable pointer suitable for use with FFI functions.
sourcepub fn from_keypair(keypair: &KeyPair) -> (XOnlyPublicKey, Parity)
pub fn from_keypair(keypair: &KeyPair) -> (XOnlyPublicKey, Parity)
Returns the XOnlyPublicKey
(and it’s Parity
) for keypair
.
sourcepub fn from_slice(data: &[u8]) -> Result<XOnlyPublicKey, Error>
pub fn from_slice(data: &[u8]) -> Result<XOnlyPublicKey, Error>
Creates a Schnorr public key directly from a slice.
Errors
Returns Error::InvalidPublicKey
if the length of the data slice is not 32 bytes or the
slice does not represent a valid Secp256k1 point x coordinate.
sourcepub fn serialize(&self) -> [u8; 32]
pub fn serialize(&self) -> [u8; 32]
Serializes the key as a byte-encoded x coordinate value (32 bytes).
sourcepub fn tweak_add_assign<V: Verification>(
&mut self,
secp: &Secp256k1<V>,
tweak: &Scalar
) -> Result<Parity, Error>
👎Deprecated since 0.23.0: Use add_tweak instead
pub fn tweak_add_assign<V: Verification>(
&mut self,
secp: &Secp256k1<V>,
tweak: &Scalar
) -> Result<Parity, Error>
Tweaks an x-only PublicKey by adding the generator multiplied with the given tweak to it.
sourcepub fn add_tweak<V: Verification>(
self,
secp: &Secp256k1<V>,
tweak: &Scalar
) -> Result<(XOnlyPublicKey, Parity), Error>
pub fn add_tweak<V: Verification>(
self,
secp: &Secp256k1<V>,
tweak: &Scalar
) -> Result<(XOnlyPublicKey, Parity), Error>
Tweaks an XOnlyPublicKey
by adding the generator multiplied with the given tweak to it.
Returns
The newly tweaked key plus an opaque type representing the parity of the tweaked key, this
should be provided to tweak_add_check
which can be used to verify a tweak more efficiently
than regenerating it and checking equality.
Errors
If the resulting key would be invalid.
Examples
use secp256k1::{Secp256k1, KeyPair, Scalar, XOnlyPublicKey};
use secp256k1::rand::{RngCore, thread_rng};
let secp = Secp256k1::new();
let tweak = Scalar::random();
let mut key_pair = KeyPair::new(&secp, &mut thread_rng());
let (xonly, _parity) = key_pair.x_only_public_key();
let tweaked = xonly.add_tweak(&secp, &tweak).expect("Improbable to fail with a randomly generated tweak");
sourcepub fn tweak_add_check<V: Verification>(
&self,
secp: &Secp256k1<V>,
tweaked_key: &Self,
tweaked_parity: Parity,
tweak: Scalar
) -> bool
pub fn tweak_add_check<V: Verification>(
&self,
secp: &Secp256k1<V>,
tweaked_key: &Self,
tweaked_parity: Parity,
tweak: Scalar
) -> bool
Verifies that a tweak produced by XOnlyPublicKey::tweak_add_assign
was computed correctly.
Should be called on the original untweaked key. Takes the tweaked key and output parity from
XOnlyPublicKey::tweak_add_assign
as input.
Currently this is not much more efficient than just recomputing the tweak and checking equality. However, in future this API will support batch verification, which is significantly faster, so it is wise to design protocols with this in mind.
Returns
True if tweak and check is successful, false otherwise.
Examples
use secp256k1::{Secp256k1, KeyPair, Scalar};
use secp256k1::rand::{thread_rng, RngCore};
let secp = Secp256k1::new();
let tweak = Scalar::random();
let mut key_pair = KeyPair::new(&secp, &mut thread_rng());
let (mut public_key, _) = key_pair.x_only_public_key();
let original = public_key;
let parity = public_key.tweak_add_assign(&secp, &tweak).expect("Improbable to fail with a randomly generated tweak");
assert!(original.tweak_add_check(&secp, &public_key, parity, tweak));
sourcepub fn public_key(&self, parity: Parity) -> PublicKey
pub fn public_key(&self, parity: Parity) -> PublicKey
Returns the PublicKey
for this XOnlyPublicKey
.
This is equivalent to using [PublicKey::from_xonly_and_parity(self, parity)
].
Trait Implementations§
source§impl CPtr for XOnlyPublicKey
impl CPtr for XOnlyPublicKey
source§impl Clone for XOnlyPublicKey
impl Clone for XOnlyPublicKey
source§fn clone(&self) -> XOnlyPublicKey
fn clone(&self) -> XOnlyPublicKey
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for XOnlyPublicKey
impl Debug for XOnlyPublicKey
source§impl Display for XOnlyPublicKey
impl Display for XOnlyPublicKey
source§impl From<PublicKey> for XOnlyPublicKey
impl From<PublicKey> for XOnlyPublicKey
source§fn from(src: PublicKey) -> XOnlyPublicKey
fn from(src: PublicKey) -> XOnlyPublicKey
source§impl From<XOnlyPublicKey> for XOnlyPublicKey
impl From<XOnlyPublicKey> for XOnlyPublicKey
Creates a new Schnorr public key from a FFI x-only public key.
source§fn from(pk: XOnlyPublicKey) -> XOnlyPublicKey
fn from(pk: XOnlyPublicKey) -> XOnlyPublicKey
source§impl FromStr for XOnlyPublicKey
impl FromStr for XOnlyPublicKey
source§impl Hash for XOnlyPublicKey
impl Hash for XOnlyPublicKey
source§impl LowerHex for XOnlyPublicKey
impl LowerHex for XOnlyPublicKey
source§impl Ord for XOnlyPublicKey
impl Ord for XOnlyPublicKey
source§fn cmp(&self, other: &XOnlyPublicKey) -> Ordering
fn cmp(&self, other: &XOnlyPublicKey) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
source§impl PartialEq<XOnlyPublicKey> for XOnlyPublicKey
impl PartialEq<XOnlyPublicKey> for XOnlyPublicKey
source§fn eq(&self, other: &XOnlyPublicKey) -> bool
fn eq(&self, other: &XOnlyPublicKey) -> bool
source§impl PartialOrd<XOnlyPublicKey> for XOnlyPublicKey
impl PartialOrd<XOnlyPublicKey> for XOnlyPublicKey
source§fn partial_cmp(&self, other: &XOnlyPublicKey) -> Option<Ordering>
fn partial_cmp(&self, other: &XOnlyPublicKey) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more