@@ -1053,14 +1053,12 @@ impl<'a> From<&'a KeyPair> for PublicKey {
1053
1053
}
1054
1054
}
1055
1055
1056
+ #[ cfg( feature = "global-context" ) ]
1056
1057
impl str:: FromStr for KeyPair {
1057
1058
type Err = Error ;
1058
1059
1059
1060
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
- } ;
1063
- KeyPair :: from_seckey_str ( & ctx, s)
1061
+ KeyPair :: from_seckey_str ( & crate :: SECP256K1 , s)
1064
1062
}
1065
1063
}
1066
1064
@@ -1082,7 +1080,7 @@ impl serde::Serialize for KeyPair {
1082
1080
}
1083
1081
}
1084
1082
1085
- #[ cfg( feature = "serde" ) ]
1083
+ #[ cfg( all ( feature = "serde" , feature = "global-context" ) ) ]
1086
1084
#[ cfg_attr( docsrs, doc( cfg( feature = "serde" ) ) ) ]
1087
1085
impl < ' de > serde:: Deserialize < ' de > for KeyPair {
1088
1086
fn deserialize < D : serde:: Deserializer < ' de > > ( d : D ) -> Result < Self , D :: Error > {
@@ -1093,9 +1091,8 @@ impl<'de> serde::Deserialize<'de> for KeyPair {
1093
1091
} else {
1094
1092
let visitor = super :: serde_util:: Tuple32Visitor :: new (
1095
1093
"raw 32 bytes KeyPair" ,
1096
- |data| unsafe {
1097
- let ctx = Secp256k1 :: from_raw_all ( ffi:: secp256k1_context_no_precomp as * mut ffi:: Context ) ;
1098
- KeyPair :: from_seckey_slice ( & ctx, data)
1094
+ |data| {
1095
+ KeyPair :: from_seckey_slice ( & crate :: SECP256K1 , data)
1099
1096
}
1100
1097
) ;
1101
1098
d. deserialize_tuple ( constants:: SECRET_KEY_SIZE , visitor)
@@ -1630,6 +1627,7 @@ pub mod serde_keypair {
1630
1627
#[ cfg( test) ]
1631
1628
#[ allow( unused_imports) ]
1632
1629
mod test {
1630
+ use bitcoin_hashes:: hex:: ToHex ;
1633
1631
use super :: * ;
1634
1632
1635
1633
use core:: str:: FromStr ;
@@ -2431,6 +2429,16 @@ mod test {
2431
2429
assert_tokens ( & pk. readable ( ) , & [ Token :: Str ( PK_STR ) ] ) ;
2432
2430
assert_tokens ( & pk. readable ( ) , & [ Token :: String ( PK_STR ) ] ) ;
2433
2431
}
2432
+
2433
+ #[ test]
2434
+ #[ cfg( feature = "global-context" ) ]
2435
+ fn test_keypair_from_str ( ) {
2436
+ let ctx = crate :: Secp256k1 :: new ( ) ;
2437
+ let keypair = KeyPair :: new ( & ctx, & mut thread_rng ( ) ) ;
2438
+ let msg = keypair. secret_key ( ) . secret_bytes ( ) . to_hex ( ) ;
2439
+ let parsed_key: KeyPair = msg. parse ( ) . unwrap ( ) ;
2440
+ assert_eq ! ( parsed_key, keypair) ;
2441
+ }
2434
2442
}
2435
2443
2436
2444
#[ cfg( bench) ]
0 commit comments