@@ -27,8 +27,9 @@ use constants;
27
27
use ffi:: { self , CPtr } ;
28
28
29
29
/// Secret 256-bit key used as `x` in an ECDSA signature
30
+ #[ derive( Clone , PartialEq , Eq , PartialOrd , Ord ) ]
30
31
pub struct SecretKey ( pub ( crate ) [ u8 ; constants:: SECRET_KEY_SIZE ] ) ;
31
- impl_array_newtype ! ( SecretKey , u8 , constants:: SECRET_KEY_SIZE ) ;
32
+ impl_safe_array_newtype ! ( SecretKey , u8 , constants:: SECRET_KEY_SIZE ) ;
32
33
impl_safe_debug ! ( SecretKey ) ;
33
34
34
35
impl fmt:: LowerHex for SecretKey {
@@ -220,7 +221,7 @@ impl ::serde::Serialize for SecretKey {
220
221
if s. is_human_readable ( ) {
221
222
s. collect_str ( self )
222
223
} else {
223
- s. serialize_bytes ( & self [ ..] )
224
+ s. serialize_bytes ( & self . 0 [ ..] )
224
225
}
225
226
}
226
227
}
@@ -529,7 +530,7 @@ mod test {
529
530
let s = Secp256k1 :: new ( ) ;
530
531
531
532
let ( sk1, pk1) = s. generate_keypair ( & mut thread_rng ( ) ) ;
532
- assert_eq ! ( SecretKey :: from_slice( & sk1[ ..] ) , Ok ( sk1) ) ;
533
+ assert_eq ! ( SecretKey :: from_slice( & sk1. 0 [ ..] ) , Ok ( sk1) ) ;
533
534
assert_eq ! ( PublicKey :: from_slice( & pk1. serialize( ) [ ..] ) , Ok ( pk1) ) ;
534
535
assert_eq ! ( PublicKey :: from_slice( & pk1. serialize_uncompressed( ) [ ..] ) , Ok ( pk1) ) ;
535
536
}
@@ -784,13 +785,13 @@ mod test {
784
785
let ( mut sk2, mut pk2) = s. generate_keypair ( & mut thread_rng ( ) ) ;
785
786
786
787
assert_eq ! ( PublicKey :: from_secret_key( & s, & sk1) , pk1) ;
787
- assert ! ( sk1. add_assign( & sk2[ ..] ) . is_ok( ) ) ;
788
- assert ! ( pk1. add_exp_assign( & s, & sk2[ ..] ) . is_ok( ) ) ;
788
+ assert ! ( sk1. add_assign( & sk2. 0 [ ..] ) . is_ok( ) ) ;
789
+ assert ! ( pk1. add_exp_assign( & s, & sk2. 0 [ ..] ) . is_ok( ) ) ;
789
790
assert_eq ! ( PublicKey :: from_secret_key( & s, & sk1) , pk1) ;
790
791
791
792
assert_eq ! ( PublicKey :: from_secret_key( & s, & sk2) , pk2) ;
792
- assert ! ( sk2. add_assign( & sk1[ ..] ) . is_ok( ) ) ;
793
- assert ! ( pk2. add_exp_assign( & s, & sk1[ ..] ) . is_ok( ) ) ;
793
+ assert ! ( sk2. add_assign( & sk1. 0 [ ..] ) . is_ok( ) ) ;
794
+ assert ! ( pk2. add_exp_assign( & s, & sk1. 0 [ ..] ) . is_ok( ) ) ;
794
795
assert_eq ! ( PublicKey :: from_secret_key( & s, & sk2) , pk2) ;
795
796
}
796
797
@@ -802,13 +803,13 @@ mod test {
802
803
let ( mut sk2, mut pk2) = s. generate_keypair ( & mut thread_rng ( ) ) ;
803
804
804
805
assert_eq ! ( PublicKey :: from_secret_key( & s, & sk1) , pk1) ;
805
- assert ! ( sk1. mul_assign( & sk2[ ..] ) . is_ok( ) ) ;
806
- assert ! ( pk1. mul_assign( & s, & sk2[ ..] ) . is_ok( ) ) ;
806
+ assert ! ( sk1. mul_assign( & sk2. 0 [ ..] ) . is_ok( ) ) ;
807
+ assert ! ( pk1. mul_assign( & s, & sk2. 0 [ ..] ) . is_ok( ) ) ;
807
808
assert_eq ! ( PublicKey :: from_secret_key( & s, & sk1) , pk1) ;
808
809
809
810
assert_eq ! ( PublicKey :: from_secret_key( & s, & sk2) , pk2) ;
810
- assert ! ( sk2. mul_assign( & sk1[ ..] ) . is_ok( ) ) ;
811
- assert ! ( pk2. mul_assign( & s, & sk1[ ..] ) . is_ok( ) ) ;
811
+ assert ! ( sk2. mul_assign( & sk1. 0 [ ..] ) . is_ok( ) ) ;
812
+ assert ! ( pk2. mul_assign( & s, & sk1. 0 [ ..] ) . is_ok( ) ) ;
812
813
assert_eq ! ( PublicKey :: from_secret_key( & s, & sk2) , pk2) ;
813
814
}
814
815
@@ -818,7 +819,7 @@ mod test {
818
819
819
820
let ( mut sk, mut pk) = s. generate_keypair ( & mut thread_rng ( ) ) ;
820
821
821
- let original_sk = sk;
822
+ let original_sk = sk. clone ( ) ;
822
823
let original_pk = pk;
823
824
824
825
assert_eq ! ( PublicKey :: from_secret_key( & s, & sk) , pk) ;
@@ -913,7 +914,7 @@ mod test {
913
914
assert ! ( sum2. is_ok( ) ) ;
914
915
assert_eq ! ( sum1, sum2) ;
915
916
916
- assert ! ( sk1. add_assign( & sk2. as_ref ( ) [ ..] ) . is_ok( ) ) ;
917
+ assert ! ( sk1. add_assign( & sk2. 0 [ ..] ) . is_ok( ) ) ;
917
918
let sksum = PublicKey :: from_secret_key ( & s, & sk1) ;
918
919
assert_eq ! ( Ok ( sksum) , sum1) ;
919
920
}
@@ -974,13 +975,13 @@ mod test {
974
975
#[ cfg( fuzzing) ]
975
976
let pk = PublicKey :: from_slice ( & PK_BYTES ) . expect ( "pk" ) ;
976
977
977
- assert_tokens ( & sk. compact ( ) , & [ Token :: BorrowedBytes ( & SK_BYTES [ ..] ) ] ) ;
978
- assert_tokens ( & sk. compact ( ) , & [ Token :: Bytes ( & SK_BYTES ) ] ) ;
979
- assert_tokens ( & sk. compact ( ) , & [ Token :: ByteBuf ( & SK_BYTES ) ] ) ;
978
+ assert_tokens ( & sk. clone ( ) . compact ( ) , & [ Token :: BorrowedBytes ( & SK_BYTES [ ..] ) ] ) ;
979
+ assert_tokens ( & sk. clone ( ) . compact ( ) , & [ Token :: Bytes ( & SK_BYTES ) ] ) ;
980
+ assert_tokens ( & sk. clone ( ) . compact ( ) , & [ Token :: ByteBuf ( & SK_BYTES ) ] ) ;
980
981
981
- assert_tokens ( & sk. readable ( ) , & [ Token :: BorrowedStr ( SK_STR ) ] ) ;
982
- assert_tokens ( & sk. readable ( ) , & [ Token :: Str ( SK_STR ) ] ) ;
983
- assert_tokens ( & sk. readable ( ) , & [ Token :: String ( SK_STR ) ] ) ;
982
+ assert_tokens ( & sk. clone ( ) . readable ( ) , & [ Token :: BorrowedStr ( SK_STR ) ] ) ;
983
+ assert_tokens ( & sk. clone ( ) . readable ( ) , & [ Token :: Str ( SK_STR ) ] ) ;
984
+ assert_tokens ( & sk. clone ( ) . readable ( ) , & [ Token :: String ( SK_STR ) ] ) ;
984
985
985
986
assert_tokens ( & pk. compact ( ) , & [ Token :: BorrowedBytes ( & PK_BYTES [ ..] ) ] ) ;
986
987
assert_tokens ( & pk. compact ( ) , & [ Token :: Bytes ( & PK_BYTES ) ] ) ;
0 commit comments