From 56f18430ffb362330537ca9991c62802af4d4ad9 Mon Sep 17 00:00:00 2001 From: "Tobin C. Harding" Date: Tue, 28 Jun 2022 13:18:57 +1000 Subject: [PATCH] Add must_use for mut self key manipulation methods 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`. --- src/key.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/key.rs b/src/key.rs index b862f19..8858ede 100644 --- a/src/key.rs +++ b/src/key.rs @@ -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( @@ -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 { unsafe { if ffi::secp256k1_ec_seckey_tweak_add( @@ -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 { unsafe { if ffi::secp256k1_ec_seckey_tweak_mul( @@ -536,6 +539,7 @@ impl PublicKey { /// Negates the public key. #[inline] + #[must_use = "you forgot to use the negated public key"] pub fn negate(mut self, secp: &Secp256k1) -> PublicKey { unsafe { let res = ffi::secp256k1_ec_pubkey_negate(secp.ctx, &mut self.0); @@ -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( mut self, secp: &Secp256k1, @@ -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( mut self, secp: &Secp256k1, @@ -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( mut self, secp: &Secp256k1, @@ -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( mut self, secp: &Secp256k1,