@@ -214,18 +214,24 @@ impl SecretKey {
214
214
self . 0
215
215
}
216
216
217
+ /// Negates the secret key.
217
218
#[ inline]
218
- /// Negates one secret key.
219
- pub fn negate_assign (
220
- & mut self
221
- ) {
219
+ #[ deprecated( since = "0.23.0" , note = "Use negate instead" ) ]
220
+ pub fn negate_assign ( & mut self ) {
221
+ * self = self . negate ( )
222
+ }
223
+
224
+ /// Negates the secret key.
225
+ #[ inline]
226
+ pub fn negate ( mut self ) -> SecretKey {
222
227
unsafe {
223
228
let res = ffi:: secp256k1_ec_seckey_negate (
224
229
ffi:: secp256k1_context_no_precomp,
225
230
self . as_mut_c_ptr ( )
226
231
) ;
227
232
debug_assert_eq ! ( res, 1 ) ;
228
233
}
234
+ self
229
235
}
230
236
231
237
/// Adds one secret key to another, modulo the curve order.
@@ -498,16 +504,21 @@ impl PublicKey {
498
504
debug_assert_eq ! ( ret_len, ret. len( ) ) ;
499
505
}
500
506
501
- #[ inline]
502
507
/// Negates the public key in place.
503
- pub fn negate_assign < C : Verification > (
504
- & mut self ,
505
- secp : & Secp256k1 < C >
506
- ) {
508
+ #[ inline]
509
+ #[ deprecated( since = "0.23.0" , note = "Use negate instead" ) ]
510
+ pub fn negate_assign < C : Verification > ( & mut self , secp : & Secp256k1 < C > ) {
511
+ * self = self . negate ( secp)
512
+ }
513
+
514
+ /// Negates the public key.
515
+ #[ inline]
516
+ pub fn negate < C : Verification > ( mut self , secp : & Secp256k1 < C > ) -> PublicKey {
507
517
unsafe {
508
518
let res = ffi:: secp256k1_ec_pubkey_negate ( secp. ctx , & mut self . 0 ) ;
509
519
debug_assert_eq ! ( res, 1 ) ;
510
520
}
521
+ self
511
522
}
512
523
513
524
/// Adds `other * G` to `self` in place.
@@ -1885,21 +1896,21 @@ mod test {
1885
1896
fn test_negation ( ) {
1886
1897
let s = Secp256k1 :: new ( ) ;
1887
1898
1888
- let ( mut sk, mut pk) = s. generate_keypair ( & mut thread_rng ( ) ) ;
1889
-
1890
- let original_sk = sk ;
1891
- let original_pk = pk ;
1892
-
1893
- assert_eq ! ( PublicKey :: from_secret_key ( & s , & sk ) , pk ) ;
1894
- sk . negate_assign ( ) ;
1895
- pk . negate_assign ( & s ) ;
1896
- assert_ne ! ( original_sk , sk ) ;
1897
- assert_ne ! ( original_pk , pk ) ;
1898
- sk . negate_assign ( ) ;
1899
- pk . negate_assign ( & s) ;
1900
- assert_eq ! ( original_sk , sk ) ;
1901
- assert_eq ! ( original_pk , pk ) ;
1902
- assert_eq ! ( PublicKey :: from_secret_key( & s, & sk ) , pk) ;
1899
+ let ( sk, pk) = s. generate_keypair ( & mut thread_rng ( ) ) ;
1900
+
1901
+ assert_eq ! ( PublicKey :: from_secret_key ( & s , & sk ) , pk ) ; // Sanity check.
1902
+
1903
+ let neg = sk . negate ( ) ;
1904
+ assert_ne ! ( sk , neg ) ;
1905
+ let back_sk = neg . negate ( ) ;
1906
+ assert_eq ! ( sk , back_sk ) ;
1907
+
1908
+ let neg = pk . negate ( & s ) ;
1909
+ assert_ne ! ( pk , neg ) ;
1910
+ let back_pk = neg . negate ( & s) ;
1911
+ assert_eq ! ( pk , back_pk ) ;
1912
+
1913
+ assert_eq ! ( PublicKey :: from_secret_key( & s, & back_sk ) , pk) ;
1903
1914
}
1904
1915
1905
1916
#[ test]
0 commit comments