@@ -1057,9 +1057,12 @@ impl str::FromStr for KeyPair {
1057
1057
type Err = Error ;
1058
1058
1059
1059
fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
1060
- let ctx = unsafe {
1061
- Secp256k1 :: from_raw_all ( ffi:: secp256k1_context_no_precomp as * mut ffi:: Context )
1062
- } ;
1060
+ #[ cfg( feature = "global-context" ) ]
1061
+ let ctx = SECP256K1 ;
1062
+
1063
+ #[ cfg( not( feature = "global-context" ) ) ]
1064
+ let ctx = Secp256k1 :: signing_only ( ) ;
1065
+
1063
1066
KeyPair :: from_seckey_str ( & ctx, s)
1064
1067
}
1065
1068
}
@@ -1093,8 +1096,12 @@ impl<'de> serde::Deserialize<'de> for KeyPair {
1093
1096
} else {
1094
1097
let visitor = super :: serde_util:: Tuple32Visitor :: new (
1095
1098
"raw 32 bytes KeyPair" ,
1096
- |data| unsafe {
1097
- let ctx = Secp256k1 :: from_raw_all ( ffi:: secp256k1_context_no_precomp as * mut ffi:: Context ) ;
1099
+ |data| {
1100
+ #[ cfg( feature = "global-context" ) ]
1101
+ let ctx = SECP256K1 ;
1102
+
1103
+ #[ cfg( not( feature = "global-context" ) ) ]
1104
+ let ctx = Secp256k1 :: signing_only ( ) ;
1098
1105
KeyPair :: from_seckey_slice ( & ctx, data)
1099
1106
}
1100
1107
) ;
@@ -1630,6 +1637,7 @@ pub mod serde_keypair {
1630
1637
#[ cfg( test) ]
1631
1638
#[ allow( unused_imports) ]
1632
1639
mod test {
1640
+ use bitcoin_hashes:: hex:: ToHex ;
1633
1641
use super :: * ;
1634
1642
1635
1643
use core:: str:: FromStr ;
@@ -2431,6 +2439,16 @@ mod test {
2431
2439
assert_tokens ( & pk. readable ( ) , & [ Token :: Str ( PK_STR ) ] ) ;
2432
2440
assert_tokens ( & pk. readable ( ) , & [ Token :: String ( PK_STR ) ] ) ;
2433
2441
}
2442
+
2443
+ #[ test]
2444
+ #[ cfg( feature = "global-context" ) ]
2445
+ fn test_keypair_from_str ( ) {
2446
+ let ctx = crate :: Secp256k1 :: new ( ) ;
2447
+ let keypair = KeyPair :: new ( & ctx, & mut thread_rng ( ) ) ;
2448
+ let msg = keypair. secret_key ( ) . secret_bytes ( ) . to_hex ( ) ;
2449
+ let parsed_key: KeyPair = msg. parse ( ) . unwrap ( ) ;
2450
+ assert_eq ! ( parsed_key, keypair) ;
2451
+ }
2434
2452
}
2435
2453
2436
2454
#[ cfg( bench) ]
0 commit comments