@@ -27,8 +27,9 @@ use constants;
2727use ffi:: { self , CPtr } ;
2828
2929/// Secret 256-bit key used as `x` in an ECDSA signature
30+ #[ derive( Clone , PartialEq , Eq , PartialOrd , Ord ) ]
3031pub 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 ) ;
3233impl_safe_debug ! ( SecretKey ) ;
3334
3435impl fmt:: LowerHex for SecretKey {
@@ -220,7 +221,7 @@ impl ::serde::Serialize for SecretKey {
220221 if s. is_human_readable ( ) {
221222 s. collect_str ( self )
222223 } else {
223- s. serialize_bytes ( & self [ ..] )
224+ s. serialize_bytes ( & self . 0 [ ..] )
224225 }
225226 }
226227}
@@ -529,7 +530,7 @@ mod test {
529530 let s = Secp256k1 :: new ( ) ;
530531
531532 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) ) ;
533534 assert_eq ! ( PublicKey :: from_slice( & pk1. serialize( ) [ ..] ) , Ok ( pk1) ) ;
534535 assert_eq ! ( PublicKey :: from_slice( & pk1. serialize_uncompressed( ) [ ..] ) , Ok ( pk1) ) ;
535536 }
@@ -784,13 +785,13 @@ mod test {
784785 let ( mut sk2, mut pk2) = s. generate_keypair ( & mut thread_rng ( ) ) ;
785786
786787 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( ) ) ;
789790 assert_eq ! ( PublicKey :: from_secret_key( & s, & sk1) , pk1) ;
790791
791792 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( ) ) ;
794795 assert_eq ! ( PublicKey :: from_secret_key( & s, & sk2) , pk2) ;
795796 }
796797
@@ -802,13 +803,13 @@ mod test {
802803 let ( mut sk2, mut pk2) = s. generate_keypair ( & mut thread_rng ( ) ) ;
803804
804805 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( ) ) ;
807808 assert_eq ! ( PublicKey :: from_secret_key( & s, & sk1) , pk1) ;
808809
809810 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( ) ) ;
812813 assert_eq ! ( PublicKey :: from_secret_key( & s, & sk2) , pk2) ;
813814 }
814815
@@ -818,7 +819,7 @@ mod test {
818819
819820 let ( mut sk, mut pk) = s. generate_keypair ( & mut thread_rng ( ) ) ;
820821
821- let original_sk = sk;
822+ let original_sk = sk. clone ( ) ;
822823 let original_pk = pk;
823824
824825 assert_eq ! ( PublicKey :: from_secret_key( & s, & sk) , pk) ;
@@ -913,7 +914,7 @@ mod test {
913914 assert ! ( sum2. is_ok( ) ) ;
914915 assert_eq ! ( sum1, sum2) ;
915916
916- assert ! ( sk1. add_assign( & sk2. as_ref ( ) [ ..] ) . is_ok( ) ) ;
917+ assert ! ( sk1. add_assign( & sk2. 0 [ ..] ) . is_ok( ) ) ;
917918 let sksum = PublicKey :: from_secret_key ( & s, & sk1) ;
918919 assert_eq ! ( Ok ( sksum) , sum1) ;
919920 }
@@ -974,13 +975,13 @@ mod test {
974975 #[ cfg( fuzzing) ]
975976 let pk = PublicKey :: from_slice ( & PK_BYTES ) . expect ( "pk" ) ;
976977
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 ) ] ) ;
980981
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 ) ] ) ;
984985
985986 assert_tokens ( & pk. compact ( ) , & [ Token :: BorrowedBytes ( & PK_BYTES [ ..] ) ] ) ;
986987 assert_tokens ( & pk. compact ( ) , & [ Token :: Bytes ( & PK_BYTES ) ] ) ;
0 commit comments