#[repr(transparent)]pub struct PublicKey(_);
Expand description
A Secp256k1 public key, used for verification of signatures.
Serde support
Implements de/serialization with the serde
feature enabled. We treat the byte value as a tuple
of 33 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::{SecretKey, Secp256k1, PublicKey};
let secp = Secp256k1::new();
let secret_key = SecretKey::from_slice(&[0xcd; 32]).expect("32 bytes, within curve order");
let public_key = PublicKey::from_secret_key(&secp, &secret_key);
Implementations§
source§impl PublicKey
impl PublicKey
sourcepub fn as_ptr(&self) -> *const PublicKey
pub fn as_ptr(&self) -> *const PublicKey
Obtains a raw const pointer suitable for use with FFI functions.
sourcepub fn as_mut_ptr(&mut self) -> *mut PublicKey
pub fn as_mut_ptr(&mut self) -> *mut PublicKey
Obtains a raw mutable pointer suitable for use with FFI functions.
sourcepub fn from_secret_key_global(sk: &SecretKey) -> PublicKey
pub fn from_secret_key_global(sk: &SecretKey) -> PublicKey
sourcepub fn from_slice(data: &[u8]) -> Result<PublicKey, Error>
pub fn from_slice(data: &[u8]) -> Result<PublicKey, Error>
Creates a public key directly from a slice.
sourcepub fn from_keypair(keypair: &KeyPair) -> Self
pub fn from_keypair(keypair: &KeyPair) -> Self
sourcepub fn from_x_only_public_key(pk: XOnlyPublicKey, parity: Parity) -> PublicKey
pub fn from_x_only_public_key(pk: XOnlyPublicKey, parity: Parity) -> PublicKey
Creates a PublicKey
using the key material from pk
combined with the parity
.
sourcepub fn serialize(&self) -> [u8; 33]
pub fn serialize(&self) -> [u8; 33]
Serializes 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.
sourcepub fn serialize_uncompressed(&self) -> [u8; 65]
pub fn serialize_uncompressed(&self) -> [u8; 65]
Serializes the key as a byte-encoded pair of values, in uncompressed form.
sourcepub fn negate_assign<C: Verification>(&mut self, secp: &Secp256k1<C>)
👎Deprecated since 0.23.0: Use negate instead
pub fn negate_assign<C: Verification>(&mut self, secp: &Secp256k1<C>)
Negates the public key in place.
sourcepub fn negate<C: Verification>(self, secp: &Secp256k1<C>) -> PublicKey
pub fn negate<C: Verification>(self, secp: &Secp256k1<C>) -> PublicKey
Negates the public key.
sourcepub fn add_exp_assign<C: Verification>(
&mut self,
secp: &Secp256k1<C>,
other: &Scalar
) -> Result<(), Error>
👎Deprecated since 0.23.0: Use add_exp_tweak instead
pub fn add_exp_assign<C: Verification>( &mut self, secp: &Secp256k1<C>, other: &Scalar ) -> Result<(), Error>
sourcepub fn add_exp_tweak<C: Verification>(
self,
secp: &Secp256k1<C>,
tweak: &Scalar
) -> Result<PublicKey, Error>
pub fn add_exp_tweak<C: Verification>( self, secp: &Secp256k1<C>, tweak: &Scalar ) -> Result<PublicKey, Error>
sourcepub fn mul_assign<C: Verification>(
&mut self,
secp: &Secp256k1<C>,
other: &Scalar
) -> Result<(), Error>
👎Deprecated since 0.23.0: Use mul_tweak instead
pub fn mul_assign<C: Verification>( &mut self, secp: &Secp256k1<C>, other: &Scalar ) -> Result<(), Error>
Muliplies the public key in place by the scalar other
.
Errors
Returns an error if the resulting key would be invalid.
sourcepub fn mul_tweak<C: Verification>(
self,
secp: &Secp256k1<C>,
other: &Scalar
) -> Result<PublicKey, Error>
pub fn mul_tweak<C: Verification>( self, secp: &Secp256k1<C>, other: &Scalar ) -> Result<PublicKey, Error>
sourcepub fn combine(&self, other: &PublicKey) -> Result<PublicKey, Error>
pub fn combine(&self, other: &PublicKey) -> Result<PublicKey, Error>
Adds a second key to this one, returning the sum.
Errors
If the result would be the point at infinity, i.e. adding this point to its own negation.
Examples
use secp256k1::{rand, Secp256k1};
let secp = Secp256k1::new();
let mut rng = rand::thread_rng();
let (_, pk1) = secp.generate_keypair(&mut rng);
let (_, pk2) = secp.generate_keypair(&mut rng);
let sum = pk1.combine(&pk2).expect("It's improbable to fail for 2 random public keys");
sourcepub fn combine_keys(keys: &[&PublicKey]) -> Result<PublicKey, Error>
pub fn combine_keys(keys: &[&PublicKey]) -> Result<PublicKey, Error>
Adds the keys in the provided slice together, returning the sum.
Errors
Errors under any of the following conditions:
- The result would be the point at infinity, i.e. adding a point to its own negation.
- The provided slice is empty.
- The number of elements in the provided slice is greater than
i32::MAX
.
Examples
use secp256k1::{rand, Secp256k1, PublicKey};
let secp = Secp256k1::new();
let mut rng = rand::thread_rng();
let (_, pk1) = secp.generate_keypair(&mut rng);
let (_, pk2) = secp.generate_keypair(&mut rng);
let (_, pk3) = secp.generate_keypair(&mut rng);
let sum = PublicKey::combine_keys(&[&pk1, &pk2, &pk3]).expect("It's improbable to fail for 3 random public keys");
sourcepub fn x_only_public_key(&self) -> (XOnlyPublicKey, Parity)
pub fn x_only_public_key(&self) -> (XOnlyPublicKey, Parity)
Returns the XOnlyPublicKey
(and it’s Parity
) for this PublicKey
.
Trait Implementations§
source§impl From<PublicKey> for XOnlyPublicKey
impl From<PublicKey> for XOnlyPublicKey
source§fn from(src: PublicKey) -> XOnlyPublicKey
fn from(src: PublicKey) -> XOnlyPublicKey
source§impl Ord for PublicKey
impl Ord for PublicKey
source§impl PartialEq<PublicKey> for PublicKey
impl PartialEq<PublicKey> for PublicKey
source§impl PartialOrd<PublicKey> for PublicKey
impl PartialOrd<PublicKey> for PublicKey
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