Skip to content

Commit

Permalink
Add must_use for mut self key manipulation methods
Browse files Browse the repository at this point in the history
We recently added a bunch of key tweaking methods that take `mut self`
and return the tweaked/negated keys. These functions are pure and as
such the returned result is expected to be used. To help downstream
users use the API correctly add `must_use` attributes with a descriptive
error string for each of the methods that takes `mut self`.
  • Loading branch information
tcharding committed Jun 28, 2022
1 parent 5b86e38 commit 56f1843
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/key.rs
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ impl SecretKey {

/// Negates the secret key.
#[inline]
#[must_use = "you forgot to use the negated secret key"]
pub fn negate(mut self) -> SecretKey {
unsafe {
let res = ffi::secp256k1_ec_seckey_negate(
Expand Down Expand Up @@ -272,6 +273,7 @@ impl SecretKey {
///
/// Returns an error if the resulting key would be invalid.
#[inline]
#[must_use = "you forgot to use the tweaked secret key"]
pub fn add_tweak(mut self, tweak: &Scalar) -> Result<SecretKey, Error> {
unsafe {
if ffi::secp256k1_ec_seckey_tweak_add(
Expand Down Expand Up @@ -302,6 +304,7 @@ impl SecretKey {
///
/// Returns an error if the resulting key would be invalid.
#[inline]
#[must_use = "you forgot to use the tweaked secret key"]
pub fn mul_tweak(mut self, tweak: &Scalar) -> Result<SecretKey, Error> {
unsafe {
if ffi::secp256k1_ec_seckey_tweak_mul(
Expand Down Expand Up @@ -536,6 +539,7 @@ impl PublicKey {

/// Negates the public key.
#[inline]
#[must_use = "you forgot to use the negated public key"]
pub fn negate<C: Verification>(mut self, secp: &Secp256k1<C>) -> PublicKey {
unsafe {
let res = ffi::secp256k1_ec_pubkey_negate(secp.ctx, &mut self.0);
Expand Down Expand Up @@ -566,6 +570,7 @@ impl PublicKey {
///
/// Returns an error if the resulting key would be invalid.
#[inline]
#[must_use = "you forgot to use the tweaked public key"]
pub fn add_exp_tweak<C: Verification>(
mut self,
secp: &Secp256k1<C>,
Expand Down Expand Up @@ -602,6 +607,7 @@ impl PublicKey {
///
/// Returns an error if the resulting key would be invalid.
#[inline]
#[must_use = "you forgot to use the tweaked public key"]
pub fn mul_tweak<C: Verification>(
mut self,
secp: &Secp256k1<C>,
Expand Down Expand Up @@ -971,6 +977,7 @@ impl KeyPair {
/// ```
// TODO: Add checked implementation
#[inline]
#[must_use = "you forgot to use the tweaked key pair"]
pub fn add_xonly_tweak<C: Verification>(
mut self,
secp: &Secp256k1<C>,
Expand Down Expand Up @@ -1270,6 +1277,7 @@ impl XOnlyPublicKey {
/// let tweaked = xonly.add_tweak(&secp, &tweak).expect("Improbable to fail with a randomly generated tweak");
/// # }
/// ```
#[must_use = "you forgot to use the tweaked xonly pubkey"]
pub fn add_tweak<V: Verification>(
mut self,
secp: &Secp256k1<V>,
Expand Down

0 comments on commit 56f1843

Please sign in to comment.