71
71
//! let secret_key = SecretKey::from_slice(&[0xcd; 32]).expect("32 bytes, within curve order");
72
72
//! let public_key = PublicKey::from_secret_key(&secp, &secret_key);
73
73
//! // 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]);
75
75
//!
76
76
//! let sig = secp.sign_ecdsa(&message, &secret_key);
77
77
//! assert!(secp.verify_ecdsa(&message, &sig, &public_key).is_ok());
94
94
//! 0x3a, 0x17, 0x10, 0xc9, 0x62, 0x67, 0x90, 0x63,
95
95
//! ]).expect("public keys must be 33 or 65 bytes, serialized according to SEC 2");
96
96
//!
97
- //! let message = Message::from_digest_slice(& [
97
+ //! let message = Message::from_digest( [
98
98
//! 0xaa, 0xdf, 0x7d, 0xe7, 0x82, 0x03, 0x4f, 0xbe,
99
99
//! 0x3d, 0x3d, 0xb2, 0xcb, 0x13, 0xc0, 0xcd, 0x91,
100
100
//! 0xbf, 0x41, 0xcb, 0x08, 0xfa, 0xc7, 0xbd, 0x61,
101
101
//! 0xd5, 0x44, 0x53, 0xcf, 0x6e, 0x82, 0xb4, 0x50,
102
- //! ]).expect("messages must be 32 bytes and are expected to be hashes") ;
102
+ //! ]);
103
103
//!
104
104
//! let sig = ecdsa::Signature::from_compact(&[
105
105
//! 0xdc, 0x4d, 0xc2, 0x64, 0xa9, 0xfe, 0xf1, 0x7a,
@@ -218,8 +218,9 @@ impl Message {
218
218
/// the result of signing isn't a
219
219
/// [secure signature](https://twitter.com/pwuille/status/1063582706288586752).
220
220
#[ inline]
221
- #[ deprecated( since = "0.28.0" , note = "use from_digest_slice instead" ) ]
221
+ #[ deprecated( since = "0.28.0" , note = "use from_digest instead" ) ]
222
222
pub fn from_slice ( digest : & [ u8 ] ) -> Result < Message , Error > {
223
+ #[ allow( deprecated) ]
223
224
Message :: from_digest_slice ( digest)
224
225
}
225
226
@@ -238,21 +239,19 @@ impl Message {
238
239
/// message that's going to be signed. Otherwise the result of signing isn't a [secure
239
240
/// signature].
240
241
///
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
+ ///
241
246
/// # Errors
242
247
///
243
248
/// If `digest` is not exactly 32 bytes long.
244
249
///
245
250
/// [secure signature]: https://twitter.com/pwuille/status/1063582706288586752
246
251
#[ inline]
252
+ #[ deprecated( since = "TBD" , note = "use from_digest instead" ) ]
247
253
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 ) ?) )
256
255
}
257
256
}
258
257
@@ -536,7 +535,7 @@ mod tests {
536
535
let mut vrfy = unsafe { Secp256k1 :: from_raw_verification_only ( ctx_vrfy. ctx ) } ;
537
536
538
537
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 ] ) ;
540
539
// Try signing
541
540
assert_eq ! ( sign. sign_ecdsa( & msg, & sk) , full. sign_ecdsa( & msg, & sk) ) ;
542
541
let sig = full. sign_ecdsa ( & msg, & sk) ;
@@ -603,7 +602,7 @@ mod tests {
603
602
// println!("{:?}", buf_ful[5]); // Can't even read the data thanks to the borrow checker.
604
603
605
604
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 ] ) ;
607
606
// Try signing
608
607
assert_eq ! ( sign. sign_ecdsa( & msg, & sk) , full. sign_ecdsa( & msg, & sk) ) ;
609
608
let sig = full. sign_ecdsa ( & msg, & sk) ;
@@ -621,7 +620,7 @@ mod tests {
621
620
let full = Secp256k1 :: new ( ) ;
622
621
623
622
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) ;
625
624
626
625
// Try key generation
627
626
let ( sk, pk) = full. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
@@ -650,7 +649,7 @@ mod tests {
650
649
651
650
for _ in 0 ..100 {
652
651
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) ;
654
653
655
654
let ( sk, _) = s. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
656
655
let sig1 = s. sign_ecdsa ( & msg, & sk) ;
@@ -741,7 +740,7 @@ mod tests {
741
740
let noncedata = [ 42u8 ; 32 ] ;
742
741
for _ in 0 ..100 {
743
742
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) ;
745
744
746
745
let ( sk, pk) = s. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
747
746
let sig = s. sign_ecdsa ( & msg, & sk) ;
@@ -788,7 +787,7 @@ mod tests {
788
787
wild_msgs[ 1 ] [ 0 ] -= 1 ;
789
788
790
789
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 ) {
792
791
let sig = s. sign_ecdsa ( & msg, & key) ;
793
792
let low_r_sig = s. sign_ecdsa_low_r ( & msg, & key) ;
794
793
let grind_r_sig = s. sign_ecdsa_grind_r ( & msg, & key, 1 ) ;
@@ -807,18 +806,19 @@ mod tests {
807
806
s. randomize ( & mut rand:: thread_rng ( ) ) ;
808
807
809
808
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) ;
811
810
812
811
let ( sk, pk) = s. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
813
812
814
813
let sig = s. sign_ecdsa ( & msg, & sk) ;
815
814
816
815
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) ;
818
817
assert_eq ! ( s. verify_ecdsa( & msg, & sig, & pk) , Err ( Error :: IncorrectSignature ) ) ;
819
818
}
820
819
821
820
#[ test]
821
+ #[ allow( deprecated) ]
822
822
fn test_bad_slice ( ) {
823
823
assert_eq ! (
824
824
ecdsa:: Signature :: from_der( & [ 0 ; constants:: MAX_SIGNATURE_SIZE + 1 ] ) ,
@@ -877,7 +877,7 @@ mod tests {
877
877
fn test_noncedata ( ) {
878
878
let secp = Secp256k1 :: new ( ) ;
879
879
let msg = hex ! ( "887d04bb1cf1b1554f1b268dfe62d13064ca67ae45348d50d1392ce2d13418ac" ) ;
880
- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
880
+ let msg = Message :: from_digest ( msg) ;
881
881
let noncedata = [ 42u8 ; 32 ] ;
882
882
let sk =
883
883
SecretKey :: from_str ( "57f0148f94d13095cfda539d0da0d1541304b678d8b36e243980aab4e1b7cead" )
@@ -904,7 +904,7 @@ mod tests {
904
904
let secp = Secp256k1 :: new ( ) ;
905
905
let mut sig = ecdsa:: Signature :: from_der ( & sig[ ..] ) . unwrap ( ) ;
906
906
let pk = PublicKey :: from_slice ( & pk[ ..] ) . unwrap ( ) ;
907
- let msg = Message :: from_digest_slice ( & msg[ .. ] ) . unwrap ( ) ;
907
+ let msg = Message :: from_digest ( msg) ;
908
908
909
909
// without normalization we expect this will fail
910
910
assert_eq ! ( secp. verify_ecdsa( & msg, & sig, & pk) , Err ( Error :: IncorrectSignature ) ) ;
@@ -919,7 +919,7 @@ mod tests {
919
919
fn test_low_r ( ) {
920
920
let secp = Secp256k1 :: new ( ) ;
921
921
let msg = hex ! ( "887d04bb1cf1b1554f1b268dfe62d13064ca67ae45348d50d1392ce2d13418ac" ) ;
922
- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
922
+ let msg = Message :: from_digest ( msg) ;
923
923
let sk =
924
924
SecretKey :: from_str ( "57f0148f94d13095cfda539d0da0d1541304b678d8b36e243980aab4e1b7cead" )
925
925
. unwrap ( ) ;
@@ -937,7 +937,7 @@ mod tests {
937
937
fn test_grind_r ( ) {
938
938
let secp = Secp256k1 :: new ( ) ;
939
939
let msg = hex ! ( "ef2d5b9a7c61865a95941d0f04285420560df7e9d76890ac1b8867b12ce43167" ) ;
940
- let msg = Message :: from_digest_slice ( & msg) . unwrap ( ) ;
940
+ let msg = Message :: from_digest ( msg) ;
941
941
let sk =
942
942
SecretKey :: from_str ( "848355d75fe1c354cf05539bb29b2015f1863065bcb6766b44d399ab95c3fa0b" )
943
943
. unwrap ( ) ;
@@ -957,7 +957,7 @@ mod tests {
957
957
958
958
let s = Secp256k1 :: new ( ) ;
959
959
960
- let msg = Message :: from_digest_slice ( & [ 1 ; 32 ] ) . unwrap ( ) ;
960
+ let msg = Message :: from_digest ( [ 1 ; 32 ] ) ;
961
961
let sk = SecretKey :: from_slice ( & [ 2 ; 32 ] ) . unwrap ( ) ;
962
962
let sig = s. sign_ecdsa ( & msg, & sk) ;
963
963
static SIG_BYTES : [ u8 ; 71 ] = [
@@ -987,7 +987,7 @@ mod tests {
987
987
let sk_data = hex ! ( "e6dd32f8761625f105c39a39f19370b3521d845a12456d60ce44debd0a362641" ) ;
988
988
let sk = SecretKey :: from_slice ( & sk_data) . unwrap ( ) ;
989
989
let msg_data = hex ! ( "a4965ca63b7d8562736ceec36dfa5a11bf426eb65be8ea3f7a49ae363032da0d" ) ;
990
- let msg = Message :: from_digest_slice ( & msg_data) . unwrap ( ) ;
990
+ let msg = Message :: from_digest ( msg_data) ;
991
991
992
992
// Check usage as explicit parameter
993
993
let pk = PublicKey :: from_secret_key ( SECP256K1 , & sk) ;
@@ -1021,7 +1021,7 @@ mod benches {
1021
1021
pub fn bench_sign_ecdsa ( bh : & mut Bencher ) {
1022
1022
let s = Secp256k1 :: new ( ) ;
1023
1023
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) ;
1025
1025
let ( sk, _) = s. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
1026
1026
1027
1027
bh. iter ( || {
@@ -1034,7 +1034,7 @@ mod benches {
1034
1034
pub fn bench_verify_ecdsa ( bh : & mut Bencher ) {
1035
1035
let s = Secp256k1 :: new ( ) ;
1036
1036
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) ;
1038
1038
let ( sk, pk) = s. generate_keypair ( & mut rand:: thread_rng ( ) ) ;
1039
1039
let sig = s. sign_ecdsa ( & msg, & sk) ;
1040
1040
0 commit comments