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
@@ -508,19 +507,12 @@ pub(crate) fn random_32_bytes<R: rand::Rng + ?Sized>(rng: &mut R) -> [u8; 32] {
508507mod tests {
509508 use std:: str:: FromStr ;
510509
510+ use hex_lit:: hex;
511511 #[ cfg( target_arch = "wasm32" ) ]
512512 use wasm_bindgen_test:: wasm_bindgen_test as test;
513513
514514 use super :: * ;
515515
516- macro_rules! hex {
517- ( $hex: expr) => { {
518- let mut result = vec![ 0 ; $hex. len( ) / 2 ] ;
519- from_hex( $hex, & mut result) . expect( "valid hex string" ) ;
520- result
521- } } ;
522- }
523-
524516 #[ test]
525517 #[ cfg( all( feature = "rand" , feature = "std" ) ) ]
526518 // In rustc 1.72 this Clippy lint was pulled out of clippy and into rustc, and
@@ -543,7 +535,7 @@ mod tests {
543535 let mut vrfy = unsafe { Secp256k1 :: from_raw_verification_only ( ctx_vrfy. ctx ) } ;
544536
545537 let ( sk, pk) = full. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
546- let msg = Message :: from_digest_slice ( & [ 2u8 ; 32 ] ) . unwrap ( ) ;
538+ let msg = Message :: from_digest ( [ 2u8 ; 32 ] ) ;
547539 // Try signing
548540 assert_eq ! ( sign. sign_ecdsa( & msg, & sk) , full. sign_ecdsa( & msg, & sk) ) ;
549541 let sig = full. sign_ecdsa ( & msg, & sk) ;
@@ -610,7 +602,7 @@ mod tests {
610602 // println!("{:?}", buf_ful[5]); // Can't even read the data thanks to the borrow checker.
611603
612604 let ( sk, pk) = full. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
613- let msg = Message :: from_digest_slice ( & [ 2u8 ; 32 ] ) . unwrap ( ) ;
605+ let msg = Message :: from_digest ( [ 2u8 ; 32 ] ) ;
614606 // Try signing
615607 assert_eq ! ( sign. sign_ecdsa( & msg, & sk) , full. sign_ecdsa( & msg, & sk) ) ;
616608 let sig = full. sign_ecdsa ( & msg, & sk) ;
@@ -628,7 +620,7 @@ mod tests {
628620 let full = Secp256k1 :: new ( ) ;
629621
630622 let msg = crate :: random_32_bytes ( & mut rand:: thread_rng ( ) ) ;
631- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
623+ let msg = Message :: from_digest ( msg) ;
632624
633625 // Try key generation
634626 let ( sk, pk) = full. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
@@ -657,7 +649,7 @@ mod tests {
657649
658650 for _ in 0 ..100 {
659651 let msg = crate :: random_32_bytes ( & mut rand:: thread_rng ( ) ) ;
660- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
652+ let msg = Message :: from_digest ( msg) ;
661653
662654 let ( sk, _) = s. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
663655 let sig1 = s. sign_ecdsa ( & msg, & sk) ;
@@ -678,17 +670,17 @@ mod tests {
678670
679671 #[ test]
680672 fn signature_display ( ) {
681- let hex_str = "3046022100839c1fbc5304de944f697c9f4b1d01d1faeba32d751c0f7acb21ac8a0f436a72022100e89bd46bb3a5a62adc679f659b7ce876d83ee297c7a5587b2011c4fcc72eab45" ;
682- let byte_str = hex ! ( hex_str ) ;
673+ const HEX_STR : & str = "3046022100839c1fbc5304de944f697c9f4b1d01d1faeba32d751c0f7acb21ac8a0f436a72022100e89bd46bb3a5a62adc679f659b7ce876d83ee297c7a5587b2011c4fcc72eab45" ;
674+ let byte_str = hex ! ( HEX_STR ) ;
683675
684676 assert_eq ! (
685677 ecdsa:: Signature :: from_der( & byte_str) . expect( "byte str decode" ) ,
686- ecdsa:: Signature :: from_str( hex_str ) . expect( "byte str decode" )
678+ ecdsa:: Signature :: from_str( HEX_STR ) . expect( "byte str decode" )
687679 ) ;
688680
689- let sig = ecdsa:: Signature :: from_str ( hex_str ) . expect ( "byte str decode" ) ;
690- assert_eq ! ( & sig. to_string( ) , hex_str ) ;
691- assert_eq ! ( & format!( "{:?}" , sig) , hex_str ) ;
681+ let sig = ecdsa:: Signature :: from_str ( HEX_STR ) . expect ( "byte str decode" ) ;
682+ assert_eq ! ( & sig. to_string( ) , HEX_STR ) ;
683+ assert_eq ! ( & format!( "{:?}" , sig) , HEX_STR ) ;
692684
693685 assert ! ( ecdsa:: Signature :: from_str(
694686 "3046022100839c1fbc5304de944f697c9f4b1d01d1faeba32d751c0f7acb21ac8a0f436a\
@@ -748,7 +740,7 @@ mod tests {
748740 let noncedata = [ 42u8 ; 32 ] ;
749741 for _ in 0 ..100 {
750742 let msg = crate :: random_32_bytes ( & mut rand:: thread_rng ( ) ) ;
751- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
743+ let msg = Message :: from_digest ( msg) ;
752744
753745 let ( sk, pk) = s. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
754746 let sig = s. sign_ecdsa ( & msg, & sk) ;
@@ -795,7 +787,7 @@ mod tests {
795787 wild_msgs[ 1 ] [ 0 ] -= 1 ;
796788
797789 for key in wild_keys. iter ( ) . map ( |k| SecretKey :: from_slice ( & k[ ..] ) . unwrap ( ) ) {
798- 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 ) {
799791 let sig = s. sign_ecdsa ( & msg, & key) ;
800792 let low_r_sig = s. sign_ecdsa_low_r ( & msg, & key) ;
801793 let grind_r_sig = s. sign_ecdsa_grind_r ( & msg, & key, 1 ) ;
@@ -814,18 +806,19 @@ mod tests {
814806 s. randomize ( & mut rand:: thread_rng ( ) ) ;
815807
816808 let msg = crate :: random_32_bytes ( & mut rand:: thread_rng ( ) ) ;
817- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
809+ let msg = Message :: from_digest ( msg) ;
818810
819811 let ( sk, pk) = s. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
820812
821813 let sig = s. sign_ecdsa ( & msg, & sk) ;
822814
823815 let msg = crate :: random_32_bytes ( & mut rand:: thread_rng ( ) ) ;
824- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
816+ let msg = Message :: from_digest ( msg) ;
825817 assert_eq ! ( s. verify_ecdsa( & msg, & sig, & pk) , Err ( Error :: IncorrectSignature ) ) ;
826818 }
827819
828820 #[ test]
821+ #[ allow( deprecated) ]
829822 fn test_bad_slice ( ) {
830823 assert_eq ! (
831824 ecdsa:: Signature :: from_der( & [ 0 ; constants:: MAX_SIGNATURE_SIZE + 1 ] ) ,
@@ -884,7 +877,7 @@ mod tests {
884877 fn test_noncedata ( ) {
885878 let secp = Secp256k1 :: new ( ) ;
886879 let msg = hex ! ( "887d04bb1cf1b1554f1b268dfe62d13064ca67ae45348d50d1392ce2d13418ac" ) ;
887- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
880+ let msg = Message :: from_digest ( msg) ;
888881 let noncedata = [ 42u8 ; 32 ] ;
889882 let sk =
890883 SecretKey :: from_str ( "57f0148f94d13095cfda539d0da0d1541304b678d8b36e243980aab4e1b7cead" )
@@ -911,7 +904,7 @@ mod tests {
911904 let secp = Secp256k1 :: new ( ) ;
912905 let mut sig = ecdsa:: Signature :: from_der ( & sig[ ..] ) . unwrap ( ) ;
913906 let pk = PublicKey :: from_slice ( & pk[ ..] ) . unwrap ( ) ;
914- let msg = Message :: from_digest_slice ( & msg[ .. ] ) . unwrap ( ) ;
907+ let msg = Message :: from_digest ( msg) ;
915908
916909 // without normalization we expect this will fail
917910 assert_eq ! ( secp. verify_ecdsa( & msg, & sig, & pk) , Err ( Error :: IncorrectSignature ) ) ;
@@ -926,7 +919,7 @@ mod tests {
926919 fn test_low_r ( ) {
927920 let secp = Secp256k1 :: new ( ) ;
928921 let msg = hex ! ( "887d04bb1cf1b1554f1b268dfe62d13064ca67ae45348d50d1392ce2d13418ac" ) ;
929- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
922+ let msg = Message :: from_digest ( msg) ;
930923 let sk =
931924 SecretKey :: from_str ( "57f0148f94d13095cfda539d0da0d1541304b678d8b36e243980aab4e1b7cead" )
932925 . unwrap ( ) ;
@@ -944,7 +937,7 @@ mod tests {
944937 fn test_grind_r ( ) {
945938 let secp = Secp256k1 :: new ( ) ;
946939 let msg = hex ! ( "ef2d5b9a7c61865a95941d0f04285420560df7e9d76890ac1b8867b12ce43167" ) ;
947- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
940+ let msg = Message :: from_digest ( msg) ;
948941 let sk =
949942 SecretKey :: from_str ( "848355d75fe1c354cf05539bb29b2015f1863065bcb6766b44d399ab95c3fa0b" )
950943 . unwrap ( ) ;
@@ -964,7 +957,7 @@ mod tests {
964957
965958 let s = Secp256k1 :: new ( ) ;
966959
967- let msg = Message :: from_digest_slice ( & [ 1 ; 32 ] ) . unwrap ( ) ;
960+ let msg = Message :: from_digest ( [ 1 ; 32 ] ) ;
968961 let sk = SecretKey :: from_slice ( & [ 2 ; 32 ] ) . unwrap ( ) ;
969962 let sig = s. sign_ecdsa ( & msg, & sk) ;
970963 static SIG_BYTES : [ u8 ; 71 ] = [
@@ -994,7 +987,7 @@ mod tests {
994987 let sk_data = hex ! ( "e6dd32f8761625f105c39a39f19370b3521d845a12456d60ce44debd0a362641" ) ;
995988 let sk = SecretKey :: from_slice ( & sk_data) . unwrap ( ) ;
996989 let msg_data = hex ! ( "a4965ca63b7d8562736ceec36dfa5a11bf426eb65be8ea3f7a49ae363032da0d" ) ;
997- let msg = Message :: from_digest_slice ( & msg_data) . unwrap ( ) ;
990+ let msg = Message :: from_digest ( msg_data) ;
998991
999992 // Check usage as explicit parameter
1000993 let pk = PublicKey :: from_secret_key ( SECP256K1 , & sk) ;
@@ -1028,7 +1021,7 @@ mod benches {
10281021 pub fn bench_sign_ecdsa ( bh : & mut Bencher ) {
10291022 let s = Secp256k1 :: new ( ) ;
10301023 let msg = crate :: random_32_bytes ( & mut rand:: thread_rng ( ) ) ;
1031- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
1024+ let msg = Message :: from_digest ( msg) ;
10321025 let ( sk, _) = s. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
10331026
10341027 bh. iter ( || {
@@ -1041,7 +1034,7 @@ mod benches {
10411034 pub fn bench_verify_ecdsa ( bh : & mut Bencher ) {
10421035 let s = Secp256k1 :: new ( ) ;
10431036 let msg = crate :: random_32_bytes ( & mut rand:: thread_rng ( ) ) ;
1044- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
1037+ let msg = Message :: from_digest ( msg) ;
10451038 let ( sk, pk) = s. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
10461039 let sig = s. sign_ecdsa ( & msg, & sk) ;
10471040
0 commit comments