7171//! let secret_key = SecretKey::from_slice(&[0xcd; 32]).expect("32 bytes, within curve order");
7272//! let public_key = PublicKey::from_secret_key(&secp, &secret_key);
7373//! // This is unsafe unless the supplied byte slice is the output of a cryptographic hash function.
74- //! let message = Message::from_digest_slice(& [0xab; 32]).expect("32 bytes" );
74+ //! let message = Message::from_digest( [0xab; 32]);
7575//!
7676//! let sig = secp.sign_ecdsa(&message, &secret_key);
7777//! assert!(secp.verify_ecdsa(&message, &sig, &public_key).is_ok());
9494//! 0x3a, 0x17, 0x10, 0xc9, 0x62, 0x67, 0x90, 0x63,
9595//! ]).expect("public keys must be 33 or 65 bytes, serialized according to SEC 2");
9696//!
97- //! let message = Message::from_digest_slice(& [
97+ //! let message = Message::from_digest( [
9898//! 0xaa, 0xdf, 0x7d, 0xe7, 0x82, 0x03, 0x4f, 0xbe,
9999//! 0x3d, 0x3d, 0xb2, 0xcb, 0x13, 0xc0, 0xcd, 0x91,
100100//! 0xbf, 0x41, 0xcb, 0x08, 0xfa, 0xc7, 0xbd, 0x61,
101101//! 0xd5, 0x44, 0x53, 0xcf, 0x6e, 0x82, 0xb4, 0x50,
102- //! ]).expect("messages must be 32 bytes and are expected to be hashes") ;
102+ //! ]);
103103//!
104104//! let sig = ecdsa::Signature::from_compact(&[
105105//! 0xdc, 0x4d, 0xc2, 0x64, 0xa9, 0xfe, 0xf1, 0x7a,
@@ -218,8 +218,9 @@ impl Message {
218218 /// the result of signing isn't a
219219 /// [secure signature](https://twitter.com/pwuille/status/1063582706288586752).
220220 #[ inline]
221- #[ deprecated( since = "0.28.0" , note = "use from_digest_slice instead" ) ]
221+ #[ deprecated( since = "0.28.0" , note = "use from_digest instead" ) ]
222222 pub fn from_slice ( digest : & [ u8 ] ) -> Result < Message , Error > {
223+ #[ allow( deprecated) ]
223224 Message :: from_digest_slice ( digest)
224225 }
225226
@@ -238,21 +239,19 @@ impl Message {
238239 /// message that's going to be signed. Otherwise the result of signing isn't a [secure
239240 /// signature].
240241 ///
242+ /// This method is deprecated. It's best to use [`Message::from_digest`] directly with an
243+ /// array. If your hash engine doesn't return an array for some reason use `.try_into()` on its
244+ /// output.
245+ ///
241246 /// # Errors
242247 ///
243248 /// If `digest` is not exactly 32 bytes long.
244249 ///
245250 /// [secure signature]: https://twitter.com/pwuille/status/1063582706288586752
246251 #[ inline]
252+ #[ deprecated( since = "TBD" , note = "use from_digest instead" ) ]
247253 pub fn from_digest_slice ( digest : & [ u8 ] ) -> Result < Message , Error > {
248- match digest. len ( ) {
249- constants:: MESSAGE_SIZE => {
250- let mut ret = [ 0u8 ; constants:: MESSAGE_SIZE ] ;
251- ret[ ..] . copy_from_slice ( digest) ;
252- Ok ( Message ( ret) )
253- }
254- _ => Err ( Error :: InvalidMessage ) ,
255- }
254+ Ok ( Message :: from_digest ( digest. try_into ( ) . map_err ( |_| Error :: InvalidMessage ) ?) )
256255 }
257256}
258257
@@ -536,7 +535,7 @@ mod tests {
536535 let mut vrfy = unsafe { Secp256k1 :: from_raw_verification_only ( ctx_vrfy. ctx ) } ;
537536
538537 let ( sk, pk) = full. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
539- let msg = Message :: from_digest_slice ( & [ 2u8 ; 32 ] ) . unwrap ( ) ;
538+ let msg = Message :: from_digest ( [ 2u8 ; 32 ] ) ;
540539 // Try signing
541540 assert_eq ! ( sign. sign_ecdsa( & msg, & sk) , full. sign_ecdsa( & msg, & sk) ) ;
542541 let sig = full. sign_ecdsa ( & msg, & sk) ;
@@ -603,7 +602,7 @@ mod tests {
603602 // println!("{:?}", buf_ful[5]); // Can't even read the data thanks to the borrow checker.
604603
605604 let ( sk, pk) = full. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
606- let msg = Message :: from_digest_slice ( & [ 2u8 ; 32 ] ) . unwrap ( ) ;
605+ let msg = Message :: from_digest ( [ 2u8 ; 32 ] ) ;
607606 // Try signing
608607 assert_eq ! ( sign. sign_ecdsa( & msg, & sk) , full. sign_ecdsa( & msg, & sk) ) ;
609608 let sig = full. sign_ecdsa ( & msg, & sk) ;
@@ -621,7 +620,7 @@ mod tests {
621620 let full = Secp256k1 :: new ( ) ;
622621
623622 let msg = crate :: random_32_bytes ( & mut rand:: thread_rng ( ) ) ;
624- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
623+ let msg = Message :: from_digest ( msg) ;
625624
626625 // Try key generation
627626 let ( sk, pk) = full. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
@@ -650,7 +649,7 @@ mod tests {
650649
651650 for _ in 0 ..100 {
652651 let msg = crate :: random_32_bytes ( & mut rand:: thread_rng ( ) ) ;
653- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
652+ let msg = Message :: from_digest ( msg) ;
654653
655654 let ( sk, _) = s. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
656655 let sig1 = s. sign_ecdsa ( & msg, & sk) ;
@@ -741,7 +740,7 @@ mod tests {
741740 let noncedata = [ 42u8 ; 32 ] ;
742741 for _ in 0 ..100 {
743742 let msg = crate :: random_32_bytes ( & mut rand:: thread_rng ( ) ) ;
744- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
743+ let msg = Message :: from_digest ( msg) ;
745744
746745 let ( sk, pk) = s. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
747746 let sig = s. sign_ecdsa ( & msg, & sk) ;
@@ -788,7 +787,7 @@ mod tests {
788787 wild_msgs[ 1 ] [ 0 ] -= 1 ;
789788
790789 for key in wild_keys. iter ( ) . map ( |k| SecretKey :: from_slice ( & k[ ..] ) . unwrap ( ) ) {
791- for msg in wild_msgs. iter ( ) . map ( |m| Message :: from_digest_slice ( & m [ .. ] ) . unwrap ( ) ) {
790+ for msg in wild_msgs. into_iter ( ) . map ( Message :: from_digest ) {
792791 let sig = s. sign_ecdsa ( & msg, & key) ;
793792 let low_r_sig = s. sign_ecdsa_low_r ( & msg, & key) ;
794793 let grind_r_sig = s. sign_ecdsa_grind_r ( & msg, & key, 1 ) ;
@@ -807,18 +806,19 @@ mod tests {
807806 s. randomize ( & mut rand:: thread_rng ( ) ) ;
808807
809808 let msg = crate :: random_32_bytes ( & mut rand:: thread_rng ( ) ) ;
810- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
809+ let msg = Message :: from_digest ( msg) ;
811810
812811 let ( sk, pk) = s. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
813812
814813 let sig = s. sign_ecdsa ( & msg, & sk) ;
815814
816815 let msg = crate :: random_32_bytes ( & mut rand:: thread_rng ( ) ) ;
817- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
816+ let msg = Message :: from_digest ( msg) ;
818817 assert_eq ! ( s. verify_ecdsa( & msg, & sig, & pk) , Err ( Error :: IncorrectSignature ) ) ;
819818 }
820819
821820 #[ test]
821+ #[ allow( deprecated) ]
822822 fn test_bad_slice ( ) {
823823 assert_eq ! (
824824 ecdsa:: Signature :: from_der( & [ 0 ; constants:: MAX_SIGNATURE_SIZE + 1 ] ) ,
@@ -877,7 +877,7 @@ mod tests {
877877 fn test_noncedata ( ) {
878878 let secp = Secp256k1 :: new ( ) ;
879879 let msg = hex ! ( "887d04bb1cf1b1554f1b268dfe62d13064ca67ae45348d50d1392ce2d13418ac" ) ;
880- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
880+ let msg = Message :: from_digest ( msg) ;
881881 let noncedata = [ 42u8 ; 32 ] ;
882882 let sk =
883883 SecretKey :: from_str ( "57f0148f94d13095cfda539d0da0d1541304b678d8b36e243980aab4e1b7cead" )
@@ -904,7 +904,7 @@ mod tests {
904904 let secp = Secp256k1 :: new ( ) ;
905905 let mut sig = ecdsa:: Signature :: from_der ( & sig[ ..] ) . unwrap ( ) ;
906906 let pk = PublicKey :: from_slice ( & pk[ ..] ) . unwrap ( ) ;
907- let msg = Message :: from_digest_slice ( & msg[ .. ] ) . unwrap ( ) ;
907+ let msg = Message :: from_digest ( msg) ;
908908
909909 // without normalization we expect this will fail
910910 assert_eq ! ( secp. verify_ecdsa( & msg, & sig, & pk) , Err ( Error :: IncorrectSignature ) ) ;
@@ -919,7 +919,7 @@ mod tests {
919919 fn test_low_r ( ) {
920920 let secp = Secp256k1 :: new ( ) ;
921921 let msg = hex ! ( "887d04bb1cf1b1554f1b268dfe62d13064ca67ae45348d50d1392ce2d13418ac" ) ;
922- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
922+ let msg = Message :: from_digest ( msg) ;
923923 let sk =
924924 SecretKey :: from_str ( "57f0148f94d13095cfda539d0da0d1541304b678d8b36e243980aab4e1b7cead" )
925925 . unwrap ( ) ;
@@ -937,7 +937,7 @@ mod tests {
937937 fn test_grind_r ( ) {
938938 let secp = Secp256k1 :: new ( ) ;
939939 let msg = hex ! ( "ef2d5b9a7c61865a95941d0f04285420560df7e9d76890ac1b8867b12ce43167" ) ;
940- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
940+ let msg = Message :: from_digest ( msg) ;
941941 let sk =
942942 SecretKey :: from_str ( "848355d75fe1c354cf05539bb29b2015f1863065bcb6766b44d399ab95c3fa0b" )
943943 . unwrap ( ) ;
@@ -957,7 +957,7 @@ mod tests {
957957
958958 let s = Secp256k1 :: new ( ) ;
959959
960- let msg = Message :: from_digest_slice ( & [ 1 ; 32 ] ) . unwrap ( ) ;
960+ let msg = Message :: from_digest ( [ 1 ; 32 ] ) ;
961961 let sk = SecretKey :: from_slice ( & [ 2 ; 32 ] ) . unwrap ( ) ;
962962 let sig = s. sign_ecdsa ( & msg, & sk) ;
963963 static SIG_BYTES : [ u8 ; 71 ] = [
@@ -987,7 +987,7 @@ mod tests {
987987 let sk_data = hex ! ( "e6dd32f8761625f105c39a39f19370b3521d845a12456d60ce44debd0a362641" ) ;
988988 let sk = SecretKey :: from_slice ( & sk_data) . unwrap ( ) ;
989989 let msg_data = hex ! ( "a4965ca63b7d8562736ceec36dfa5a11bf426eb65be8ea3f7a49ae363032da0d" ) ;
990- let msg = Message :: from_digest_slice ( & msg_data) . unwrap ( ) ;
990+ let msg = Message :: from_digest ( msg_data) ;
991991
992992 // Check usage as explicit parameter
993993 let pk = PublicKey :: from_secret_key ( SECP256K1 , & sk) ;
@@ -1021,7 +1021,7 @@ mod benches {
10211021 pub fn bench_sign_ecdsa ( bh : & mut Bencher ) {
10221022 let s = Secp256k1 :: new ( ) ;
10231023 let msg = crate :: random_32_bytes ( & mut rand:: thread_rng ( ) ) ;
1024- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
1024+ let msg = Message :: from_digest ( msg) ;
10251025 let ( sk, _) = s. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
10261026
10271027 bh. iter ( || {
@@ -1034,7 +1034,7 @@ mod benches {
10341034 pub fn bench_verify_ecdsa ( bh : & mut Bencher ) {
10351035 let s = Secp256k1 :: new ( ) ;
10361036 let msg = crate :: random_32_bytes ( & mut rand:: thread_rng ( ) ) ;
1037- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
1037+ let msg = Message :: from_digest ( msg) ;
10381038 let ( sk, pk) = s. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
10391039 let sig = s. sign_ecdsa ( & msg, & sk) ;
10401040
0 commit comments